
Gera impressões digitais únicas de requisições HTTP de malware a partir de arquivos pcap usando Tshark, permitindo a identificação e agrupamento de famílias de malware através da análise da estrutura da requisição, cabeçalhos e características do payload.
Ferramenta para fingerprinting de requisições HTTP de malware. Baseada em Tshark e escrita em Python3. Estágio de protótipo funcional :-)
Seu principal objetivo é fornecer representações únicas (fingerprints) de requisições de malware, que auxiliam na sua identificação. Única significa aqui que cada fingerprint deve ser vista apenas em uma família de malware específica, porém uma mesma família pode ter múltiplas fingerprints. O Hfinger representa a requisição de forma mais curta do que imprimir a requisição inteira, mas ainda interpretável por humanos.
O Hfinger pode ser usado na análise manual de malware, mas também em sistemas de sandbox ou SIEMs. As fingerprints geradas são úteis para agrupar requisições, identificar requisições pertencentes a famílias específicas de malware, distinguir diferentes operações de uma mesma família, ou descobrir requisições maliciosas desconhecidas omitidas por outros sistemas de segurança, mas que compartilham a mesma fingerprint.
Um artigo acadêmico acompanha o trabalho nesta ferramenta, descrevendo, por exemplo, a motivação das escolhas de design, e a avaliação da ferramenta em comparação com p0f, FATT e Mercury.
A premissa básica deste projeto é que as requisições HTTP de diferentes famílias de malware são mais ou menos únicas, podendo ser fingerprintadas para fornecer algum tipo de identificação. O Hfinger retém informações sobre a estrutura e os valores de alguns cabeçalhos para fornecer meios para análises posteriores. Por exemplo, agrupamento de requisições semelhantes – nesse momento, ainda é um trabalho em andamento.
Após análise das requisições HTTP e cabeçalhos de malware, identificamos algumas partes das requisições como sendo as mais distintivas. Estas incluem:
Adicionalmente, algumas características padrão da URL da requisição também foram consideradas. Todas essas partes foram traduzidas em um conjunto de características, descritas em detalhes aqui.
As características acima são traduzidas em uma representação de comprimento variável, que é a fingerprint real. Dependendo do modo de relatório, diferentes características são usadas para criar as fingerprints das requisições. Mais informações sobre esses modos são apresentadas abaixo. O processo de seleção de características será descrito no artigo acadêmico a ser publicado.
Requisitos mínimos necessários antes da instalação:
Python >= 3.3,Tshark >= 2.2.0.Instalação disponível via PyPI:
pip install hfinger
O Hfinger foi testado no Xubuntu 22.04 LTS com o pacote tshark na versão 3.6.2,
mas deve funcionar com versões mais antigas, como 2.6.10 no Xubuntu 18.04 ou 3.2.3 no Xubuntu 20.04.
Observe que, como em qualquer PoC, você deve executar o Hfinger em um ambiente isolado, pelo menos com um ambiente virtual Python. Sua configuração não é abordada aqui, mas você pode tentar este tutorial.
Após a instalação, você pode chamar a ferramenta diretamente da linha de comando com hfinger
ou como um módulo Python com python -m hfinger.
Por exemplo:
foo@bar:~$ hfinger -f /tmp/test.pcap
[{"epoch_time": "1614098832.205385000", "ip_src": "127.0.0.1", "ip_dst": "127.0.0.1", "port_src": "53664", "port_dst": "8080", "fingerprint": "2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4"}]
A ajuda pode ser exibida com as opções curta -h ou longa --help:
usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4}] [-v]
[-l LOGFILE]
Hfinger - fingerprinting de requisições HTTP de malware armazenadas em arquivos pcap
argumentos opcionais:
-h, --help mostra esta mensagem de ajuda e sai
-f FILE, --file FILE Lê um único arquivo pcap
-d DIR, --directory DIR
Lê arquivos pcap do diretório DIR
-o output_path, --output-path output_path
Caminho para o diretório de saída
-m {0,1,2,3,4}, --mode {0,1,2,3,4}
Modo de relatório da fingerprint.
0 - número semelhante de colisões e fingerprints que o modo 2, mas usando menos características,
1 - representação de todas as características projetadas, mas um pouco mais de colisões que os modos 0, 2 e 4,
2 - ideal (modo padrão),
3 - menor número de fingerprints geradas, mas o maior número de colisões,
4 - maior entropia da fingerprint, mas ligeiramente mais fingerprints que os modos 0-2
-v, --verbose Relata informações sobre valores não padronizados na requisição
(por exemplo, caracteres não ASCII, ausência de tags CRLF, valores não presentes na lista de configuração).
Sem --logfile (-l) imprimirá no erro padrão.
-l LOGFILE, --logfile LOGFILE
Arquivo de log de saída no modo verboso. Implica a opção -v ou --verbose.
Você deve fornecer um caminho para um arquivo pcap (-f), ou um diretório (-d) com arquivos pcap. A saída está no formato JSON. Ela será impressa na saída padrão ou no diretório fornecido (-o) usando o nome do arquivo de origem. Por exemplo, a saída do comando:
hfinger -f example.pcap -o /tmp/pcap
será salva em:
/tmp/pcap/example.pcap.json
O modo de relatório -m/--mode pode ser usado para alterar o modo de relatório padrão fornecendo um número inteiro no intervalo 0-4.
Os modos diferem nas características da requisição representadas ou nos modos de arredondamento.
O modo padrão (2) foi escolhido por nós para representar todas as características que geralmente são usadas durante a análise das requisições,
mas também oferece baixo número de colisões e fingerprints geradas.
Com outros modos, você pode alcançar diferentes objetivos.
Por exemplo, no modo 3 você obtém um número menor de fingerprints geradas,
mas uma chance maior de colisão entre famílias de malware. Se não tiver certeza, não precisa alterar nada.
Mais informações sobre os modos de relatório estão aqui.
A partir da versão 0.2.1, o Hfinger é menos verboso. Você deve usar -v/--verbose se quiser receber
informações sobre valores não padronizados de cabeçalhos encontrados, caracteres não ASCII na parte não-payload da
requisição, ausência de tags CRLF (\r\n\r\n) e outros problemas com as requisições analisadas que não sejam erros de aplicação.
Quando tais problemas forem encontrados no modo verboso, eles serão impressos na saída de erro padrão.
Você também pode salvar o log em um local definido usando a opção -l/--log (que implica -v/--verbose).
Os dados do log serão anexados ao arquivo de log.
A partir da versão 0.2.0, o Hfinger suporta importação para outras aplicações Python.
Para usá-lo em seu aplicativo, basta importar a função hfinger_analyze de hfinger.analysis
e chamá-la com o caminho para o arquivo pcap e o modo de relatório.
O resultado retornado é uma lista de dicionários com os resultados do fingerprinting.
Por exemplo:
from hfinger.analysis import hfinger_analyze