--------------------------------~
| -- 説明 -- |
--------------------------------~
Melkor - ELFファイルフォーマットファザー
Melkorは、J. R. R. トールキンの中つ国伝説集に登場する架空の人物で、最初の暗黒卿であり、サウロンの主でした。彼は『指輪物語』の中で簡単に言及されており、次のように知られています:
「... ヴァラールがメルコールを攻撃する前に、彼は多くのエルフを捕らえており、彼らを拷問して堕落させ、最初のオークを生み出した。」(http://en.wikipedia.org/wiki/Morgoth)
「... メルコールは狡猾で、かつてないほど悪意に満ちていた。エルフたちの至福を見て、自分が滅ぼされたのは彼らのためであったことを思い出し、メルコールは何よりも彼らを堕落させることを望んだ。」(http://lotr.wikia.com/wiki/Melkor)
「オーク...これは、彼らがメルコールによって堕落し、拷問され、切断されたエルフから生み出された日からそうであった。そのエルフたちは、暗黒の力の支配下で他の不自然な忌まわしい生物と交配することを強いられたのかもしれない。」(http://lotr.wikia.com/wiki/Orcs)
彼の名に敬意を表して、このコードはELFを取得し、それを破壊して、好きなだけ多くのオークを生成します。
Melkorはハイブリッドファザー(変異ベースと生成ベース)です。与えられたELFサンプルの既存データを変異させてオーク(不正なELF)を生成します。ただし、値をランダムに変更する(ダムファジング)のではなく、ファジングルール(知識ベース)を使用して特定のメタデータを半有効な値でファズします。Cで書かれたMelkorは、ELFパーサーの機能的(およびセキュリティ上の)バグを見つけるための、非常に直感的で使いやすいファザーです。
ファジングルールは、以下の入力を考慮して設計されました:
ファジングルールの詳細とその他の図については、docs/ ディレクトリを参照してください。
--------------------------------~
| -- 要件 -- |
--------------------------------~
--------------------------------~
| -- コンパイルと使用方法 -- |
--------------------------------~
コンパイルは非常に簡単で、次のように入力するだけです:
$make
これにより、ファザー本体である 'melkor' ファイルと、templates/ フォルダ内のいくつかのELFファイル(通常のELF実行ファイル、いくつかの共有ライブラリ、静的ELF(スタンドアロン実行ファイル)など)が作成されます。
melkorを実行すると、オプションのリストが表示され、非常に直感的で使いやすいことがわかるでしょう。指定する必要があるのは、テンプレートとして使用するELFの名前だけです。templates/ ディレクトリ内の任意のELFを使用できます。
テストしたいソフトウェアの種類に応じて、ファズするメタデータを選択する必要があります。たとえば、OSローダーをテストしたい場合は、プログラムヘッダーテーブル(-P)やダイナミックセクション(-D)のみをファズするのがよいでしょう。一方、アンチウイルスエンジンやデバッガーをテストするには、セクションヘッダーテーブルとELFヘッダーをファズしたいかもしれません。再配置可能ファイル(.o)や共有ライブラリ(.so)でシンボルテーブル(-s)や再配置テーブル(-R)をファズして、コンパイラやリンカーをテストすることもできます。文字列テーブルもファズできます(-Z)。ELFをどれだけひどく破壊したいかは、あなた次第です }:-)
orcs_*/ ディレクトリ内にオークが作成されたら、test_fuzzed.sh を使ってテストする番です。このスクリプトでは、実行するオークが入ったフォルダ名を指定するだけで(OSローダーテスト)、または追加のパラメータを指定して、orcsフォルダ内のすべての不正なELFに対してテストするプログラム(およびそのパラメータ)を指定できます。このスクリプトには、いくつかの環境変数(これもファジングルールとして定義されています)をファズするオプションがあります。スクリプト実行後に #dmesg でログを表示すると、どのプログラム/ライブラリがクラッシュしたか、どこでクラッシュしたかを特定するのに役立ちます。スクリプトをパラメータなしで実行すると、いくつかの例が表示されます。
Windows環境で不正なELF(オーク)を自動的にテストしたい場合は、*NIX用のスクリプトとほぼ同じ機能を持つバッチスクリプト(win_test_fuzzed.bat)が含まれています。
ハッピーファジング!
--------------------------------~
| -- ディレクトリ -- |
--------------------------------~
docs/ ファジングルールの詳細なリストやELFメタデータの依存関係のリストなど、関連ドキュメントが含まれています。
templates/ melkorと同時にコンパイルされたいくつかのELFファイルが含まれており、melkorに供給するために使用できます: foo.c -> foo.o (ELFオブジェクト)-> foo (ELF実行ファイル) foo.c -> foo_static (ELF静的実行ファイル) libfoo.c -> libfoo.so (ELF共有オブジェクト) およびその他。詳細については "$make templ" と入力すると、他にどのようなELFテンプレートが作成されるかがわかります。
orcs_*/ ファジングプロセス後に作成された不正なELFファイル(指定されたテンプレートファイルに基づく)が含まれます。
src/ Melkorのソースコード。
--------------------------------~
| -- バグ -- |
--------------------------------~
BUGS.txtをお読みください
--------------------------------~
| -- 連絡先 -- |
--------------------------------~
名前: Alejandro Hernandez H. [nitr0us] Twitter: http://twitter.com/nitr0usmx メール: nitrousenador [at] gmail [dot] com ウェブサイト: http://www.brainoverflow.org ブログ: http://chatsubo-labs.blogspot.com
--------------------------------~
| -- 追悼 -- |
--------------------------------~
このプロジェクトは、私の親友の一人、Aaron Albaの記憶に捧げます。
--------------------------------~
| -- ライセンス -- |
--------------------------------~
Melkor - ELFファイルフォーマットファザー Copyright (C) 2014 Alejandro Hernandez H. (nitr0us)
このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行されたGNU一般公衆利用許諾書(バージョン3、または(あなたの選択で)それ以降のバージョン)の定める条件の下で再頒布し、および/または改変することができます。
このプログラムは有用であることを願って頒布されますが、全くの無保証です。商業可能性の保証や特定目的への適合性は、言外に示されたものも含め、全くの無保証です。詳しくはGNU一般公衆利用許諾書をご覧ください。
あなたはこのプログラムと共に、GNU一般公衆利用許諾書の写しを受け取っているはずです。もし受け取っていない場合は、http://www.gnu.org/licenses/ をご覧ください。