2000P's Blog

最初のページ

macosのカーネルファザー

著者 gardner 時間 2020-04-05
all

MacOS 10.13カーネルの複数の異なるメソッドを使用してfuzzer。

システムコールfuzzing

BSD ( syscalls )とマッハ(マッキントトラップ)システムのディスパッチテーブルはbughuntstrap syscalls . hファイル内で定義されます。両方のシステムコールとライブラリコールのサンプルの選択は、追加の呼び出しを実装する方法を示すために提供されている。カバレッジを増やすために提供されたサンプルコールの上にこれらの追加のシステムコールとライブラリコールを実装する必要があります。

MacOSホストの設定

ホストマシン上のパニックサーバーを設定するには、hostpers setup / configディレクトリを実行します。

VMRound Manager . pyスクリプトに使用するJSON設定ファイルを作成します。デフォルトの設定例としてhostranent setup / config . jsonがあります。

VMマネージャを起動するための指示に従ってください。

MacOSの設定

最新のMacOSをVMに展開します。

最新のVMwareツールをインストールします。グループ名= vmtools 1010 & productid = 491。書き込み時にはvmware - tools - 10.1.0 - Other - 4449150です。

初期のVMにワークシートのセットアップ/ワークロードsetup . pyをコピーし、次のように実行します。

Pythonの場合、setup . py - p < panicount servertle hosttle address >

python worker_setup.py -p <panic_server_host_address>

このステップは、SIPを無効にし、NVRAMブートフラグを正しく設定するために、複数のリブートを必要とします。

python clone_vmx.py --base_vmx "/Users/mwr/Documents/Virtual Machines.localized/macOS 10.12.vmwarevm/macOS 10.12.vmx" --clones 1

ここで-- base vmxはクローンのテンプレートとして使用するVMXファイルであり、--クローンは作るべきクローンの数です。注意: VMは電源オフ状態とprepdになります。

このスクリプトはVMXファイルのリストを生成します。

バックグラウンドに戻るには、設定ファイルのprepdount snapshotstrap nameと同じ名前と呼ばれる各VMのスナップショットを確認してください。これは将来の段階で自動化される。

確実にVMXLINEファイルのパスは、すべてのVMXファイルをファズ実行によって使用されるリストに更新されます。

用途

スタンドアロンの実行

バイナリスタンドアローンを実行する2つの方法があります。最初の方法はリモートネットワークのログを使用します。

/ osxfuzz - s 1 - l " 192.168.0.1 " - p 1337 - b 1 , 2

./OSXFuzz -s 1 -l "192.168.0.1" -p 1337 -b 1,2

ここで- sはシード値です。これを1に設定すると、prngは新しいランダムシードを生成します。さもなければ、シード値が使用されます。

- lはリモートロガーIPアドレスです。- pはリモートロガーポートです。- bはブラックリストのsyscall番号です。

また、ディスクベースのログでfuzzerを実行することも可能です。これは次のようにします。

/ osxfuzz - s 1 - d - - b 1 , 2

./OSXFuzz -s 1 -d - -b 1,2

- dはfuzzerログファイルが格納されるディレクトリです。-が渡されると、カレントワーキングディレクトリがこれらのログファイルを作成するために使用されます。

- Dを使用して、すべてのログ文を標準出力に出力するデバッグモードを有効にします。

VMマネージャの起動

VMマネージャとリモートロガーには、設定されたJSONがVMRIGHT Manager . pyに設定されます。これが渡されなかった場合、設定はデフォルトでhostount setup / config . jsonになります。

--config <filename>

構成の一例は次の通りである。

設定は、ホストの設定(VMwareを実行しているホストシステム)とVMのゲストで使用されるゲストの設定に分割されます。

ホストの設定は以下の通りです。

VMRunRageパスはVMware Automation用のVMRRUバイナリの場所です。

BughuntRank startstrap srcはゲストにコピーされるstartstrap bughunt . pyスクリプトのホスト上の場所です。

BughuntSense BillaryRank srcはゲストにコピーされるホスト上のosxfuzzバイナリの場所です。

CRashLyパスは、ローカルのクラッシュデータを格納する場所です。

PanicMount Pathはホストに設定されたカーネルパニックログを格納するための場所です。

LoggerHand addrはリモートログサーバが待機するアドレスです。これはゲストVMSに露出する必要がある。

LoggerLowポートはリモートログサーバが待機するポートです。

VMManagerRank ADDRはVMマネージャHTTPサーバが走っているゲストVMSに公開されるホストIPアドレスです。

vmmangerchen portはVMマネージャが待機するポートです。現在、VMマネージャはすべてのインターフェースに結合します。これもゲストVMSに露出する必要がある。

VMXRUNEファイルは、VMごとに使用されるVMXファイルへのパスの配列です。現在、この配列は手動でfuzzingプロセスに新しいVMを追加するように設定する必要があります。

prepdount snapshotstrap nameは、VMが完全に設定されているときのスナップショット名です。このコードは、すべてのVMSが同じ名前セットアップでスナップショットを持っていると仮定します。

ゲスト設定は以下の通りです。

LaunchHeight PATHはゲストVM内で実行され、展開とfuzzingプロセスを開始するstartstrap bughunt . pyスクリプトの場所です。現在、これはゲストVMとパスにコピーされます。

VMRIGHTユーザ名はゲスト仮想マシンのユーザ名です。すべてのVMSは、現在同じユーザ名/パスワード組み合わせを使用して構成されていると仮定します。VMパスワードは、実行時に読み込まれます。

VMマネージャが設定されている場合、hostRound setup / vmCount Monitor . pyが起動し、サーバのリスニングを開始します。

fuzzing runの起動

VMマネージャが稼働していて、全てのVMSが稼働していて、準備ができている状態では、HOSTRUNEセットアップ/ starttle VMS . pyを実行することで、fuzzing実行を開始できます。これは各ノードのfuzzerを起動し、VMマネージャとloggers呼び出しでVMSチェックインを見るべきです。

ライブラリの注入

設定ファイルがGuestRange設定の中でDylibMail Pathオプションを含んでいるなら、これはホストに配備されて、Dylibインターフェースベースのfuzzingのためのfuzzerスクリプトによって使われることができます。

クラッシュ検出と再生

クラッシュ検出は現在パニックサーバーとPanicMonitor Pythonクラスを使用して行われます。データベース管理コードが作成されるまで、クラッシュはローカルに保存されています。

クラッシュを再現するために、reproc . pyスクリプトをコンパイルするには、正しい形式にログを変換するランです。また、reproテストケースをバイナリに再構築するために使用できるMakefileも生成されます。