En el marco de un proyecto genial que estamos construyendo en @DerechosDigitales quisimos configurar con la menor cantidad de equipo posible un punto de acceso inalámbrico con capacidades de:
- Capturar el tráfico de los dispositivos que se conecten a ese punto inalámbrico
- Realizar un análisis básico de los paquetes capturados que permita extenderse con facilidad
- Almacenar las capturas en carpetas ordenadas y facilmente accesibles desde la red interna por FTP o similar
- Hacerlo lo más amigable posible (insisto, posible…)
La idea general de este mini proyecto es brindar algunas herramientas para ayudar a determinar si un dispositivo ha sido comprometido con malware. Nada criminal por si acaso jeje.
Buscando en internet me encontré con 48.827 Guías y tutoriales sobre como hacer esto en una Raspberry Pi, así que pensé que iba a ser sencillo. Historia larga corta: 48.825 de estos recursos están diseñados para Raspbian Jessie, versión que ya no se distribuye oficialmente en favor de Raspbian Stretch 9, versión que cambió (aparentemente de forma radical) la forma de manejar las redes, por lo que muchas de las técnicas sugeridas simplemente no funcionan. Revisando y probando mil rutas diferente se llegó a la siguiente secuencia de pasos (NPI de como llamarlo de momento) que está disponible también con su código asociado en Este repositorio :)
Captura de tráfico y análisis para detección de compromisos relacionados a Malware
Premisas iniciales / como se probó la metodología
- Raspberry Pi 3
- Raspbian stretch 9 lite recién instalado en rpi
- wlan0 y eth0 como interfaces de interés
Configuración de Raspberry pi para realizar capturas de tráfico focalizadas
Se configuró un dispositivo raspberry pi como un punto de acceso inalámbrico, basado en esta guía:
sudo apt update
sudo apt upgrade
sudo reboot
¡Paso importante! Pueden haber actualizaciones del kernel que requieren reiniciar para instalarse, si es el caso y no se reinicia el equipo, algunos de los siguientes pasos no funcionarán.sudo apt install hostapd bridge-utils dialog
sudo systemctl stop hostapd
sudo nano /etc/dhcpcd.conf
- agregar
denyinterfaces wlan0
ydenyinterfaces eth0
al final de archivo sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo nano /etc/network/interfaces
- Agregar al final del archivo lo siguiente:
# Bridge setup auto br0 iface br0 inet manual bridge_ports eth0 wlan0
sudo nano /etc/hostapd/hostapd.conf
- Agregar al archivo o siguiente y modificar
ssid
ywpa_passphrase
según aplique:interface=wlan0 bridge=br0 #driver=nl80211 ssid=NameOfNetwork hw_mode=g channel=7 wmm_enabled=0 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=AardvarkBadgerHedgehog wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
sudo nano /etc/default/hostapd
- Descomentar la línea que comienza con
#DAEMON_CONF
para que quedeDAEMON_CONF="/etc/hostapd/hostapd.conf"
sudo reboot
Instalación de software de captura de tráfico y configuración:
En esta metodología se propone el uso de tshark por la versatilidad que brinda al capturar paquetes desde la línea de comandos. En esta serie de pasos se compila e instala tshark desde el código fuente y se configura para que se puedan escribir archivos de captura dentro del directorio del usuario pi, así estos archivos son accesibles con más facilidad vía sftp por ejemplo.
La razón por la cual se compila tshark desde el código fuente, es que la versión disponible en el repositorio de raspbian a la fecha de escribir este documento no posee algunas características de interés como la regeneración de archivos transferidos desde la captura de paquetes entre otras características
-
sudo apt install tcpdump libgtk-3-dev libpcap-dev libgcrypt20-dev build-essential checkinstall libcurl4-openssl-dev
wget https://1.na.dl.wireshark.org/src/wireshark-2.4.2.tar.xz
tar xf wireshark-2.4.2.tar.xz
cd wireshark-2.4.2
./configure --disable-wireshark
. En este caso deshabilitabos wireshark ya que no lo necesitaremos en la Rapsberry Pi ya que será accesada sin interfaz gráfica.make
sudo checkinstall --fstrans=no
. Aparecerán varios mensajes y confirmaciones, con dejar todo en sus valores por defecto será suficientesudo dpkg -i wireshark_2.4.2-1_armhf.deb
sudo ldconfig
tshark --version
. Deberíamos tener una respuesta como la siguiente:TShark (Wireshark) 2.4.2 (v2.4.2) ...
sudo -s
groupadd -g wireshark
# Puede dar un error este comando, en este caso el grupo ya existía y se puede continuar sin problemasusermod -a -G wireshark pi
chgrp wireshark /usr/bin/dumpcap
chmod 4750 /usr/bin/dumpcap
exit
Captura de paquetes y análisis básico
- Se creó un script start.sh el cual pide algunos parámetros, realiza la captura de paquetes y procesa la captura para obtener algunos datos preliminares. El script debe ser ejecutado con privilegios root:
sudo ./start.sh
Lo que hace el script
- Pide al usuario definir cuándo se detiene el análisis (por tiempo o por tamaño de la captura)
- En caso de ingresar un valor manual se pide dicho valor
- Se obtiene la fecha y hora actuales y se crea el directorio captures/YYYY-MM-DD/
- Se realiza la captura de paquetes por la interfaz correspondiente
- Una vez realizada la captura, se buscan los archivos disponibles en /analysis y se ejecutan
- El script escribe todos los archivos en el directorio captures/YYYY-MM-DD/
Extensibilidad de análisis
Se creó el directorio analysis/ en donde se incluyen algunos archivos .sh, en los cuales se puede ejecutar código bash arbitrario accediendo a todas las variables disponibles en el script start.sh, especialmente la variable $folder que almacena la ruta absoluta del directorio en donde se almacena la captura en curso, con esta ruta se puede acceder al archivo capture.pcap y analizarlo con las herramientas disponibles, se recomienda tshark por ser el paquete para el que está optimizado todo el código.
Para crear un nuevo módulo de análisis, bastará con crear un archivo .sh en el directorio analysis/ que manipule toda la información relevante sobre el archivo $folder/capture.pcap y escriba en archivos dentro del mismo directorio.
Disponibilidad de los archivos resultantes
Se sugiere utilizar un cliente FTP para acceder mediante sFTP al dispositivo en trafficpi.local o su dirección IP correspondiente con el usuario pi y la contraseña trafficpi