切られたしっぽ

産業廃棄物の投下場所

「2024年も始まったしそろそろマルウェアの勉強を始めるか」と思っている人向けのマルウェア解析ツール入門話

  • 追記と修正
    • 2024/01/09: FOR710 についてはプロ視点で賛否両論あったので表現を変えました
    • 2024/01/09: FLARE-VM の構築部分でも書きましたが、解析環境と普段生活する環境は分離しましょう。VMWare or VirtualBox を使ってください。普段使いの環境にここで述べた解析ツールをいきなりインストールするとAnti-Virusに検知される可能性もあります。

TL;DR

  • 将来的にベンダーレポートやカンファレンス発表レベルでの"マルウェア解析"を想定した話です
  • とりあえず FLARE-VM 環境を作ってインストールされたツールを見る・触るところから始めるといいんじゃないでしょうか

はじめに

最近は引きこもりをやめてときどき外部に顔を出すようになり、マルウェア解析やインテリジェンス関連の話をする機会も増えました。それに伴って、「これってどうやってやっているんですか?」「参考になる本やWebサイトありますか?」といったマルウェア解析に使うツールややりかたに関する質問もポツポツいただくようになりました。

「(もう令和もはじまって6年目になるし、勉強できるプラットフォームや本も大量に転がっているし、筆者への会話デッキの一つとしてみんな話題を振ってくれているんだろうなぁ)」とか筆者は思っていたのですが、先日とあるところでやったセキュリティイベントのアンケートにて「Windows バイナリの Reversing なんて初めてやるし、ツールとかどんなのがあるかわからないし、事前に教えてほしい」といった意見を目にして、意外と適切なツールをググって探してくるのも初学者にとっては難しいのかもしれないと考え方を改めました。
たしかに SEO の仕組みを考えても古い記事は検索上位に出にくくなるし、現在進行形で入門を考えている方向けの記事があってもいいのかもしれないと思い、筆者が利用するツールやそのツール選択の元となっているプールについてダンプしてみます。

内容的には「何番煎じなんだろう......」ってものですが、マルウェア解析のツール選定に関わるエントリーレベルの記事にありつけていない人がいれば何かの参考にしていただけると幸いです。

ちなみに筆者のバックグラウンドは、

程度です。知らないツールやプラットフォームもいっぱいありますし、筆者のやり方は特殊で思想が偏っている可能性もあります。もっと有用・一般的なものがあれば追記いたしますのでコメントしてください。

"マルウェア解析" のスコープと前提知識の明確化

まず"マルウェア解析"の勉強と一口に言ってもかなり主語がデカいので、今回深堀する"解析"の対象をより明確にしておきます。筆者がここで紹介するマルウェア解析のツールというのは、「マルウェアの静的解析からシグネチャを作成したり、TTP を収集したり、帰属の考察をしたり、C2サーバとの通信を復号したりする」ために使うツールを対象にしています。なので、ファイルのトリアージマルウェアEDR などに残すログ、フォレンジックといった観点の話はほとんど入っていません。また、マルウェアとして解析する対象はどうしても Windows PE が多くなるので、oletools のような Office 製品の解析なども一旦省略します。

なので、より抽象的なレイヤーでのマルウェア解析のはなしが知りたい方はマルウエアの教科書を、トリアージからフォレンジックまで幅広く知りたい人は初めてのマルウェア解析を購読してみることを推奨します。

また、解析に必要な事前知識まで話すときりがないので、本ブログでは割愛します。気になる方は pinksawtooth 先生が書いている以下の記事がめちゃくちゃ参考になるので読んでください。
github.com


ちなみに筆者のおすすめの勉強方法は、Practical Malware Analysis (宇宙人本)を一冊やり通すのと Zero2Automated というマルウェア解析における Try Harder 系のトレーニングをやるという2つがオススメです。

慣れてきたらすでにレポーティングされている簡単めな検体を Any.Run から拾ってきて解析してみるのがスキルアップにはよいとは思うのですが、危険と隣合わせなのであまりオススメはしません。個人的な腕試しのオススメは FLARE チームが主催している FLARE-On challenge です。かなり実務寄りの問題が多いのでマルウェアの勉強の実践としては十分なのではないかと思います。
flare-on.com

ツールの選択元(プール) : FLARE-VM

