Windows 標準の機能を用いた、マルウェアのアンチデバッグ機能を逆手に利用したマルウェア対策
目次
目的
マルウェアのアンチデバッグ機能を利用して、マルウェアの活動を抑制する仕組みをセットアップします。
気の効いたマルウェアですとデバッガ検知を行なっているということもあり(ex. EMDIVI)、これは逆にマルウェアの活動抑止に利用できるのでは…と考えたところ、すでに先人がいっらっしゃいました。
2009年にLACの松木さんという方が、下記の論文を提出されてました。
マルウェアの耐解析機能を逆用した活動抑止手法の提案 - 情報処理学会論文誌
セキュリティ無効化攻撃を利用した マルウェアの検知と活動抑止手法の提案 - 情報処理学会論文誌
IsDebuggerPresent のAPIフックしたいなと考えていた折、同様の手法で論文ではかなり掘り下げられておりました。
これは同じ事をしてもしょうがないと思いまして、後者の論文に似せた手法を用いて Windows の標準の機能だけでマルウェア対策を行うことを目的としました。
方法
要約としては、Windows 標準の機能(コマンドプロンプト、ショートカット機能)を用いてデバッガが動いるように見せかけます。
( 2016/7/19 追記 : ショートカット機能ではなく PowerShell のバックグラウンド実行を用いる方法を記載)
%SystemDrive%\WINDOWS\system32\cmd.exe
を任意の場所にコピーcmd.exe
をOLLYDBG.EXE
にリネーム- リネームしたファイルのショートカット作成
- ショートカットのプロパティ設定
- ショートカットをスタートアップ(コマンド
shell:Startup
で確認)に登録する
‘4’ のショートカットのプロパティは下記の設定を行います。(先頭の画像 pic.1も参考にしてください。)
- リンク先へコマンドオプションを追記「 /K “title OllyDbg"」
- 実行時の大きさ「最小化」
- 画面バッファー・ウインドウサイズを最小の設定(邪魔にならないよう小さく設定するだけなので任意です。)
手順 ‘2’, ‘4’ については、下記より意図などを説明をいたします。
2. cmd.exe
を OLLYDBG.EXE
にリネーム
下記の引用の通りに cmd.exe
をリネームすることで、プログラムのイメージ名を OLLYDGB.EXE
であると逆に偽装します。
『OllyDbg』のプロセスを検出して解析を妨害するタイプのウイルスを解析したい
基本的なOllyDbgのプロセス検出手法としては、Windows上で実行されているプロセスの一覧を取得して、各プロセス名のチェックによりOllyDbgが起動されているかを判断します。API関数を用いてプロセス一覧を取得する方法は5種類ありますが、通常は以下の3つの方法のいずれかを使用します。
・Process32First(Next)関数等のTool Help APIを使用
・EnumProcesses関数等のProcess status API(PSAPI)を使用
・OSが保持するパフォーマンスデータからレジストリの不可視キーとして取得
最も簡単なプロセス検出回避アプローチとしては、Windowsが把握するプロセス名はプロセスの実行ファイル名となるため、単純にOllyDbgの実行ファイル名を別のものに変更すれば、起動時にエラーメッセージは出るもののプロセス名も変更されOllyDbgのプロセスは検出されなくなります。
OllyDbg Q&A (Digital Travesia)
また、下記の調査を鑑みますと、プログラムの配置場所は任意で良さそうです。(自分は折角なので、OllyDbgのフォルダを参考にそれっぽい場所に配置しましたが。)
調査した範囲では,停止対象プロセスの判定はプロセス名のみで,実行ファイルのパスやミューテックスを用いた確認は行っていない
4. ショートカットのプロパティ設定
ここでは下記の理由からウインドウタイトルをデバッガが起動しているかのように偽装するため、コマンドプロンプトの title
コマンドを利用してウインドウタイトルを変更します。
マルウェアは、可視ウィンドウを列挙し、各ウィンドウのタイトルバーの文字を以下の文字列と比較します。
・Ollydbg
・Process Explorer
・Process Hacker
・Process Monitor
・SoftICE
・W32Dasm
・WireShark=
ウィンドウのタイトルバーの文字が上述の文字列のいずれかを含んでいた場合、マルウェアは、スリープコマンドを実行することで、自身の不正活動の実行を中断します。
BKDR_EMDIVI.LEW | 危険度: 低 | トレンドマイクロ:セキュリティ情報
おとりプロセスの起動状態の確認
本件のおとりプロセスを起動させてから、コマンドtasklist
を利用して起動状態を確認してみます。
C:¥Users¥ito>tasklist /V /FO LIST /FI "WINDOWTITLE eq OllyDbg" イメージ名: OLLYDBG.EXE PID: 4904 セッション名: Console セッション#: 3 メモリ使用量: 2,436 K 状態: Running ユーザー名: ITO-WIN¥ito CPU 時間: 0:00:00 ウィンドウ タイトル: OllyDbg
上記を見ると、メモリ使用量が小さいこと以外は本家の OLLYDGB.EXE
の起動状態と同じでした。
また、ウイルスによってはプログラムの強制停止を行うものもあるようなので、本件のおとりのプロセスが停止されていたら注意しないとですね。
・以下のセキュリティ関連のツール、その他のプロセスを終了します。
msdev.exe
dbgview.exe
mirc.exe
ollydbg.exe
ウイルス検索 | マカフィー株式会社
PowerShell を用いたバックグラウンド実行(2016/7/19 追記)
“Windows 7” 以降であればデフォルトで PowerShell が利用できますので、下記を参考にスタートアップフォルダにバッチファイルを設置し、バックグラウンド(ウインドウ非表示)で自動実行するようにしました。
@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\");&$s" %*&goto:eof Start-Process -WindowStyle hidden -FilePath "C:\Program Files\odbg110\OLLYDBG.EXE" -ArgumentList "/K title OllyDbg"
こちらでしたらタスクバーもすっきりしますね。
(2017/3/17追記)
下記サイトでは、マルウェアに対して実機環境を仮想環境だと誤認させて “アンチデバッグ機能を逆手に利用したマルウェア対策” を実現させておりました。
Stopping Malware With a Fake Virtual Machine | McAfee Blogs
レジストリ値追加・ファイル作製・プロセス作製など実機への影響範囲が大きい点は考慮しないといけませんが、とても興味深い実験結果が報告されていたため共有いたします。
所感
最後にこんなことを書くのもあれですが、本件のおとりプロセスの有効性はお守り程度と考えて、皆さんはきちんとウイルス対策ソフトとEMET*1を導入してください。
ちなみにウイルス対策ソフトは回し者ではないですが、経験から ‘Kaspersky’ をお勧めしておきます。最新のウイルスに対するパターンファイルの作成が早いように感じます。
あと面白い記事を見つけまして、
上記のような感染対象の選択が行われているのであれば、自分の実験用ノートPCは7,8年前のもので “Intel® Celeron® M CPU 440 @1.86GHz 1.86GHz” のCPUなので感染しないかもですね。
以上、"「かみついて」、君を感じる 罠の中" ということで。