wivern ロゴ

サイバーセキュリティ研究所

サイバーセキュリティを中心に、軍事、防犯、サーバーの管理と監視、その他、最新技術を研究しています。


「たのしいバイナリの歩き方」勉強メモ#5

ツールを駆使してより深い世界へ

「たのしいバイナリの歩き方」#5

たのしいバイナリの歩き方」の勉強メモ第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 は番号)という識別コードを持つ。

年間1万件を超える脆弱性情報に対応するために、CVE 番号の体系が変更されました。
「1万件以上に対応するためCVE番号の体系を変更、対応に注意を(JPCERT/CC)」
http://scan.netsecurity.ne.jp/article/2014/09/24/34878.html
「脆弱性を識別するCVE番号の新体系による採番のお知らせ」
http://www.jpcert.or.jp/pr/2014/pr140006.html

コラム: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)を実装した。

最新版は、5.0 になっていました。
Announcing EMET 5.0
http://blogs.technet.com/b/srd/archive/2014/07/31/announcing-emet-v5.aspx

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/

最新版は、version 5 になっていました。
http://sourceforge.net/projects/remnux/files/

マルウェアのパターンデータベースを更新する
 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 コマンド:バイナリファイルの詳細を調べる。

Marco Pontello's Home Page | TrID - File Identifier
http://mark0.net/soft-trid-e.html

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


« 戻る