
Stringsifter es una herramienta de aprendizaje automático que clasifica automáticamente las cadenas en función de su relevancia para el análisis de malware.
Stringsifter requiere Python versión 3.9 o más nuevo. Ejecute los siguientes comandos para obtener el código, ejecute pruebas unitarias y use la herramienta:
pip install stringsifterPara el desarrollo, use poesía:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with devPara ejecutar 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 su entorno Python. Cuando se desarrolle desde la fuente, use pipenv run flarestrings y pipenv run rank_strings .
flarestrings imita las características de strings de GNU Binutils, y rank_strings acepta la entrada tuberías, por ejemplo:
flarestrings < my_sample > | rank_strings rank_strings admite una serie de argumentos de línea de comandos. El argumento posicional input_strings especifica un archivo de cadenas a rango. Los argumentos opcionales son:
| Opción | Significado |
|---|---|
| -puntajes (-s) | Incluir los puntajes de rango en la salida |
| --limit (-l) | Límite de salida a las cadenas clasificadas limit superior |
| --Min-Score (-m) | Limite la salida a las cadenas con puntaje> = min-score |
| -Batch (-B) | Especifique una carpeta de salidas strings para el procesamiento por lotes |
Las cadenas clasificadas se escriben en la salida estándar a menos que se especifique la opción --batch , lo que hace que las salidas clasificadas se escriban en archivos llamados <input_file>.ranked_strings .
flarestrings admite una opción -n (o --min-len ) para imprimir secuencias de caracteres que tienen al menos caracteres min-len de largo, en lugar de los 4 predeterminados. Por ejemplo:
flarestrings -n 8 < my_sample > | rank_stringsImprimirá y clasificará solo cadenas de longitud 8 o más.
docker build -t stringsifter -f docker/Dockerfile .flarestrings o argumento rank_strings para usar el comando respectivo. Los comandos contenedores 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 de 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 stringsifterflarestrings /samples/ < my_sample > | rank_strings < options >Todos los argumentos de la línea de comandos son compatibles en los scripts contenedores.
Stringsifter se puede aplicar a listas arbitrarias de cuerdas, por lo que es útil para los profesionales que buscan obtener ideas de fuentes alternativas de recolección de inteligencia, como vertederos de memoria viva, carreras de arena o binarios que contienen cuerdas ofuscadas. Por ejemplo, FireEye Labs ofuscados de las cuerdas de solucionador (hilo dental) extrae cadenas imprimibles al igual que las cadenas , pero también revela cadenas ofuscadas que se han codificado, empacadas o construidas manualmente en la pila. Se puede usar como un reemplazo en línea para cadenas, lo que significa que Stringsifter se puede invocar de manera similar en la salida de hilo dental utilizando 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 cadenas extraídas. Para obtener más información sobre opciones de hilo dental adicional, consulte sus documentos de uso.floss o rank_strings debe incluir una ruta relativa que hace referencia a un entorno virtual de Python.strings de ejecución Esta distribución incluye el programa flarestrings para garantizar una salida predecible en todas las plataformas. Si elige ejecutar strings instaladas de su sistema, tenga en cuenta que sus opciones no son consistentes en las 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, con un archivo de salida:
strings < my_sample > > strs.txt # narrow strings
strings -el < my_sample > >> strs.txt # wide strings. note the ">>" Algunas versiones de strings BSD empaquetadas con macOS no admiten cadenas anchas. También tenga en cuenta que la opción -a para las cadenas para escanear todo el archivo puede deshabilitarse en la configuración predeterminada. Sin -Un, se pueden perder -a strings informativo. Recomendamos instalar Binutils de GNU a través de Homebrew o MacPorts para obtener una versión de strings que admite personajes amplios. Use Care para invocar la versión correcta de strings .
strings no se instalan de forma predeterminada en Windows. Recomendamos instalar Windows Sysinternals, Cygwin o Malcode Analyst Pack para obtener una strings de trabajo.
Esta versión de Stringsifter fue entrenada utilizando salidas de cadenas de binarios de malware muestreados asociados con el primer conjunto de datos de Ember. Las etiquetas ordinales se generaron utilizando procedimientos de supervisión débiles, y el aprendizaje supervisado se realiza mediante árboles de decisión impulsados por el gradiente con una función objetivo de aprendizaje hasta el rango. Vea enlaces rápidos para obtener más detalles técnicos. Tenga en cuenta que ni los datos etiquetados ni el código de capacitación están actualmente disponibles, aunque podemos reconsiderar este enfoque en futuras versiones.
Utilizamos problemas de GitHub para publicar errores y solicitudes de funciones.
flarestrings se deriva del excelente hilo dental de herramientas.