bugbane

application security tools for DAST


License
Apache-2.0
Install
pip install bugbane==0.0.1

Documentation

BugBane

Набор ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для Π°ΡƒΠ΄ΠΈΡ‚Π° бСзопасности ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ особСнности:

  1. BugBane ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ бСзопасной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, этапы ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ описаны Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄Π°. Π‘Π΅Π· BugBane ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ сильно Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½: Ρ‡Π°ΡΡ‚ΡŒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… инструкций описана Π² Makefile, Ρ‡Π°ΡΡ‚ΡŒ - Π² shell-скриптах, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ - Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для CI/CD, Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ - Π² Dockerfile. ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ошибки.
  2. BugBane - Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ стандартизации структуры Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, структуры ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° бСзопасной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… дСйствий.
  3. BugBane - это Π½Π°Π±ΠΎΡ€ инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ совмСстно, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  4. BugBane позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ тСстированиС ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹: Π² процСссС тСстирования ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° выполняСмых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ΠΎΠ² ΠΈ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ². ВсС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ фактичСски Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ дСйствиям ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚ ошибок ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ Π²Π²ΠΎΠ΄Π΅ ΠΈ сборС этих свСдСний.
  5. BugBane являСтся Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΠΉ сообщСства.

ВозмоТности BugBane Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚:

  1. Π‘Π±ΠΎΡ€ΠΊΠ° Ρ†Π΅Π»Π΅ΠΉ для Ρ„Π°Π·Π·ΠΈΠ½Π³-тСстирования, Π² Ρ‚ΠΎΠΌ числС с санитайзСрами ΠΈ сбором покрытия: AFL++, libFuzzer.
  2. Π€Π°Π·Π·ΠΈΠ½Π³ сборок с использованиСм AFL++, libFuzzer, dvyukov/go-fuzz Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ количСствС ядСр Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ условия остановки.
  3. Бинхронизация (ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈ экспорт) тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ Ρ„Π°Π·Π·Π΅Ρ€Π° ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ (ΠΏΠ°ΠΏΠΊΠΎΠΉ). Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ отсСиваниС Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² (для всСх Ρ„Π°Π·Π·Π΅Ρ€ΠΎΠ²) ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° основС инструмСнтов Ρ„Π°Π·Π·Π΅Ρ€Π° (ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ AFL++).
  4. Π‘Π±ΠΎΡ€ покрытия тСстируСмого прилоТСния Π½Π° сСмплах, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π² процСссС Ρ„Π°Π·Π·ΠΈΠ½Π³-тСстирования, Π° Ρ‚Π°ΠΊΠΆΠ΅ гСнСрация HTML-ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ (lcov, lcov-llvm, go-tool-cover).
  5. ВоспроизвСдСниС ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ ΠΈ зависаний, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°Π·Π·Π΅Ρ€ΠΎΠΌ. Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ мСста возникновСния ошибки (имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ исходного ΠΊΠΎΠ΄Π°, Π½ΠΎΠΌΠ΅Ρ€ строки Π² Ρ„Π°ΠΉΠ»Π΅).
  6. ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° свСдСний ΠΎ воспроизводимых Π±Π°Π³Π°Ρ… Π² систСму управлСния уязвимостями: Defect Dojo.
  7. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„Π°Π·Π·Π΅Ρ€Π° (tmux + ansifilter + pango-view) ΠΈ Π³Π»Π°Π²Π½ΠΎΠΉ страницы ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ исходного ΠΊΠΎΠ΄Π° (WeasyPrint, Selenium).
  8. ГСнСрация ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² Π½Π° основС шаблонов 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.
ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск инструмСнтов Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ порядкС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  1. bb-build
  2. bb-corpus (import)
  3. bb-fuzz
  4. bb-coverage
  5. bb-reproduce
  6. bb-corpus (export)
  7. bb-send
  8. 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++ прилоТСния с использованиСм компиляторов Ρ„Π°Π·Π·Π΅Ρ€Π°.
На Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ΄Π°ΡŽΡ‚ΡΡ:

  1. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ сборкС
  2. Π€Π°ΠΉΠ» с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ 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 ΠΈ Ρ‚.Π΄.

Бинхронизация происходит Π² Π΄Π²Π° этапа:

  1. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π² случаС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°) ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ (Π² случаС экспорта) ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ-источника Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ Π±Π΅Π· создания Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΏΠΎ содСрТимому (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° sha1).
  2. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ сСмплов ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ с использованиСм инструмСнта Ρ„Π°Π·Π·Π΅Ρ€Π° (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.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ядСр опрСдСляСтся ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ срСди пСрСчислСнных:

  1. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ доступных Π² систСмС ядСр.
  2. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ fuzz_cores Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ 8 ядСр.
  3. АргумСнт запуска --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

Π‘ΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ тСстируСмого прилоТСния Π½Π° сСмплах, сгСнСрированных Ρ„Π°Π·Π·Π΅Ρ€ΠΎΠΌ:

  1. ЗапускаСт тСстируСмоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° сСмплах Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ синхронизации Ρ„Π°Π·Π·Π΅Ρ€Π° *
  2. Π‘Ρ‚Ρ€ΠΎΠΈΡ‚ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ

* Для 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

Воспроизводит Π±Π°Π³ΠΈ ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„Π°Π·Π·Π΅Ρ€Π°:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ статистику Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„Π°Π·Π·Π΅Ρ€ΠΎΠ²
  2. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ падСния ΠΈ зависания ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΈΡ… воспроизвСдСния (ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ ошибки ΠΈ мСстС Π² ΠΊΠΎΠ΄Π΅: функция, Ρ„Π°ΠΉΠ», Π½ΠΎΠΌΠ΅Ρ€ строки)
  3. Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ 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:

  1. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ со словарями
  2. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° тСстирования Ρ€Π°Π·Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ сборки
  3. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°Π·Π·Π΅Ρ€ΠΎΠ²
  4. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚
  5. ГСнСрация ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ шаблонам

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

Установка Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ editable Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅:

python -m venv .venv
. .venv/bin/activate
pip install -e .[dev]

Запуск тСстов:

pytest

Запуск тСстов Π² срСдС tox (ΠΏΡ€ΠΈ этом собираСтся ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° тСстами):

tox

Благодарности

Бпасибо всСм участникам ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°!

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ благодарности: