
私たちが使用したいNetwork Protocol Fuzzer
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Network Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██ by Mario Rivas
このアイデアは、私たちが使いたいと思うネットワークプロトコルファザーになることです。
このツールの目的は、ネットワークプロトコルのファジングプロセス全体を支援し、通信の定義を可能にし、サービスクラッシュの「容疑者」の特定を支援すること、そしてさらに多くのことを行うことです。
[2019年12月16日]
virtualenv venv -p python3
source venv/bin/activate
pip install -r requirements.txt
usage: python -m fuzzowski [-h] [-p {tcp,udp,ssl}] [-b BIND] [-st SEND_TIMEOUT]
[-rt RECV_TIMEOUT] [--sleep-time SLEEP_TIME] [-nc] [-tn]
[-nr] [-nrf] [-cr]
[--threshold-request CRASH_THRESHOLD_REQUEST]
[--threshold-element CRASH_THRESHOLD_ELEMENT]
[--ignore-aborted] [--ignore-reset] [--error-fuzz-issues]
[-c CALLBACK | --file FILENAME] -f
{cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
[-r FUZZ_REQUESTS [FUZZ_REQUESTS ...]]
[--restart module_name [args ...]]
[--restart-sleep RESTART_SLEEP_TIME]
[--monitors {IPPMon} [{IPPMon} ...]] [--path PATH]
[--document_url DOCUMENT_URL]
host port
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Network Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██
positional arguments:
host 宛先ホスト
port 宛先ポート
optional arguments:
-h, --help このヘルプメッセージを表示して終了
Connection Options:
-p {tcp,udp,ssl}, --protocol {tcp,udp,ssl}
プロトコル(デフォルト tcp)
-b BIND, --bind BIND バインドするポート
-st SEND_TIMEOUT, --send_timeout SEND_TIMEOUT
send() タイムアウトを設定(デフォルト 5秒)
-rt RECV_TIMEOUT, --recv_timeout RECV_TIMEOUT
recv() タイムアウトを設定(デフォルト 5秒)
--sleep-time SLEEP_TIME
各テスト間のスリープ時間(デフォルト 0)
-nc, --new-conns 同じテストの各パケットの後に新しい接続を開く
-tn, --transmit-next-node
ファズされたノードのグラフ内の次のノードを送信
RECV() Options:
-nr, --no-recv 各送信後にソケットでrecv()を行わない
-nrf, --no-recv-fuzz ファズリクエスト送信後にソケットでrecv()を行わない
-cr, --check-recv recv()でデータが受信されたか確認
Crashes Options:
--threshold-request CRASH_THRESHOLD_REQUEST
リクエスト内で許可されるクラッシュ数を設定(スキップする前に)(デフォルト 9999)
--threshold-element CRASH_THRESHOLD_ELEMENT
プリミティブ内で許可されるクラッシュ数を設定(スキップする前に)(デフォルト 3)
--ignore-aborted ECONNABORTEDエラーを無視
--ignore-reset ECONNRESETエラーを無視
--error-fuzz-issues ファズノードで接続問題がある場合にエラーとしてログ
Fuzz Options:
-c CALLBACK, --callback CALLBACK
コールバックアドレスを設定(通常の変異の代わりにコールバックジェネレータでファズ)
--file FILENAME ファズ変異にファイルの内容を使用
Fuzzers:
-f {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}, --fuzz {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
利用可能なプロトコル
-r FUZZ_REQUESTS [FUZZ_REQUESTS ...], --requests FUZZ_REQUESTS [FUZZ_REQUESTS ...]
ファズするプロトコルのリクエスト、デフォルトはすべて
dhcp: [opt82]
ipp: [http_headers, get_printer_attribs, print_uri_message, send_uri, get_jobs, get_job_attribs]
lpd: [long_queue, short_queue, ctrl_file, data_file, remove_job]
telnet_cli: [commands]
tftp: [read]
raw: ['\x01string\n' '\x02request2\x00' ...]
Restart options:
--restart module_name [args ...]
リスタートモジュール:
run: '<実行ファイル> [<引数> ...]'(コマンドと引数を引用符で囲んで1つの引数として渡す)
smartplug: スマートプラグをオフにしてオンにする
teckin: <PLUG_IP>
--restart-sleep RESTART_SLEEP_TIME
クラッシュ後に続行するまでのスリープ秒数を設定(デフォルト 5)
Monitor options:
--monitors {IPPMon} [{IPPMon} ...], -m {IPPMon} [{IPPMon} ...]
モニターモジュール:
IPPMon: ターゲットにget-attributes IPPメッセージを送信
Other Options:
--path PATH HTTPベースのプロトコルをファズするときのパスを設定(デフォルト /)
--document_url DOCUMENT_URL
print_uriのドキュメントURLを設定
get_printer_attribs IPP操作をデフォルトオプションでファズ:
python -m fuzzowski printer1 631 -f ipp -r get_printer_attribs --restart smartplug
IPPのraw機能を使ってfingerプロトコルをファズ:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n'
IPPのraw機能を使ってfingerプロトコルをファズ。ただし、事前定義された変異の代わりにファイルを使用:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n' --file 'path/to/my/fuzzlist'
ステートフルファザーの例:s_responseとs_variableを使用して、リクエストのファズに必要なトークンを取得する方法を示します。この例はmock http server test caseに基づいています。