さて、余談が長くなってしまったのですが本題に戻ります。
まず大前提をお話しすると、「マルウェア解析においてツール選定が決定的となるような場面は少ない」というのが筆者の考えです。どちらかというとコンピュータサイエンスの基礎知識やツールに対する練度の方が重要で、いくつかのポイントを自分の使いやすいもので見れればそれで充分ではないかと思います。筆者の感覚で「何かしら自分の手に馴染むツールを抑えていたほうがいいんじゃない?」思うのは、以下の5つくらいです。(より具体的にあげるとフォレンジック関連ツール、各々の言語ごとの解析ツール、モジュールレベルのはなし.......と様々ありますがキリがなくなってしまうので、今回は一般的なマルウェア解析=>レポーティングの流れでほぼ必ず通るものに絞りました。また、pythonVSCode といったセキュリティ関係なく使う系のツールは省略しています。)

大項目を5つあげましたが、各々のツールをいちいち調べて集めてくるのも少々面倒です。なので、解析ツールを学ぶエントリーとしては分析に必要なツール一式が導入されているディストリビューションを利用して、仮想環境マシンを作成し、中に入っているツールを調べて使ってみるのが一番よいかなと思います。ペンテストで言うところの 「まずは Kali Linux 落としてきて中身見てみたら」のニュアンスですね。筆者の一番のおすすめは、mandiant がOpen-Sourceで提供している Windows OSベースのディストリビューション FLARE-VM です。

github.com

筆者も大量のマルウェアアナリストを見ているわけではありませんが、VMWare 製品上に Windows 仮想マシンを立て FLARE-VM をインストールしている方を非常によく見ます。(もしかしたら、Ghidra実践ガイド での環境構築で述べられているのが影響しているかもしれません。) ツールも大量にインストールされるので、公式の Installation instruction を参考にしながら導入してみてください。現在は GUI でインストールするツールが決められるので、とりあえず200個近くあるツールすべてインストールしてみましょう。

画面遷移後に 3時間くらい放置すれば以下のようなデスクトップに切り替わると思います。これでひとまず導入は完了です。(余談ですが、昔の FLARE-VM のデスクトップイメージは水色のMマークでしたが、いつの間にか某アンダーなテイルのメタ〇ンっぽいキャラになってました。いつの間に変わったんだろうか。)

FLARE-VM インストール後のデスクトップ

あとは、デスクトップにある "Tools" ディレクトリを見てみましょう。様々なツールが並んでいると思います。知ってる単語や興味のある単語から子階層を漁って、ツールを調べて触ってみるといいんじゃないでしょうか。


FLARE-VM に入っている中でもよく使うツール

FLARE-VM インストールして中を見てみましょうだとさすがに不親切だと思ったので、筆者自身が中からよく引っ張り出すツールも簡単にまとめてみます。

PEStudio

www.winitor.com

マルウェア解析に限らずリバースエンジニアリングで最も大切なことは「自分が今向き合っているモノは何なのか」のあたりをつけることなのではないかと筆者は考えています。.NET で作られていれば de4dotdnSpy を使って難読化解除やデコンパイルをしますし、pyinstallernexe によって実行ファイル化されたツールであればネイティブコードの抽出を目指す人が多いでしょう。つまり、対象がWindows PEファイルであれば最適な分析手法を割り出すためのワンクッションがあったほうが効率的です。そのためのツールの1種別が表層解析系のツールで、筆者は PEStudio を好んで使用します。

ただし、この項目についてはめっちゃ派閥がわかれると思います。pe-beerCFF Explorer のほうがツールとして使いやすいという人もいますし、malwoverview のようなツールでトリアージは自動化している人、Detect It Easy のような最低限の表層解析ツールで十分の人もいます。

ここまでいろいろ書きましたが、ぶっちゃけ最適な解析ツールを導出することができればなんでもよいと思うので、あとは皆さんが触ってみたフィーリングやレベル感によって使いやすいものを決めてください。筆者はなんで PEStudio 使っているかというと strings の部分が優先度順で並ぶのと全体的にグラフィカルでわかりやすいからです。


IDA Free (Pro)

hex-rays.com

最強です。純粋なマルウェア解析をやっている時間の9割以上がこのツールを触っている時間と言っても過言ではないかもしれません。チラッと目次を見てもらった方には「あれ、デバッガ書いてなくね?」と思った方もいらっしゃるかもしれませんが、現在は x64 のアーキテクチャであれば Free からデコンパイルもできるしデバッグもできるのでほぼこのツールで完結します。つよいです。

IDA Free decompiler & debugger

ただし Free だと x86 や arm まではデコンパイルできないので、そういう場合は Ghidra でディスアセンブル/デコンパイルしながら x64dbg を使うという人が多いのではないかなと思います。(ただやはり Ghidra を使うとデコンパイルの精度やショートカットの微妙さなどが気になるので、できることなら IDA 使いたいなと筆者はよく感じます。あと、バージョンアップのたびにプラグインをビルドしたり python3 がデフォルトで使えないのがあまりにも厳しい。。。)


