テクニカルライティングのためのマルウェア分析法

テクニカルライティングのためのマルウェア分析法

新しいマルウェアの分析

常に変化し続けるサイバーセキュリティの世界では、新たな脅威が定期的に現れ、進化しています。それらに関する情報を共有することは、サイバー犯罪と戦い、人々と組織の安全を守るための重要な要素です。これを効率的に行うには、新たな脅威を分析する際に準備をしておくことが、あなたやあなたのチームの時間を最大限に活用することにつながります。

このブログでは、研究者が調査結果を公表する必要があるときに遭遇する様々な状況を取り上げ、それらにどのようにアプローチするかについて、最も効率的に分析に取り組むためのワークフロー案とともに提案します。最後に、この戦略をランサムウェアサンプルの分析に適用します。

課題と解決策

新たな脅威が出現した場合、研究者が分析中に直面する一般的な課題がいくつかある。ここでは、明確で目的に沿った調査結果を出すために、それらに対処する方法をいくつか紹介します。

緊急性

多くの場合、トピックをホットなものにし、それに対応する資料を関連性のあるものにしたいのであれば、出版物を発表する時期は比較的限られている。

解決策は、答えが必要な最も重要な質問に集中することだ。

  • 記事の潜在的な読者は誰か?彼らがその記事を読むことでどのような利益があるのか?
  • 各セクションにかかる時間的コストは、そのメリットと比べてどうなのか?

これらの質問に答えることから仕事を始めることで、教材を正しい方向に導き、時間を適切に管理することができる。

ノベルティ

ニュースになった攻撃の多くは、関連するマルウェアがまだ他の研究者によって分析されていない可能性がある。そのため、出発点として使える情報がほとんどなく、関連する機能のすべての部分を理解するために必要な作業量が増える。

この問題に対処するためには、多くの場合、最新のマルウェア・ファミリーや攻撃者グループには、すでに何らかのルーツがあることを覚えておく価値があります。このようなつながりを追跡することで、研究者は類似したプロジェクトの過去の反復を見つけることができ、マルウェアの機能を理解するために必要な時間を短縮することができます。

複雑さ

一般に、単純なサイバー攻撃の結果は、世間の注目を集めるほど大きくはない。研究者にとってこのことが意味するのは、記事にする価値のあるものがあるとすれば、それはかなり複雑で、したがって分析に時間がかかる可能性が高いということである。

ここでの解決策は、大きなタスクを小さなタスクに分割することかもしれない。記事の焦点に基づいて優先順位をつけることとは別に、異なる人が機能の異なる部分に焦点を当てることで、分析をグループで行うことも可能になる。既にカバーされている内容について定期的に知識を交換することで、チームは効率的になり、同じ部分を何度も分析して時間を無駄にすることがなくなる。

推奨ワークフロー

ここでは、研究者が新しい実行可能サンプルの分析に効率的かつ効果的にアプローチできるようにするための一般的なワークフローを紹介する。

第二のステップである動作解析は、ブラックボックス形式の解析を指し、一般的に様々な監視ツールやサンドボックス上でサンプルを実行する。動的解析ステップでは、デバッガを使用して命令を実行する。

ステップ行動
1.トリアージ
  • アクセスしやすいオープンな情報をできるだけ集める。これは、既存の記事、公開サンドボックスレポート、あるいは他のベンダーの検出結果などから得ることができる。
  • 高エントロピー・ブロック、インポート・テーブル、システムコール、文字列があるかどうかをチェックし、パックされている可能性があるかどうかを把握する。
  • パッカー検出ツールを使って、公式の(悪意のない)パッカーが使われていないかチェックする。
2.行動分析
  • 実行後のラボ環境の復元が容易であれば、この分析を実施する。
  • サンドボックスの優れたレポートがすでに公開されている場合は、必要ないかもしれない。
  • 多くの場合、行動分析は全体像を示さないということを心に留めておいてほしい。
  • 反REのテクニックが絡むため、期待通りにはいかないかもしれない。
3.開梱 - オプション
  • 必ずしも存在するとは限らないが、難読化だけを好んで使うマルウェア開発者もいる。
  • 公式パッカー向けには、既存の解凍ツールやスクリプトがすでに複数用意されている。
  • 動的解析を容易にするために、解凍したサンプルは実行可能なままにしておくのが理想的である。そうでなければ、できるだけ多くのアンパックされたコードとデータを入手すること。
