セキュリティ · 日本語
CTF と Malware Analysis が出会ったとき:初めての Windows Malware Analysis
Windows 7 VM 上で malware.exe を観察した経験から、CTF、Malware Analysis、Windows Forensics、DFIR、Blue Team の考え方の違いを振り返る。
もともと自分は、「ネットワーク攻防」と聞けば CTF のようなものだと思っていた。
でも実際に Windows 7 VM の前に座り、二つの malware.exe が動くのを見たとき、自分の考えがかなり狭かったことに気づいた。
これはイベントレポートではない。
むしろ、自分がこれまで理解していた Cybersecurity のかなり大きな部分が、実は「攻撃者」の視点に立っていたのだと初めて気づいた記録に近い。
「ネットワーク攻防」という言葉を見たとき、自分の頭に自然に浮かんだのは、靶機、Flag、Reverse、Web、Linux、CTF プラットフォームだった。スキャンできるマシンがあり、攻撃できる脆弱性があり、最後にはどこかのパスから Flag を取り出す。そんな流れを想像していた。
でも今回は違った。
今回向き合ったのは Windows 7 VM と、分析シミュレーション用の二つの malware.exe だった。問われていたのは、自分が侵入できるかどうかではなく、それらがシステムの中で何をしたのかを理解できるかどうかだった。
最も印象に残ったのは、問題がどれほど難しかったかではない。初めてはっきりと、こう感じたことだった。
CTF と本当の Malware Analysis は、別のものだ。
もともとは CTF だと思っていた
活動前に「ネットワーク攻防」という言葉を見たとき、自分は少し期待していた。
想像していた光景はとても典型的だった。プラットフォームに入り、問題を開き、靶機につなぎ、脆弱性を探し始める。Web 問題なら source code を見て、payload を試し、認証を回避するかもしれない。Reverse 問題ならツールに入れて分解するかもしれない。Linux 靶機なら port をスキャンし、サービスを見つけ、権限昇格して、最後に Flag を取り出すかもしれない。
それが、自分にとって比較的慣れた資安学習の形だった。
CTF の世界には、たいてい明確な終点がある。Flag は必ず存在する。ただ、それがどこに隠れているのか分からないだけだ。多くの場合、重要な手がかりを見つければ、問題全体が一気に開ける。
だから自分も、今回の「攻防」をそういう気持ちで見ていた。
しかしデスクトップにあったのは CTF プラットフォームでも、攻撃を待つ靶機でもなく、Windows 7 VM と二つの malware.exe だった。
その瞬間、今回の重点は「攻め込む」ことではなく、「何が起きたのかを理解する」ことなのだと気づいた。
Flag を探すのではなく、挙動を観察する
今回本当にやるべきことは、Windows 環境で悪意あるプログラムの挙動を観察することだった。
malware が実行された後、process を作るかもしれない。Registry を変更するかもしれない。ファイルを書き込むかもしれない。network connection を発生させるかもしれない。問題が求めていたのは exploit で shell を取ることではなく、そうした痕跡から何をしたのかを判断することだった。
分析の方向は、おおまかにいくつかに分けられる。
| 面向 | 観察する必要があった問題 |
|---|---|
| Process | 何を起動したのか。怪しい parent-child 関係はあるのか。 |
| Registry | 起動項目を書き込んだり、システム設定を変更したりしたのか。 |
| File | どのファイルを作成、変更、削除したのか。 |
| Network | どこへ接続したのか。流量の中に怪しい内容はあるのか。 |
これは普段 CTF をするときの感覚とはかなり違った。
CTF は「前へ攻める」感覚に近い。自分はずっと、入口はどこか、脆弱性はどこか、Flag はどこかと問い続ける。
Malware Analysis は「後ろへ復元する」感覚に近い。このプログラムはさっき何をしたのか。なぜそうしたのか。この挙動は Windows の中で何を意味するのか。もしこれが実際の事件なら、感染、persistence、C2 connection、data exfiltration の前兆かもしれないのか。
この考え方は、自分にとって新しかった。
Flag を取った瞬間のような即時の達成感はない。でも、より現実世界の資安問題に近づいている感覚があった。
本当に詰まったのはツールの熟練度だった
今回の最大の収穫は、自分が資安を完全に理解していないと分かったことではなかった。
むしろ、概念で負けたというより、ツールの熟練度で負けたのだと感じた。
Wireshark がパケットを見るためのものだということは知っていた。Procmon が process、file、registry、network を見られることも知っていた。Autoruns、Process Explorer、TCPView という名前も聞いたことがあり、それぞれ何ができるかも大まかには分かっていた。
でも、ツールの用途を知っていることと、時間のプレッシャーの中でツールを使って答えを見つけることは別だ。
Wireshark
Wireshark を以前使ったことがないわけではない。
しかし今回、流量の中から怪しい connection、domain、IP、HTTP request を素早く見つけたり、malware が外部接続している可能性を判断したりしようとすると、自分がまだ十分に慣れていないことをはっきり感じた。
filter を使えることは知っている。でも一つの pcap を見た瞬間に、どこから切り込むべきかをすぐ決められるほど慣れてはいなかった。
Procmon
Procmon の衝撃はさらに大きかった。
見えるものがとても多い。多すぎて、filter がうまくなければ event に埋もれてしまう。Process の作成、ファイル操作、Registry アクセスがすべて混ざっている。本当に難しいのは「データがあるかどうか」ではなく、「データの中から意味のある挙動を取り出せるかどうか」だった。
ツールは開いただけで自動的に答えを出してくれるわけではない。今回初めて、そのことを強く感じた。
その他の Windows ツール
今回、自分がもっと慣れておくべきツールにもいくつか触れた。
- Autoruns:persistence と自動起動位置を見る。
- Process Explorer:process 関係、DLL、handle、より詳細な process 情報を見る。
- TCPView:process が外部へどの connection を作っているかをリアルタイムで見る。
これらのツールは単体で見ると、それほど複雑ではない。でも Windows Malware を本当に分析するとき、それらは別々に存在しているわけではない。
Process Explorer で見た process を TCPView の connection と対応させ、さらに Procmon に戻って触れた Registry key やファイルを探し、最後に Wireshark でパケット内容を見る必要がある。
自分は以前、こうやってツールをつなげて使うことがあまりなかった。
だから今回本当に遅くなった場所は、概念をまったく理解できなかったことではない。ツールを分析フローに変える方法に、まだ慣れていなかったことだった。
初めて防御者の位置に立った
以前 CTF をするとき、自分は自然に攻撃者の視点に立っていた。
脆弱性を探し、利用し、Flag を取る。
それ自体は悪いことではない。CTF は問題を分解し、手がかりを探し、脆弱性を理解する訓練になったし、多くの基礎も作ってくれた。
でも今回は、初めてかなり明確に防御者の位置に立った。
もし本当に malware が Windows の中で動いたら、どうやって何をしたのか知るのか。
もし connection を開いたら、それが C2 かもしれないとどう判断するのか。
もし Registry に書き込んだら、それが persistence かもしれないとどう判断するのか。
もし利用者の PC が本当に感染したら、どうやって合理的な timeline を整理するのか。
これらの問いは CTF とはあまり同じではない。
CTF の目標は多くの場合「解く」ことだ。しかし Malware Analysis、Windows Forensics、DFIR は、「何が起きたのか」と「証拠はどこにあるのか」に答えるものに近い。
これによって、自分は Blue Team に対して新しい想像を持ち始めた。
Blue Team は簡単なわけではない。log を見るだけでもない。本当の防御には、攻撃者がどう動く可能性があるかを知ることも、システムが触られた後にどんな痕跡を残すかを知ることも必要だ。
攻撃者は一度成功すればよい。
分析者がやるべきことは、その一度の成功が残した痕跡を見つけ直すことだ。
この言葉は、今回の後でようやく実感を持つようになった。
CTF は重要だが、それがすべてではない
今回の経験で、CTF は重要ではないと思ったわけではない。
むしろ、CTF はとても良い入口だとより強く感じた。人が Cybersecurity に触れ始めるきっかけになり、多くの抽象的な概念を具体化してくれる。
ただ、自分の能力が CTF だけで止まっているなら、大きな空白が残ることにも気づき始めた。
脆弱性を利用する方法は知っていても、malware が本当に Windows に入った後にどんな痕跡を残すのかは知らないかもしれない。
Flag の取り方は知っていても、感染した endpoint の痕跡をどう見るのかは知らないかもしれない。
攻撃がどう起きるかは知っていても、事件をどう復元するかは分からないかもしれない。
これが今回の最大の変化だった。
自分は CTF から離れるわけではない。ただ、CTF の外にも別の道があると見え始めた。
その道は Malware Analysis と呼ばれ、Windows Endpoint Forensics、DFIR、Blue Team、traffic analysis も含んでいる。
次に自分の Malware Lab を作りたい
今回の後、自分にはゆっくり練習できる環境が必要だと確信した。
自分の Malware Lab を作りたい。技術を見せびらかすためでも、最初から高度な sample を分析するためでもない。基本を補うためだ。
自分は、より完整な流れに慣れたい。
- 安全に隔離された Windows VM の中で sample を実行する。
- 実行前に baseline を記録する。
- Process Explorer と Procmon で process、file、registry の挙動を見る。
- Autoruns で persistence を確認する。
- TCPView と Wireshark で network connection と packet を観察する。
- 観察した挙動を簡単な分析記録として整理する。
今の自分は、まだ Malware Analysis ができるとは言えない。
でも少なくとも今回、自分がその方向へ進みたいことは分かった。
以前「ネットワーク攻防」と聞いたとき、最初に考えたのはどう攻め込むかだった。今はもう一歩考える。もし本当に攻め込まれたら、自分はどうやって何が起きたのかを知るのか。
この問いは、これからしばらく自分が資安を学ぶうえで、重要な一本の線になると思う。
CTF は自分を Cybersecurity に触れさせてくれた。
そして今回の Windows Malware Analysis は、自分に初めて防御者の目に映る世界を真剣に理解したいと思わせてくれた。