Este repositorio contiene artefactos para el artículo "Terrapin Attack: Breaking SSH Channel Integrity By Sequence Number Manipulation", aceptado en el 33º Simposio de seguridad de USENIX.
El código de este repositorio contiene, entre otros artefactos, servidores proxy de ataque de prueba de concepto para los siguientes CVE:
Todas las PoC y scripts contenidos en estos artefactos están diseñados para ejecutarse dentro de contenedores Docker. Como tal, asegúrese de tener un sistema operativo Linux (probado) o MacOS/Windows (no probado) reciente con Docker instalado. Para una fácil reproducción de los resultados del artículo, consulte los scripts contenidos en la carpeta scripts
(consulte la estructura del repositorio más arriba).
Todos los scripts ejecutarán los contenedores en --network host
para permitir una fácil captura usando Wireshark en la interfaz lo. De forma predeterminada, los servidores SSH se vincularán al puerto 2200/tcp, mientras que los scripts PoC se vincularán al 2201/tcp. Como los scripts PoC y los servidores SSH están vinculados a 0.0.0.0, se recomienda desconectar su sistema de la red o configurar su firewall correctamente para evitar revelar servicios SSH inseguros a su red local.
También puede crear y ejecutar contenedores Docker individuales (implementaciones PoC y SSH) a su propia discreción.
Puede ejecutar impl/build.sh
y pocs/build.sh
para verificar su configuración. El resultado debe indicar que las imágenes de evaluación se están creando con Docker. Si no hay salida, todas las imágenes de la ventana acoplable ya están creadas.
$ impl/build.sh
[+] Building 2.0s (15/15) FINISHED
[...]
= > = > naming to docker.io/terrapin-artifacts/openssh-server:9.4p1
[...]
$ pocs/build.sh
[...]
Ataque | Masilla 0,79 | OpenSSH 9.4p1 | OpenSSH 9.5p1 | Dropbear 2022.83 | AsíncronoSSH 2.13.2 | libssh 0.10.5 |
---|---|---|---|---|---|---|
C1 RcvAumentar | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 RcvDisminuir | ✅ | - | R | ✅ | t | t |
C1 SndAumento | ✅ | - | R | Ud. | t | t |
C1 SndDisminución | ✅ | - | R | Ud. | t | t |
C2 ChaCha20-Poli1305 | ✅ | ✅ | ✅ | - | - | - |
C2 CBC-EtM | 0.0300 (DESCONOCIDO) 0,8383 (ping) | 0.0003 (DESCONOCIDO) | 0.0003 (DESCONOCIDO) 0,0074 (ping) | - | - | - |
Extensión rebelde C3 | - | - | - | - | ✅ | - |
Sesión rebelde C4 | - | - | - | - | ✅ | - |
Leyenda:
(E1): scripts/test-sqn-manipulation.sh
: ejecute uno de los cuatro ataques de manipulación de números de secuencia para probar (C1).
(E2a): scripts/test-ext-downgrade.sh
: ejecute el ataque de degradación de la extensión para probar (C2) para ChaCha20-Poly1305.
Tiempo de ejecución esperado: aproximadamente 1 minuto.
Ejecución: después de iniciar el script, elija una combinación arbitraria de cliente y servidor. Luego, elija la variante de ataque 1 para seleccionar ChaCha20-Poly1305.
Resultados: El script concluirá abriendo los siguientes archivos simultáneamente en less
:
diff
de los archivos 3 y 4diff
de los archivos 5 y 6Navegue hasta el segundo archivo. El archivo compara la salida del cliente SSH seleccionado en el caso de un ataque de degradación de extensión con la salida de una conexión no modificada. La diferencia indicará la presencia de SSH_MSG_EXT_INFO y la ausencia de SSH_MSG_IGNORE solo en la conexión no modificada, lo que demuestra (C2) para ChaCha20-Poly1305.
(E2b): scripts/bench-ext-downgrade.sh
: ejecute el ataque de degradación de la extensión 10 000 veces para probar (C2) para CBC-EtM (DESCONOCIDO y PING).
(E3): scripts/test-asyncssh-rogue-ext-negotiation.sh
less
. Consulte los resultados de (E2a) para obtener una lista de archivos abiertos. Navegue hasta el segundo archivo. La diferencia indicará la presencia de la extensión server-sig-algs con un valor elegido por el atacante en la conexión manipulada, demostrando así (C3). (E4): scripts/test-asyncssh-rogue-session-attack.sh
less
. Consulte los resultados de (E2a) para obtener una lista de archivos abiertos. Navegue hasta el primer archivo. La diferencia indicará una autenticación exitosa para la víctima (conexión no modificada) y el atacante (conexión manipulada), respectivamente. Luego, navegue hasta el segundo archivo y examine el resultado de cada conexión de cliente al final del archivo. En la conexión no modificada, el servidor responderá con el nombre de usuario de la víctima, mientras que en la conexión atacada, el servidor responderá con el nombre de usuario del atacante. Esto prueba (C4). Para usar scan_util.py, cree el contenedor acoplable ejecutando el siguiente comando dentro de la carpeta scan
:
docker build . -t terrapin-artifacts/scan-util
Evaluación de un archivo de resultados de zgrab2:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util evaluate -i /files/sample.json -o /files/sample.acc.json
Eliminación de direcciones IP bloqueadas de una lista de direcciones IP devueltas por zmap:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util filter-blocked-ips -i /files/zmap.csv -o /files/zmap-filtered.csv -b /files/blocklist.txt
Ordenar el archivo de resultados de zgrab2 eliminando entradas con fallas de conexión:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util tidy-zgrab2 -i /files/sample.json -o /files/sample-clean.json
scripts/cleanup-system.sh
que eliminan los resultados intermedios y finalizan y eliminan cualquier contenedor en ejecución relacionado con estos artefactos. Para reconstruir las imágenes en la próxima ejecución de un script de prueba, especifique el indicador --full
. .
├── impl
│ ├── asyncssh # AsyncSSH 2.13.2 (client / server) Dockerfile and additional files
│ ├── dropbear # Dropbear 2022.83 (client / server) Dockerfile and additional files
│ ├── libssh # libssh 0.10.5 (client / server) Dockerfile and additional files
│ ├── openssh # OpenSSH 9.4p1 / 9.5p1 (client / server) Dockerfile and additional files
│ ├── putty # PuTTY 0.79 (client only) Dockerfile and additional files
│ └── build.sh # Script to build all required implementation Docker images for reproducing our results
├── pocs # Proof of concept scripts
│ ├── sqn-manipulations # Scripts related to sequence number manipulation (section 4.1)
│ ├── ext-downgrade # Scripts related to the extension downgrade attack (section 5.2)
│ ├── asyncssh # Scripts related to AsyncSSH vulnerabilities (section 6)
│ ├── Dockerfile # Multistage Dockerfile to build PoC docker images
│ └── build.sh # Script to build all required PoC Docker images for reproducing our results
├── scan # Files related to the internet-wide scan conducted
│ ├── paper # Directory containing the aggregated scan data referenced in the final version of the paper
│ ├── sample # Directory containing an anonymized zgrab2 ssh results sample to use with scan_util.py
│ ├── scan_util.py # Utility script for aggregating zgrab2 ssh results
│ ├── requirements.txt # pip requirements file for scan_util.py
│ └── Dockerfile # Dockerfile to build a docker image running scan_util.py
├── scripts # Scripts for easier reproduction of our results presented in the paper
│ ├── bench-ext-downgrade.sh # Benchmark script to evaluate the success rate of the CBC-EtM variant of the extension downgrade attack
│ ├── cleanup-system.sh # A cleanup script which can be used to containers and images related to these artifacts
│ ├── start-wireshark.sh # A convenience script to start Wireshark capturing on lo interface with SSH decoding and display filter
│ ├── test-asyncssh-rogue-ext-negotiation.sh
│ │ # Test script for the AsyncSSH-specific rogue extension negotiation attack (section 6.1 / figure 6)
│ ├── test-asnycssh-rogue-session-attack.sh
│ │ # Test script for the AsyncSSH-specific rogue session attack (section 6.2 / figure 7)
│ ├── test-ext-downgrade.sh # Test script for the extension downgrade attack (section 5.2 / figure 5)
│ └── test-sqn-manipulation.sh # Test script for sequence number manipulation (section 4.1)
├── traces # PCAP traces of the PoC scripts
├── LICENSE
└── README.md
Se utilizan las siguientes bibliotecas de terceros: