注目の書籍

好評発売中!

IT業界徹底研究就職ガイド2013年版

IT/ネット業界で働くと いうことを分かりやす く解説。2013年3月卒 業の学生向けの1冊。

セキュリティ
鵜飼裕司のSecurity from KAGURAZAKA

マルウェアの解析対策を無効にするAnti-Anti-Debuggingツールを開発

2007/11/21

1. はじめに

 最近、業務でマルウェアを解析する機会が増えてきたのですが、最近のマルウェアはどれも様々な解析対策が施されており、数年前と比べて解析がやや面倒になっています。攻撃者はマルウェアの発見を困難にさせたり、セキュリティベンダーらによる解析を遅らせたりするため、エンコーディングやゴミコード挿入などによる難読化、コンポーネントや実態の多段化、デバッガ検出など、様々な解析対策を実装しています。

 今回は、このデバッガ検出を無効にする方法を紹介します。

2. マルウェア解析とAnti-Debugging

 マルウェアを解析する際は、デバッガを使って地道にアセンブリコードを追っていく事になります。デバッガでブレークやステップを繰り返し、フロー、API呼び出し、引数、データの流れなどを確認して行くのですが、その際、何度か先頭から再実行しなければならないという状況に遭遇します。たとえば、「この条件分岐で今度はこちらに飛ばしてみよう」といった場合や、ブレークする位置を間違えて遥か先まで実行させてしまった場合です。その際は、既に解析済みの所はスキップするため、適切な箇所でブレークポイントを設置して再度先頭から実行したりします。

 しかし、マルウェアにデバッガ検出が実装されていると、解析者にとっては一手間発生します。デバッガ検出とは、自身がデバッガで解析されている場合、それを検知して本来とは異なる動作をさせるというものです。例えば、以下のような例が挙げられます。

if (IsDebuggerPresent()==TRUE){
	// デバッガ検知
	偽の処理
}else{
	// デバッガは検知されない
	本来の処理
}

 このような処理は、Anti-Debuggingと呼ばれ、多くのマルウェアが実装しています。Anti-Debuggingのためのデバッガ検知は以下に示すように色々な方法があります。

(1)IsDebuggerPresent()
(2)PEB(Environment Block)のBeingDebuggedフラグを参照
(3)PEBのNtGlobalFlagsフラグを参照
(4)CloseHandle()による例外検出
(5)OutputDebugStringA()の戻り値チェック
(6)デバッガのウィンドウクラス名取得
(7)INT3サーチ
(8)ハードウェアブレークポイント検出
(9)NtQueryInformationProcess()
(10)実行時間計測

・・・などなど

 Nicolas Falliere氏のテクニカルペーパー"Windows Anti-Debug Reference"に上記を含むさまざまな手法が紹介されていますので、興味のある方は参照してみてください。

"Windows Anti-Debug Reference"
http://www.securityfocus.com/infocus/1893

 マルウェアが最も多く利用している手法は(1)、もしくは(2)の手法です。IsDebuggerPresent()は内部的に(2)と同じ動作をしているため、本質的には(2)の手法が最も利用されている事になります(IsDebuggerPresent() APIを利用せず、PEBのBeingDebuggedフラグを直接見に行くケースは最近かなり多くなっているようです)。このAnti-Debuggingを実装したマルウェアを解析する際は、マルウェアをデバッガで起動した直後にPEBのBegingDebuggedフラグをリセットする、あるいは、BegingDebuggedのチェックを行っている箇所で一旦ブレークして処理をスキップさせる必要があります。Anti-Debugging処理を発見できればどちらも技術的に難しくはありませんが、毎回の事になると少々面倒です。

>>3. Anti-Anti-Debugging
次ページ以降はITpro会員(無料)の方のみお読みいただけます。
会員の方は、 ログインしてご覧ください。
まだ会員でない方は、ぜひ登録(無料)していただき、ITproの豊富なコンテンツをご覧ください。

著者プロフィール

 鵜飼氏は,WinnyやMicrosoft製品,組込み機器などのセキュリティ・ホールを多数発見していることで知られるセキュリティの専門家。2003年から2007年7月まで米国に在住し,米eEye Digital SecurityのSenior Software Engineerを務める。2007年7月に帰国しフォティーンフォティ技術研究所を設立,取締役副社長最高技術責任者に就任。米国から執筆していたITpro Watcher「Security from USA」は,帰国にともない「Security from KAGURAZAKA」に改題した。

この記事に対するfacebookコメント

nikkeibpITpro

読みましたか? 〜 未読記事をご紹介