Как boofuzz ​​обнаруживает сбои и регистрирует аварийные тестовые случаи

Мы используем boofuzz для фаззинга удаленного сервиса по протоколу tcp. Скрипт фаззера выглядит следующим образом.

      session = Session(target = Target(connection = SocketConnection(host, port, proto='tcp')))
s_initialize("Test")
s_string("Fuzz", fuzzable = True)
session.connect(s_get("Test"))
session.fuzz()

Через некоторое время мы заметили, что удаленная служба дала сбой, но фаззер просто неоднократно пытался перезапуститься. Фаззер не обнаружил, что удаленная служба закрыта, а аварийный тестовый пример не сохраняется.

      [2022-02-02 04:18:42,231]    Test Step: Restarting target
[2022-02-02 04:18:42,231]     Info: Restarting target process using CallbackMonitor
[2022-02-02 04:18:42,231]    Test Step: Cleaning up connections from callbacks
[2022-02-02 04:18:42,231]     Info: Closing target connection...
[2022-02-02 04:18:42,231]     Info: Connection closed.
[2022-02-02 04:18:42,231]     Info: No reset handler available... sleeping for 5 seconds
[2022-02-02 04:18:47,236]     Info: Opening target connection (xxx)...
[2022-02-02 04:18:47,237]     Info: Cannot connect to target; retrying. Note: This likely indicates a failure caused by the previous test case, or a target that is slow to restart.
[2022-02-02 04:18:47,237]    Test Step: Restarting target
[2022-02-02 04:18:47,237]     Info: Restarting target process using CallbackMonitor
[2022-02-02 04:18:47,237]    Test Step: Cleaning up connections from callbacks
[2022-02-02 04:18:47,237]     Info: Closing target connection...
[2022-02-02 04:18:47,237]     Info: Connection closed.
[2022-02-02 04:18:47,237]     Info: No reset handler available... sleeping for 5 seconds
[2022-02-02 04:18:52,243]     Info: Opening target connection (xxx)...
[2022-02-02 04:18:52,244]     Info: Cannot connect to target; retrying. Note: This likely indicates a failure caused by the previous test case, or a target that is slow to restart.

Как мы можем настроить скрипт boofuzz ​​так, чтобы:

  1. мы можем обнаружить, что удаленная служба закрыта (например, попробуйте подключиться по TCP)?
  2. мы можем сохранить неусеченный тестовый пример на диск?

1 ответ

Если вы не используете мониторы, вы можете добавить post_test_case_callbacks , которые проверяют, жив ли сервер. Эта функция будет вызываться после каждого теста.

post_test_case_callbacks (список методов) — зарегистрированный метод будет вызываться после каждого нечеткого теста. По умолчанию Нет.

например

      logger = FuzzLoggerText()
def target_alive(target, fuzz_data_logger, session, sock, *args, **kwargs):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        sock.connect((host, port))
        logger.log_pass(description="alive")
    except ConnectionRefusedError:
        logger.log_fail(description="Server down")

session = Session(target=Target(SocketConnection(host, int(port))), post_test_case_callbacks=[target_alive])
Другие вопросы по тегам