4.実際の機能の静的および動的解析
  • このステップは、(必要であれば)開梱が終わって初めて可能になる。
  • 一般的に、文字列とAPIは最大限の情報を与え、サンプル内のナビゲーションを容易にする重要な目印となる。
  • マークアップを正確に保つ:関数名を変更し、構造体を作成し、列挙型を定義し、必要に応じてコメントを残す。
  • デバッグに必要なのは、主にコードやデータの復号化・伸張化、APIの解決だ。その他は静的解析で十分です。

ワークフローをマルウェア解析に適用する

今年の初めに分析したDarkSideランサムウェアのサンプルを見てみよう:

0a0c225f0e5ee941a79f2b7701f1285e4975a2859eb4d025d96d9e366e81abb9

ステップ1:トリアージ

分析の時点で、サンプルはすでにVirustotalにアップロードされていたため、サイバーセキュリティコミュニティのメンバー全員がアクセスすることができ、AVベンダーの検出結果だけでなく、サンドボックスのログも「Behavior」タブで確認することができた。現在、Virustotalでは複数のサンドボックスがサポートされているので、良いレポートを見つけるためにいくつか試してみてください。

Virustotalの複数のサンドボックス・オプション
Virustotalの複数のサンドボックスオプション。

hexエディターでサンプルをざっと見ると、最後に高エントロピーのブロックがあることがわかる。次のステージのペイロードや別のモジュール、暗号化された文字列やコンフィギュレーションを含むブロブなど、複数の可能性がある。これを理解するには静的解析が必要です。

高エントロピー・ブロック
高エントロピーのブロック。

意味のある文字列やAPIはほとんどない:

インポートテーブルのエントリーが非常に少ない
インポートテーブルのエントリーが非常に少ない。

これは、サンプルがAPIを動的に解決し、文字列を暗号化して難読化していることを示す強力な指標です。パッカー検出ツール(PEiDとカスタムコミュニティシグネチャ)を実行すると、このケースではパブリックパッカーが使用された形跡がないことが確認されます。

PEiDは、既知のパッカーを特定しなかった。
PEiDは既知のパッカーを特定しなかった。

ステップ2:行動分析

分析が始まる頃には、サンプルはすでに他のコミュニティ・メンバーによってさまざまなパブリック・サンドボックスに提出されていたので、そこから多くの情報を得ることができた。

公開されているany.runレポートのファイルアクティビティ
公開されたany.runレポート内のファイルアクティビティ。

ステップ3:開梱

逆アセンブラの高エントロピー・ブロックへの相互参照をチェックすると、このブロックや関連ブロックへの制御転送がないため、これが次のステージのペイロードではないようであることがわかる。さらに、逆アセンブルをざっと見渡すと、このサンプルは、ハッシュによって動的に解決され、文字列が暗号化された複数のAPIが詰め込まれているのではなく、実際に難読化されていることが確認される。

ハッシュによるAPI解決
ハッシュによるAPI解決。
未解決のAPIへの呼び出し
まだ解決されていないAPIへの呼び出し。

ステップ4:実際の機能の静的・動的分析

逆アセンブルを効率的に進めるためには、APIや文字列を読みやすくする必要がある。

APIについては、すべてのAPIが1つの関数で解決されるため、動的解析でこれを実現するのは非常に簡単である。したがって、最後まで実行させれば、すべてのAPIのアドレスが得られる。APIの名前をポインタに伝搬させるには、IDA Proの一部として同梱されている標準のrenimp.idcスクリプトを使用します。

解決したAPI名
解決したAPI名。

文字列は一カ所で復号化されるのではなく、使用される直前にその都度復号化されるからだ。したがって、文字列を簡単に見えるようにするには、スクリプトが必要になる。Darksideのブログでは、暗号化された文字列をすべて見つけ、復号化を試みるスクリプトをすでに提供しています。

文字列復号化前
文字列復号化の前。
文字列復号化後
文字列復号化後。

以上だ。文字列とAPIの両方が見えるようになった今、エンジニアに残された唯一のことは、相互参照を注意深く調べ、対応する関数のマークアップを記事の中に潜在的に興味深い情報(対象読者に応じて)をすべて記述しておくことです。

結論

知識の共有は、新たな脅威に迅速に適応し、関連するリスクを最小限に抑えることを可能にするサイバーセキュリティ分野の重要な部分である。私たちの努力を適切に集中させることで、このプロセスの質を向上させ、世界をより安全な場所にすることができます。

その他のヒント

  • 読者を知る- 技術ブログ記事の内容(とそれに答えるべき質問)は、一般向けのニュース記事とは大きく異なる。
  • プロセスをスピードアップするために、チームワークを考慮する。
  • テンプレートを用意する- データの復号/解読/解凍を行う簡単なスクリプトを用意すれば、不必要な遅延を避けることができる。