セキュリティ系の勉強、その他開発メモとか雑談. GithubはUnity触っていた頃ものがメイン Twitterフォローもよろしくです

アナライジングマルウェア 1.8動的解析から〜メモ

動的解析を提供するWebサービス

VirusTotal

現在(2018.8)も稼働してました。実際にファイルを投げて結果も帰ってきました。ウィルスの名前や感染動作等を取得できます。
VirusTotal - ウイルス、マルウェア、URL の無料オンライン スキャナー

マンハイム大学のmwanalysis.org(CWSandbox)

使えません。別のページに遷移します。本の示したようなページではなく、マルウェアについての会社のページです。

Anubis

紹介ページはありますが、最後の更新が2011年なのでおそらくダメでしょう。

マルウェア解析環境で使用できるツール

肝心のサンプルマルウェアがダウンロードできません。ダウンロード先のサイトがなくなっているので、入手不可能でした。サポートページもだめ。

表層解析

まずは、マルウェアに含まれる文字の抽出

BinText

使えました。

マルウェアがパッカーによって圧縮されているかを確認するには

可読性のある文字列の存在の有無
インポートアドレステーブル(IAT)の登録状況(LoadLibraryとGetProcAddressだけであればパックされている可能性大)
書き込み可能な.textセクションの存在

LordPE

使えました。

IATの登録状況を調べるために使用しました。Import Tableを調べると、(LoadLibrary,GetProcAddress)といった名前が抽出される。
また、コードセクション(.text)はプログラムの機械語の部分を格納するためのセクションであるため、通常は(実行・読み出し可能・書き込み不可能(RX))らしいのですが、パックされていると(実行・読み出し可能・書き換え可能(RWX))という属性なる。この属性値もLordPEで調べられるらしい。

PEiD

シグネチャを利用してパッカーを検知するツール。パッカーを検知し名前とかを出してくれるらしい。日本語化されているもの等があったけれど、本に載っていたシグネチャ追加のファイルは見つからなかった。他のものなら探せばあるかも。

デバッガの基礎〜

パッカーの解答コードには[IAT再構築][オリジナルエントリポイント(OEP)へのジャンプ]の2つの処理が確実に含まれる。IAT再構築にはWin32APIとしてLoadLibraryとGetProcAddressが使用される。再構築した本来のコードから命令を呼び出すために、命令ポインタの移動が必要であるがそれがOEPへのジャンプ。再構築時のAPI呼び出しには[call]ジャンプには[JMP]命令が書籍の例で使用されていた。


アンパック

OllyScript

OllyDbgのプラグインの一つとして提供されている。パッカーの名称を判明させた上でパッカーのOEP Finderスクリプトを入手→アンパックといった流れらしい。OllyDbgが32bit版しかないので自ずと範囲は限定される。

RL!depacker

最近は更新されてないんじゃないか。ダウンロード先のサイトの更新履歴がとても古かった。(未検証) マルウェアをドラッグ&ドロップでアンパックしてくれるものらしい。

TitanEngine

アンパックのためのフレームワーク。64bitの動作も対応。ソースコードとDllが配布されており、VS等の開発環境を使用してライブラリをインポートすることができるらしい。Pythonでも使用可能。

その他のツール

Process Monitor

ファイルシステムレジストリ、プロセス、スレッドの活動をリアルタイムで表示するコードな監視ツール。マルウェアを実行させることで感染動作を記録、内容を把握できる。Process Monitorを検知するマルウェアもあり。

Malcode Analysis Pack

2012年で更新が止まってる、と思ったけどGithubにソース発見。更新されている模様。

BlackManta

Immunity Debugger用のプラグイン。特定の操作やWin32API呼び出し状況を記録する。



静的解析

いわゆるリバースエンジニアリング機械語レベルで解析。

IDA Pro

無料版は64bit非対応だったりと色々ですが、最初の練習には無料版でも十分でしょうか?
相互参照を探したり、アドレスの呼び出し先とか飛んだり便利。静的解析では、Win32 APIがどのように使用されているかを確認することが、効率的な方法の一つ。コードの特徴から感染動作を確認する方法をボトムアップ法と呼ぶ。文字列の使用状況とかも確認すると良いよ。
逆にコードの先頭から処理を追っていく方法をトップダウン法と呼ぶ。

Win32APIの引数を調べる

Win32APIが呼ばれる際に、引数に何がpushされているかを確認することで、何をしているか、どこに飛ぶかが読み取れる。APIがなんばんめの引数に何をとるか知っていると、解析が早そうだ。