また、最近なぜか WinDbg を使いますという声もちらほら聞きます。たしかに先日 かえるのほんだな さんが0円というまさかのバグ価格でWinDbg本を公開されていたので、こちらを参考にしながらデバッガの勉強をするのも非常にありな選択肢だと思います。
techbookfest.org

雑にまとめますが、基本 IDA を使う練度を上げて使えない部分は他のツールでカバーするというのが一番実践的だと思う、というのが筆者の主観です。

FakeNet

github.com
FLARE チームが作成したネットワーク通信のエミュレートツールです。デフォルトだとほぼすべてのネットワーク トラフィックインターセプト、リダイレクトし FakeNet 側で指定したカスタムレスポンスを返させることができます。つまり、マルウェア解析の場面ではホストオンリーの環境でもC2サーバの擬似応答を返させることでデバッグ解析を継続させることができるという強力なサポートをが得られるツールです。(リバエン力が高くない筆者にとっては、ここまでの上三つがとりあえず使うツール3強な気がしています。)

試しに FakeNet を起動した状態で googlecurl を叩いてみると、FakeNet からの fake レスポンスを返してくれることがわかります。

FakeNet sample

DNS も解決してローカルホストにリダイレクトさせてくれるので、ここからC2サーバのレスポンスを作りこみ、解析をより深く行うこともできたりします。FakeNet に届いた通信は pcap 形式でdumpしてくれるので、事後分析もしやすいです。総じて優秀なので、デバッグしながら解析している際には脇で動かさない手はないでしょう。

mandiant さんの公式ブログを見るとカスタムレスポンスのつくり方なども書いてあるので、興味がわいた方はこちらを参考にカスタムしてみてください。
www.mandiant.com

Yara

github.com

ファイルに対するシグネチャマッチングのデファクトスタンダードです。多くのベンダー・組織がマルウェアの検知ルールとして Yara rule を公開しており、さらにセキュリティ製品でもこの Yara が導入可能となっているものが多いです。なので、解析で Yara を使わなくても純粋に Yara の読み書きができるというだけでも得をする場面はあるかなと筆者は想像しています。特にマルウェア解析を仕事にしている人だと、解析結果から Yara ルールを作成して、それを組織のセキュリティ製品に組み込んで運用できる状態にしてもらうことをアウトプットの一つにしていたりするのではないかなと思います。
ルールのイメージがわかない方は JPCERT/CC さんが公開しているものなどを参考にしてください。

脇道にそれたので話を解析に戻します。主に解析後の話を中心として Yara を記述しましたが、筆者のトリアージプロセスの一つとして Yara をかけるというのは最初期段階で行います。「シグネチャマルウェアのファミリ判定されれば儲けもの」くらいのモチベーションです。たしかに標的型検体や Pack されているマルウェアなどからはいい結果が得られませんが、ものの数秒くらいのロスにしかならないのでとりあえず JPCERT/CC さんなどのGithubに公開されているルールをかけて損はないと思います。

またシグネチャマッチングとは少々異なりますが、実行ファイルがどんなことをしていそうかというのを推定してくれる capa というケーパビリティツールもあります。
github.com

筆者は自分でルールを作りこむことまではしたことなく mandiant さんが提供するルールを IDA Pro のプラグインから使ってトリアージに活用しているだけなのですが、IIJ さんのブログなどを参考にすると自身でルールを書いてもっと有用な使い方ができそうな気がしています。皆さんはぜひ有効活用してください。
eng-blog.iij.ad.jp

FLARE-VM に入ってないけどよく使うので別途入れているツール

本当は上で終わるつもりだったのですが、なんだかんだ3割くらいは別途ツールをインストールして使っている気がするのでこちらも書いてみます。静的解析で使う細かめの話が多いです。ご了承ください。

FileInsight

俗にいうバイナリエディタです。FLARE-VM にも一時期話題になった午前3時から頑張る人向けのバイナリエディタ ImHex 010 Editorなんかが入ってはいるのですが、筆者の肌感にあわずメインでは使ってません。

代わりに何を使っているかというと McAfee 製の FileInsight というのを使っています。こちらは有志の方がマルウェア解析に特化したような plugin を作ってくれたりしていることもあり、雑にデータの復号とか解凍とかができるのがうれしい点です。バイナリエディタ単体で起動することもあまり多くは無いのですが、振り返ってみると一番使っているのはこれですね。

github.com

あとは、IDA にも Hex 表示の機能がついているので、けっきょくのところそこで見て python 使ってデータいじってしまうことが多いですかね。。。IDA つおい。

Process Hacker

processhacker.sourceforge.io

