マルウェア解析とは?
目次:
多くの子供たちは悪意のある小さな生き物ではなく、「どう作られているか」に興味を持って物を壊します。その中の何人かは成長してサイバーセキュリティアナリストになります。彼らは基本的に同じことを大人の世界で行います。
マルウェア分析 マルウェアサンプルを研究して、それが何でできているのか、どのように機能するかを理解するプロセスです。時には試行してみないとわからないこともあるので、実際にマルウェアを実行する必要があります。そして、コードを行ごとに詳しく調べ、実行をトリガーしないようにすることも必要です。
もちろん、マルウェア分析を学ぶことは多くの利点をもたらします。敵を知ることは、その勝利の方法を知ることを意味します。つまり、マルウェア研究者はSOCチームを手助けし、よりターゲットを絞った検出アルゴリズムを考案し、インシデントレスポンスを改善します。
現代のマルウェアがますます洗練されているのがエキサイティングな部分です。多くの場合、セキュリティアナリストはアクセスできない何かを研究しなければなりません。10年前は、1つの実行ファイルでマルウェアが定義されていましたが、現在では1つのファイルは旅の始まりに過ぎません。マルウェア分析をさらに深く掘り下げ、その方法を見てみましょう。
マルウェア分析を始めるには?
簡単です – マルウェアサンプルを取得したら、マルウェア分析を開始できます。深層防御を採用している組織は、定期的に新しいサンプルを見つけるための複数のツールとプロセスを持っています。あるアナリストは、何年も概念的に新しいものを見ていないと言う一方、他のアナリストはほぼ毎月新しいマルウェアサンプルを持っていると認めます。それはすべて研究の深さに大きく依存します。
マルウェアを分析することには多くの時間を要するかもしれません。それが理由で、SOCチームの多くは深く追求しないことを好みます。しかし、研究に費やす時間は、セキュリティ体制を改善するには遅すぎるということはないので、確かに報われます。
マルウェア分析の種類
マルウェア分析は、異なる方法やさまざまなツールを使用して行うことができます。大きく3つの分析タイプがあります:
- スタティック
- ダイナミック
- ハイブリッド
手元にあるマルウェアをどう分析するかを見極めるために、まずいくつかの質問に答えてみましょう:
- このマルウェアはどのようにしてその実行をトリガーするのか?
- どのようにして検出を回避しようとするのか?
- どの部分の悪意のあるコードが見えていて、どの部分が見えないのか?
- どのツールが指定されたマルウェアサンプルのすべての側面を分析するのを助けてくれるのか?
悪意のあるファイルのサンプルを持っている場合、スタティック分析を行うことができます。しかし、このファイルがキルチェーンのさらに進んだ段階を実行するために設計されている場合、静的分析は主要なペイロードがどのように実行されるかを示しません。そして時には、これを見つける唯一の方法は、安全な環境でマルウェアを実行することです。では、異なる種類のマルウェア分析をどのように行い、それらがサイバーセキュリティアナリストにどのように役立つかを見ていきましょう。
ダイナミックマルウェア分析
ダイナミックマルウェア分析 は、サンプルを手動でテストできる自動サンドボックスまたはVMで実行できます。洗練されたマルウェアは模倣された環境内にいる兆候を探すので、自動マルウェア分析はこの場合最適な選択ではないことを覚えておいてください。
他のソフトウェアと同様、マルウェアもコードができることは何でも実行できるようにプログラムできます。したがって、コード(手順のセット)が何をするのか、その背後にある論理を理解したいと思うでしょう。
例えば、一部のセキュリティツールは、そのDLLをローカルプロセスに挿入します。マルウェアは環境をスキャンし、これらのファイルを見つけた場合は自分自身を終了します。その他の点でも、マルウェアスキャナーは以下を探します:
- デバッガやその他の双方向分析用ツール(API呼び出し IsDebuggerPresent、CheckRemoteDebuggerPresent、NtQueryInformationProcess).
- プロセス、ウィンドウ、レジストリキー、ファイル、ミューテックスオブジェクトなど、マルウェア分析において。
名前が示す通り、ダイナミックマルウェア分析はマルウェアを実際に動かして観察することが中心です。それとできる限り多くの方法で関与し、その機能の全体像を作成します。そのためには、完全に隔離された環境を使用することを確認してください;インターネットから切断され、ホスト専用ネットワークで実行され、VMはホストとフォルダーを共有してはいけません。
デバッガ回避スキャナーが多くのマルウェアサンプルで使用されているにもかかわらず、セキュリティ研究者はダイナミックマルウェア分析でデバッガを使用します。これらのツールは、危険なAPI呼び出しやメモリアロケーションを特定するのに役立ちます。ファイルレス技術が積極的に使用されている場合、正規のプロセスを介して動作しているため、静的分析では見えません。エクスプロイトは不要です。
例としては、PowerShellに注入されたコードがpowershell.exeでメモリを割り当て、新しいスレッドで難読化されたコードを実行する(信頼されたプロセスを生成する プロセスホロウイング):
デバッガ内では、すべての指示に沿ってコードがどのように実行されるかを見ることができます。メモリ内の文字列を確認し、それらのメモリインタラクションに責任を負うコードと比較することも忘れないでください。次のような注入APIを探します: VirtualAlloc、VirtualAllocEx、WriteProcessMemory、CreateRemoteThreadなど。さらに、NTFSトランザクションを調べて プロセスドッペルゲンガー 注入を検査します。
デバッガを隠すツールを使用して、検出を回避するマルウェアをきちんと分析できるようにしてください。では、スタティックマルウェア分析を行う方法について見ていきましょう。
スタティックマルウェア分析
スタティックマルウェア分析 は、コードを実行せずに行うことが可能な分析の種類です。このタイプの分析は、低レベルのソフトウェア言語、プロセッサの命令、メモリ管理の原則に関する高度な知識を要求することがあります。
しかし、初心者レベルのアナリストも、ファイルを静的に分析する方法を持っています。例えば、ファイル拡張子を一目見るだけで、どのような種類のファイルであるかを知り、見つけた場所にこのファイルを持つことが疑わしいかどうかを推測することができます。次に、そのハッシュやファジーハッシュをVirusTotalのような脅威情報リソースで検索できます。ただし、推測する際は注意してください。例えハッシュがVirusTotalにない場合でも、ファイルが悪質である可能性はあります。他の静的なプロパティ、例えばヘッダー情報の分析を忘れないでください。 file extension can tell you what kind of file is that, which allows you to suggest whether it’s suspicious to have this file in the place where you found it or not. Next, you can search for its hash or fuzzy hash in threat intelligence resources like VirusTotal. Be careful when making assumptions, though, because even if the hash is not on VirusTotal, the file can be malicious anyway. Don’t forget to analyze other static properties, such as header information.
スタティック分析は、初期のトリアージ用に自動ツールを通じて、より詳細な手動分析ツールを通じて行うことができます。セキュリティアナリストは、コードの命令、依存関係、それらが何を意味するかを研究します。
実行ファイルをメモ帳で開いてみると、次のようなものが見えるでしょう:
それはマシンが読み取れる形式にコンパイルされたコードです。プロセッサは何をすべきか知っていますが、人間はここで理解できることはほとんどないでしょう。それで、このコードを逆アセンブリまたは逆コンパイルして、読み取り可能な形式に戻してから分析します。そうすると、コードは以下のようになります。
アセンブリの命令を理解することは、深い結論に達するために必要です。このクイック ガイド を見て知識をリフレシュするか、この 参照マニュアル でさらに深く掘り下げてみてください。
MicrosoftのSysinternalsスイートを使って文字列を分析することもできます。このツールは、特定のWindows API呼び出しに関連する実行ファイルを識別し、IOCを特定することさえできます。このブログの記事の最後のセクションまでスクロールして、マルウェア分析用のツールについてもっと発見してください。さて、スタティックおよびダイナミックマルウェア分析の長所と短所について話しましょう。
スタティック vs ダイナミックマルウェア分析
明らかに、複数のタイプのマルウェア分析を採用することが最善の選択肢です。スタティック分析は、特定の実行ファイルがどのように動作するかを示します。しかし、現在の標準的なキルチェーンは、多くの場合、1つ以上の実行ファイルを含んでいます。それはむしろ、互いにトリガーするスクリプトやファイルの集合であるかもしれません。その場合、ファイルの1つをスタティック分析するだけでは、全体のペイロードがどのように動作するかを理解するのに十分ではありません。
SOCチームの目的や目標に応じて、一部のリソースがマルウェアサンプルの研究に費やされることがあります。スタティック分析またはダイナミック分析のどちらに進むかは、非常に個別の選択です。多くの場合、これら2つの間の微妙なバランスを維持する必要があり、これはしばしばハイブリッドマルウェア分析と呼ばれます。
ハイブリッド分析
ハイブリッドマルウェア分析 は、スタティックマルウェア分析とダイナミックマルウェア分析を組み合わせたものです。
複雑なサンプルについては、段階を追ってマルウェアを分析するのが最適です。例えば、まず最初にスタティック分析を行い、どのAPI呼び出しが検出を回避している可能性があるかを特定します。それから、仮想環境でダイナミック分析を実行し、サンプルが動作する様子を見て、他のバイナリをダウンロードするかどうかを確認します。そしてそれを取得したら、その内部のスタティック分析をもう一度行うことができます。
マルウェア分析のユースケース
各SOCチームは独自であり、ビジネスコンテキスト、組織の規模、リスク要因に応じてサイバーセキュリティプロセスが異なるように整理されるかもしれません。以下にマルウェア分析が適用されるいくつかのユースケースを集めました。
脅威の検出
IOCや行動パターンは、特定のソフトウェアプログラム(SIEM、SOAR、EDR/XDR)におけるさまざまな脅威検出活動の一般的なインプットです。分析中に重要なマルウェアデータを取得することで、最新の脅威を検出するのに役立ちます。
アラートを取得
正確なアラートを取得することは、サイバーセキュリティパイプラインの重要な部分です。マルウェア分析は、誤検知陽性や誤検知陰性の数を減らし、より高いレベルのサイバー保護を提供するのに役立ちます。
脅威のハント
新しく洗練されたマルウェアは、簡単には捕まえられません。そこで脅威ハンティングが登場します。マルウェアサンプルを持ち、それがどのように動作するかを理解することで、野外で潜んでいる脅威をハントする最良の方法となります。
インシデントに対応する
もちろん、インシデントレスポンスなしには、良いサイバーセキュリティ体制はありません。適切な対応は、セキュリティエンジニアがマルウェアがどのように見えるのか、どのシステムに影響を与えるのか、どのプロセスを実行しようとしているのかについての詳細な情報を持っている場合に作成され、実行されます。
マルウェア分析のステージは?
分析の仕事は簡単ではありません。簡単なのはデータの山に固執するか、コードを誤解することです。サイバー防御が成功するために、研究者は活動をいくつかのマルウェア分析ステップに分けます。
評価とトリアージ
マルウェア分析の初期段階は、オートメーショントールの助けを借りて実行できます。スタティック分析のためには、コードの逆コンパイルといった準備ステップが必要です。いずれにせよ、マルウェア分析の最初のステージでは、注目が必要なコードの部分を整理する必要があります。それらは、難易度や優先度のレベルに分けられることもあります。レビューする悪意のあるコードの範囲が定義され、優先順位が付けられた後は、次のステージに進む時間です。
データ解釈
次に、セキュリティアナリストは具体的なマルウェアサンプルを調べます。前述したように、スタティックプロパティの分析や、安全で隔離された環境でのマルウェアの実行により行うことができます。マルウェアアナリストが静的および動的分析中に得られるすべてのデータを取得したら、それを解釈することを試みます。サンプルの変数名を変更してコードを実行し、実行パターンに関するコメントを付けるなど、さらにテストを行うことができます。
リバースエンジニアリング
これが最も困難な部分であり、特にサンプルが暗号化されていて、それが何をしているのか、なぜそうしているのかがはっきりしない場合です。さらに、コードには複数の依存関係があるかもしれませんが、それらもあまり明確ではありません。マルウェアをリバースエンジニアリングしようとすることは高度なタスクです。しかし、それは深層防御アプローチの鍵です。
結論と今後のアクション
分析結果がまとまったら、それを文書化し、今後のアクションに進む時です。アナリストはマルウェアレポートを作成し、マルウェアサンプル、取られた分析ステージ、結論を記述します。また、修正策についての推奨事項を提供することもできます。
マルウェア分析用のツールは何ですか?
マルウェア分析用のツールはかなり幅広く、セキュリティエンジニアが日常的に使用しています。まず、静的分析ツールから始めましょう:
- PeStudio は世界中のCERTチームによって、悪意のあるファイルのアーティファクトをキャプチャするために広く使用されています。
- PEiD はパックされたり、暗号化されたマルウェアを簡単に認識し、それが何で構成されているかの詳細を提供します。
- BinText はファイル内のAscii、Unicode、リソース文字列を見つけることができるテキスト抽出ツールです。
- MD5deep は悪意のあるハッシュを計算します。マルウェアアナライザーとして使用されるこのソフトウェアパッケージは、多数のファイルをさまざまな暗号化ダイジェストを通じて実行します。
- Dependency walker は32ビットまたは64ビットのWindowsモジュールをスキャンし、依存関係ツリーを作成します。
- IDA Pro はバイナリコードをソースコードに逆アセンブルします。また、リモートアプリケーションを処理できるクロスプラットフォームのデバッグ能力を提供します。
サンドボックスでマルウェアを分析する際には、既に Cuckooを試したことがあるかもしれませんが、 ANY.RUN and Joe Sandbox Cloudをチェックすることをお勧めします。これらはどちらもMITRE ATT&CKマッピングを持ち、ルールを使用し、動作の非常に詳細なビューを提供します。
もちろん、 Wireshark はリアルタイムのネットワーク分析用の最も広く使用されているツールの1つであり、紹介する必要はありません。 INetSim はラボ環境でインターネットサービスを現実的にシミュレートします(サンプルがシミュレーションを認識することはまずありません)。次に、既に上で述べた Microsoft Sysinternals スイートがあります。ここにはダイナミックマルウェア分析用のツールが一式揃っています。 ScyllaHide はデバッガを隠すことができる興味深いツールで、実行したいマルウェアからデバッガを隠蔽します。そして、しっかりとしたリバースエンジニアリングプロジェクトを行いたい場合は、 Ghidra – NSAの研究局によって開発されたツール群 – をチェックしてください。
マルウェア分析を学ぶことは、最初は退屈に思えるかもしれませんが、忍耐強く掘り下げて、真の宝物を見つけてください。低レベルのデータに慣れてきたら、多くの人が見逃すであろうものを見ることができるようになります。したがって、マルウェアエンジニアが世界で最も賢い人たちだと思うのではなく、最も高度なマルウェアでさえ魔法ではなく、ただ分解して無力化できる別のソフトウェアであることを証明できます。
最後に、迅速かつ効率的な脅威検出と脅威ハンティングのために、 SOC Prime Detection as Code Platform に登録してください。ここでは、最新のサイバー攻撃を発見するためのシグマベースのルールが千以上見つかります。そして、独自の専門知識を共有し、知識を収益化する準備ができたら、私たちのグローバルクラウドソーシングイニシアチブ、 Threat Bountyに参加し、サイバーワールドをより安全な場所にする手助けをしましょう。