2013年5月6日月曜日

packer と unpacker

packer とはこちらのページによると

実行形式ファイルを実行可能な状態で圧縮(暗号化)するツールのこと。「コンプレッサ」などと呼ばれる場合もある。パックされたファイルは、ユーザーがダブルクリックするだけで自己解凍され、実行される。
 ウイルス対策ソフトの検出を逃れたり、解析を面倒にする目的でウイルス作者が使用する。パッカーを変更するだけで、簡単に亜種を作成できるため、現在の亜種の大量化のひとつの要因ともなっている。
 パッカーの形式は、通常のファイルには使用されない特殊な形式であることが多く、パッカーを使用しているファイルを「不正プログラムである可能性が高い」として検知する手法も有用である。

とのこと。そして、パックされた実行ファイルをもとの状態に戻すことをアンパックといい、そのためのツールが unpacker になる。

代表的な packer/unpacker として UPX がある。

UPX
日本語の解説は wiki が詳しい。 本家のサイトはこちら
Windows や Linux でフリーで使用できるので使い勝手はいい。ただし、Windows の 64 bit 実行ファイルには対応していないので注意が必要。
ファイル自体は MZ から始まるが、バイナリファイルを確認するとそのあと PE と続き UPX0 および UPX1 という文字が出てくるので識別は比較的容易。
Back Track でパックする場合は下記のコマンドを実行すれば同じファイルで圧縮される。

upx file.exe

アンパックする場合は -d オプションをつけて実行すれば同じファイル名でアンパックされる。

upx -d file.exe

Windows で実施する場合はコマンドラインで同様にパックおよびアンパックが可能。


そのほかにも FSG、tElock、Upack、MEW、PESpin、などなど多数あり、それぞれがどれぐらい圧縮されているかをテストした exe packer compression test というサイトもある。

そのため、実際にパックされたファイルやマルウェアをアンパックするには、PEiD などのパッカー確認ソフトでパッカーの種類を調べて、RL!Depacker でアンパックするというのが手っ取り早い。

2013年5月4日土曜日

Shellcode のお勉強 PART 1 CHAPTER 1 その1

The Shellcoder's Handbook を参考に Shellcode やバイナリ解析の勉強をしているので、実際にやってみた結果や理解のための忘備録として残します。The Shellcoder's Handbook を読もうとしている、読んでいる人の参考になればと思います。
あくまでも自分のメモ用なので正確な内容などは本を見てください。
この本で使用しているサンプルコードはここにあります。

PART 1 の CHAPTER 1 は「Before You Begin」となっており、本を読み進めるうえでの前提知識などについて書かれている。

使用する用語
  • Vulnerability(名詞):攻撃者がシステムを攻撃するのに使用するもの、セキュリティホールやセキュリティバグと言われたりする。
  • Exploit(動詞):Vulnerability(脆弱性)を利用して攻撃を行う行為。
  • Exploit(名詞):Vulnerabilityを利用したツールやコードのこと、Proof of Concept(POC)とも呼ぶ。
  • 0day(名詞):Exploit に利用されている脆弱性で未公開のもの。
  • Fuzzer(名詞):予期しない入力値を幅広いレンジで入力しシステムの検査を行うツールまたはアプリケーション、バグだしの検査に使われる。
メモリーについて
インテルの IA32 がどうやってメモリ管理をしているかを解説。セキュリティホールとして最もよくあるオーバーフローについて理解するためには必ず必要だから。
OSによって実行ファイルが呼び出されると3つのタイプのセグメントが作成される。
  • .text:読み込みのみ、プログラム命令。
  • .bss:書き込み可、グローバル変数用で初期化されていないデータ。
  • .data: 書き込み可、グローバル変数用で初期化されたデータ。
上記のセグメントを作成した後 stack と heap が初期化される。
  • stack:LIFOタイプのデータ構造で、ローカル変数を持つ、特に重要なポイントとしてスタックは grow down(下がっていく)ことであり stack に値が追加されると新しい値を示すアドレス位置はより低くなる。
  • heap:主に動的変数などを扱い、FIFOタイプのデータ構造、値が追加されると新しい値を示すアドレス位置はつみあがる。
↑アドレス下部
Shared libraries
.text
.bss
Heap (アドレス上位↓へ向かって伸びる)
Stack(アドレス下位↑へ向かって伸びる)
env pointer
Argc
↓アドレス上部

レジスターについて
レジスター(Registers) は電気回路に直接接続されている一種のメモリ。主に以下の4つのグループに分けられる。
  • General purpose:一般的な計算命令に使用、EAX/EBX/ECX が含まれデータやアドレス、オフセットアドレスなど多くの用途に使用される。その中でも ESP(extended stack pointer) は次に実行するスタックのアドレス位置を格納しており、アセンブリやバッファオーバーフローを理解するうえで重要なレジスター。
  • Segment:このレジスタグループのみ 16bit でsegment の追跡や 16bit アプリケーション用の後方互換として使用、CS/DS/SS が含まれる。
  • Control:CPU を制御するために使用、特に EIP(extended instruction pointer)は次に実行する機械命令のアドレスを格納しているため重要になる。
  • Other:EFLAGS(extended flags)というレジスターがあり、多数の CPU の結果を格納するシングルビットレジスターとして利用される。