プロセスが使用しているメモリやネットワークレベルのリソースまで確認できる、プロセスリソースモニターです。
似たようなツールとしてProcess Explorerもありますが、筆者の場合 Executable なメモリを見つけたりそこからメモリをダンプしたりする機能が便利すぎてずっと Process Hacker を使っています。

また、少し余談になりますが、Process Explorer などに代表される Sysinternals tool は有用なものが多く FLARE-VM にも標準でインストールされるため見てみることをオススメです。("Tools -> sysinternals" にあります)
learn.microsoft.com

前にも述べた通り筆者はほぼ IDA を使うばかりで動的解析をしなくなってしまったのであまり使ってはいないのですが、Process Monitor, Autoruns なんかはマルウェアをとりあえず動かしてサクッと挙動を掴むうえで有用なツールだと思います。

直近だと IIJ さんのブログにも Process Monitor を活用した動的解析ツール Noriben のはなしがあるので、いきなり静的ではなく動的から勉強していきたい人は活用してもらえるといいのではないかと思います。(初めてのマルウェア解析 の本を持っている方はここからでも学べたりします)
eng-blog.iij.ad.jp

bindiff

github.com

最近 Open-Source になったことで話題となったディスアセンブルコードの比較ツールです。同じところで何年も働いていると一度解析したことのあるマルウェアの亜種とは何回も戦うことになり、詳細を全部確認すると無限に時間がとられてしまいます。なので、限られた時間で読む部分にあたりをつける、さらにはコードの更新部分を第三者にわかりやすく説明するためにかなり重宝されます。(特に、非エンジニアに説明する意味だと後者はデカいと思います。)

具体的なイメージが見たい方は moly さんのブログを参考にしてください。Ghidra での解析差分をサクッとそしてビジュアブルに図示できることがわかると思います。

morimolymoly.hateblo.jp


ちなみに IDA Pro を使っている方は diaphora という便利なプラグインがあるためこちらを使っている方が多いかもしれません。こちらでも bindiff と同等のことができますが、関数をクリックするだけで IDA の該当の関数に飛んでくれるので非常に親和性が高いです。 Pro がある人はこっちも試してみることをおすすめします。
github.com

BlobRunner

github.com

かなり tips よりのツールだが、「抽出した shellcode をサクッとデバッグしたい。。。」とアナリストならば一度は思ったことがありそうな要望を叶えてくれるツール。Initial Accessでは全部が shellcode でできたようなツールがポンポン降ってくるような昨今ではすごく有用だと思います。

筆者もかつては「指定したファイルを読み込んで、Executable なメモリに配置して、3分sleepして、call する。。。」なんてツールを書いて使っていましたが、BlobRunner だとデバッガでアタッチしたあとにエンターキー押せば breakpoint まで飛んでくれるので利便性高いですね。

OALabs さんは他にも API hashing の解決を補助してくれる hashdb のようなプロジェクトや Youtube channel で解析手法なんかを公開していて非常に有用なので、時間に余裕のある方はチラ見してみてください。(筆者自身も、こういうところから便利そうなツールの情報を盗むことが多いです)
github.com

Hayabusa

github.com

大和セキュリティさんが公開している Windows のファストフォレンジックツールです。「あれ、フォレンジックツールは紹介しないんじゃなかったっけ?」と思った方もいらっしゃるかもしれませんが、筆者は Sigma と呼ばれる SIEM でのログ検出用のシグネチャルールを検証する際に使用しています。

github.com

下記は Sigma 公式 Github の README に載せられている図ですが、Sigma ルールは Sigma rule のコンバーターと何かしらの SIEM (に検証したいログがたまっている状態)がないと有効活用、つまり検証できません。

https://github.com/SigmaHQ/sigma/raw/master/images/Sigma_description_light.png

Hayabusa は Sigma を解釈したうえでローカルに溜まったエベントログをスキャンしてくれるので、コンバーターと実質 SIEM 部分の役割を担ってくれます。便利です。Sigma ルールを書いたり検証したりするジョブに就いている人にとっては、マルウェアをローカルでガチャガチャ動かして検証できるようになるツールなので入れておいて損はないと思います。

おわりに

けっこうコンパクトにまとめたつもりがかなりぐちゃった内容になってしまいました。

もっと体系的に学びたいと思った方がいれば、学生の場合はセキュリティ・キャンプの脅威解析クラス, 社会人の場合はFOR710なんかがいいんじゃないかなと思っていましたが賛否両論あるようなので、現場の解析経験ある人から知見を吸収してみましょう。

最後になりますが、一歩目の踏み出し方がわからない方の参考になったり、何かしら新しい知見が得られた方がいれば幸いです。それでは。