
Uma ferramenta de aprendizado de máquina que classifica strings com base em sua relevância para análise de malware.
O StringSifter é uma ferramenta de aprendizado de máquina que classifica automaticamente strings com base em sua relevância para análise de malware.
O StringSifter requer a versão 3.9 ou superior do Python. Execute os seguintes comandos para obter o código, executar testes unitários e usar a ferramenta:
pip install stringsifter
Para desenvolvimento, use poetry:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with dev
Para executar testes unitários a partir do diretório de instalação do StringSifter:
poetry run tests -v
O comando pip install instala dois scripts executáveis, flarestrings e rank_strings, no seu ambiente python. Ao desenvolver a partir do código-fonte, use pipenv run flarestrings e pipenv run rank_strings.
O flarestrings imita recursos do strings do GNU binutils, e o rank_strings aceita entrada via pipe, por exemplo:
flarestrings <my_sample> | rank_strings
O rank_strings suporta vários argumentos de linha de comando. O argumento posicional input_strings especifica um arquivo de strings para classificar. Os argumentos opcionais são:
| Opção | Significado |
|---|---|
| --scores (-s) | Incluir as pontuações de classificação na saída |
| --limit (-l) | Limitar a saída às principais limit strings classificadas |
| --min-score (-m) | Limitar a saída às strings com pontuação >= min-score |
| --batch (-b) | Especificar uma pasta de saídas de strings para processamento em lote |
As strings classificadas são escritas na saída padrão, a menos que a opção --batch seja especificada, fazendo com que as saídas classificadas sejam gravadas em arquivos chamados <input_file>.ranked_strings.
O flarestrings suporta a opção -n (ou --min-len) para imprimir sequências de caracteres com pelo menos min-len caracteres, em vez do padrão de 4. Por exemplo:
flarestrings -n 8 <my_sample> | rank_strings
imprimirá e classificará apenas strings de comprimento igual ou superior a 8.
docker build -t stringsifter -f docker/Dockerfile .
flarestrings ou rank_strings para usar o respectivo comando. Os comandos conteinerizados podem ser usados em pipelines:cat <my_sample> | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings
-v para expor um diretório do host ao contêiner:docker run -v <my_malware>:/samples -it stringsifter
onde <my_malware> contém amostras para análise, por exemplo:
docker run -v $HOME/malware/binaries:/samples -it stringsifter
flarestrings /samples/<my_sample> | rank_strings <options>
Todos os argumentos de linha de comando são suportados nos scripts conteinerizados.
O StringSifter pode ser aplicado a listas arbitrárias de strings, sendo útil para profissionais que buscam obter insights de fontes alternativas de coleta de inteligência, como dumps de memória ativa, execuções em sandbox ou binários que contêm strings ofuscadas. Por exemplo, o FireEye Labs Obfuscated Strings Solver (FLOSS) extrai strings imprimíveis assim como o Strings faz, mas também revela strings ofuscadas que foram codificadas, empacotadas ou construídas manualmente na pilha. Ele pode ser usado como um substituto direto do Strings, o que significa que o StringSifter pode ser igualmente invocado na saída do FLOSS usando o seguinte comando:
$PY2_VENV/bin/floss –q <options> <my_sample> | rank_strings <options>
Notas:
–q suprime cabeçalhos e formatação para mostrar apenas as strings extraídas. Para saber mais sobre opções adicionais do FLOSS, consulte a Documentação de Uso.floss ou rank_strings deve incluir um caminho relativo referenciando um ambiente virtual python.stringsEsta distribuição inclui o programa flarestrings para garantir saída previsível em diferentes plataformas. Se você optar por executar o strings instalado no seu sistema, observe que suas opções não são consistentes entre versões e plataformas:
A maioria das distribuições Linux inclui o programa strings do GNU Binutils. Para extrair strings "largas" e "estreitas", o programa deve ser executado duas vezes, redirecionando para um arquivo de saída:
strings <my_sample> > strs.txt # narrow strings
strings -el <my_sample> >> strs.txt # wide strings. note the ">>"
Algumas versões do strings do BSD incluídas no MacOS não suportam strings largas. Observe também que a opção -a do strings para escanear o arquivo inteiro pode estar desabilitada na configuração padrão. Sem -a, strings informativas podem ser perdidas. Recomendamos instalar o GNU Binutils via Homebrew ou MacPorts para obter uma versão do strings que suporte caracteres largos. Tenha cuidado para invocar a versão correta do strings.
O strings não é instalado por padrão no Windows. Recomendamos instalar Windows Sysinternals, Cygwin ou Malcode Analyst Pack para obter um strings funcional.
Esta versão do StringSifter foi treinada usando saídas do Strings de binários de malware amostrados associados ao primeiro conjunto de dados EMBER. Rótulos ordinais foram gerados usando procedimentos de supervisão fraca, e o aprendizado supervisionado é realizado por Gradient Boosted Decision Trees com uma função objetivo de aprendizado para ranqueamento. Consulte Links Rápidos para mais detalhes técnicos. Observe que nem os dados rotulados nem o código de treinamento estão disponíveis atualmente, embora possamos reconsiderar essa abordagem em versões futuras.
Usamos o GitHub Issues para reportar bugs e solicitar recursos.
flarestrings é derivado da excelente ferramenta FLOSS.