The Lord Of The Strings é uma ferramenta de código aberto, desenvolvida pela ESET América Latina, para extrair as strings relevantes de uma amostra maliciosa, detectando e removendo automaticamente as strings desnecessárias.
The Lord Of The Strings (LOTS) é uma ferramenta gratuita e de código aberto para Linux, desenvolvida pela ESET América Latina, que visa facilitar a análise de strings extraídas de uma amostra maliciosa ao eliminar automaticamente as strings irrelevantes, agilizando os tempos e permitindo que o analista concentre toda a sua atenção nas strings que são realmente importantes. A ferramenta está disponível para download no GitHub.
Para que serve a análise de strings?
Os analistas de malware normalmente realizam dois tipos de análise em amostras:
- Análise estática: aquelas que são realizadas na amostra sem a necessidade de executá-la. Por exemplo: desmontar o código de um executável, analisar os recursos que contém, quais bibliotecas usa, etc.
- Análise dinâmica: Aquelas que envolvem a execução da amostra maliciosa. Por exemplo: analisar o tráfego de rede, monitorar chamadas de sistema, monitorar arquivos modificados, usar um debugger, etc.
Uma das análises estáticas mais básicas normalmente realizadas em malware compilado é a análise de strings. Essa análise consiste em extrair, sem executar a amostra, todas as strings do arquivo para posteriormente serem revisadas uma a uma pelo analista.
O tipo de informação que pode ser obtida por meio desse método varia de acordo com a amostra, o tipo de malware em questão e as proteções contra análise existentes. No entanto, geralmente é muito útil e pode servir como uma primeira aproximação a partir da qual definir as próximas etapas da análise.
Aqui estão algumas das diversas informações interessantes que podem ser encontradas ao analisar as strings:
Bibliotecas usadas | Nomes de arquivos gravados no sistema |
Funções API do sistema operacional usadas | Comandos executados no sistema |
Alvos visados pela ameaça | Endereços de registro modificados |
Endereços IP aos quais se conecta | Mensagens exibidas para o usuário |
Sites aos quais se conecta | Tecnologias utilizadas |
Endereços de bitcoin aos quais transferir resgates | Proteção contra análise |
Caminhos nos quais os arquivos são copiados ou gravados | Dados do compilador |
Quais ferramentas para análise de strings estão disponíveis atualmente?
Existem muitas ferramentas para obter strings, sendo as mais famosas: SysInternals Strings para Windows e Strings para Linux. O processo realizado por essas ferramentas consiste em percorrer o arquivo binário e extrair todas as sequências de bytes que se assemelham a uma string; ou seja, aqueles que terminam em 0x00 no caso de strings ASCII ou 0x0000 no caso de strings Unicode.
Como era de se esperar, esse tipo de ferramenta possui um grande número de falsos positivos, pois qualquer sequência de bytes com estrutura semelhante a uma string será considerada uma string válida. Além disso, o número de strings extraídas geralmente aumenta proporcionalmente ao tamanho do arquivo, portanto, centenas de milhares de falsos positivos podem ser obtidos de uma amostra de apenas alguns megabytes.

Output de execução do SysInternals Strings em uma amostra maliciosa, na qual podemos observar strings relevantes para análise e strings irrelevantes (lixo).
Qual a diferença com o LOTS?
As strings de falsos positivos ou strings irrelevantes são perfeitamente identificáveis para o analista. Porém, como precisa ser analisada individualmente, a quantidade passa a representar uma complicação e um atraso no processo de análise. É aí que entra o LOTS, cujo objetivo é descartar automaticamente as strings irrelevantes para que o analista possa se enfocar apenas nas strings reais e úteis.
Considerando a variabilidade das strings que podem ser encontradas em uma amostra de malware, contendo em muitos casos nomes, abreviações, números, símbolos, palavras inventadas, comprimento e características variáveis, etc., optou-se por usar um algoritmo de inteligência artificial tendo em conta que podem ser facilmente extraídos de cada string. Dessa forma, pretende-se que o algoritmo utilize um critério semelhante ao utilizado por um analista para poder discernir se uma string é real ou um falso positivo.
Os testes realizados em vários sets de dados revelaram uma precisão de classificação de aproximadamente 97%, o que a torna uma ferramenta rápida, precisa e prática para facilitar o processo de análise.
Veja uma comparação entre o resultado da ferramenta de strings para Linux e o resultado do LOTS para a mesma amostra maliciosa:
Com o LOTS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
!This program cannot be run in DOS mode. Rich .text @.data .rsrc TOpRj TOpRj uNSW Delete NoRemove ForceRemove CreateFileW CreateFileA GetModuleHandleA GetModuleHandleW GetModuleFileNameA kernel32.dll GetModuleFileNameW error occured SKyu invalid distance too far back invalid distance code invalid literal/length code too many length or distance symbols invalid distances set invalid bit length repeat invalid literal/lengths set invalid code lengths set invalid stored block lengths invalid block type incorrect length check incorrect data check header crc mismatch unknown header flags set incorrect header check invalid window size unknown compression method incompatible version buffer error insufficient memory data error stream error file error stream end need dictionary bad allocation Visual C++ CRT: Not enough memory to complete call to strerror. CorExitProcess runtime error An application has made an attempt to load the C runtime library incorrectly. |
Com a ferramenta strings para Linux:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
!This program cannot be run in DOS mode. Rich .text `.rdata @.data .rsrc QRPV QRPV QUVW [_^]Y Qj@SP Pj@SW L$(WQ RPSW VWP3 L$Pj +t$ SV uP9D$ t hx3B hh1B SUVW _^][ t>%F _^][ _^][ D$3UV D$(W D$4x D$5a D$>f D$A3 D$Dt D$9b t:;L$ t:;L$ PGWS WPWUj VPWUj _^][ VPWUj VPWUj _^][ QRVW }3@u E#+E/_^ZY }3@u }3@u% }3@u& }3@u }3@u |
É possível perceber claramente que o resultado obtido com o uso do LOTS é muito menor que o de strings para Linux, o que se deve justamente à eliminação das strings irrelevantes.
Esperamos que essa ferramenta seja útil para toda a comunidade de analistas de malware, permitindo reduzir os esforços empregados nessas tarefas, agilizar os tempos de análise e automatizar processos.
Discussão