
Una herramienta de análisis y clasificación de malware.
Inhale es una herramienta de análisis y clasificación de malware capaz de automatizar y escalar muchas operaciones de análisis estático.
Esta es la versión beta, destinada a pruebas, retroalimentación y desarrollo comunitario.
Inhale comenzó como una serie de pequeños scripts que usaba al recolectar y analizar una gran cantidad de malware de diversas fuentes. Existen muchos frameworks y herramientas para realizar trabajos similares, pero ninguno se ajustaba realmente a mi flujo de trabajo de encontrar, clasificar y almacenar rápidamente información sobre una gran cantidad de archivos. Algunos también requieren costosas claves API y otros servicios que cuestan dinero.
Terminé convirtiendo estos scripts en algo que la gente pueda instalar y usar rápidamente, ya sea desde un servidor de investigación, una laptop o una computadora de bajo costo como una Raspberry Pi.
Esta herramienta está diseñada para ejecutarse en Linux usando Python3, ElasticSearch, radare2, yara y binwalk. También se necesita jq para imprimir de forma ordenada la salida de la base de datos. Aquí hay algunas instrucciones básicas para instalarla.
Hay varias cosas en el archivo config.yml que aún no están configuradas; déjalas como están a menos que se indique lo contrario en esta documentación.
Instalar los requisitos
python3 -m pip install -r requirements.txt
No es obligatorio usar una base de datos para Inhale, pero si deseas configurar una, solo sigue estas instrucciones y establece la opción "enable_database" en config.yml como True.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo service elasticsearch start
También puedes instalarlo manualmente siguiendo esta documentación
Además, puedes configurar un stack ELK completo para visualización y análisis de datos. No es necesario para usar esta herramienta.
Es importante instalar radare2 desde el repositorio, no desde el gestor de paquetes. Las versiones del gestor de paquetes no incluyen todas las funcionalidades necesarias para Inhale.
git clone https://github.com/radare/radare2
cd radare2
sys/install.sh
sudo apt-get install automake libtool make gcc
wget https://github.com/VirusTotal/yara/archive/v3.10.0.tar.gz
tar xvzf v3.10.0.tar.gz
cd yara-3.10.0/
./bootstrap.sh
./configure
make
sudo make install
Si aparecen errores sobre objetos compartidos, prueba esto para solucionarlo.
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf'
sudo ldconfig
Lo más recomendable es instalar binwalk desde el repositorio.
git clone https://github.com/ReFirmLabs/binwalk
cd binwalk
sudo python3 setup.py install
Hay más información sobre la instalación de funciones adicionales de binwalk aquí.
Esta es una librería que hashea secciones de archivos ELF para el análisis de familias de malware. telfhash depende de tlsh, por lo que las instrucciones para instalar ambos son las siguientes:
Configurar tlsh
git clone https://github.com/trendmicro/tlsh
cd tlsh
./make.sh
cd py_ext/
python3 ./setup.py build
sudo python3 ./setup.py install
Configurar telfhash
git clone https://github.com/trendmicro/telfhash
cd telfhash
sudo python3 setup.py install
Si deseas usar un servidor web para alojar la salida de Inhale y compartirla, establece las variables en config.yml con las rutas adecuadas y asegúrate de que los directorios existan.
web:
gen_html: False
webdir: "/var/www/html/" # El directorio web real
fqdn: "http://threat.land" # Tu sitio web
in_path: "/var/www/html/inhaled/" # La ruta a la salida de Inhale
ex_path: "/var/www/html/exhaled/" # La ruta para la salida en caché de consultas a la base de datos
Para usar la salida HTML, ejecuta Inhale de la siguiente manera:
python3 inhale.py [todos tus argumentos aquí] --html
Especifica el archivo que deseas analizar por tipo:
-f INFILE Analizar un solo archivo
-d DIRECTORY Analizar un directorio de archivos
-u URLFILE Analizar un archivo remoto (url)
-r RDIRECTORY Analizar un directorio remoto (url)
-l URLLIST Analizar una lista de URLs en un archivo de texto
Otras opciones:
-t TAGS Agregar etiquetas adicionales a la salida.
-b Desactivar firmas de binwalk
-y YARARULES Especificar reglas Yara personalizadas
-o OUTDIR Almacenar archivos analizados en un directorio de salida específico (por defecto: ./files/<date>/)
-i Solo mostrar información, no agregar archivos a la base de datos
--html Guardar la salida como HTML en el webdir.
Ejecutar inhale.py realizará todo el análisis sobre un archivo/directorio/url determinado y lo imprimirá en tu terminal.
Ver información sobre /bin/ls, pero sin agregarlo a la base de datos
python3 inhale.py -f /bin/ls -i
Agregar el directorio 'malwarez' a la base de datos
python3 inhale.py -d malwarez/
Descargar este archivo y agregarlo a la base de datos
python3 inhale.py -u https://thugcrowd.com/chal/skull
Descargar todo en este directorio remoto, etiquetarlo todo como "phishing":
python3 inhale.py -r http://someurl.com/opendir/ -t phishing
PROTIP: Usa esta búsqueda de hashtag de Twitter para encontrar directorios abiertos interesantes que posiblemente contengan malware. Úsalo bajo tu propio riesgo.
Puedes pasar tus propias reglas yara con -y. Esto es un gran trabajo en progreso y casi todo en "YaraRules" proviene de https://github.com/kevthehermit/PasteHunter/tree/master/YaraRules. Un saludo a @KevTheHermit
Usa db.sh para consultar (próximamente será un script bonito)
db.sh *algo* | jq .
El siguiente es el modelo de datos actual utilizado para la base de datos elasticsearch. No todos estos campos se usarán para cada archivo. Las etiquetas r2_* suelen reservarse para binarios de algún tipo.