模糊測試執行時,系統會搜尋異常終止或違反程式的輸入內容 符合條件當模糊工具找到並回報這類測試輸入時,就會是發生錯誤的證據 需要解決的問題
一般來說,首次開發模糊化器時,可能會使用 ffx fuzz
。這通常
就能立即取得結果提交模糊化器後,應用程式會根據
ClusterFuzz 及其找到的所有結果都會以錯誤的形式提交。
處理「ffx fuzz
」的結果
使用 ffx fuzz
執行模糊化作業時,輸出記錄和結果會
該指令會儲存至輸出目錄根據預設,這是目前的工作目錄。不同
位置可設為將 --output
選項傳遞至 attach
。
當機和其他構件的檔案名稱將
type-of-finding.SHA2-hash-of-input
。檔案
內容會是輸入位元組本身
舉例來說,檢查玩具範例所產生的當機事件,看起來可能會像 包括:
ffx fuzz run -o results fuchsia.pkg://fuchsia.com/example-fuzzers#meta/toy_example_arbitrary.cm
cd test_data/fuzzing/example-fuzzers/toy_example_arbitrary/latest
hd results/crash-2fda3f03bb699c8a2151724b64b6e36c3b986aea
00000000 2a 48 49 21 2a 00 08 00 00 00 2a 48 49 00 0a 66 |*HI!*.....*HI..f| 00000010 4a 33 00 0a f9 |J3...| 00000015
重現結果
您可以使用 ffx fuzz try
再次透過這項輸入內容執行模糊工具。例如:
ffx fuzz try fuchsia.pkg://fuchsia.com/example-fuzzers#meta/toy_example_arbitrary.cm crash-2fda3f03bb699c8a2151724b64b6e36c3b986aea
如果結果可以重現,系統就會產生包含堆疊追蹤的符號化記錄。首頁頂端 可能是 libFuzzer 和/或 Sanitizer 所處理的錯誤處理,而 可能是模糊的引擎本身
例如,在下列堆疊追蹤中發生 panic
的相關函式為
_toy_example_arbitrary_lib_rustc_static::toy_example
:
#0 0x000023c56780a61e in _$LT$std..sys_common..backtrace.._print..DisplayBacktrace$u20$as$u20$core..fmt..Display$GT$::fmt::h510ae2e0fe71c88c <>+0x19161e #1 0x000023c56783399c in core::fmt::write::hb61ef49191e76a74 <>+0x1ba99c #2 0x000023c5678009b1 in std::io::Write::write_fmt::h41df81fb2b8460af <>+0x1879b1 #3 0x000023c56780eb92 in std::panicking::default_hook::_$u7b$$u7b$closure$u7d$$u7d$::h4e9a8e3c4f33b3f4 <>+0x195b92 #4 0x000023c56780e87c in std::panicking::default_hook::hd85edcd963c04eae <>+0x19587c #5 0x000023c56780f271 in std::panicking::rust_panic_with_hook::h8960558cc7e69505 <>+0x196271 #6 0x000023c5677973d5 in std::panicking::begin_panic::h97c6d4cd722282c5 /b/s/w/ir/k/rust/src/libstd/panicking.rs:397 <>+0x11e3d5 #7 0x000023c56777f2d0 in _toy_example_arbitrary_lib_rustc_static::toy_example::h573322211ba71c22 ../../out/default/../../examples/fuzzers/rust/src/lib.rs:22 <>+0x1062d0 #8 0x000023c567780a03 in _toy_example_arbitrary_lib_rustc_static::_::toy_example_arbitrary::hc02c288d17b25ac2 ../../out/default/../../examples/fuzzers/rust/src/lib.rs:35 <>+0x107a03 #9 0x000023c56778136c in LLVMFuzzerTestOneInput ../../out/default/../../examples/fuzzers/rust/src/lib.rs:33 <>+0x10836c #10 0x000023c56772ab86 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) <>+0xb1b86 #11 0x000023c567716ae5 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) ../recipe_cleanup/clangshYTOG/llvm_build_dir/tools/clang/stage2-bins/runtimes/runtimes-x86_64-unknown-fuchsia-bins/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:296 <>+0x9dae5 #12 0x000023c56771c535 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) <>+0xa3535 #13 0x000023c5677457e3 in main ../recipe_cleanup/clangshYTOG/llvm_build_dir/tools/clang/stage2-bins/runtimes/runtimes-x86_64-unknown-fuchsia-bins/compiler-rt/lib/fuzzer/FuzzerMain.cpp:19 <>+0xcc7e3 #14 0x000041fad9a9243b in start_main ./../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:112+0x9343b
若是無法重現的結果,你還是可以檢查原始模糊化執行作業的符號化記錄 線索
附加偵錯工具
您也可以在重現模糊結果時附加偵錯工具。根據預設,libFuzzer 處於開啟狀態 Fuchsia 會建立偵錯例外狀況執行緒,並附加至 以便偵測及處理漏洞漏洞每個執行緒只能有一個程序,因此 系統會禁止附加偵錯工具。
如要防止 libfuzzer
建立偵錯例外狀況管道,請將 debug
模糊化選項設為
true。
舉例來說,如要在重現特定測試案例時使用 zxdb,請按照以下步驟操作:
ffx debug connect
[zxdb] attach my-fuzzer
[zxdb] break LLVMFuzzerTestOneInput
接著,在另一個終端機中,使用您的測試案例啟動模糊程式:
ffx fuzz shell
fuzz >> attach fuchsia-pkg://fuchsia.com/my-fuzzers#meta/my-fuzzer.cm
fuzz >> set debug true
fuzz >> try my_input_file
檔案模糊化錯誤
你可能會想立即修正與模糊結果相關的錯誤,尤其是在 顯而易見不論錯誤有多大,請提交錯誤報告!
如要回報錯誤,請使用模糊錯誤範本。這麼做可確保包含
特定標籤,例如 found-by-fuzzing
、libfuzzer
和 Sec-TriageMe
。如此一來
資安團隊查看使用者在哪裡使用模糊程式,並隨時留意他們發生的任何重大問題
找到的資料
如果模糊化架構本身發生問題或缺點,請開啟錯誤或
Security>Fuzzing
元件中的功能要求。
就跟所有潛在的安全性問題一樣,您不必等待分類作業開始修正錯誤! 修正後,在修訂訊息中參照錯誤編號。
處理 ClusterFuzz 的錯誤
ClusterFuzz 找到可重現的模糊結果時,會自動回報錯誤。如果您是 指派您這類錯誤時,請注意下列事項:
詳細報表內含結果相關詳細資料,包括:
- 搜尋結果的類型。
- 是否會影響安全性。
- 瞭解其行為的修訂內容。
- 哪些堆疊框架會用來明確識別當機。
「ReProducer Testcase」會連結至模糊成果。您可以下載這項構件, 使用這個方法來重現模糊結果,如上文所述。
如果提交修正項目,讓模糊工具停止根據輸入內容產生構件,ClusterFuzz 會 自動關閉錯誤