
Инструмент для инспекции сети
Инструмент проверки сетевого трафика
Он использует libnids (через свои Python-привязки от Джона Оберхайда: pynids) для дефрагментации IP и сборки TCP-пакетов (UDP проверяется покадрово) для генерации сетевых потоков. Затем эти потоки проверяются с помощью одного из четырёх режимов проверки:
Сопоставление по регулярным выражениям выполняется с помощью библиотеки re2 и её Python-привязок pyre2, которая поддерживает PCRE, регистронезависимые, инвертированные и многострочные совпадения и т.д. Она обеспечивает огромный прирост производительности по сравнению со встроенным модулем re в Python (который используется как запасной вариант, если re2 не установлен).
Функции нечёткого сравнения строк реализованы через модуль fuzzywuzzy. Он помогает выполнять как точное, так и относительное сопоставление строк. Порог соответствия по умолчанию равен 75, его можно переопределить через CLI.
Libemu и его Python-привязки pylibemu используются для обнаружения шелл-кода. Эвристика GetPC, используемая libemu, обеспечивает приемлемый уровень обнаружения. В некоторых случаях libemu не справляется, но для большинства сценариев её достаточно.
Yara — это сигнатурный инструмент для идентификации и классификации вредоносного ПО. Его привязки yara-python предоставляют API для использования существующих/пользовательских сигнатурных файлов на входном буфере, которым в данном случае является сетевой поток.
Проверка может быть запрошена для любого из направлений CTS/STC/ANY или их комбинаций. Буферы проверки заполняются по мере поступления сетевого трафика, и поэтому совпадения CTS (CTS или ANY) происходят первыми. Если запрошено более одного режима проверки, потоки проверяются в следующем порядке: regex, fuzzy, libemu и, наконец, yara. Для TCP, если какой-либо из режимов проверки завершится успешно, дальнейшая проверка сопоставленного потока не производится. Это оптимистичный подход, включённый по умолчанию. Однако, если для определённого сценария TCP-поток необходимо проверить несколько раз, это можно явно запросить через CLI.
При необходимости проверку можно полностью отключить с помощью опции CLI linemode. Этот режим очень полезен и в сочетании с подходящим outmode позволяет просматривать сетевое взаимодействие в исходном виде, пока оно происходит по проводам. Linemode автоматически включается как запасной вариант, если режим проверки не указан через CLI.
Для UDP совпадения происходят покадрово, и поэтому последующие пакеты будут проверяться даже после того, как совпадение уже было найдено в потоке UDP. Поскольку проверяются только последующие пакеты и их содержимое, это гарантирует, что данные, уже сопоставленные во время предыдущих циклов проверки, не будут проверяться повторно.
Область совпадения может быть ограничена с помощью выражений BPF, модификаторов содержимого типа offset-depth, подобных Snort, или опций CLI для ограничения проверки пакетов/потоков. Для TCP при необходимости можно также завершать сопоставленные потоки. Потоки также можно записывать в файлы в дополнение к выводу на stdout. Некоторые полезные режимы вывода (quite, meta, hex, print, raw) помогают с дальнейшим анализом. Режим outmode meta особенно полезен, так как показывает некоторые действительно важные детали совпадения, например, общий размер совпадения, смещение начала совпадения в сетевом потоке, идентификаторы пакетов, на которые распространяется совпадение, направление пакета, в котором произошло совпадение, и т.д.
Также поддерживается создание pcap-файлов для совпадающих потоков. Если эта функция включена, она сохраняет все пакеты от начала до конца потока. Совпавшие TCP-потоки сохраняются сразу после обнаружения закрытия/сброса, а для тех потоков, где мы не видим закрытия/сброса, они сохраняются перед завершением работы инструмента. Для UDP, поскольку информация о состоянии, подобная закрытию/сбросу, недоступна, они сохраняются только при завершении работы инструмента. Это гарантирует, что все пакеты, включая те, которые поступают после совпадения, будут захвачены в pcap-файле потока. За исключением пользовательского глобального заголовка pcap, покадрового заголовка pcap и заголовка L2 Ethernet II (который не видит flowinspect), всё остальное в сохраняемых захваченных пакетах остаётся как есть.
СПРАВКА: -----```c ______ _ __ / / /_ _ () _________ ___ / / / // / __ \ | /| / / / __ / / __ / _ / / __/ / __/ / // / |/ |/ / / / / ( ) // / / // / // //_/|/|/// /// ._/_/___/_/ //
flowinspect v0.2 - A network inspection tool Ankur Tyagi (7h3rAm [at] gmail [dot] com)
usage: flowinspect.py [-h] (-p --pcap | -d --device) [-c --cregex] [-s --sregex] [-a --aregex] [-i] [-m] [-G --cfuzz] [-H --sfuzz] [-I --afuzz] [-r fuzzminthreshold] [-C --cdfa] [-S --sdfa] [-A --adfa] [-l] [-X --dfaexpr] [-g [graphdir]] [-P --cyararules] [-Q --syararules] [-R --ayararules] [-M] [-y] [-Y --emuprofileoutsize] [-O --offset] [-D --depth] [-T --maxinspstreams] [-U --maxinsppackets] [-t --maxdispstreams] [-u --maxdisppackets] [-b --maxdispbytes] [-w [logdir]] [-o {quite,meta,hex,print,raw}] [-f --bpf] [-v] [-V] [-e] [-k] [-j] [-Z] [-n] [-L]
optional arguments: -h, --help show this help message and exit -p --pcap input pcap file -d --device listening device
RegEx per Direction: -c --cregex regex to match against CTS data -s --sregex regex to match against STC data -a --aregex regex to match against ANY data
RegEx Options: -i ignore case -m disable multiline match
Fuzzy Patterns per Direction: -G --cfuzz string to fuzzy match against CTS data -H --sfuzz string to fuzzy match against STC data -I --afuzz string to fuzzy match against ANY data
Fuzzy Options: -r fuzzminthreshold threshold for fuzzy match (1-100) - default 75
DFAs per Direction ('m[0-9][1-9]='): -C --cdfa DFA expression to match against CTS data -S --sdfa DFA expression to match against STC data -A --adfa DFA expression to match against ANY data
DFA Options: -l switch default boolean operator to 'or' -X --dfaexpr expression to test chain members -g [graphdir] generate DFA transitions graph
Yara Rules per Direction: -P --cyararules Yara rules to match on CTS data -Q --syararules Yara rules to match on STC data -R --ayararules Yara rules to match on ANY data
Shellcode Detection: -M enable shellcode detection -y generate emulator profile for detected shellcode -Y --emuprofileoutsize emulator profile memory size (default 1024K | max: 10240K)
Content Modifiers: -O --offset bytes to skip before matching -D --depth bytes to look at while matching (starting from offset)
Inspection Limits: -T --maxinspstreams max streams to inspect -U --maxinsppackets max packets to inspect