Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
sniffles — Sniffles: Генератор захвата пакетов для IDS и оценки регулярных выражений | Kitploit
Инструменты/GitHubGitHub/petabi/sniffles
Сниффинг и анализ пакетовОбход IDS/IPSФаззингСетевая безопасностьТестирование на ПроникновениеОбнаружение Вторжений
GitHubpetabi/sniffles

sniffles

Sniffles: Генератор захвата пакетов для IDS и оценки регулярных выражений

Репозиторий
65257 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Sniffles--Генератор захвата пакетов для IDS и оценки регулярных выражений

Sniffles — это инструмент для создания захватов пакетов, которые будут тестировать IDS, использующие фиксированные шаблоны или регулярные выражения для обнаружения подозрительного поведения. Sniffles работает очень просто. Он берет набор регулярных выражений или правил и случайным образом выбирает одно регулярное выражение или правило. Затем он генерирует содержимое на основе этого правила или регулярного выражения. Для фиксированных строк это означает добавление строки непосредственно в данные (возможно, со смещениями или другими опциями, как в правилах Snort). Для регулярных выражений процесс несколько сложнее. Регулярное выражение преобразуется в НКА, и через НКА выбирается случайный путь (от начала до конца). Полученные данные будут соответствовать регулярному выражению. Наконец, Sniffles можно настроить на полное или частичное совпадение. При полном совпадении данные пакета будут абсолютно соответствовать хотя бы одному правилу или регулярному выражению (хотя некоторые опции Snort полностью не учитываются). Частичное совпадение удалит последний символ из совпадающей последовательности символов, чтобы последовательность не должна совпадать (хотя может совпадать с другим правилом). Совпадающие правила должны вызывать наибольшую нагрузку на IDS. Таким образом, можно определить, насколько хорошо IDS обрабатывает наихудший трафик. Трафик с частичным совпадением вызовет почти такую же нагрузку, как и совпадающий трафик. Наконец, Sniffles также может генерировать трафик с полностью случайными данными. Такой случайный данные представляют собой наилучший сценарий, поскольку случайные данные с очень малой вероятностью совпадут с какими-либо правилами. Таким образом, их можно обрабатывать с максимальной скоростью. Таким образом, Sniffles позволяет создавать захваты пакетов для наилучшего и наихудшего сценария работы глубокой проверки пакетов IDS.

В дополнение к вышесказанному, Sniffles также умеет создавать оценочные захваты пакетов. Существует два типа оценочных захватов пакетов. Первый оценочный захват пакетов создает ровно один пакет для каждого правила или регулярного выражения, последовательно. Таким образом, можно проверить и убедиться, что каждое правило совпадает, как ожидалось. Полная оценка идет еще дальше и создает пакет для каждого возможного ответвления в регулярном выражении. Одно регулярное выражение может иметь тысячи возможных ответвлений. Это проверяет, что все возможные ответвления регулярного выражения обрабатываются правильно. Оценочные захваты пакетов должны совпадать со всеми пакетами. Любые не совпавшие пакеты, скорее всего, указывают на ошибку IDS и требуют дальнейшего расследования. Конечно, всегда есть вероятность, что Sniffles не создает правильный пакет для данной IDS или не распознает конкретную опцию для правила. Проверьте поддерживаемые функции правил для получения дополнительной информации.

Наконец, Sniffles также может многое сделать для генерации случайного сетевого трафика. По умолчанию случайный трафик — это TCP, UDP или ICMP и однонаправленный. Однако он также может генерировать TCP-трафик с ACK, рукопожатиями и разрывами соединения для каждого потока. Он будет генерировать правильные порядковые номера и контрольные суммы. Кроме того, MAC-адреса могут быть установлены в соответствии с желаемыми распределениями, а IP-адреса сети могут быть определены пространствами домашних и внешних адресов. Кроме того, можно моделировать сканирования в захвате трафика.

Установка

ТРЕБУЕТСЯ: Python 3.3+ и модуль SortedContainers

Sniffles состоит из следующих файлов:

  • rulereader.py: Парсер для правил.
  • ruletrafficgenerator.py: Инструмент для генерации потоков контента.
  • sniffles.py: Основная программа, управляющая процессом.
  • sniffles_config.py: обрабатывает ввод командной строки и опции для Sniffles.
  • traffic_writer.py: Записывает пакет в pcap-совместимый файл. Не требует libpcap.
  • vendor_mac_list.py: Содержит организационно уникальные идентификаторы MAC, используемые для генерации полуреалистичных MAC-адресов, а не просто случайно собранных октетов.
  • examples/vendor_mac_definition.txt: Дополнительный файл для определения распределения частичных или полных MAC-адресов.
  • файлы pcre для pcre (pcre_chartables.c pcre_compile.c pcre_globals.c pcre_internal.h pcre_newline.c pcre_tables.c pcre.h pcrecomp.c pcreconf.py ucp.h).
  • nfa.py: для обхода НКА.
  • regex_generator.py: Код для генерации случайных регулярных выражений.
  • rand_rule_gen.py, feature.py и rule_formats.py: модули для генерации случайных наборов правил.

Для установки:

  1. Перейдите в каталог верхнего уровня.
  2. Введите python3.x setup.py install.
  3. Это установит приложение в вашу систему.

Примечания по установке:

  1. Это не было протестировано в Windows или Linux. Это было протестировано в FreeBSD и Mac OS X.
  2. Используйте python3.x setup.py build для локальной сборки, затем перейдите в каталог библиотеки, найдите lib и используйте python3.4 -c "from sniffles import sniffles; sniffles.main()" для локального запуска.

