
Uma ferramenta de inspeção de rede
Uma ferramenta de inspeção de tráfego de rede
Ele usa libnids (por meio de seus bindings Python de Jon Oberheide: pynids) para desfragmentar IP e remontar pacotes TCP (UDP é inspecionado em base de pacote por pacote) para gerar fluxos de rede. Esses fluxos são então inspecionados usando um dos quatro modos de inspeção:
As correspondências regex são realizadas com a biblioteca re2 e seus bindings Python, pyre2, que suporta PCRE, correspondências sem diferenciar maiúsculas de minúsculas, invertidas e multilinha, etc. Ela tem enormes ganhos de desempenho em comparação com o módulo re embutido no Python (que é usado como alternativa caso o re2 não esteja instalado).
Os recursos de correspondência difusa de strings são executados por meio do módulo fuzzywuzzy. Ele ajuda a realizar tanto uma correspondência exata quanto relativa de strings. Um limite de correspondência padrão de 75 é usado como padrão e pode ser substituído pela cli.
Libemu e seus bindings Python, pylibemu, são usados para detecção de shellcode. As heurísticas GetPC usadas pelo libemu fornecem uma taxa de detecção razoável. Há alguns casos em que o libemu simplesmente falha, mas para a maioria dos casos de uso é bom o suficiente.
Yara é uma ferramenta de identificação e classificação de malware baseada em assinaturas. Seus bindings yara-python fornecem uma API para usar arquivos de assinatura existentes/personalizados em um buffer de entrada que, neste caso, é um fluxo de rede.
A inspeção pode ser solicitada para qualquer uma das direções CTS/STC/ANY ou suas combinações. Os buffers de inspeção são preenchidos à medida que o tráfego de rede chega e, portanto, as correspondências CTS (CTS ou ANY) acontecem primeiro. Se mais de um modo de inspeção for solicitado, os fluxos são inspecionados na seguinte ordem: regex, fuzzy, libemu e, finalmente, yara. Para TCP, se qualquer um dos modos de inspeção tiver sucesso, o fluxo correspondido não será inspecionado novamente. Essa é uma abordagem otimista e está habilitada por padrão. No entanto, se para um determinado caso de uso um fluxo TCP precisar ser inspecionado várias vezes, isso pode ser solicitado explicitamente usando a cli.
A inspeção pode ser completamente desabilitada, se necessário, por meio da opção de cli linemode. Esse modo é realmente útil e, quando combinado com um outmode adequado, ajuda a visualizar a comunicação de rede como ela é enquanto ocorre na rede. O linemode é habilitado automaticamente como alternativa se nenhum modo de inspeção for fornecido via cli.
Para UDP, as correspondências acontecem em base de pacote por pacote e, assim, pacotes subsequentes serão testados mesmo depois que uma correspondência já tenha sido encontrada em um fluxo UDP. Como apenas pacotes subsequentes e seu conteúdo são inspecionados, isso garante que os dados já correspondidos durante ciclos de inspeção anteriores não sejam inspecionados novamente.
O escopo da correspondência pode ser limitado por expressões BPF, modificadores de conteúdo do tipo offset-depth do Snort ou por meio de opções de cli de limite de inspeção de pacotes/fluxos. Para TCP, os fluxos correspondidos também podem ser encerrados, se necessário. Os fluxos também podem ser registrados em arquivos, além de serem despejados no stdout. Alguns modos de saída úteis (quite, meta, hex, print, raw) ajudam em análises adicionais. O outmode meta é especialmente útil, pois mostra detalhes realmente importantes específicos da correspondência, como o tamanho total do conteúdo correspondido, o deslocamento do início de uma correspondência no fluxo de rede, os IDs de pacotes que uma correspondência abrange, a direção do pacote no qual uma correspondência aconteceu, etc.
A geração de pcap para fluxos correspondidos também é suportada. Se habilitada, ela despeja todos os pacotes do início até o fim do fluxo. Fluxos TCP correspondidos são despejados assim que um close/reset é visto e, para aqueles fluxos em que não vemos um close/reset, eles são despejados antes da saída da ferramenta. Para UDP, como não há informações de estado como close/reset disponíveis, eles são despejados apenas quando a ferramenta sai. Isso garante que todos os pacotes, mesmo aqueles que chegam após a correspondência, sejam capturados no pcap do fluxo. Exceto pelo cabeçalho global personalizado do pcap, pelo cabeçalho pcap por pacote e pelo cabeçalho L2 Ethernet II (que não é visto pelo flowinspect), tudo acima permanece como está nos pacotes capturados despejados.
AJUDA: -----```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)