「たのしいバイナリの歩き方」勉強メモ#5
ツールを駆使してより深い世界へ
2014/09/15 : CTF
「たのしいバイナリの歩き方」の勉強メモ第4弾です。
実行環境は、Windows7(64bit版)です。
5.1 Metasploit Framework で脆弱性を検証/調査する
Metasploit Framework
http://www.metasploit.com/
Exploit コードの作成、実行を行うためのフレームワークで、Metasploit と略されることもある。
Windows 版と Linux 版が提供されており、脆弱性の検証/調査に使用する。
「実践 Metasploit ペネトレーションテストによる脆弱性評価」
http://www.oreilly.co.jp/books/9784873115382/
脆弱性情報
http://cve.mitre.org/find/index.html
脆弱性情報は、CVE( Common Vulnerabilities and Exposures )と呼ばれるデータベースで管理されている。
ぞれぞれの脆弱性は、CVE-XXXX-YYYY(XXXX は西暦、YYYY は番号)という識別コードを持つ。
コラム:shellcode をもっと勉強したいならば
shellcode の作成には、Metasploit に付属する msfpayload というツールを使う。
metasploit\apps\pro\msf3\msfpayload
File→New Tab→System Console
ROP は、その名のとおり、ret 命令で終わるコードの断片をつなぎ合わせて、実行させたい処理を実現させる。
スタックに実行したいコードのアドレスを積み上げておき、それに従って処理がジャンプしていくように調整する。
要するに、ret を jmp の代わりに使う。
5.2 EMET で ROP 対策の仕組みをのぞく
EMET : Enhanced Mitigation Experience Toolkit
マイクロソフトが無償で提供する脆弱性緩和ツール。
バージョン 3.0 までは「既存のセキュリティ機能を強化する」という面が強かったのに対し、3.5 からは、それに加えて、あらたに ROP 対策(Anti-ROP)を実装した。
EMET に搭載された Anti-ROP は、マイクロソフト社が2012年に開催したコンピュータ保護手法のアイデアを競うコンテスト「Bluehat Prize」で入賞したもの。
Bluehat Prize
http://www.microsoft.com/security/bluehatprize/
各入賞者の案(2012)
kBouncer: Efficient and Transparent ROP Mitigation
http://www.cs.columbia.edu/~vpappas/papers/kbouncer.pdf
ROPGuard - runtime prevension of return-oriented programming attacks
http://ifsec.blogspot.jp/2012/08/my-bluehat-prize-entry-ropguard-runtime.html
BlueHat Prize Submission:/ROP
http://www.vdalabs.com/tools/DeMott_BlueHat_Submission.pdf
ROPGuard
「RETN の先が CALL であるかどうか(CALL-RETN の関係性)を調べる」
→Return-into-libc:RETN を使って関数の先頭へジャンプ
ROP:RETN を使う攻撃手法が多いため、「RETN で戻った先の命令が CALL の次の命令ではない」
ROPGuard-Cheap
https://github.com/kenjiaiko/ropguard_cheap
CALL-RETN の正当性チェック
CALL は5バイト以外にもあるので、サイズや値の異なる CALL を網羅しなければならない。
現在いるアドレスが、本当に CALL の先にあるか。
CALL EAX なら、EAX の値と EIP の値が同じになっているか。等々
スタックの正当性チェック
スタックの上限/下限値を取得し、esp、ebp レジスタの値がその範囲に入っているかどうかを調べる。
スタックは低位方向に成長するため、ebp は必ず esp よりあと(高位)にあるはず。
スタックには、関数からの戻り先が置かれている。ebp をたどることで、戻り先をトレースできる(スタックトレース)。
スタックトレースによって、各 ebp がスタックの範囲に入っているかどうかを確認できる。
5.3 REMnux でマルウェアを解析する
REMnux
マルウェア解析用 OS。Ubuntu をベースに作られていて、VMware などの仮想環境上で使うことを目的として提供されている。
http://zeltser.com/remnux/
http://sourceforge.net/projects/remnux/files/version3/
マルウェアのパターンデータベースを更新する
root で、freshclam コマンドを実行する。
マルウェア検知のためのディレクトリスキャンは、clamscan コマンドで行う。
REMnux はシグネチャをベースにしているため、新種のマルウェアには対応できないが、マルウェアをかんたんに検知できるのが魅力である。
5.4 ClamAV でマルウェアや Exploit を検知する
GPL のアンチウイルスソフト ClamAV を使って、マルウェアや Exploit を検知することもできる。
ClamAV
http://www.clamav.net/
公開されているパターンファイルは、.cvd という拡張子になっている。
main.cvd : 検知の基本となるデータベース
daily.cvd : 最近追加されたシグネチャ用データベース。安定したら、main.cvd に移行される。
マルウェアの検知方法
・ファイル全体のハッシュ値を使う
・ファイル内にある特定のデータ列を使う
・誤検知を避けるために一部ホワイトリストで対応する
パターンファイルに追加するリストフォーマットの詳細
http://www.clamav.net/doc/latest/signatures.pdf
.cvd ファイルは、データベースを tar.gz で圧縮したファイルで、先頭の 512 バイトを削除して tar コマンドで展開できる。
展開したファイルは、全てテキスト形式で、ファイルのハッシュ値や特定のデータ列、マルウェアの名前等が書かれている。
trid コマンド:バイナリファイルの詳細を調べる。
pescanner コマンド:そのファイルのメタデータから、使われているパッカーやマルウェアらしいものを検出してくれる。
5.5 Zero Wine Tryouts でマルウェアを解析する
Zero Wine Tryouts
http://zerowine-tryout.sourceforge.net/
オープンソースの自動マルウェア解析ツールで、ファイルをアップロードするだけで解析結果を表示する。
主に動的解析による結果を出す点で、REMnux と異なる。
オープンソースのエミュレータである QEMU 上で動作する。
任意の EXE ファイルや PDF ファイルを渡すと、それをサンドボックス(保護領域)で実行し、その実行ログを出力する。
プログラムは OS の実行イメージとして配布されており、QEMU 上で動作させる。
実行後、自動で HTTP サーバーが立ち上がり、そこから任意の EXE ファイルをアップロードすることで、マルウェアを解析できる。
内部では、Wine を利用したサンドボックスが用意されている。
Wine
http://www.winehq.org/
※ページランク7で、はてぶもついているがアクセスできなかった。(2014/09/22)
Linux、BSD、Solaris、OS X といった非 Windows 環境で Windows プログラム( PE ファイル)を実行するライブラリ。
その環境内でマルウェアを実行し、ログをレポート化する。
REMnux とは異なり、実行ログをレポート化してくれるため、性的解析ではわかりにくい部分に手が届くが、解析にはかなりの時間を要したり、解析結果の信頼性に疑問があったりと、まだ実用レベルに達していないとも言える。
コラム:自分でツールを開発してみよう
セキィリティツールを開発するためには、セキュリティの知識とプログラミング技術の両方が必要。
5.6 人の手による解析を極力減らすには~ヒューリスティック技術
アンチウィルスソフトを支えてきたブラックリスト方式:
人が解析し、パターンファイルを更新し、そのデータベースに該当するものを検知するマルウェア検知。
→発見されるマルウェアが増えるほど、人の手による解析が間に合わなくなる、という欠点。
→可能な限りマルウェア解析を自動化し、人の手による作業を極力減らせても、パターンファイルが膨大な量になることは避けられない。
マルウェアの「ふるまい検知」=ヒューリスティック技術
あらかじめマルウェアの動作の特徴を調べておき、それに当てはまったらマルウェアであると判断する。
ヒューリスティック( heuristic )
必ず正しい答えを導けるわけではないが、ある程度のレベルで正解に近い解を得ることが出来る方法である。
また、答えの精度は保証されないが、回答に至るまでの時間が少なくて済む。
主に計算機科学と心理学の世界で使われる語。
どちらの分野での用法も根本的な意味は一緒だが、指示対象が違う。
計算機科学ではプログラミングの方法を、心理学では人間の思考方法を指して使われる。
論理学では仮説形成法と呼ばれている。
(
Wikipedia より引用)
Adobe Malware Classifier
http://sourceforge.net/projects/malclassifier.adobe/
2012年4月に Adobe 社が公開したオープンソースのマルウェア検知エンジン
Windows の実行ファイル( PE フォーマット)に対してマルウェア検知を行うもので、Python で書かれている。
4つの検知アルゴリズムを持ち、全てがマルウェアと判断したら「1(マルウェア)」、全てがマルウェアでないと判断したら「0(通常ファイル)」、判断がばらけたら「UNKNOWN」を表示する。
検知精度:マルウェアをマルウェアと判断できた率=90%強
通常ファイルを通常ファイルと判断できた率=85%弱
実行時に -v オプションをつけると、評価時に使う値が表示される。
PE ヘッダの値を元にマルウェアかどうかを識別しており、各アルゴリズムが算出した検知結果を元に、最終的な結論を表示する。
ヒューリスティックなマルウェアの検知は、ブラックリスト方式と異なり、誤検知がとても多く、今なお有効な検知手法は確立されていない。
記述に際しては、細心の注意をしたつもりですが、間違いやご指摘がありましたら、こちらからお知らせいただけると幸いです。
→「リバースエンジニアリングバイブル」勉強メモ#1
←「たのしいバイナリの歩き方」勉強メモ#4
« 戻る