BugBane
ΠΠ°Π±ΠΎΡ ΡΡΠΈΠ»ΠΈΡ Π΄Π»Ρ Π°ΡΠ΄ΠΈΡΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ:
- BugBane ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΡΠ°ΠΏΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄Π°. ΠΠ΅Π· BugBane ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½: ΡΠ°ΡΡΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΎΠΏΠΈΡΠ°Π½Π° Π² Makefile, ΡΠ°ΡΡΡ - Π² shell-ΡΠΊΡΠΈΠΏΡΠ°Ρ , ΡΡΠΎ-ΡΠΎ - Π² ΡΠ°ΠΉΠ»Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ CI/CD, Π° ΡΡΠΎ-ΡΠΎ - Π² Dockerfile. ΠΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
- BugBane - Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΡΠΎΡΠΌΠ°ΡΠ° ΠΎΡΡΡΡΠ½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
- BugBane - ΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ.
- BugBane ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΎΡΡΡΡΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ: Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΡΠ°Π±ΠΎΡΡ, ΡΠΊΡΠΈΠ½ΡΠΎΡΠΎΠ² ΠΈ ΠΎΡΡΡΡΠΎΠ². ΠΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ ΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, ΡΡΠΎ Π·Π°ΡΠΈΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΡΡΡΠ½ΠΎΠΌ Π²Π²ΠΎΠ΄Π΅ ΠΈ ΡΠ±ΠΎΡΠ΅ ΡΡΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ.
- BugBane ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΎΡΠΊΡΡΡΡΠΌ Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ Ρ ΡΡΡΡΠΎΠΌ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΠΉ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ BugBane Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ:
- Π‘Π±ΠΎΡΠΊΠ° ΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Ρ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠ°ΠΌΠΈ ΠΈ ΡΠ±ΠΎΡΠΎΠΌ ΠΏΠΎΠΊΡΡΡΠΈΡ: AFL++, libFuzzer.
- Π€Π°Π·Π·ΠΈΠ½Π³ ΡΠ±ΠΎΡΠΎΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ AFL++, libFuzzer, dvyukov/go-fuzz Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠ΄Π΅Ρ Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
- Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ (ΠΈΠΌΠΏΠΎΡΡ ΠΈ ΡΠΊΡΠΏΠΎΡΡ) ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠ΅ΠΉ ΡΠ°Π·Π·Π΅ΡΠ° ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ (ΠΏΠ°ΠΏΠΊΠΎΠΉ). ΠΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΡΡΠ΅ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ² (Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ°Π·Π·Π΅ΡΠΎΠ²) ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·Π·Π΅ΡΠ° (ΠΏΠΎΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ AFL++).
- Π‘Π±ΠΎΡ ΠΏΠΎΠΊΡΡΡΠΈΡ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅ΠΌΠΏΠ»Π°Ρ , ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ HTML-ΠΎΡΡΡΡΠΎΠ² ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ (lcov, lcov-llvm, go-tool-cover).
- ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ ΠΈ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΠΉ, ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΡ ΡΠ°Π·Π·Π΅ΡΠΎΠΌ. ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ (ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π² ΡΠ°ΠΉΠ»Π΅).
- ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΡ Π±Π°Π³Π°Ρ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠΌΠΈ: Defect Dojo.
- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΊΡΠΈΠ½ΡΠΎΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·Π·Π΅ΡΠ° (tmux + ansifilter + pango-view) ΠΈ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΡΡΡΡΠ° ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (WeasyPrint, Selenium).
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΎΡΡΡΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Jinja2.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΠΠ‘
Python >= 3.6
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ BugBane:
bb-build: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°Π·Π·Π΅ΡΠ° Π² PATH (afl-g++-fast, clang, ...).
bb-corpus: ΡΡΠΈΠ»ΠΈΡΠ° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΡΠ°Π·Π·Π΅ΡΠΎΠΌ Π² PATH (afl-cmin, ...).
bb-fuzz: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠ°Π·Π·Π΅Ρ Π² PATH (afl-fuzz, go-fuzz, ...).
bb-coverage: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠ±ΠΎΡΠ° ΠΏΠΎΠΊΡΡΡΠΈΡ Π² PATH (lcov, genhtml, go, ...).
bb-reproduce: ΡΡΠΈΠ»ΠΈΡΠ° timeout
, ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ gdb
.
bb-send: python-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° defectdojo_api
.
bb-screenshot, bb-report: python-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Jinja2
, WeasyPrint
, Selenium
, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ansifilter
ΠΈ pango-view
Π² PATH, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ geckodriver
Π² PATH ΠΈ Π±ΡΠ°ΡΠ·Π΅Ρ Firefox (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Selenium), ΡΡΠΈΡΡΡ mono
(ΠΌΠΎΠ³ΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π±Π°Π·ΠΎΠ²ΡΡ
Π΄ΠΎΠΊΠ΅Ρ-ΠΎΠ±ΡΠ°Π·Π°Ρ
).
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ:
- Python-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ;
- Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Selenium + geckodriver + Firefox Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΡΡΡΡΠΎΠ² ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΡΡΠΈΠ»ΠΈΡΠΎΠΉ
go tool cover
, Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΡΡΡΠΎΠ² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ WeasyPrint; ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΡ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Selenium, Π²ΡΠ³Π»ΡΠ΄ΡΡ Π»ΡΡΡΠ΅. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ: ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ ~700 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ; - Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΎΡΡΡΡΠΎΠ² Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΎΠ±ΡΠ°Π·Π΅ Docker Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡ ΡΠΈΠΏΠ° less ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ UTF-8 ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ LANG.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pip:
git clone https://github.com/gardatech/bugbane
cd bugbane
pip install .[all]
ΠΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ²:
pytest
ΠΠΎΡΡΡΠΏΠ½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Python-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ:
ΠΡΡΠΏΠΏΠ° pip install | Π€Π°Π·Π·ΠΈΠ½Π³* | ΠΠ°Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π³ΠΎΠ² Π² Defect Dojo | ΠΡΡΡΡΡ ΠΈ ΡΠΊΡΠΈΠ½ΡΠΎΡΡ | Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ BugBane | Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° BugBane |
---|---|---|---|---|---|
- | + | - | - | - | - |
dd | + | + | - | - | - |
reporting | + | - | + | - | - |
test | + | - | - | + | - |
all | + | + | + | + | - |
dev | + | + | + | + | + |
* ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ±ΠΎΡΠΎΠΊ, ΡΠ°Π·Π·ΠΈΠ½Π³, ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅ΠΌΠΏΠ»Π°ΠΌΠΈ, ΡΠ±ΠΎΡ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π³ΠΎΠ².
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ Π½Π° ΡΠ°Π·Π½ΡΠ΅ Ρ ΠΎΡΡΡ worker ΠΈ reporter:
pip install . # worker
pip install .[dd,reporting] # reporter
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: Π½Π° Ρ ΠΎΡΡΠ΅ worker Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΡΡΡΡΠΎΠ², Π½Π° Ρ ΠΎΡΡΠ΅ reporter Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°Π·Π·Π΅ΡΠΎΠ².
ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
pip uninstall bugbane
ΠΠ°ΠΏΡΡΠΊ
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ BugBane Π² ΡΡΠ΅Π΄Π΅ Docker.
ΠΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
- bb-build
- bb-corpus (import)
- bb-fuzz
- bb-coverage
- bb-reproduce
- bb-corpus (export)
- bb-send
- bb-report
ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ°ΠΏ β1 ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ (ΡΠ±ΠΎΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ), Π° ΡΡΠ°ΠΏΡ 7 ΠΈ 8 ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ°Π·Π΅ Docker ΠΈΠ»ΠΈ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² BugBane ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ bugbane.json: ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π΄ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π²ΡΠ΅Ρ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² BugBane:
{
"fuzzing": {
"os_name": "Arch Linux",
"os_version": "Rolling",
"product_name": "RE2",
"product_version": "2022-02-01",
"module_name": "BugBane RE2 Example",
"application_name": "re2",
"is_library": true,
"is_open_source": true,
"language": [
"C++"
],
"parse_format": [
"RegExp"
],
"tested_source_file": "re2_fuzzer.cc",
"tested_source_function": "TestOneInput",
"build_cmd": "./build.sh",
"build_root": "./build",
"tested_binary_path": "$BUILD_ROOT/re2_fuzzer",
"sanitizers": [
"ASAN", "UBSAN"
],
"builder_type": "AFL++LLVM",
"fuzzer_type": "AFL++",
"run_args": null,
"run_env": null,
"fuzz_cores": 16
}
}
bb-build
ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ±ΠΎΡΠΊΡ C/C++ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΡΠ°Π·Π·Π΅ΡΠ°.
ΠΠ° Π²Ρ
ΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π°ΡΡΡΡ:
- ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΠ΅
- Π€Π°ΠΉΠ» Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ bugbane.json
Π ΡΠ°ΠΉΠ»Π΅ bugbane.json Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: builder_type
, build_cmd
, build_root
, sanitizers
.
ΠΠΎΠΌΠ°Π½Π΄Π°, ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ build_cmd
, Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡΠΈΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ CC, CXX, CFLAGS, CXXFLAGS ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ±ΠΎΡΠΊΡ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ build_cmd
Π² ΠΏΠ°ΠΏΠΊΠ΅ build_root
Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ±ΠΎΡΠΊΠ° ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ sanitizers
Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠ², Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ±ΠΎΡΠΎΠΊ (Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠ°ΠΌΠΈ + Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΏΠΎΠΊΡΡΡΠΈΡ + Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π°) ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ build_root
Π² ΠΏΠ°ΠΏΠΊΡ, ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ° -o
. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΡΠ°ΠΉΠ»Π΅ bugbane.json (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, sanitizers
- Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠ², Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ
ΡΠ΄Π°Π»ΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ±ΠΎΡΠΊΡ).
ΠΡΠΈΠΌΠ΅Ρ ΡΠΊΡΠΈΠΏΡΠ°, ΠΏΡΡΡ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠ±ΠΎΡΠΊΠΈ build_cmd
:
#!/bin/bash
export CXX="${CXX:=afl-clang-fast++}" &&
mkdir -p build &&
make clean &&
make -j obj/libre2.a &&
$CXX $CXXFLAGS --std=c++11 -I. re2/fuzzing/re2_fuzzer.cc /AFLplusplus/libAFLDriver.a obj/libre2.a -lpthread -o build/re2_fuzzer
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ»Π°Π³Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ·Π²Π½Π΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ±ΠΎΡΠΊΠΈ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠ°ΠΌΠΈ, Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΏΠΎΠΊΡΡΡΠΈΡ, Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΈ Ρ.Π΄.
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°:
bb-build -i /src -o /fuzz
ΠΡΠΈ ΡΡΠΎΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ /src Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ°ΠΉΠ» bugbane.json.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π² ΠΏΡΡΠΈ /fuzz ΠΏΠΎΡΠ²ΡΡΡΡ ΠΏΠ°ΠΏΠΊΠΈ Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: /fuzz/basic, /fuzz/asan, /fuzz/coverage. Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΠ°ΠΏΠΊΠ΅ /fuzz ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡΡ ΠΆΡΡΠ½Π°Π» Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ
ΡΠ±ΠΎΡΠΎΠΊ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ Π·Π°ΠΏΡΡΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠ±ΠΎΡΠΎΠΊ ΠΈ ΠΏΠ°ΠΏΠΎΠΊ
ΠΠΌΡ ΠΏΠ°ΠΏΠΊΠΈ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | builder_type |
---|---|---|
basic | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π°. ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°: Π±Π΅Π· ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠ², Π±Π΅Π· ΠΏΠΎΠΊΡΡΡΠΈΡ | AFL++GCC, AFL++GCC-PLUGIN, AFL++LLVM, AFL++LLVM-LTO, libFuzzer |
gofuzz | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ dvyukov/go-fuzz (zip-Π°ΡΡ ΠΈΠ²). ΠΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ bb-build, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ | - |
laf | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π°, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ AFL_LLVM_LAF_ALL | AFL++LLVM, AFL++LLVM-LTO |
cmplog | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π°, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ AFL_USE_CMPLOG | AFL++LLVM, AFL++LLVM-LTO |
asan | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Ρ Π°Π΄ΡΠ΅ΡΠ½ΡΠΌ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠΌ (Address Sanitizer) | AFL++GCC, AFL++GCC-PLUGIN, AFL++LLVM, AFL++LLVM-LTO, libFuzzer |
ubsan | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Ρ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠΌ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ (Undefined Behavior Sanitizer) | AFL++GCC, AFL++GCC-PLUGIN, AFL++LLVM, AFL++LLVM-LTO, libFuzzer |
cfisan | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Ρ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠΌ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Control Flow Integrity Sanitizer) | AFL++GCC, AFL++GCC-PLUGIN, AFL++LLVM, AFL++LLVM-LTO, libFuzzer |
tsan * | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Ρ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Thread Sanitizer) | AFL++GCC, AFL++GCC-PLUGIN, AFL++LLVM, AFL++LLVM-LTO, libFuzzer |
lsan * | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Ρ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠΌ ΡΡΠ΅ΡΠ΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ (Leak Sanitizer). ΠΡΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΡΠΌ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠΌ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ | AFL++GCC, AFL++GCC-PLUGIN, AFL++LLVM, AFL++LLVM-LTO, libFuzzer |
msan * | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Ρ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠΌ ΠΏΠ°ΠΌΡΡΠΈ (Memory Sanitizer) | AFL++GCC, AFL++GCC-PLUGIN, AFL++LLVM, AFL++LLVM-LTO, libFuzzer |
coverage | Π‘Π±ΠΎΡΠΊΠ° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ | AFL++GCC, AFL++GCC-PLUGIN, AFL++LLVM, AFL++LLVM-LTO, libFuzzer |
* Π Π°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π½Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»Π°ΡΡ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ±ΠΎΡΠΎΠΊ Π±Π΅Π· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° bb-build
ΠΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ ΡΠ°Π·Π·Π΅ΡΠ°, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ.
ΠΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΡΡΠΎΠΊΠ°Ρ
ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (-g
Π΄Π»Ρ gcc, -g
ΠΈΠ»ΠΈ -gline-tables-only
- Π΄Π»Ρ clang).
ΠΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΡΠ»Π°Π³ΠΎΠΌ -fno-omit-frame-pointer
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΡΡ
ΡΡΠ΅ΠΊΠΎΠ² Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Π±Π°Π³ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅.
ΠΡΠ»ΠΈ ΡΠ°Π·Π·Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠ² (AFL_USE_ASAN ΠΈ Ρ.Π΄.), ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ»Π°Π³ΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π‘Π±ΠΎΡΠΊΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ
ΠΏΠΎΠ΄ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠ°Π·Π·ΠΈΠ½Π³ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ /fuzz, ΡΠΎ ΡΠ±ΠΎΡΠΊΠ° Ρ ASAN Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π° Π² ΠΏΠ°ΠΏΠΊΠ΅ /fuzz/asan. Π‘Π±ΠΎΡΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠ², ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ Π² Π»ΡΠ±ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Ρ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠΌ. Π’ΠΎ Π΅ΡΡΡ ΡΠ±ΠΎΡΠΊΡ Ρ ASAN, UBSAN ΠΈ CFISAN ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΠΏΠΎΠΊ: asan, ubsan, cfisan, lsan, tsan ΠΈΠ»ΠΈ msan - ΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ ΡΠ±ΠΎΡΠΊΠ° coverage Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ ΡΠ°Π·Π·Π΅ΡΠ°, ΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ±ΠΎΡΠΊΠΈ coverage Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ±ΠΎΡΠΊΠΈ basic (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ coverage Π² basic), Π½ΠΎ ΡΡΠΎ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° Π΄ΠΈΡΠΊ.
bb-corpus
Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΡΠ°Π·Π·Π΅ΡΠ° Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠΌΠΏΠΎΡΡ ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π² ΠΏΠ°ΠΏΠΊΡ ΡΠ°Π·Π·Π΅ΡΠ° ΠΈ ΡΠΊΡΠΏΠΎΡΡ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ ΡΠ°Π·Π·Π΅ΡΠ° Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π°ΡΡ
ΠΈΠ²Π°ΡΠΈΡ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΊ Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΎΠΉ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ Samba, NFS ΠΈ Ρ.Π΄.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π΄Π²Π° ΡΡΠ°ΠΏΠ°:
- ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΠΌΠΏΠΎΡΡΠ°) ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ (Π² ΡΠ»ΡΡΠ°Π΅ ΡΠΊΡΠΏΠΎΡΡΠ°) ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ-ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ°ΠΏΠΊΡ Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ² ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ (ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° sha1).
- ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΌΠΏΠ»ΠΎΠ² ΠΈΠ· Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΡΠ°Π·Π·Π΅ΡΠ° (afl-cmin, ...).
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ bugbane.json Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ fuzzer_type
.
ΠΠ»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ afl-cmin Π½Π° Π΄ΠΈΡΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΎΠΉ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΌΠΏΠ»ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ±ΠΎΡΠΊΠ° Π² ΠΏΠ°ΠΏΠΊΠ΅ laf, Ρ.ΠΊ. ΠΎΠ½Π° "ΡΠ°Π·Π»ΠΈΡΠ°Π΅Ρ" Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΡΠ΅ΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π°, Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠ° ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΈΠ· Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° (ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ):
bb-corpus suite /fuzz import-from /storage
ΠΡΠΈΠΌΠ΅Ρ ΡΠΊΡΠΏΠΎΡΡΠ° ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ (ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ):
bb-corpus suite /fuzz export-to /storage
ΠΠΌΠ΅Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π±ΡΠ΄ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π΅Ρ-ΡΡΠΌΠΌΠ΅ sha1 ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ.
bb-fuzz
ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°Π·Π·ΠΈΠ½Π³ ΡΠ±ΠΎΡΠΎΠΊ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠ΄Π΅Ρ Π΄ΠΎ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
bb-fuzz ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΠΈ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΡ
ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΡΠ΄ΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°:
- ΡΠ±ΠΎΡΠΊΠ°ΠΌ Ρ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠ°ΠΌΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ΄ΡΡ;
- Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ (AFL_LLVM_LAF_ALL, AFL_USE_CMPLOG) Π½Π°Π·Π½Π°ΡΠ°ΡΡΡΡ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΡΠ΅Π½ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΄Π΅Ρ;
- ΡΠ±ΠΎΡΠΊΠ° basic (Π±Π΅Π· ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠ²) Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΄ΡΠ°;
- ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°ΡΡΠΈΠ΅ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ.
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ bugbane.json Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ fuzzer_type
, tested_binary_path
, fuzz_cores
, src_root
, run_args
ΠΈ run_env
.
ΠΠ° Π΄ΠΈΡΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΠ΅ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ
, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈΡ
ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ bb-build.
ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ fuzzer_type
: AFL++, libFuzzer, go-fuzz.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ tested_binary_path
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΡΡ ΠΊ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ build_root
ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ (Π³Π΄Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ½ ΠΏΠΎΠΈΡΠΊ ΡΠ±ΠΎΡΠΎΠΊ).
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ src_root
Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ, Π½ΠΎ Π±Π΅Π· Π΅Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΏΠΎΡΠ΅ΡΠΏΡΡ Π½Π΅ΡΠ΄Π°ΡΡ ΡΡΠΈΠ»ΠΈΡΡ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΡ ΠΏΠΎΡΠ»Π΅ bb-fuzz.
run_args
- Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ "@@", Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π·Π·Π΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ.
run_env
* - ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (LD_PRELOAD ΠΈ Ρ.Π΄.).
* ΠΠΎΠΊΠ° Π½Π΅ Π²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ.
ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ:
- ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Π΄ΠΎΡΡΠΈΠ³Π»Π° X ΡΠ΅ΠΊΡΠ½Π΄ (Π·Π°ΡΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΄Π΅Ρ / ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΠ°Π·Π·Π΅ΡΠ°);
- ΡΡΠΌΠΌΠ°ΡΠ½Π°Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Π΄ΠΎΡΡΠΈΠ³Π»Π° X ΡΠ΅ΠΊΡΠ½Π΄* (ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½Π½Π°Ρ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΡ Π² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°);
- Π½ΠΎΠ²ΡΠ΅ ΠΏΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π»ΠΈΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ X ΡΠ΅ΠΊΡΠ½Π΄ ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΠ°Π·Π·Π΅ΡΠ°.
* ΠΠΎΠΊΠ° Π½Π΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° Π·Π°Π΄Π°ΡΡ ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅.
Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π΄Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ:
- CERT_FUZZ_DURATION=X - Π½Π°ΠΈΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅; X ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ;
- CERT_FUZZ_LEVEL=X - ΡΡΠ΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ; X ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ, ΡΡΠΎ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΡΠ΅ΠΌΡ, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ; Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ X: 2, 3, 4.
- FUZZ_DURATION=X - Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ; X ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ CERT_FUZZ_* ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ, FUZZ_* - Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² CI/CD.
ΠΡΠ»ΠΈ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ FUZZ_DURATION=600.
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅Π΄ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ :
- ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ΄Π΅Ρ.
- ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
fuzz_cores
Π² ΡΠ°ΠΉΠ»Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°Π½ΠΎ 8 ΡΠ΄Π΅Ρ. - ΠΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π°ΠΏΡΡΠΊΠ°
--max-cpus
(Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 16).
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°:
FUZZ_DURATION=1800 bb-fuzz --suite /fuzz
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΠ°Π·Π·Π΅ΡΠ° Π² ΡΠ΅ΡΡΠΈΠΈ tmux. ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ bb-fuzz Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·Π·Π΅ΡΠ°, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΊΠΎΠΏΠΈΡΡΡ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ 1800 ΡΠ΅ΠΊΡΠ½Π΄ = 30 ΠΌΠΈΠ½ΡΡ. ΠΠ°ΡΠ΅ΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ tmux capture-pane Π² ΠΏΠ°ΠΏΠΊΡ /fuzz/screens Π±ΡΠ΄ΡΡ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Ρ Π΄Π°ΠΌΠΏΡ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ tmux Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ANSI-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΠΌΠΈ (ΡΠ²Π΅ΡΠ°, Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ° ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ ΠΈ Ρ.Π΄.). ΠΡΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ½Π½ΡΠ΅ Π΄Π°ΠΌΠΏΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π° ΡΠ»Π΅ΡΡΡΠΈΡ
ΡΡΠ°ΠΏΠ°Ρ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ bb-report ΠΈΠ»ΠΈ bb-screenshot.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°ΠΌΠΏΠΎΠ² Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ΠΠ‘Π ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ°Π·Π·Π΅ΡΠ° ΠΈ tmux Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ Π΄Π»Ρ ΡΠ°Π·Π·ΠΈΠ½Π³Π°.
bb-coverage
Π‘ΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅ΠΌΠΏΠ»Π°Ρ , ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°Π·Π·Π΅ΡΠΎΠΌ:
- ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΌΠΏΠ»Π°Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π·Π΅ΡΠ° *
- Π‘ΡΡΠΎΠΈΡ ΠΎΡΡΡΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ
* ΠΠ»Ρ dvyukov/go-fuzz ΡΡΠ°ΠΏ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ: ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ ΡΠ°Π·Π·ΠΈΠ½Π³ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ° -dumpcover
(bb-fuzz ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΠΊΠ»ΡΡ).
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ bugbane.json Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ tested_binary_path
, run_args
, run_env
, coverage_type
, fuzzer_type
, fuzz_sync_dir
, src_root
.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ coverage_type
Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ bb-build ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ.
src_root
- ΠΏΡΡΡ ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΎΠΊ; Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅: Π΅ΡΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΎΡΡΡΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΡΠΎΡΠ΅Π½ΡΡ, Π½ΠΎ Π½Π΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ coverage_type
coverage_type | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|
lcov | ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ, ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ GCC Ρ ΡΠ»Π°Π³ΠΎΠΌ --coverage
|
lcov-llvm | ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ, ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ LLVM Ρ ΡΠ»Π°Π³ΠΎΠΌ --coverage
|
go-tool-cover | ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ golang |
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°:
bb-coverage suite /fuzz
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: Π² ΠΏΠ°ΠΏΠΊΠ΅ /fuzz/coverage_report Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΡΠ°ΠΉΠ»Ρ ΠΎΡΡΡΡΠ° ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ /fuzz/coverage_report/index.html - Π³Π»Π°Π²Π½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΡΡΡΡΠ° ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ.
bb-reproduce
ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π±Π°Π³ΠΈ ΠΈ ΠΎΠ±ΠΎΠ±ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·Π·Π΅ΡΠ°:
- ΠΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·Π·Π΅ΡΠΎΠ²
- ΠΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΠΈ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΡ ΠΏΡΡΡΠΌ ΠΈΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ (ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΌΠ΅ΡΡΠ΅ Π² ΠΊΠΎΠ΄Π΅: ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ°ΠΉΠ», Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ)
- Π€ΠΎΡΠΌΠΈΡΡΠ΅Ρ JSON-ΡΠ°ΠΉΠ» Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ Π²ΡΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΠΌΠΈ
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ bugbane.json Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ src_root
, fuzz_sync_dir
, fuzzer_type
, reproduce_specs
, run_args
, run_env
. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ fuzz_sync_dir
ΠΈ reproduce_specs
Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ bb-fuzz.
fuzz_sync_dir
- Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π·Π΅ΡΠ°; bb-fuzz ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ "out".
src_root
- ΠΏΡΡΡ ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΎΠΊ; Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠ° ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ/Π·Π°Π²ΠΈΡΠ°Π½ΠΈΠΉ Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
reproduce_specs
- ΡΠ»ΠΎΠ²Π°ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΡΠΈΠΏ ΡΠ°Π·Π·Π΅ΡΠ°, ΠΈ Π·Π°Π΄Π°ΡΡΠΈΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅:
"fuzz_sync_dir": "/fuzz/out",
"reproduce_specs": {
"AFL++": {
"/fuzz/basic/re2_fuzzer": "re2_fuzzer2",
"/fuzz/ubsan/re2_fuzzer": "re2_fuzzer6"
}
}
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡΠΊΠ° basic Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° Π½Π° ΡΠ΅ΠΌΠΏΠ»Π°Ρ
/fuzz/out/re2_fuzzer2/{crashes,hangs}/id*
, Π° ΡΠ±ΠΎΡΠΊΠ° ubsan - Π½Π° ΡΠ΅ΠΌΠΏΠ»Π°Ρ
/fuzz/out/re2_fuzzer6/{crashes,hangs}/id*
.
ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π», Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
ΠΎΡ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ Π±Π°Π³ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π΄ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ N ΡΠ°Π·. Π§ΠΈΡΠ»ΠΎ N ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ° bb-fuzz --num-reruns
, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 3. ΠΡΠ»ΠΈ ΠΏΡΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ gdb. ΠΠ°Π²ΠΈΡΠ°Π½ΠΈΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ gdb.
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°:
bb-reproduce --hang-timeout 3000 suite /fuzz
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ» /fuzz/bb_results.json, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·Π·Π΅ΡΠ° ΠΈ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ± ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΡ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄ΡΠ½Π½ΡΡ Π±Π°Π³Π°Ρ , Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π°Π³Π° ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ issue/Π±Π°Π³Π°, ΠΌΠ΅ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π±Π°Π³Π° Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΡΡΠΊΠ° Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΡΠ΅ΠΌΠΏΠ»ΠΎΠΌ, stdout+stderr ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
bb-send
ΠΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠΌ bb-reproduce Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠΌΠΈ Defect Dojo.
ΠΠ΄ΠΈΠ½ Π·Π°ΠΏΡΡΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° Π² Π½ΡΠΆΠ½ΠΎΠΌ engagement. Π ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ finding Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π±Π°Π³.
ΠΠ΄Π΅ΡΡ ΠΈ Π΄Π°Π»Π΅Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π΄ΡΠ΅ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° Defect Dojo ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ https://dojo.local:8080.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ bb-send Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ BugBane. ΠΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±Π΅ΡΡΡΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° bb_results.json.
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°:
bb-send --results-file bb_results.json --host https://dojo.local:8080 \
--user-name ci_fuzz_user --user-id 2 --token TOKEN \
--engagement 1 --test-type 141
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π·Π°ΠΏΡΡΠΊΠ° bb-send:
--user-id
: id ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² --user-name
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ; ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Defect Dojo, Π²ΡΠ±ΡΠ°Π² Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ https://dojo.local:8080/user.
--engagement
: engagement id; ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ (Π²ΡΠ±ΡΠ°ΡΡ Π½ΡΠΆΠ½ΡΠΉ engagement Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ https://dojo.local:8080/engagement).
--test-type
: id Π²ΠΈΠ΄Π° ΡΠ΅ΡΡΠ°; Π±ΡΠ°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ· Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (Π²ΡΠ±ΡΠ°ΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΠ΅ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ https://dojo.local:8080/test_type).
--token
: ΠΊΠ»ΡΡ API; Π±Π΅ΡΡΡΡΡ ΠΈΠ· Defect Dojo ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅: https://dojo.local:8080/api/key-v2 (Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² --user-name
, ΠΊΠ»ΡΡ Π½ΡΠΆΠ΅Π½ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° "Your current API key is ....").
ΠΡΠ»ΠΈ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° Defect Dojo Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π°, ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π°ΠΏΡΡΠΊΠ° --no-ssl
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ http Π²ΠΌΠ΅ΡΡΠΎ https.
bb-report
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΡΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ md Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Jinja2-ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΊΡΠΈΠ½ΡΠΎΡΡ ΡΠΊΡΠ°Π½ΠΎΠ² ΡΠ°Π·Π·Π΅ΡΠ° (ΠΈΠ· Π΄Π°ΠΌΠΏΠΎΠ² tmux, ΡΠΎΡ
ΡΠ°Π½ΡΠ½Π½ΡΡ
ΡΠ°Π½Π΅Π΅ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ) ΠΈ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ HTML-ΠΎΡΡΡΡΠ° ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΊΠΎΠ΄Π°. Π‘ΠΊΡΠΈΠ½ΡΠΎΡΡ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ Π² ΠΏΠ°ΠΏΠΊΡ screenshots ΠΈ Π²ΡΡΠ°Π²Π»ΡΡΡΡΡ Π² ΠΎΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠ»ΠΎΠΊ.
Π ΡΠ°ΠΉΠ»Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ bugbane.json Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ fuzzer_type
, coverage_type
ΠΈ fuzz_sync_dir
.
ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°:
bb-report --name fuzzing_re2 suite /fuzz
ΠΠ°ΠΏΡΡΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Selenum:
bb-report --html-screener selenium --name fuzzing_re2 suite /fuzz
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: Π² ΠΏΠ°ΠΏΠΊΠ΅ /fuzz ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠ°ΠΏΠΊΠ° screenshots ΠΈ ΡΠ°ΠΉΠ» Ρ ΠΎΡΡΡΡΠΎΠΌ fuzzing_re2.md.
bb-screenshot
Π£ΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΡΠΈΠ½ΡΠΎΡΠΎΠ². Π‘ΠΊΡΠΈΠ½ΡΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ bb-report, Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΠ΅Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡΠΈΠΌΠ΅ΡΡ Π·Π°ΠΏΡΡΠΊΠ°:
bb-screenshot -S pango -i tmux_dump.txt -o tmux_screenshot.png
bb-screenshot -S weasyprint -i index.html -o coverage.png
bb-screenshot -S selenium -i index.html -o coverage2.png
Π Π°Π·Π²ΠΈΡΠΈΠ΅
ΠΠ»Π°Π½Ρ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ BugBane:
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΡΡΠΌΠΈ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄ΡΡΠ³ΠΈΡ ΡΠ°Π·Π·Π΅ΡΠΎΠ²
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ ΡΡΠΈΠ»ΠΈΡ
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΎΡΡΡΡΠΎΠ² Π² Π΄ΡΡΠ³ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ°Ρ ΠΈ ΠΏΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ
ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ editable Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅:
python -m venv .venv
. .venv/bin/activate
pip install -e .[dev]
ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ²:
pytest
ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ² Π² ΡΡΠ΅Π΄Π΅ tox (ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ):
tox
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΠΈ
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°!
ΠΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΠΈ:
- ΠΠ»ΡΡ Π£ΡΠ°Π·Π±Π°Ρ ΡΠΈΠ½: ΠΈΠ΄Π΅ΠΈ, ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΠΈ, ΠΌΠ΅Π½ΡΠΎΡΡΡΠ²ΠΎ.