新しいマルウェアの分析
常に変化し続けるサイバーセキュリティの世界では、新たな脅威が定期的に現れ、進化しています。それらに関する情報を共有することは、サイバー犯罪と戦い、人々と組織の安全を守るための重要な要素です。これを効率的に行うには、新たな脅威を分析する際に準備をしておくことが、あなたやあなたのチームの時間を最大限に活用することにつながります。
このブログでは、研究者が調査結果を公表する必要があるときに遭遇する様々な状況を取り上げ、それらにどのようにアプローチするかについて、最も効率的に分析に取り組むためのワークフロー案とともに提案します。最後に、この戦略をランサムウェアサンプルの分析に適用します。
課題と解決策
新たな脅威が出現した場合、研究者が分析中に直面する一般的な課題がいくつかある。ここでは、明確で目的に沿った調査結果を出すために、それらに対処する方法をいくつか紹介します。
緊急性
多くの場合、トピックをホットなものにし、それに対応する資料を関連性のあるものにしたいのであれば、出版物を発表する時期は比較的限られている。
解決策は、答えが必要な最も重要な質問に集中することだ。
- 記事の潜在的な読者は誰か?彼らがその記事を読むことでどのような利益があるのか?
- 各セクションにかかる時間的コストは、そのメリットと比べてどうなのか?
これらの質問に答えることから仕事を始めることで、教材を正しい方向に導き、時間を適切に管理することができる。
ノベルティ
ニュースになった攻撃の多くは、関連するマルウェアがまだ他の研究者によって分析されていない可能性がある。そのため、出発点として使える情報がほとんどなく、関連する機能のすべての部分を理解するために必要な作業量が増える。
この問題に対処するためには、多くの場合、最新のマルウェア・ファミリーや攻撃者グループには、すでに何らかのルーツがあることを覚えておく価値があります。このようなつながりを追跡することで、研究者は類似したプロジェクトの過去の反復を見つけることができ、マルウェアの機能を理解するために必要な時間を短縮することができます。
複雑さ
一般に、単純なサイバー攻撃の結果は、世間の注目を集めるほど大きくはない。研究者にとってこのことが意味するのは、記事にする価値のあるものがあるとすれば、それはかなり複雑で、したがって分析に時間がかかる可能性が高いということである。
ここでの解決策は、大きなタスクを小さなタスクに分割することかもしれない。記事の焦点に基づいて優先順位をつけることとは別に、異なる人が機能の異なる部分に焦点を当てることで、分析をグループで行うことも可能になる。既にカバーされている内容について定期的に知識を交換することで、チームは効率的になり、同じ部分を何度も分析して時間を無駄にすることがなくなる。
推奨ワークフロー
ここでは、研究者が新しい実行可能サンプルの分析に効率的かつ効果的にアプローチできるようにするための一般的なワークフローを紹介する。
第二のステップである動作解析は、ブラックボックス形式の解析を指し、一般的に様々な監視ツールやサンドボックス上でサンプルを実行する。動的解析ステップでは、デバッガを使用して命令を実行する。
ワークフローをマルウェア解析に適用する
今年の初めに分析したDarkSideランサムウェアのサンプルを見てみよう:
0a0c225f0e5ee941a79f2b7701f1285e4975a2859eb4d025d96d9e366e81abb9
ステップ1:トリアージ
分析の時点で、サンプルはすでにVirustotalにアップロードされていたため、サイバーセキュリティコミュニティのメンバー全員がアクセスすることができ、AVベンダーの検出結果だけでなく、サンドボックスのログも「Behavior」タブで確認することができた。現在、Virustotalでは複数のサンドボックスがサポートされているので、良いレポートを見つけるためにいくつか試してみてください。
hexエディターでサンプルをざっと見ると、最後に高エントロピーのブロックがあることがわかる。次のステージのペイロードや別のモジュール、暗号化された文字列やコンフィギュレーションを含むブロブなど、複数の可能性がある。これを理解するには静的解析が必要です。
意味のある文字列やAPIはほとんどない:
これは、サンプルがAPIを動的に解決し、文字列を暗号化して難読化していることを示す強力な指標です。パッカー検出ツール(PEiDとカスタムコミュニティシグネチャ)を実行すると、このケースではパブリックパッカーが使用された形跡がないことが確認されます。
ステップ2:行動分析
分析が始まる頃には、サンプルはすでに他のコミュニティ・メンバーによってさまざまなパブリック・サンドボックスに提出されていたので、そこから多くの情報を得ることができた。
ステップ3:開梱
逆アセンブラの高エントロピー・ブロックへの相互参照をチェックすると、このブロックや関連ブロックへの制御転送がないため、これが次のステージのペイロードではないようであることがわかる。さらに、逆アセンブルをざっと見渡すと、このサンプルは、ハッシュによって動的に解決され、文字列が暗号化された複数のAPIが詰め込まれているのではなく、実際に難読化されていることが確認される。
ステップ4:実際の機能の静的・動的分析
逆アセンブルを効率的に進めるためには、APIや文字列を読みやすくする必要がある。
APIについては、すべてのAPIが1つの関数で解決されるため、動的解析でこれを実現するのは非常に簡単である。したがって、最後まで実行させれば、すべてのAPIのアドレスが得られる。APIの名前をポインタに伝搬させるには、IDA Proの一部として同梱されている標準のrenimp.idcスクリプトを使用します。
文字列は一カ所で復号化されるのではなく、使用される直前にその都度復号化されるからだ。したがって、文字列を簡単に見えるようにするには、スクリプトが必要になる。Darksideのブログでは、暗号化された文字列をすべて見つけ、復号化を試みるスクリプトをすでに提供しています。
以上だ。文字列とAPIの両方が見えるようになった今、エンジニアに残された唯一のことは、相互参照を注意深く調べ、対応する関数のマークアップを記事の中に潜在的に興味深い情報(対象読者に応じて)をすべて記述しておくことです。
結論
知識の共有は、新たな脅威に迅速に適応し、関連するリスクを最小限に抑えることを可能にするサイバーセキュリティ分野の重要な部分である。私たちの努力を適切に集中させることで、このプロセスの質を向上させ、世界をより安全な場所にすることができます。
その他のヒント
- 読者を知る- 技術ブログ記事の内容(とそれに答えるべき質問)は、一般向けのニュース記事とは大きく異なる。
- プロセスをスピードアップするために、チームワークを考慮する。
- テンプレートを用意する- データの復号/解読/解凍を行う簡単なスクリプトを用意すれば、不必要な遅延を避けることができる。