
O Stringsifter é uma ferramenta de aprendizado de máquina que classifica automaticamente strings com base em sua relevância para a análise de malware.
O Stringsifter requer Python versão 3.9 ou mais recente. Execute os seguintes comandos para obter o código, executar testes de unidade e usar a ferramenta:
pip install stringsifterPara desenvolvimento, use poesia:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with devPara executar testes de unidade no diretório de instalação do Stringsifter:
poetry run tests -v O comando pip install instala dois scripts flarestrings e rank_strings em seu ambiente Python. Ao se desenvolver a partir da fonte, use pipenv run flarestrings e pipenv run rank_strings .
flarestrings imitam recursos das strings de GNU Binutils, e rank_strings aceita entrada canalizada, por exemplo:
flarestrings < my_sample > | rank_strings rank_strings suporta vários argumentos da linha de comando. O argumento posicional input_strings especifica um arquivo de strings para classificar. Os argumentos opcionais são:
| Opção | Significado |
|---|---|
| --Cores (-s) | Inclua as pontuações de classificação na saída |
| --limite (-l) | Limite a saída ao limit superior classificado |
| --min-escore (-m) | Limite a saída para strings com pontuação> = min-score |
| -Batch (-b) | Especifique uma pasta de strings para processamento em lote |
Strings classificados são gravados 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 denominados <input_file>.ranked_strings .
flarestrings suportam uma opção -n (ou --min-len ) para imprimir sequências de caracteres com pelo menos caracteres min-len , em vez do padrão 4. Por exemplo:
flarestrings -n 8 < my_sample > | rank_stringsImprimirá e classificará apenas seqüências de comprimento 8 ou mais.
docker build -t stringsifter -f docker/Dockerfile .flarestrings ou rank_strings para usar o comando respectivo. Os comandos contêineres 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 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 stringsifterflarestrings /samples/ < my_sample > | rank_strings < options >Todos os argumentos da linha de comando são suportados nos scripts de contêiner.
Os cordões podem ser aplicados a listas arbitrárias de cordas, tornando-o útil para os profissionais que procuram obter idéias de fontes alternativas de coleta de inteligência, como despejos de memória viva, caixas de areia ou binários que contêm cordas ofuscadas. Por exemplo, o Fireeye Labs ofuscou Strings Solver (Floss) extrai strings imprimíveis, assim como as cordas , mas também revela cordas ofuscadas que foram codificadas, embaladas ou construídas manualmente na pilha. Ele pode ser usado como uma substituição em linha para strings, o que significa que as cordas podem ser chamadas de maneira semelhante na saída do fio dental usando o seguinte comando:
$PY2_VENV /bin/floss –q < options > < my_sample > | rank_strings < options >Notas:
–q suprime os cabeçalhos e a formatação para mostrar apenas cordas extraídas. Para saber mais sobre opções adicionais de fio dental, consulte seus documentos de uso.floss ou rank_strings deve incluir um caminho relativo que referente um ambiente virtual python.strings de corrida Essa distribuição inclui o programa flarestrings para garantir uma saída previsível entre as plataformas. Se você optar por executar strings instaladas do seu sistema, observe que suas opções não são consistentes em versões e plataformas:
A maioria das distribuições Linux inclui o programa strings do GNU Binutils. Para extrair strings "largo" e "estreito", o programa deve ser executado duas vezes, tubulando -se 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 de strings BSD embaladas com macOS não suportam seqüências amplas. Observe também que a opção -a para strings para digitalizar todo o arquivo pode ser desativada na configuração padrão. Sem -a cordas informativas pode ser perdida. Recomendamos instalar o GNU Binutils via Homebrew ou Macports para obter uma versão de strings que suporta caracteres amplos. Use o cuidado para invocar a versão correta do strings .
strings não são instaladas por padrão no Windows. Recomendamos instalar o pacote de analistas do Windows Sysinternals, Cygwin ou Malcode para obter um strings de trabalho.
Esta versão do Stringsifter foi treinada usando saídas de strings a partir de binários de malware amostrados associados ao primeiro conjunto de dados da Ember. Os rótulos ordinais foram gerados usando procedimentos de supervisão fracos, e o aprendizado supervisionado é realizado por árvores de decisão aumentadas de gradiente com uma função objetiva de aprendizado a rank. Consulte Links rápidos para obter 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 lançamentos futuros.
Utilizamos problemas do GitHub para postar bugs e solicitações de recursos.
flarestrings é derivado do excelente fio de ferramenta.