The Lord Of The Strings (LOTS) es una herramienta para Linux gratuita y de código abierto desarrollada en ESET Latinoamérica, la cual se encuentra disponible para su descarga en GitHub, que tiene como objetivo facilitar el análisis de strings extraídos de una muestra maliciosa al eliminar automáticamente los strings basura, acelerando así los tiempos y permitiéndole al analista enfocar toda su atención en los strings que realmente son importantes.

¿Para qué sirve el análisis de strings?

Los analistas de malware suelen realizar análisis de dos tipos sobre las muestras de malware:

  • Análisis estático: Aquellos que se realizan sobre la muestra sin necesidad de ejecutarla. Por ejemplo: desensamblar el código de un ejecutable, analizar los recursos que contiene, que bibliotecas utiliza, etc.
  • Análisis dinámico: Aquellos que implican ejecutar la muestra maliciosa. Por ejemplo: analizar el tráfico de red, monitorear las llamadas al sistema, monitorear los archivos modificados, utilizar un debugger, etc.

Uno de los análisis estáticos más básicos que suele realizarse sobre malware compilado es el análisis de strings. Este consiste en extraer, sin ejecutar la muestra, todos los strings del archivo para luego ser revisados uno a uno por el analista.

El tipo de información que puede ser obtenida mediante este método varía según la muestra, el tipo de malware del que se trate y las protecciones anti-análisis que posea. Sin embargo, generalmente suele ser muy útil y puede servir como una primera aproximación a partir de la cual definir los siguientes pasos del análisis.

A continuación, se enumeran algunas de las múltiples cosas interesantes que se pueden encontrar al analizar los strings:

Bibliotecas utilizadas Nombres de archivos escritos en el sistema
Funciones de la API del SO utilizadas Comandos ejecutados en el sistema
Blancos a los que apunta la amenaza Direcciones del registro modificadas
Direcciones IP a las que se conecta Mensajes que muestra al usuario
Sitios web a los que se conecta Tecnologías que utiliza
Direcciones de bitcoin a las cuales transferir rescates Protecciones anti-análisis que utiliza
Rutas en las cuales copia o escribe archivos Datos del compilador

¿Qué herramientas para el análisis de strings hay disponibles actualmente?

Existen muchas herramientas para obtener dichas strings, siendo las más famosas: Strings de Sysinternals para Windows y strings para Linux. El proceso realizado por estas herramientas consiste en recorrer el archivo binario y extraer todas las secuencias de bytes que sean similares a un string; es decir, aquellas que terminan en 0x00 en el caso de strings ASCII o en 0x0000 en el caso de strings unicode.

Ejemplo de string contenido en un archivo, donde puede observarse que su representación hexadecimal termina en 0x00

Como es de suponer, este tipo de herramientas presenta una gran cantidad de falsos positivos, ya que cualquier secuencia de bytes con estructura similar a un string será considerada un string válido. Mas aún, la cantidad de strings extraídos generalmente aumenta proporcionalmente al tamaño del archivo, con lo cual a partir de una muestra de tan solo algunos megabytes pueden obtenerse cientos de miles de falsos positivos.

Output de ejecutar Strings de SysInternals sobre una muestra maliciosa, donde pueden observarse strings relevantes para el análisis y strings irrelevantes (basura)

¿Cuál es la diferencia con LOTS?

Los strings falso positivo o strings basura son claramente identificables para el analista. Sin embargo, al necesitar ser analizados individualmente, la cantidad comienza a representar una complicación y un retraso en el proceso de análisis. Aquí es donde entra en juego LOTS, cuyo objetivo es descartar automáticamente los strings basura para que el analista pueda enfocar sus esfuerzos únicamente en los strings reales y útiles.

Dada la variabilidad de los strings que pueden encontrarse en una muestra de malware, conteniendo en muchos casos nombres, abreviaturas, números, símbolos, palabras inventadas, longitud y características variables, etc., se optó por utilizar un algoritmo de inteligencia artificial basado en que puedan ser fácilmente extraídos de cada string. De esta manera, se pretende lograr que el algoritmo emplee un criterio similar al que utilizaría un analista para poder discernir si un string es real o es un falso positivo.

Las pruebas realizadas sobre varios sets de datos revelaron una precisión de clasificación de aproximadamente el 97%, tratándose así de una herramienta rápida, precisa y práctica para facilitar el proceso de análisis.

A continuación, puede observarse una comparación entre el resultado de la herramienta strings de Linux y el resultado de LOTS para la misma muestra maliciosa:

Con 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.

 

Con la herramienta strings de 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

 

Se puede notar claramente que el resultado obtenido al utilizar LOTS es mucho más pequeño que el de strings, lo cual se debe, justamente, a la eliminación de los strings basura.

Esperamos que esta herramienta sea de utilidad para toda la comunidad de analistas de malware, permitiendo reducir los esfuerzos empleados en estas tareas, acelerar los tiempos de análisis y automatizar procesos.