Поддерживаемые форматы:

  • Snort: Правила оповещения Snort (правило должно начинаться с директивы Alert). Теги Content распознаются и анализируются правильно. Теги PCRE также правильно анализируются. Теги HTTP обрабатываются последовательно, поэтому они могут не создать желаемый пакет. Content (и PCRE или HTTP content) может быть изменен с помощью distance, within и offset. Правило может использовать опцию управления потоком, хотя из нее извлекается только направление данных. Опция nocase игнорируется, и используется представленный регистр. Все остальные опции игнорируются. Значения заголовка анализируются, и будет сгенерирован пакет, соответствующий этим значениям. Если используются пространства домашних и внешних сетевых адресов, то для соответствующих переменных $HOME_NET и $EXTERNAL_NET будет использоваться правильное пространство. Пример:

    alert tcp $EXTERNAL_NET any -> $HOME_NET 8080 (msg:"SERVER-APACHE Apache Tomcat UNIX platform directory traversal"; flow:to_server; content:"/..|5C|/"; content:"/..|5C|/"; http_raw_uri;

  • Регулярные выражения: Сырые регулярные выражения по одному на строку, записанные как abc или /abc/i. В настоящее время поддерживаются опции i, s и m. Другие опции игнорируются. Пример:

    /ab*c(d|e)f/i

  • Формат правил Sniffles описан ниже.

Параметры командной строки:

  • -a TCP Ack: Отправлять TCP-подтверждение для каждого отправленного пакета данных. По умолчанию выключено. Пакеты подтверждения по умолчанию не содержат данных.

  • -b Двунаправленные данные: Данные будут генерироваться в обоих направлениях TCP-потока. ACK будут включены. Эта функция отключена по умолчанию.

  • -B [Протокол фонового трафика:Процент]: Установите хотя бы один протокол со значением от 1 до 100 для создания фонового трафика. Это значение представляет процент от общего объема трафика. Доступные протоколы: FTP, HTTP, IMAP, POP и SMTP. Например: "http:20,ftp:30,smtp:10". Введите только одно число в качестве значения аргумента для генерации случайного трафика. Например: "80".

  • -c Количество: Количество потоков для создания. Каждый поток будет содержать минимум 1 пакет. Пакет будет между двумя конечными точками, как определено правилом или выбрано случайным образом. tcp_handshake, tcp_teardown и packets_per_stream увеличат количество пакетов на поток. В настоящее время данные в потоке передаются только в одном направлении. Если используется опция -b, данные должны передаваться в обоих направлениях. Кроме того, правила Sniffles могут определять передачу данных в обоих направлениях.

  • -C Одновременные потоки: Количество потоков, которые будут открыты одновременно. Это best-effort: если потоков меньше, чем указанное количество одновременных потоков, то будут использованы все текущие потоки. Например, если осталось всего 1000 потоков, а количество одновременных потоков установлено на 10000, то в этот момент будет записано только 1000 потоков. Значение по умолчанию — 1000. Если используется с длительностью, потоки -C будут поддерживаться на протяжении всей длительности, что в конечном итоге проигнорирует любые входные данные от -c. Обратите внимание, цель этого — создать разнообразный pcap, где пакеты из одних и тех же потоков распределены, а не находятся рядом друг с другом, и создать иллюзию множества одновременных потоков. В наших тестах мы управляли до 2-3 миллионов одновременных потоков, прежде чем память стала проблемой. Также следует отметить, что разные задержки между потоками могут привести к тому, что некоторые потоки завершатся раньше других.

  • -d Каталог правил: Путь к каталогу, содержащему файлы правил. Будут прочитаны все включенные правила во всех файлах правил в каталоге. Предполагается, что все правила заканчиваются расширением .rules. Используйте эту опцию или -f, но не обе. Символ # используется для деактивации (т.е. комментирования) правила.

  • -D Длительность: Генерация на основе длительности, а не количества. Длительность указывается в секундах. Имейте в виду, что задержка по умолчанию между пакетами составляет в среднем 1-200 микросекунд. Для малых задержек большая длительность может привести к миллионам пакетов, создание которых может занять много времени. Кроме того, длительность — это best-effort. По сути, новые потоки не создаются после достижения заданной длительности, но могут быть потоки, которые не завершились. Они все равно записываются, поэтому фактическая длительность может быть больше указанной, но не должна быть меньше. Наконец, установите большую задержку, если вы хотите, чтобы во время генерации было создано меньше потоков.

Примеры:

ПРИМЕЧАНИЕ: все примеры предполагают, что вы установили пакет sniffles.

Чтобы сгенерировать pcap из одного файла с регулярными выражениями с 10 потоками, где каждый пакет соответствует правилу

sniffles -c 10 -f myre.re -m

Чтобы сгенерировать pcap из одного файла правил Snort, где каждый пакет почти соответствует правилу

sniffles -c 10 -f myrules.rules

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

sniffles -c 10 -d myrulesdir -m

Чтобы сгенерировать тот же pcap, что и выше, используя те же правила, но со случайным содержимым (содержимое случайное, заголовки по-прежнему будут соответствовать правилам — не работает с regex или правилами Sniffles):

sniffles -c 10 -d myrulesdir -r

Чтобы сгенерировать pcap с 10 потоками (по 1 пакету каждый) и со случайными данными:

sniffles -c 10

Чтобы сгенерировать pcap с 10 потоками, где 50% потоков будут фоновым трафиком, а остальные потоки будут содержать пакеты, соответствующие правилу:

sniffles -c 10 -B 50 myrules.rules

Чтобы сгенерировать pcap с 10 потоками, каждый поток с 5 пакетами, с ACK, рукопожатием и завершением, а также фиксированной длиной 50 для данных в каждом пакете с данными:

sniffles -c 10 -p 5 -l 50 -t -T -a

Чтобы сгенерировать pcap с 20 случайными потоками с домашней сетью 192.168.1-2.x:

sniffles -c 20 -h 192.168.1,192.168.2

Чтобы сгенерировать pcap с 20 случайными потоками с домашней сетью 192.168.1.x для IPv4 и 2001:8888:8888 для IPv6 с 50% трафика IPv6:

sniffles -c 20 -h 192.168.1 -H 2001:8888:8888 -i 50

Чтобы сгенерировать 5-секундный захват пакетов случайных пакетов со средней задержкой между пакетами 100 микросекунд:

sniffles -D 5 -L 100

Чтобы сгенерировать pcap, который создаст один пакет, соответствующий каждому правилу в файле правил (или файле регулярных выражений) последовательно:

sniffles -f myrules.rules -e

Чтобы сгенерировать pcap, который создаст пакет для каждой возможной ветви регулярного выражения для каждого регулярного выражения в наборе регулярных выражений, а затем сохранит этот файл в pcap с именем everything.pcap, как показано ниже. Однако эта функция может работать за экспоненциальное время, если регулярное выражение имеет большое количество min-max подсчета, поэтому ее выполнение может занять много времени. Кроме того, все остальные опции, кроме двух показанных ниже, игнорируются.

sniffles -f myrules.rules -o everything.pcap -E

Чтобы сгенерировать случайный трафик с атакой сканирования, начинающейся через 2 секунды и длящейся 2 секунды, с 1000 пакетов сканирования в секунду, общей длительностью захвата 5 секунд, временем задержки 50 мкс и начальным портом 80 (последовательный поиск портов, начиная с 80):

sniffles -D 5 -O 2 -W 2 -I 1000 -L 50 -s 192.168.1.2 -P 80

Аналогично вышеуказанному, но создаст несколько атак сканирования, каждая продолжительностью 1 секунду, со средним смещением между атаками 2 секунды. Кроме того, сканирует только указанные порты. Также атакует IP-адреса в диапазоне 192.168.1.0-255 случайным образом.

sniffles -D 8 -O 2 -W 1 -I 10 -L 50 -s 192.168.1 -P 80,8080,8000,8001

Формат правил Sniffles:

Sniffles поддерживает несколько форматов правил. Во-первых, Sniffles может анализировать правила Snort и регулярные выражения (по одному на строку). В дополнение к этому, Sniffles также имеет собственный формат правил, который можно использовать для явного управления трафиком. Это делается с помощью xml-файлов, описывающих трафик. При использовании этого формата другие опции Sniffles могут быть неактуальны. Примеры файлов правил можно найти в каталоге examples. Эти файлы правил используются просто путем указания файла правил с опцией -f (т.е. sniffles -f rules.xml)

Формат правил Sniffles выглядит следующим образом:```xml

<petabi_rules> <traffic_stream proto="tcp" src="any" dst="any" sport="any" dport="any" handshake="True" teardown="True" synch="True" ip="4"> </traffic_stream> <traffic_stream proto="tcp" src="any" dst="any" sport="any" dport="any" handshake="True" teardown="True" synch="True"> </traffic_stream> </petabi_rules>

root@kitploit:~
В деталях теги работают следующим образом:

- `<petabi_rules> </petabi_rules>`: Определяет все правила для этого файла правил. Должен быть только один набор открывающих и закрывающих тегов, охватывающих все указанные потоки трафика.
    - `<rule > </rule>`: Обозначает одно правило. Одно правило может генерировать произвольное количество потоков трафика или пакетов. В одном файле может быть любое количество правил.
        - Параметры:
            - name: Имя для этого правила. В основном для документации, реальной функции не имеет.
        - `<traffic_stream> </traffic_stream>`: Поток трафика определяет трафик между двумя конечными точками. Все пакеты, указанные в одном потоке трафика, будут использовать одни и те же конечные точки. Для данного правила может быть указано любое количество потоков трафика. Разные потоки трафика в одном правиле могут иметь разные конечные точки или нет, в зависимости от настроек ниже.
            - Параметры:
                - typets: Указывает, какой тип потока трафика мы будем использовать для генерации пакетов. В настоящее время доступны Standard, ScanAttack и BackgroundTraffic.
                - scantype: 1 == Syn scan (по умолчанию), 2 == Connection scan. Используется с ScanAttack.
                - target: Указывает целевой IP-адрес для атаки сканирования.
                - targetports: Для атаки сканирования. Укажите список возможных портов через запятую или один начальный порт. В противном случае порты будут сканироваться случайным образом. Если указан один начальный порт, порты будут сканироваться по порядку от этой точки до 65535, после чего вернутся к начальной точке. Этот параметр используется вместе с typets равным 'ScanAttack'.
                - srcport: Указывает исходный порт для атаки сканирования. По умолчанию случайный.
                - duration: Окно или продолжительность (в секундах) атаки сканирования, если typets равен 'ScanAttack'.
                - intensity: Интенсивность атаки сканирования, если typets равен 'ScanAttack'.
                - offset: Смещение перед началом атаки сканирования. Также используется при вставке нескольких сканирований в трафик.
                - replychance: Вероятность того, что сканирование получит ответ. Другими словами, вероятность того, что целевой порт открыт (по умолчанию 20%). Используется с ScanAttack.
                - proto: Указывает протокол этого потока трафика. Должен быть TCP или UDP, или ICMP (не тестировалось).
                - src: Исходный IP-адрес. Может быть адресом в формате xxx.xxx.xxx.xxx, $EXTERNAL_NET (для внешнего адреса — предполагает, что домашняя сеть задана), $HOME_NET или any (случайный выбор IP-адреса).
                - dst: IP-адрес назначения. Аналогично исходному IP-адресу.
                - sport: Исходный порт (предполагается TCP или UDP). Можно использовать формат port из Snort, который может быть списком, разделенным запятыми в скобках (например, [80,88,89]), диапазоном (например, [10:1000]) или any (случайный выбор от 0 до 65535).
                - dport: Порт назначения, аналогично sport.
                - handshake: Будет генерировать TCP-рукопожатие в начале потока. Если исключен, рукопожатия не будет. Допустимые значения: true или false. По умолчанию false.
                - latency: Устанавливает среднюю задержку между пакетами (в микросекундах).
                - teardown: Закроет поток после отправки всего трафика, добавляя TCP-завершение в конце потока трафика. Допустимые значения: true или false. По умолчанию false.
                - synch: Потоки трафика синхронны или нет. Если true, один поток трафика должен завершиться до начала следующего. Если false, все смежные потоки, для которых установлено false (т.е. асинхронные), будут выполняться одновременно.
                - tcp_overlap: Значение по умолчанию false. Если true, начиная со второго пакета будет добавлено дополнительное содержимое, а порядковый номер TCP будет уменьшен на единицу для имитации перекрытия порядковых номеров TCP.
                - ipv: Указывает IPv4 или IPv6. Допустимые значения: 4 или 6. По умолчанию 4.
                - out_of_order: Случайным образом пакеты приходят не по порядку. Обратите внимание, это работает только с пакетами, использующими параметр 'times'. Кроме того, этот параметр следует использовать с ack, чтобы в трассе трафика появились правильные дублирующие ACK. Допустимые значения: true или false. По умолчанию false.
                - out_of_order_prob: Задает вероятность того, что пакеты придут не по порядку. Например, 10 означает 10% вероятность для каждого пакета прийти не по порядку. Пакеты, пришедшие не по порядку, прибывают после всех пакетов, пришедших по порядку. Кроме того, они также случайным образом перемешиваются. Таким образом, если первые пакеты 2 и 5 из 10 пакетов определены как не по порядку, они прибудут последними из 10 пакетов (слоты 9 и 10) и будут в произвольном порядке (например, 5 может прийти перед 2 или наоборот). Значение должно быть от 1 до 99. По умолчанию 50.
                - packet_loss: Случайным образом пакеты теряются (т.е. не прибывают). Это работает только с параметром 'times'. Кроме того, этот параметр следует использовать с ack, установленным в true, чтобы в трассе трафика появились дублирующие ACK. Допустимые значения от 1 до 99, представляющие вероятность потери пакета. Обратите внимание, потеря пакета происходит только для пакетов, несущих данные, а не для ACK.
                - ack: За каждым пакетом данных в этом потоке будет следовать ACK от сервера. Допустимые значения: true или false. По умолчанию false.
                - percentage: Применяется только для BackgroundTraffic, и в файле правил или каталоге должно быть только одно правило BackgroundTraffic. Процент указывает процент потока фонового трафика, который будет создан в общем потоке трафика.
                - http: Процентное распределение протоколов приложений http в потоке фонового трафика.
                - ftp: Процентное распределение протоколов приложений ftp в потоке фонового трафика.
                - pop: Процентное распределение протоколов приложений pop в потоке фонового трафика.
                - smtp: Процентное распределение протоколов приложений smtp в потоке фонового трафика.
                - imap: Процентное распределение протоколов приложений imap в потоке фонового трафика.
            - `<pkt > </pkt>`: Эта директива обозначает либо отдельный пакет, либо серию пакетов. Функция times может использоваться, чтобы одна директива `<pkt> </pkt>` генерировала несколько пакетов. В противном случае необходимо явно указывать каждый пакет в каждом направлении.
                - Параметры:
                    - dir: Направление пакета. Допустимые значения: to server или to client. Начальный исходный IP считается клиентом, а начальный IP назначения — сервером. Таким образом, 'to server' отправляет пакет от клиента к серверу, а 'to client' — от сервера к клиенту. По умолчанию to server.
                    - content: Регулярное выражение, указывающее содержимое для этого пакета. Размер пакета будет зависеть от регулярного выражения.
                    - fragment: Фрагментировать ли этот пакет. Работает только с ipv4. Должен иметь значение больше 2. Создаст столько фрагментов, сколько допустимо или указано (в зависимости от того, что меньше). Значение по умолчанию 0 означает отсутствие фрагментов.
                    - ack: Отправить ACK на этот пакет или нет. Допустимые значения: true или false. По умолчанию false.
                    - split: Разделить содержимое между указанным количеством пакетов. По умолчанию все содержимое отправляется в одном пакете (фрагменты являются небольшим исключением из этого правила).
                    - times: Отправить этот пакет x раз. Значение по умолчанию 1, положительное значение отправит ровно x пакетов (возможно, с ACK, если ack равно true), а отрицательное число отправит случайное количество пакетов от 1 до abs(-x).
                    - ttl: Устанавливает значение TTL для пакета. По умолчанию Sniffles генерирует случайное значение TTL.
                    - ttl_expiry: Имитирует атаку с истечением TTL, разбивая пакеты на несколько пакетов с одним вредоносным пакетом между двумя хорошими пакетами. По умолчанию значение 0 (нет вредоносных пакетов). Если значение ненулевое, будет вставлен вредоносный пакет с TTL, равным значению ttl_expiry. Если установлено значение ttl, хороший пакет получит новое значение ttl

Заключительные примечания: Новый формат правил — это лишь начало и может содержать проблемы. Пожалуйста, сообщайте мне о любых несоответствиях или ошибках. Кроме того, предполагается расширить возможности, чтобы обеспечить все больше и больше функциональности по мере необходимости. Пожалуйста, свяжитесь со мной для добавления желаемых функций. Наконец, этот продукт предоставляется «как есть». Нет никаких гарантий функциональности или точности. Не стесняйтесь форкать этот проект для своих нужд.

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

Это приложение было создано компанией Petabi, Inc., где мы создаем надежные, реалистичные и быстрые решения для безопасности.

Авторы:

- Victor C. Valgenti
- Min Sik Kim
- Tu Le
- Moosuk Pyun

Новые функции:
--------------

- 21.11.2014: Версия 1.4.0. Добавлено разделение трафика и traffobot для двунаправленной генерации трафика. Исправлена ошибка, когда исключение выбрасывалось при объеме генерируемого трафика, который мог поместиться в один вызов записи трафика. Переформатировано и включено использование. Наконец, добавлены модульные тесты для traffobot и разбора XML.

- 03.02.2015: Версия 2.0. Полностью переработана работа потоков для снижения требований к памяти при генерации больших потоков с использованием специальных правил. В настоящее время может обрабатывать около 2–3 миллионов одновременных потоков до замедления. Добавлены некоторые функции для помощи при создании больших потоков. Во-первых, генерируйте с чем-то вроде параллелизма в 2–3 миллиона потоков. Кроме того, не используйте teardown для этих потоков. Часть потоков будет длиться от начала до конца захвата, в то время как остальные будут закрываться каждый период пакетной обработки. Я буду работать над повышением эффективности, но управление всеми сложными опциями в Sniffles теперь невозможно дешево реализовать в памяти. Единственное другое решение — получить более мощную машину с большим объемом ОЗУ. Эта версия также содержит множество исправлений.

- 11.02.2015: Добавлена вероятность для пакетов, приходящих не по порядку, чтобы можно было настроить частоту таких пакетов.

- 05.03.2015: Изменено завершение TCP на стандартную последовательность завершения. Теперь содержимое может быть распределено по нескольким пакетам без использования фрагментов.

- 09.04.2015: Исправлен трафик сканирования, который был частично сломан во время одного из предыдущих изменений. Временная метка начала pcap теперь по умолчанию равна текущему времени и может быть установлена с помощью опции -g. Наконец, третий пакет в трехстороннем рукопожатии TCP теперь будет нести данные, если клиент должен отправлять данные первым.

- 22.05.2015: Переписан парсинг правил для упрощения расширения парсера правил для поддержки большего количества форматов. Встроен обход NFA и pcre непосредственно в Sniffles. Очищен код и подготовлен к публикации.

- 27.05.2015: Обновлена документация, добавлены библиотеки pcre и построение NFA, чтобы сделать Sniffles автономным пакетом. Добавлены Генератор регулярных выражений и Генератор случайных правил как часть пакета Sniffles. Обновлена версия до 3.0.0 и опубликована на GitHub.

- 12.08.2015: Реализовано большое количество исправлений ошибок и новых функций. Принципиально изменена обработка потоков и потоков для улучшения расширяемости. Добавлена задержка на поток. Обновлена документация.

Генератор регулярных выражений
==============================

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

Установка
---------

Будет автоматически установлен вместе с остальными компонентами Sniffles.

Параметры
---------

regexgen — Генератор случайных регулярных выражений.

    usage: regexgen [-C char distribution] [-c number regex]
    [-D class distribution] [-f output re file]
    [-l lambda for length generation] [-M maximum regex length]
    [-m minimum regex length] [-n negation probability]
    [-o options chance] [-R repetition chance] [-r repetition distribution]
    [-t re structural type distribution] [-?] [-g]

- -C Распределение символов: Задает возможность появления определенных символов или типов символов. См. краткое объяснение распределений ниже, чтобы узнать, как это использовать. По умолчанию это равномерное распределение. Это распределение имеет пять слотов: ASCII-символы, двоичные символы в формате \x00, алфавитные буквы (верхний или нижний регистр), цифры и подстановочные классы (например, \w). Пример ввода: «10,20,10,40,20» означает, что 10% шанс, что любой сгенерированный символ будет из 10% ASCII, 20% двоичных, 10% букв и т.д. Одно предостережение: ASCII-символы, которые могут вызвать проблемы с регулярными выражениями (например, `[` или `{`), преобразуются в шестнадцатеричное представление (например, \x3b).
- -c Количество генерируемых регулярных выражений. По умолчанию одно.
- -D Распределение классов: Имеет только два слота. Первый слот — вероятность того, что класс состоит из некоторого количества случайно сгенерированных символов. Второй слот — вероятность того, что класс состоит из диапазонов (например, a-z).
- -f Имя выходного файла. Задает имя файла, в котором сохраняются регулярные выражения. По умолчанию файл с именем rand.re в текущем рабочем каталоге.
- -g Группы: Все регулярные выражения будут иметь общий префикс, как минимум с одним или несколькими другими регулярными выражениями (при условии, что выражений больше одного). Общий префикс — это просто регулярное выражение, которое одинаково для некоторого набора регулярных выражений. Общее количество возможных общих префиксов составляет от 1 до 1/2 от общего количества генерируемых регулярных выражений. Значение по умолчанию для этой опции — false. Эта опция не принимает параметров.
- -l Лямбда для длины: Средняя длина для экспоненциального распределения длины регулярных выражений. Значение по умолчанию — 10.
- -M Максимальная длина регулярного выражения: Регулярные выражения будут не длиннее этой структурной длины. По умолчанию максимальная длина не ограничена.
- -m Минимальная длина регулярного выражения: Регулярные выражения будут не короче этой длины. По умолчанию 3, и автоматически устанавливается значение 1, если ввод меньше или равен нулю.
- -n Вероятность отрицания: Вероятность того, что класс символов будет классом отрицания ([^xyz]), а не обычным классом символов ([xyz]). Вероятность по умолчанию — 50%.
- -o Вероятность опции: Вероятность добавления опции к регулярному выражению. Текущие опции: 'i', 'm' и 's'. Случайное количество опций добавляется в список, при этом опции выбираются равномерно.
- -R Вероятность повторения: Вероятность появления повторения после добавления любого структурного компонента в регулярное выражение.
- -r Распределение повторений: Распределение структур повторения. Слоты: «ноль или один» (?), «ноль или более» (*), «один или более» (+) и «счет» ({x,y}).
- -t Распределение структурных типов RE: Распределение основных структурных компонентов регулярного выражения. Состоит из трех слотов (категорий): символы, классы и альтернативы. Обратите внимание, альтернатива просто генерирует более короткое регулярное выражение вплоть до размера оставшейся длины RE. Другими словами, альтернатива приведет к объединению нескольких более коротких регулярных выражений в общее. Альтернатива использует ту же методологию при создании этих более коротких регулярных выражений.
- -? Вывод этой справки.

    Этот генератор создает случайные регулярные выражения. Можно настроить структуры внутри регулярных выражений до распределения вероятностей, но в настоящее время не содержимое. Это желательно для исследования максимального разнообразия возможных регулярных выражений (хотя не обязательно реалистичных). Распределения обрабатываются путем создания списка вероятностей для различных возможностей (слотов) для конкретного распределения. Они добавляются как аргументы командной строки с помощью простого строкового списка, например: «10,30,40,20». Список должен содержать столько значений, сколько слотов. Сумма всех значений в списке должна быть 100, и не должно быть дробей. Значение в каждом слоте — это вероятность того, что этот слот будет выбран. Например, базовое распределение структурных типов RE имеет три слота. Первый слот — вероятность того, что следующим структурным типом будет символ (где символ может быть буквой, цифрой, двоичным, ASCII или подстановочным классом (например, \w)). Второй слот — для классов символов, таких как [ab@%], [^123] или [a-z]. Третий слот — вероятность появления альтернативы, такой как (ab|cd). С помощью этих трех слотов можно настроить, как часто структуры будут появляться в ваших регулярных выражениях. Например, regexgen -c 10 -t "80,10,10" создаст 10 регулярных выражений, где 80% используемых структур будут символами, 10% — классами символов и 10% — альтернативами.

Генератор случайных правил
==========================

Генератор случайных правил предоставляет средство для создания нескольких случайно сгенерированных правил для тестирования конкретной платформы. В настоящее время сгенерированные правила соответствуют либо формату правил Snort, либо представляют собой просто строки текста. Для работы Генератора случайных правил необходимо иметь набор определенных признаков. Примеры признаков можно найти в папке example_features и они описаны ниже.

Установка
---------

Автоматически устанавливается вместе с Sniffles

Примечание: Генератор случайных правил использует Генератор случайных регулярных выражений для создания содержимого любого вида.Опции
-------

Генератор случайных правил

usage: rulegen -c [number of rules] -f [feature set]
        -o [outfile] [-s]

- -c  Количество правил: количество правил для генерации.
      По умолчанию — одно.
- -f  Набор признаков: файл, содержащий описание набора признаков.
      Пожалуйста, обратитесь к документации за дальнейшими разъяснениями о
      наборах признаков и о том, как их описывать.
- -o  Выходной файл: выходной файл, в который записываются правила.
      По умолчанию — rules.txt
- -s  Формат правил Snort: запись правил в формат правил Snort.
      Без параметров, по умолчанию выключено.  Когда выключено, правила просто
      преобразуются в строковый формат, каким бы он ни был на основе
      анализатора признаков.

Набор признаков
---------------

Признаки используются для описания потенциальных аспектов правил,
используемых в IDS.  Например, фильтр пакетов может использовать правила,
нацеленные на исходный и целевой IP-адреса.  В этом случае можно
создать набор признаков, описывающий, как должны генерироваться эти
исходные и целевые IP-адреса.  Более конкретно, мы различаем
простые и сложные правила.  Разница
между ними заключается в наличии неоднозначных обозначений.  Например,
если у нас есть неоднозначное обозначение * для обозначения любого
IP-адреса, то можно сказать, что * представляет собой неоднозначное обозначение.
Далее мы знаем, что правило может также использовать неоднозначное обозначение,
например 192.168.1.1.  Это будет представлять простой IP-адрес, так как
это единственный фиксированный IP-адрес без каких-либо возможных неоднозначных
обозначений.  Затем мы дополнительно определяем диапазон конкретных
признаков (например, IP-адреса по всем более чем 4 миллиардам
возможных IPv4-адресов или только некоторое подмножество из них).

Признаки в конечном итоге определяют все аспекты для
произвольного правила.  Имея набор признаков и корректный формат правила,
становится возможным случайным образом генерировать произвольное количество
правил, использующих эти признаки.  Таким образом можно
сгенерировать тестовые наборы правил, которые будут проверять IDS в
векторе, который часто упускается из виду.

Признаки определяются в списке, разделённом точкой с запятой, по одному признаку на строку
type=feature; список аргументов в виде пар ключ=значение, списки с использованием форматирования
Python (т.е. [a, ..., z]).  Признаки определяют конкретные части
целевого формата правил.  Признаки могут быть расширены для добавления дополнительных функций.
Опционально можно расширить возможности признаков, создав новый
формат правил.

Текущие типы признаков:

1. Feature — общий признак
2. Content — признак содержимого
3. IP — IP-признак
4. Protocol — признак протокола

Неоднозначные списки следует записывать как списки вида [x:y]
для диапазона, [x,y] для списка, {x1,x2,x3} для множества
или просто * для подстановочного знака или аналогичного одиночного варианта.

Пример неоднозначного списка:```
ambiguity_list=[[2:9]]
it will generate [3:4], [5:6], etc (any [x:y] such that
x <= y and x >= 2 and y > x and y <= 9).

ambiguity_list=[[3,20]]
it will generate [3,9,10], [3,4,8,12], etc (any list [x1,x2,x3,..]
such that all values falling between 3 and 20.

ambiguity_list=[{5,6,10}]
it will generate a subset of {5,6,10} such as {5,10}, {5}.

ambiguity_list=[[2:9],[3,20],{5,6,11}]
it will pick one of [2:9], [3,20], and {5,6,11} and
generate a corresponding instance (see above)

Пример для файла сценария:``` type=protocol; name=proto; proto_list=[TCP,UDP,ICMP]; complexity_prob=0;ambiguity_list=None; type=ip; name=sip; version=4; complexity_prob=100;

root@kitploit:~
вышеописанное определяет две характеристики: характеристику протокола и исходного
IP-адреса. Протокол называется proto, что важно
только для форматировщика правил, и допустимыми протоколами являются:
IP, TCP, UDP и ICMP. Характеристика IP определена как IPv4,
и все правила будут сложными. Сложность IP уже
является частью класса и не должна добавляться в определение характеристики.
Это будет создавать IP-адреса с использованием нотации CIDR.

Generic Feature Attributes:

- Feature_name: Информационный атрибут, потенциально ценный для
                форматировщика правил.
- lower_bound: Нижняя граница возможных значений. Предполагается,
               что характеристика является числом.
- upper_bound: Противоположность lower_bound.
- complexity_prob: Вероятность использования сложных характеристик для
                   правила. От 0 до 100. По умолчанию 0.
                   Когда используются сложные характеристики, неоднозначная нотация
                   случайным образом выбирается из списка неоднозначностей, или,
                   если характеристика определяет конкретную неоднозначность (например,
                   IP-адреса), то используется она. Когда сложные
                   характеристики не используются, значение генерируется с использованием
                   границ, или, в случае Content,
                   с использованием набора значений распределения, которые
                   ограничивают генерируемую строку рядом
                   ASCII-символов.
- ambiguity_list: Список возможных неоднозначных нотаций.
                  Список, разделённый запятыми, в формате Python
                  (т.е. [a, b, c]).
- toString(): Выводит экземпляр правила для данного набора
              характеристик.

Content Feature -- Inherits from Feature:
- regex: True или False. Если True, будет использовать форматирование PCRE для
         regex, а также возможно добавить опции i, s или
         m к regex.
- length: Определяет среднюю длину генерируемого
          содержимого.
-  min_regex_length: Определяет минимальную длину regex.

Protocol Feature -- Inherits from Feature:
- proto_list: Определяет список возможных протоколов,
                 в виде списка, разделённого запятыми (т.е. [TCP,
                 UDP]).

IP Feature -- Inherits from Feature:
- version: 4 для IP версии 4, 6 для IP версии 6.
           По умолчанию версия 4.

Ambigous notation for ranges, lists, sets:

Range Notation:
  [x:y]  означает от x до y (включительно).

List notation:
  [x,y] означает список из некоторого случайно определённого количества значений,
  где каждое значение больше или равно x
  и меньше или равно y.

Set notation:
  {x1,x2,x3,x4} означает множество значений x1, x2, x3, x4. Оно
  будет генерировать подмножество исходного множества.

Пожалуйста, посмотрите примеры наборов характеристик в папке
example_features для получения дополнительных примеров.
Более подробная информация, а также академическая теория,
лежащая в основе этого, будут добавлены позже.
Скачать инструмент
  • -e eval: Создать ровно один пакет для каждого правила в наборе правил. Игнорирует все остальные входные данные, кроме -f. Каждый пакет будет иметь содержимое, соответствующее выбранному правилу.

  • -E Полная оценка: Создать один пакет для каждого жизнеспособного пути в правиле pcre в наборе правил. Другими словами, ab(c|d)e создаст два пакета: abce и abde. Игнорирует все остальные входные данные, кроме -f.

  • -f Файл правил: чтение одного файла правил по указанному пути и имени файла.

  • -F Конфиг: Укажите файл конфигурации для опций Sniffles. Файл конфигурации — это способ зафиксировать параметры, используемые для запуска Sniffles.

  • -g Временная метка: установите начальное время для временной метки pcap. Это будет количество секунд с 31.12.1969. По умолчанию используется текущее время.

  • -h Префиксы домашних IP: Список префиксов домашней IP-сети. IP-адреса, предназначенные для внутреннего адреса, будут использовать эти префиксы. Префиксы могут обозначать весь 4-байтовый IPv4-адрес в формате xxx.xxx. Например: "10.192.168,172.16".

  • -H Префиксы домашних IPv6: То же, что и префиксы домашних IPv4, только для IPv6. Заметные исключения: разделителем является двоеточие, а между двоеточиями представлены два байта.

  • -i Процент IPv6: Установите это значение от 1 до 100 для генерации пакетов с IPv6. Это определит процент потоков, которые будут IPv6.

  • -I Интенсивность атаки сканирования (т.е. пакетов в секунду).

  • -l Длина содержимого: Установите фиксированную длину содержимого в указанное количество байтов. Меньше единицы установит длину равной содержимому, сгенерированному nfa, или случайному числу от 10 до 1410, если заголовки тоже случайные. При необходимости обрежет или дополнит пакет.

  • -L Задержка: Средняя задержка в микросекундах. Если не установлена, для каждого потока определяется случайная средняя задержка от 1 до 200 мкс. Таким образом, пакеты для данного потока будут иметь среднее время задержки между каждым пакетом в потоке.

  • -M Позволяет использовать распределение MAC для создания пользовательских MAC-адресов в трафике. По умолчанию MAC-адреса генерируются случайным образом. Дополнительную информацию о файле определения MAC можно найти в examples/mac_definition_file.txt. Примечание: Вы можете указать до двух файлов определения MAC, чтобы установить разные значения в зависимости от источника или назначения MAC. Если указать только один файл, он будет использоваться для обоих направлений. Если использовать следующую нотацию, можно указать определенные направления. Например: 'path1:path2'. Path1 будет файлом определения MAC для исходных MAC, а path2 — файлом определения MAC для целевых MAC. Вы также можете использовать вопросительный знак (?), чтобы указать один или другой как случайный, например: '?:path2' — случайные исходные MAC, но использование файла для.

  • -n Не совпадать полностью. Устанавливает содержимое, сгенерированное из правила, чтобы не совпадать полностью (т.е. будет автоматически усекать последние несколько символов). Поведение по умолчанию — полное совпадение содержимого правила.

  • -o Выходной файл: укажите имя выходного файла. По умолчанию файл называется: sniffles.pcap.

  • -O Смещение: Смещение перед началом атаки сканирования. Также используется при вставке нескольких сканирований в трафик. Это количество секунд до начала сканирования. При использовании с -R это становится средним количеством секунд до начала.

  • -p Пакетов на поток: Укажите количество пакетов с содержимым для одного потока. Если в качестве аргумента указано положительное значение, то для каждого потока появится ровно x (где x — указанное целое число) пакетов с содержимым. Если x отрицательное, то для каждого потока появится случайное количество пакетов (от 1 до abs(x)). По умолчанию это значение равно 1.

  • -P Список целевых портов: Для атаки сканирования. Укажите разделенный запятыми список возможных портов или один начальный порт. В противном случае порты будут сканироваться случайным образом. Если указан один начальный порт, порты будут сканироваться по порядку от этой точки до 65535, после чего вернутся к начальной точке. Если указан список, порты в списке будут сканироваться циклически.

  • -r Случайный: Генерировать случайное содержимое, а не из правил. Если правила все еще предоставлены, они используются при генерации заголовков. Примечание: многие функции в правилах могут переопределять определенные аспекты случайной генерации.

  • -R Случайные атаки сканирования: Будет использовать смещение для создания атак сканирования в трафике, но будет использовать смещение только как медиану. Смещение используется для определения времени между завершением одного сканирования и началом нового.

  • -s Атака сканирования: После него указывается разделенный запятыми список IPv4-адресов, указывающих, какой IP-адрес атаковать. Каждый диапазон IP создаст одну атаку сканирования. Диапазоны должны быть как: 192.168.1.1 — это будет атаковать ровно один IP-адрес, в то время как 192.168.1 будет атаковать случайные IP-адреса в диапазоне от 192.168.1.0 до 192.168.1.255.

  • -S Тип сканирования: 1==Syn scan (по умолчанию) 2 == Connection scan.

  • -t TCP Handshake: Включить TCP-рукопожатие во всех TCP-потоках. По умолчанию выключено.

  • -T TCP Teardown: Включить TCP-завершение во всех TCP-потоках. По умолчанию выключено.

  • -v Подробность: Увеличить уровень выходных сообщений.

  • -w Запись содержимого: Записать строки содержимого в файл с именем 'all.re'

  • -W Окно: Окно или длительность, в секундах, атаки сканирования.

  • -Z Вероятность ответа: вероятность того, что сканирование получит ответ. Другими словами, вероятность того, что целевой порт открыт (по умолчанию 20%).