
Extrator de Padrões para Código Ofuscado
Fnord é um extrator de padrões para código ofuscado
O Fnord tem duas funções principais:
O Fnord processa o arquivo com uma janela deslizante de tamanho variável para extrair todas as sequências com um comprimento mínimo -m X (padrão: 4) até um comprimento máximo -x X (padrão: 40). Para cada comprimento, o Fnord apresentará as sequências mais frequentes -t X (padrão: 3) numa tabela.
Cada linha na tabela contém:
O Fnord também gera uma regra YARA experimental. Durante a criação da regra YARA, ele calcula uma pontuação baseada no comprimento da sequência e no número de ocorrências (comprimento * ocorrências). Em seguida, processa cada sequência removendo todos os caracteres não-letra e comparando-as com uma lista de palavras-chave (sem distinção entre maiúsculas/minúsculas) para detetar sequências que são mais interessantes que outras. Antes de escrever cada string na regra, o Fnord calcula uma distância de Levenshtein e ignora sequências que são demasiado semelhantes a sequências já integradas na regra.
[Experimental] O Fnord foi criado há alguns dias e testei-o com um punhado de amostras. O meu palpite é que vou ajustar os valores predefinidos nas próximas semanas e adicionar mais algumas palavras-chave, filtros e opções de pontuação.
Se encontrou código ofuscado numa amostra, utilize um editor hexadecimal para extrair a secção ofuscada da amostra e guarde-a num novo ficheiro. Use esse novo ficheiro para a análise.
Brinque com as opções -s, -k, -r, --yara-strings, -m e -e.
Por favor, envie-me amostras que produzam regras YARA fracas que poderiam ser melhores.
____ __
/ __/__ ___ _______/ /
/ _// _ \/ _ \/ __/ _ /
/_/ /_//_/\___/_/ \_,_/ Pattern Extractor for Obfuscated Code
v0.7, Florian Roth
usage: fnord.py [-h] [-f file] [-m min] [-x max] [-t top] [-n min-occ]
[-e min-entropy] [--strings] [--include-padding] [--debug]
[--noyara] [-s similarity] [-k keywords-multiplier]
[-r structure-multiplier] [-c count-limiter] [--yara-exact]
[--yara-strings max] [--show-score] [--show-count]
[--author author]
Fnord - Pattern Extractor for Obfuscated Code
optional arguments:
-h, --help show this help message and exit
-f file File to process
-m min Minimum sequence length
-x max Maximum sequence length
-t top Number of items in the Top x list
-n min-occ Minimum number of occurrences to show
-e min-entropy Minimum entropy
--strings Show strings only
--include-padding Include 0x00 and 0x20 in the extracted strings
--debug Debug output
YARA Rule Creation:
--noyara Do not generate an experimental YARA rule
-s similarity Allowed similarity (use values between 0.1=low and
10=high, default=1.5)
-k keywords-multiplier
Keywords multiplier (multiplies score of sequences if
keyword is found) (best use values between 1 and 5,
default=2.0)
-r structure-multiplier
Structure multiplier (multiplies score of sequences if
it is identified as code structure and not payload)
(best use values between 1 and 5, default=2.0)
-c count-limiter Count limiter (limts the impact of the count by
capping it at a certain amount) (best use values
between 5 and 100, default=20)
--yara-exact Add magic header and magic footer limitations to the
rule
--yara-strings max Maximum sequence length
--show-score Show score in comments of YARA rules
--show-count Show count in sample in comments of YARA rules
--author author YARA rule author
git clone https://github.com/Neo23x0/Fnord.git e cd Fnordpip3 install -r ./requirements.txtpython3 ./fnord.py --helppython3 fnord.py -f ./test/wraeop.sct --yara-strings 10
python3 fnord.py -f ./test/vbs.txt --show-score --show-count -t 1 -x 20
python3 fnord.py -f ./test/inv-obf.txt --show-score --show-count -t 1 --yara-strings 4 --yara-exact



A pasta ./test contém scripts que são maliciosos e podem ser detetados pelo seu antivírus local. Eles não prejudicam o seu sistema desde que não os execute.
O yarGen utiliza uma abordagem de lista branca para filtrar as strings que são melhores para a criação de uma regra YARA. O yarGen aplica algumas expressões regulares para ajustar as pontuações das strings antes de criar as regras YARA. Mas a sua abordagem é muito diferente do método utilizado pelo Fnord, que calcula a pontuação das sequências de bytes com base em estatísticas.
Enquanto o yarGen é melhor usado para código não ofuscado, o Fnord é apenas para código ofuscado e deve produzir resultados muito melhores que o yarGen.
Siga-me no Twitter para atualizações @cyb3rops