Сетевой или транспортный уровень Fuzzing - PullRequest
7 голосов
/ 17 декабря 2009

Как мне реализовать стратегию фаззинга, чтобы подчеркнуть сетевой стек, особенно на третьем и четвертом уровнях (сеть и транспорт)? Я смотрел на фреймворки для генерации фаззеров, как SPIKE, но мне кажется, что они в основном сосредоточены на уровне приложений и выше? Существуют ли какие-либо общеизвестные методы, позволяющие использовать известные протоколы на этих уровнях, скажем, TCP?

Спасибо.

Ответы [ 2 ]

8 голосов
/ 24 декабря 2009

Посмотрите на Скапи . Это позволяет вам фаззить на сетевом и транспортном уровнях. Функция fuzz будет отображать все, что вы не указали явно в слоях IP или TCP (вы можете применить это отдельно к каждому). Это дает вам широкий спектр возможностей: от случайной генерации IP-адресов и пар портов до создания и отправки бессмысленных пакетов.

Вы также можете посмотреть на Fragroute . Это заставит TCP / IP использовать всевозможные способы уклонения, но потенциально может раскрыть скрытые ошибки / уязвимости в вашем сетевом стеке.

Кроме того, если ваша организация не возражает, вы можете настроить Tor выходной узел и захватывать трафик с него. Я нашел это полезным для тестирования правильного отслеживания состояния соединения TCP. Хотя ваш конец соединений хорошо известен и неизменен, существует огромное разнообразие серверов, а также проблемы с перегрузкой сети. Это в основном бесконечный источник трафика. Обязательно сверьтесь со своими высшими должностными лицами, так как ваша организация может возразить, что она является потенциальным источником вредоносного трафика (даже если существует серьезный прецедент отсутствия ответственности). Я справился с этой проблемой, запустив ее / захватив дома, а затем введя pcaps.

3 голосов
/ 30 декабря 2009

Если вы хотите распознать IP, UDP или TCP, перенаправьте ваши пакеты от ваших высокоуровневых сервисов через обратную связь к процессу, который их читает, фаззирует и пересылает. Вам нужен драйвер, который позволяет вам общаться с необработанными сокетами, и вам нужно прочитать / узнать, что говорят соответствующие RFC для этих протоколов.

Существует простой способ сделать это. Точно так же, как рекомендует Justdelegard, Scapy - это, пожалуй, лучшая вещь для использования.

Взгляните на Выпуск прототипа ICMPv4 / IP фаззера Лорана Гаффи. Его код Python, который он случайно разместил в более читабельном стиле на pastebin.com, импортирует из scapy и использует некоторые методы, которые он определил, чтобы выполнить пару типов размытия. Пакеты IP и ICMP обрабатываются в его примере кода. Итак, это звучит так же, как то, что вы ищете.

Сейчас, похоже, многие компании используют Tcl / Expect для автоматического настраиваемого тестирования сетей. SIP, H.323, протоколы уровня 2 и 3 и т. Д.

Так что, если Scapy не удовлетворяет вашим потребностям, вы можете создать или найти что-то написанное на Tcl, используя Expect для выполнения этой работы. Или, возможно, вы захотите сделать некоторые вещи в Python, используя Scapy - и другие вещи в Tcl, используя Expect.

Tcl давно используется для тестирования и управления сетью. В 1990-х годах была книга о том, как использовать Tcl для управления сетями на основе SNMP.

Синтаксис Tcl явно странный, но библиотеки очень мощные. Он поставляется с возможностью, подобной фреймворку, определять поведение настраиваемого сетевого поведения поверх сокетов, подобно тому, что вы можете делать со стандартными библиотеками для языка программирования Python.

В отличие от Python и других языков сценариев, существует очень мощный инструмент для Tcl-программ под названием Expect (см. Ожидаемая страница руководства ).

Expect имеет удобную возможность. Может автоматически генерировать тестовый скрипт Tcl. Сгенерированный скрипт выполняет вызовы функций Expect. При выполнении этой записи он действует как пассивный посредник, записывая обе стороны разговора. В некотором роде вы записываете макросы во время редактирования в MS Word или в Emacs.

Затем вы можете отредактировать автоматически сгенерированный сценарий Expect, чтобы настроить его, заставить его вести себя по-другому или создать несколько его вариантов. Это очень удобно для создания регрессионных тестов. Вы должны быть в состоянии использовать это для начала написания тестов протоколов более высокого уровня, если они вам понадобятся. Бьет начиная с нуля.

Я думаю, вы можете использовать Tcl / Expect для тестирования стандартных приложений TCP (FTP, HTTP, SMTP и т. Д.), Которые используют строковые команды. Он хорошо работает для тестирования символьных приложений, таких как TELNET, которые считывают ввод с stdin и генерируют вывод на stdout.

...