コンピュータウイルスの解析などに欠かせないリバースエンジニアリング技術ですが、何だか難しそうだな、という印象を抱いている人も多いのではないでしょうか。この連載では、「シェルコード」を例に、実践形式でその基礎を紹介していきます。(編集部)
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
第1回、第2回では、シェルコードの入手方法、概要について解説してきました。料理に例えるならば、素材を手に入れ、その素材がどういうものかを学んだ、というところでしょうか。
今回は、素材であるシェルコードを調理するのに必要なツールを紹介します。ここで紹介するツールは、シェルコード解析だけではなく、マルウェア解析でも使えるので、シェルコード解析を卒業し、マルウェア解析に挑む際にも参考にしていただければと思います。
図1はシェルコード解析の流れとそのときに使われるツールの例です。今回は、逆アセンブラである「IDA Pro(アイダ プロ)」、デバッガである「OllyDbg(オリーデバッガ)」「Immunity Debugger(イミュニティー デバッガ)」、シェルコードを実行ファイルに変換する「shellcode2exe.py(シェルコード トゥー エグゼ ドット パイ)」、シェルコードの実行をエミュレートする「libemu(リブエミュ)」を紹介します。
ツールの名称 | URL |
---|---|
IDA Pro | http://www.hex-rays.com/idapro/ |
OllyDbg | http://www.ollydbg.de/ |
Immunity Debugger | https://www.immunityinc.com/products-immdbg.shtml |
shellcode2exe.py | http://zeltser.com/reverse-malware/convert-shellcode.html |
libemu | http://libemu.carnivore.it/ |
リバースエンジニアリングには、逆アセンブラである「IDA Pro」がよく用いられます。IDA Proは逆アセンブラのデファクトスタンダートといっても過言ではありません。正規版はHex-Rays社から販売されていますが、非商用の利用に限っては、旧バージョン(Ver.5.0)を無償版として利用することができます。
最新版(Ver.6.1)と比べ、無償版では対応しているファイルフォーマットやCPUアーキテクチャが少なかったり、組み込まれているプラグインやデバッガの数が少なかったりと、いくつか機能的に劣っている部分があります。とはいえ、シェルコード解析やマルウェア解析をこれから始めてみよう、という方であれば問題ないかと思います。解析をバリバリ行えるようになり、無償版では物足りないと思ったときに最新版の購入を検討するとよいでしょう。
IDA Pro無償版のインストールは非常に簡単で、Hex-Rays社のサイトからダウンロードしたインストーラを起動するだけです。
では、第1回で取得していた「download_exec.bin」をIDA Proに読み込ませてみましょう。IDA Proを立ち上げ、起動方法を選択する画面(図2)が出現したら、「New」をクリックします。
なお、新しくバイナリを読み込ませて解析を始めるなら「New」、バイナリを読み込ませずに起動するなら「Go」、以前解析したことのあるバイナリの解析を行う場合は、画面下の履歴から解析したいバイナリ名を選んで「Previous」をクリックします。「Go」を選択した後、IDA Proのウィンドウにバイナリをドラッグアンドドロップして読み込ませることも可能です。
「New」をクリックすると、読み込むバイナリのフォーマットを選択する画面が出てきます(図3)。
今回は「Various files」タブの「Binary/Raw File」を選択して、download_exec.binを読み込ませます。この後、バイナリをロードするウィザードが立ち上がりますが、とりあえず「次へ」で先に進んでかまいません。プロセッサの選択では「Intel 80x86 processors: metapc」を選択しておきます。ウィザードが終わった後、16bit/32bitのどちらで逆アセンブルするかを選択する画面が出ますが、ここは32bitで逆アセンブルしましょう。
これでIDA Proにシェルコードを読み込ませることができました。
図4はシェルコードを読み込ませた直後の画面です。画面中央の「IDA View」のウィンドウに逆アセンブルしたコードが表示されていま……せんね。これは、シェルコードをバイナリとして読み込んだだけで、どのバイト値をコードと解釈するかが設定されていないためです。
download_exec.binのエントリである「seg000:00000000」のところにカーソルを合わせて、キーボードの「c」を押してみましょう。「c」は、カーソルの位置をコードとして解釈し逆アセンブルする、というショートカットキーです。そうすると図5のように、逆アセンブルされたコードが画面に表示されます(注1)。
Copyright © ITmedia, Inc. All Rights Reserved.