2013年5月3日金曜日

autopsy の使い方

autopsy はディスクなどを調査するときに使用するフリーのフォレンジックツール。
ちなみに、Autopsy は日本語では「検死」となる。
ツールについてもう少し詳しく言えば autopsy は web インターフェースを提供するツールで、実際のディスク調査は The Sleuth Kit というツールが行う。

sleuthkit.org


日本語ヘルプ
http://www.monyo.com/technical/unix/TASK/autopsy-help-ja/

Back Track には The Sleuth Kit と autopsy がインストールされているのでそのまま使用できる。Windows で調べる場合は FTK imager あたり。

BT で使うにはまずメニューまたはコマンドラインで autopsy を立ち上げる。メニューなら Forensic あたりを探せば出てくるはず。実行すると下記のようなターミナルが立ち上がる。

============================================================================

                       Autopsy Forensic Browser 
                  http://www.sleuthkit.org/autopsy/
                             ver 2.24 

============================================================================
Evidence Locker: /tmp
Start Time: Thu May  2 23:31:24 2013
Remote Host: localhost
Local Port: 9999

Open an HTML browser on the remote host and paste this URL in it:

    http://localhost:9999/autopsy

Keep this process running and use  to exit

次に Web ブラウザで http://localhost:9999/autopsy へアクセスする。
ブラウザでアクセスすると下記のような画面が表示される。



解析を始める場合にはイメージファイルを準備して NEW CASE を選択する。



Case Name と Description を記入して NEW CASE を選択。これは単純に名前とコメントなので実際のインシデント解析でなければ適当で問題なし。



次の画面は必要なディレクトリを作成したことをお知らせしているだけ。次にホストを追加するので ADD HOST を選択する。



次の画面はホストの情報を調整する画面。時刻を合わせるなどの必要があれば入力する。通常は入力しなくても大丈夫。そのまま、ADD HOSTを選択。


ADD IMAGE を選択。



ADD IMAGE FILE を選択。


1. でイメージファイルの場所を選択、2. ではその Type を選択。 今回は USB デバイスのイメージだったので Partition を選択。3.はインポート方法なので、Copy を選択する。


MD5 を計算するかをどうかを選択して、File System Type を選択。今回はNTFS。


問題なければOKを押すと下記のように解析作業環境が整う。


あとは、 ANALYZE を押すだけ。


 この状態で解析を行うことができる。
FILE ANALYSIS で削除されたファイルの内容や属性情報を確認することができる。












2013年5月1日水曜日

skipfish の使い方

skipfish は Google が開発した Web スキャナ。
開発情報やダウンロード等はここからできる。

Back Track には標準でインストールされている。豊富なパターンがありスキャンにはある程度時間がかかる。Web 検査する場合、まずは skipfish で検査する対象をスキャンした後に手動で実施するのが効率的。

ログインが必要ないサイトへのスキャン

BT5R3 だと /pentest/web/skipfish に実行ファイルがある。ログインなしのWebだと下記のように実行する。

./skipfish -W wordlist -o output_dir start_url

それぞれのオプションは次のとおり。

  • -W: 使用する辞書を指定、同じディレクトリに dictionaries というディレクトリがあり、そこにデフォルトの辞書が置かれているので辞書ファイルがなければそれを指定する、minimal.wl でも Web の構造によってはかなりスキャンに時間がかかるので注意が必要、辞書を使わない場合は null を指定する方法もある。
  • -o: スキャン結果を保存するディレクトリを指定、HTML 形式でかなりの数のファイルが作成されるので、新規でディレクトリを作成したほうがよい。
  • start_url: スキャンを開始するURL
自動学習や辞書など使わずに短時間で指定ページのみスキャンしたい場合は -W で null を指定し、 -LY をつけて実行する。
また、デフォルトの状態では最大同時セッション数が40となっている。リモートから実施する場合などは調整をしたほうがネットワーク負荷が減ってよい。

ログインが必要なサイトのスキャン

ログインが必要な場合のオプションの指定方法は skipfish の wiki が詳しい。

Cookieでセッション管理している場合にはブラウザでログインし、Cookie情報を取得する必要がある。
取得したCookie情報は -C オプションで指定する。

./skipfish -N -C [cookie-name]=[value] -X /login -X /logout -o output-dir https://start_url

-N は新しいクッキーを受け付けないようにするオプション。通常は必要ないがクッキーを変更されたくない場合に使用。
-Xは検査除外設定。login や logout ページを検査するとログアウト処理されてしまい、その後の検査ができなくなるためセッション管理しているサイトの検査では必須。

ポップアップのauthの場合は -A オプションでユーザとパスワードを指定する。

User-Agent のチェックもしている場合は、User-Agent をクッキー情報を取得するブラウザと合わせる必要がある。その場合、-b オプションを使用する。ただし、標準で準備されている User-Agent は IE、Firefox、iphone となるため、Cookie 情報を使用する場合はブラウザを合わせる必要がある。

なお、Auth::setAdvancedSecurity オプションなどが有効になっていると正常に検査できないなど、認証関連では思うように動作しない場合がある。