アンチアンチデバッギング #lt駆動
TRANSCRIPT
動的解析
● マルウェアを実際に動かして解析– レジストリアクセスやパケットの記録– 挙動を把握しやすい– 短時間– もちろん感染する
● VM起動 ~解析 /レポート生成までを自動でしてくれるツールもある– Cuckoo, Zero Wine Tryouts
マルウェア側の抵抗● 動的解析の妨害 (アンチデバッグ )
– 解析ツール (デバッガなど )の検出– 実行時間の計測
● VM環境の検知– Vmware Toolsなどのバックドア I/Oポート– 起動時間– リアルとサンドボックスの違い
http://www.atmarkit.co.jp/ait/articles/1404/18/news004.html
マルウェア側の抵抗● 動的解析の妨害 (アンチデバッグ )
– 解析ツール (デバッガなど )の検出– 実行時間の計測
● VM環境の検知– Vmware Toolsなどのバックドア I/Oポート– 起動時間– リアルとサンドボックスの違い
http://www.atmarkit.co.jp/ait/articles/1404/18/news004.html
アンチデバッグ手法
● 解析ツールの検出– リソースアクセスやパケットの監視
● Process Monitor, Process Explorer,WireShark
– デバッガ● Immunity Debugger, OllyDbg
● これらのツールやプロセスを検出され ,
自身の動作を変更 ,停止するマルウェア
マルウェアの概要
● CreateToolhelp32Snapshotでプロセス一覧のスナップショットを作成
● Process32First(Next)でプロセスの情報を取得● 実行ファイル名に “ ImmunityDebugger.exe” が
あれば Detected. と表示される
マルウェアの概要
● EnumWindowsでウィンドウを列挙– Process Monitorは PROMON_WINDOW_CLASS
● GetWindowTextでタイトルバーの文字列を取得するものも
回避法
● EnumWindowsなどの戻り値を変える
● いちいち戻り値を変更するのが面倒なので、常に 0を返すように命令を書き換える– Immunity Debugger付属のアンチデバッグ回避用スクリプトを使うと楽
マルウェアの概要
● カーネルモードで動作するツールは ,固有のデバイスファイルを作成するものがある .– ProcessMonitorは \\ .\Global\ProcmonDebugLogger
● CreateFileで検出している● しかし ,CreateFileは使用頻度が高いため ,
マルウェアが正しく動いてくれなくなる
マルウェアの概要
● デバイスファイルの検出を行っている● CreateFileの処理が一定秒内に完了しなければデバッグされていると判断している .
→これまでのように手動でレジスタの値を書き換えるのは無理
マルウェアの概要
● IsDebuggerPresent()で自身がデバッグされているか判断
● これも戻り値を書き換えればいい
● ただ ,IsDebuggerPresent()を使用せずに検知しているものもある
IsDebuggerPresentの実装
FSレジスタ内の TEB(Thread Environment Block)構造体のオフセット 0x30にある ,PEB(Process Environment Block)構造体のオフセット 0x02にある ,BeingDebugged byte-flagを読んでいるだけ
まとめ
● マルウェアだけでなく ,ゲームのチート対策にも使われてたりするらしい
● VM検知についても勉強したい● アンチアンチアンチデバッギングについても考えたい
● #malwaremustdie!