こんにちは、セキュリティを勉強する皆さん!🛡️
今日は少しスリリングで危険な(?)実習を用意しました。実際に(ただし教育用に安全な)ランサムウェアのサンプルを目の前に置いて解剖する時間です。
マルウェア解析には大きく分けて二つの方法があります。
- 動的解析 (Dynamic Analysis): 仮想環境で実際に実行させて挙動を観察するもの(リスクを伴う)
- 静的解析 (Static Analysis): ファイルを実行せずに、ファイル内部の情報だけを詳しく調べるもの(比較的安全)
今日私たちは「静的解析」の基礎を固めます。まるで医者が患者を手術する前にX線を撮るように、ランサムウェアを実行する前に、このファイルがどのような機能を隠しているのか、その骨格と臓器を確認する過程です。
準備はできましたか?それではランサムウェアの世界へ慎重に足を踏み入れましょう!🚀

🛑 ステップ0: [非常に重要] 安全規則と準備物
本実習は教育目的で作成された「ランサムウェアシミュレーションサンプル」または既に無力化されたサンプルを対象とします。しかし、習慣は重要です。
⚠️ 警告: 決してご自身のホストPC(実際に使用しているコンピューター)で実習を行わないでください!必ずインターネットが遮断された仮想マシン(VMware, VirtualBoxなど)環境で実施してください。誤ってダブルクリックして実行すると大変なことになります!😱
🛠️ 準備物(無料解析ツール) 仮想マシン内に以下のツールを事前にインストールしてください。
- PE-bear: PEヘッダーを視覚的に見やすくするツール
- Pestudio: マルウェア初動解析の決定版(IAT、文字列、ハッシュなどを一目で表示)
- Strings (Sysinternals): バイナリからテキストだけを抽出するコマンドラインツール
ステップ1: 君の身分証を見せてくれ! – PEヘッダー(Header)解析 🆔
Windows実行ファイル(.exe, .dllなど)はPE(Portable Executable)という特定の形式に従います。このファイルの先頭部分(ヘッダー)には、「私はどのようなファイルで、いつ作成され、メモリのどこにロードされるべきか」といった重要な身元情報が含まれています。
[実習の進め方]
- PE-bearを実行し、ランサムウェアサンプルファイルをドラッグ&ドロップします。
- ‘DOS Header’タブを確認します。
👉 着目点1: マジックナンバー (Magic Number) 最初の方にMZ (4D 5A)という文字が見えますか?これは「私はWindows実行ファイルである」という証明書です。もし拡張子が.jpgなのにヘッダーがMZで始まるなら?100%偽装されたマルウェアでしょう!
👉 着目点2: コンパイル時間 (Time Date Stamp) ‘File Header’タブに移動するとTime Date Stampがあります。これはファイルがいつ作成されたかを示します。
- ヒント: 攻撃者がこの時間を操作(Timestumping)することもありますが、時には非常に重要な手がかりとなります。1990年代と表示されるなら操作されたもので、ごく最近の日付なら新種である可能性があります。
ステップ2: 君のツールボックスには何が入っている? – インポートテーブル(IAT)解析 🧰
この部分が今日の実習の核心です!⭐⭐⭐
プログラムは単独で全てを作成することはできません。ファイルを読み込んだり、暗号化したり、ネットワーク通信を行うには、Windowsオペレーティングシステムが提供する関数(API)を借りて使う必要があります。
IAT(Import Address Table)は、このプログラムがWindowsに対して「実行時にこれらのツール(関数)が必要だ!」と要求する「貸出申請リスト」です。このリストを見るだけで、ランサムウェアが何を企んでいるのかが分かります。
[実習の進め方]
- 今度はPestudioを実行し、サンプルファイルを読み込ませます。
- 左メニューの‘imports’をクリックします。(Pestudioは疑わしいAPIを赤色で表示してくれます!👍)
👉 着目点: ランサムウェアの必須3要素APIを探す
ランサムウェアであれば必ず持っているはずの怪しいツールを探してみましょう。
- ファイルを検索するツール (File System)
- 私のPCの大切なドキュメントを探して暗号化するのでしょう?
- FindFirstFile, FindNextFile (ファイル探索)
- SetFileAttributes (ファイル属性変更、隠し処理など)
- ファイルを暗号化するツール (Cryptography) 🔐
- 最も決定的な証拠です。Windowsの暗号化ライブラリを取り込みます。
- CryptAcquireContext (暗号化作業開始)
- CryptGenKey (暗号化キー生成)
- CryptEncrypt (実際の暗号化実行) 👈 これが見つかれば間違いありません!
- ファイルを操作するツール (File I/O)
- 元のファイルを読み込み、暗号化された内容で上書きするか、元のファイルを削除する必要があります。
- ReadFile, WriteFile (ファイル読み書き)
- MoveFile, DeleteFile (ファイル移動/削除 – 元ファイル破壊用)
- 方法A (Pestudio): 左メニューの’strings’をクリックします。Pestudioが自動的に怪しい文字列をフィルタリングしてくれます。
- 方法B (コマンドライン): ターミナル(cmd/PowerShell)で `strings -n 8 sample.exe` コマンドを入力します。(最低8文字以上の文字列のみを抽出するという意味)
- ランサムノート(脅迫文)の内容 📜
- Your files have been encrypted!
- readme_restore.txt (ランサムノートのファイル名)
- bitcoin, walletのような金銭要求関連の単語
- 攻撃対象の拡張子リスト
- ランサムウェアはどんなファイルでも暗号化するわけではありません。重要なドキュメントだけを選び出します。
- .doc, .xls, .jpg, .pdf, .zipのような拡張子がリスト形式で見つかれば確実です。
- 怪しいパスまたはIP
- C:UsersHackerDesktopRansomProject…のようなPDB情報(開発者パス)が残っていることもあります。
- キーを送信するための外部サーバーIPやドメインアドレス。
- ✅ PEヘッダー: MZで始まるWindows実行ファイルであることを確認した。
- ✅ IAT: ファイルを検索し(FindNextFile)、暗号化する(CryptEncrypt)怪しいツールを借りて使っている。
- ✅ 文字列: 「Your files encrypted」のような脅迫メッセージや、攻撃対象の拡張子リスト(.doc, .pdf)を発見した。
皆さんのサンプルにはいくつ見つかりましたか?これらの関数が組み合わされると、「ファイルを探して -> 暗号化し -> 元ファイルを削除する」というシナリオが完成します。
ステップ3: 君の心の声を教えてくれ! – 文字列(Strings)抽出 💬
実行ファイルのほとんどは機械語で構成されていますが、その中には人間が読める文字列(テキスト)も多く隠されています。ハッカーが残したメッセージ、C&CサーバーのIP、攻撃対象のファイル拡張子などが平文で露出することもあります。
[実習の進め方] 二つの方法があります。
👉 着目点: 決定的な手がかりを探す
数多くの意味不明な文字列の中から、意味のある単語を見つけ出す宝探しです。🕵️♀️
🎉 実習終了: X線撮影完了!
お疲れ様でした!👏👏👏
私たちは今日、ファイルを実際に実行することなく、X線(静的解析ツール)を通して、このファイルがランサムウェアである可能性が非常に高いことを科学的に証明しました。
今日のまとめ:
これだけの証拠があれば、このファイルを直ちに隔離措置するのに十分でしょう?
静的解析はマルウェア解析の基本中の基本です。今日学んだ内容を基に、今後さらに深い解析(リバースエンジニアリング、動的解析)に挑戦してみてください!
次回も有益で安全な(?)セキュリティ実習でお会いしましょう。さようなら!👋
コメントを残す