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.
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:
!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:
!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.