
Una herramienta de aprendizaje automático que clasifica cadenas según su relevancia para el análisis de malware.
StringSifter es una herramienta de aprendizaje automático que clasifica automáticamente las cadenas según su relevancia para el análisis de malware.
StringSifter requiere Python versión 3.9 o posterior. Ejecuta los siguientes comandos para obtener el código, ejecutar las pruebas unitarias y usar la herramienta:
pip install stringsifter
Para desarrollo, usa poetry:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with dev
Para ejecutar las pruebas unitarias desde el directorio de instalación de StringSifter:
poetry run tests -v
El comando pip install instala dos scripts ejecutables, flarestrings y rank_strings, en tu entorno de Python. Cuando desarrolles desde el código fuente, usa pipenv run flarestrings y pipenv run rank_strings.
flarestrings imita las funcionalidades de strings de GNU binutils, y rank_strings acepta entrada por tubería, por ejemplo:
flarestrings <my_sample> | rank_strings
rank_strings admite varios argumentos de línea de comandos. El argumento posicional input_strings especifica un archivo de cadenas a clasificar. Los argumentos opcionales son:
Las cadenas clasificadas se escriben en la salida estándar, a menos que se especifique la opción --batch, en cuyo caso las salidas clasificadas se escriben en archivos llamados <input_file>.ranked_strings.
flarestrings admite una opción -n (o --min-len) para imprimir secuencias de caracteres que tengan al menos min-len caracteres de longitud, en lugar del valor predeterminado de 4. Por ejemplo:
flarestrings -n 8 <my_sample> | rank_strings
imprimirá y clasificará solo las cadenas de longitud 8 o mayor.
docker build -t stringsifter -f docker/Dockerfile .
flarestrings o rank_strings para usar el comando respectivo. Los comandos contenerizados se pueden usar en tuberías:cat <my_sample> | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings
-v para exponer un directorio del host al contenedor:docker run -v <my_malware>:/samples -it stringsifter
donde <my_malware> contiene muestras para el análisis, por ejemplo:
docker run -v $HOME/malware/binaries:/samples -it stringsifter
flarestrings /samples/<my_sample> | rank_strings <options>
Todos los argumentos de línea de comandos son compatibles con los scripts contenerizados.
StringSifter se puede aplicar a listas arbitrarias de cadenas, lo que lo hace útil para los profesionales que buscan obtener información de fuentes alternativas de recopilación de inteligencia, como volcados de memoria en vivo, ejecuciones en sandbox o binarios que contienen cadenas ofuscadas. Por ejemplo, FireEye Labs Obfuscated Strings Solver (FLOSS) extrae cadenas imprimibles igual que Strings, pero además revela cadenas ofuscadas que han sido codificadas, empaquetadas o construidas manualmente en la pila. Se puede usar como reemplazo directo de Strings, lo que significa que StringSifter también se puede invocar sobre la salida de FLOSS usando el siguiente comando:
$PY2_VENV/bin/floss –q <options> <my_sample> | rank_strings <options>
Notas:
–q suprime los encabezados y el formato para mostrar solo las cadenas extraídas. Para obtener más información sobre las opciones adicionales de FLOSS, consulta sus Documentos de uso.floss o rank_strings debe incluir una ruta relativa que haga referencia a un entorno virtual de Python.stringsEsta distribución incluye el programa flarestrings para garantizar una salida predecible en todas las plataformas. Si eliges ejecutar el strings instalado en tu sistema, ten en cuenta que sus opciones no son consistentes entre versiones y plataformas:
La mayoría de las distribuciones de Linux incluyen el programa strings de GNU Binutils. Para extraer cadenas "anchas" y "estrechas", el programa debe ejecutarse dos veces, redirigiendo a un archivo de salida:
strings <my_sample> > strs.txt # cadenas estrechas
strings -el <my_sample> >> strs.txt # cadenas anchas. nota el ">>"
Algunas versiones de BSD strings incluidas con MacOS no admiten cadenas anchas. También ten en cuenta que la opción -a de strings para escanear el archivo completo puede estar deshabilitada en la configuración predeterminada. Sin -a, se pueden perder cadenas informativas. Recomendamos instalar GNU Binutils mediante Homebrew o MacPorts para obtener una versión de strings que admita caracteres anchos. Ten cuidado de invocar la versión correcta de strings.
strings no está instalado por defecto en Windows. Recomendamos instalar Windows Sysinternals, Cygwin o Malcode Analyst Pack para obtener un strings funcional.
Esta versión de StringSifter se entrenó usando salidas de Strings de binarios de malware muestreados asociados con el primer conjunto de datos EMBER. Las etiquetas ordinales se generaron mediante procedimientos de supervisión débil, y el aprendizaje supervisado se realiza con Gradient Boosted Decision Trees con una función objetivo de aprendizaje para clasificar (learning-to-rank). Consulta Enlaces rápidos para obtener más detalles técnicos. Ten en cuenta que actualmente no se dispone de datos etiquetados ni del código de entrenamiento, aunque podríamos reconsiderar este enfoque en futuras versiones.
Usamos GitHub Issues para publicar errores y solicitudes de funciones.
flarestrings se deriva de la excelente herramienta FLOSS.| Opción |
|---|
| Significado |
|---|
| --scores (-s) | Incluir las puntuaciones de clasificación en la salida |
| --limit (-l) | Limitar la salida a las limit cadenas mejor clasificadas |
| --min-score (-m) | Limitar la salida a cadenas con puntuación >= min-score |
| --batch (-b) | Especificar una carpeta de salidas de strings para procesamiento por lotes |