Este repositório contém artefatos para o artigo "Ataque Terrapin: Quebrando a integridade do canal SSH por manipulação de número de sequência", aceito no 33º Simpósio de Segurança USENIX.
O código neste repositório contém, entre outros artefatos, proxies de ataque de prova de conceito para os seguintes CVEs:
Todos os PoCs e scripts contidos nesses artefatos são projetados para serem executados dentro de contêineres Docker. Como tal, certifique-se de ter um sistema operacional Linux (testado) ou MacOS/Windows (não testado) recente com Docker instalado. Para facilitar a reprodução dos resultados do artigo, consulte os scripts contidos na pasta scripts
(veja a estrutura do repositório acima).
Todos os scripts executarão os contêineres em --network host
para permitir fácil captura usando o Wireshark na interface lo. Por padrão, os servidores SSH serão vinculados à porta 2200/tcp, enquanto os scripts PoC serão vinculados à 2201/tcp. Como os scripts PoC e os servidores SSH estão vinculados a 0.0.0.0, é aconselhável desconectar seu sistema da rede ou configurar seu firewall adequadamente para evitar a divulgação de serviços SSH inseguros para sua rede local.
Você também pode criar e executar contêineres Docker individuais (implementações PoC e SSH) a seu critério.
Você pode executar impl/build.sh
e pocs/build.sh
para verificar sua configuração. A saída deve indicar que as imagens de avaliação estão sendo construídas usando Docker. Se não houver saída, todas as imagens do docker já foram construídas.
$ impl/build.sh
[+] Building 2.0s (15/15) FINISHED
[...]
= > = > naming to docker.io/terrapin-artifacts/openssh-server:9.4p1
[...]
$ pocs/build.sh
[...]
Ataque | Massa 0,79 | OpenSSH9.4p1 | OpenSSH9.5p1 | Drop Bear 2022.83 | AsyncSSH 2.13.2 | libssh0.10.5 |
---|---|---|---|---|---|---|
C1 RcvAumento | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 RcvDecrease | ✅ | - | R | ✅ | T | T |
C1 SndIncrease | ✅ | - | R | Você | T | T |
C1 SndDecrease | ✅ | - | R | Você | T | T |
C2 ChaCha20-Poly1305 | ✅ | ✅ | ✅ | - | - | - |
C2 CBC-EtM | 0,0300 (DESCONHECIDO) 0,8383 (PING) | 0,0003 (DESCONHECIDO) | 0,0003 (DESCONHECIDO) 0,0074 (PING) | - | - | - |
Extensão C3 Rogue | - | - | - | - | ✅ | - |
Sessão desonesta C4 | - | - | - | - | ✅ | - |
Lenda:
(E1): scripts/test-sqn-manipulation.sh
- Execute um dos quatro ataques de manipulação de números de sequência para provar (C1).
(E2a): scripts/test-ext-downgrade.sh
- Execute o ataque de downgrade de extensão para provar (C2) para ChaCha20-Poly1305.
Tempo de execução esperado: cerca de 1 minuto.
Execução: Após iniciar o script, escolha uma combinação arbitrária de cliente e servidor. Depois, escolha a variante de ataque 1 para selecionar ChaCha20-Poly1305.
Resultados: O script será concluído abrindo os seguintes arquivos simultaneamente em less
:
diff
dos arquivos 3 e 4diff
dos arquivos 5 e 6Navegue até o segundo arquivo. O arquivo compara a saída do cliente SSH selecionado no caso de um ataque de downgrade de extensão com a saída de uma conexão não modificada. O diff indicará a presença de SSH_MSG_EXT_INFO e ausência de SSH_MSG_IGNORE apenas na conexão não modificada, provando assim (C2) para ChaCha20-Poly1305.
(E2b): scripts/bench-ext-downgrade.sh
- Execute o ataque de downgrade de extensão 10.000 vezes para provar (C2) para CBC-EtM (UNKNOWN e PING).
(E3): scripts/test-asyncssh-rogue-ext-negotiation.sh
less
. Consulte os resultados de (E2a) para obter uma lista de arquivos abertos. Navegue até o segundo arquivo. O diff indicará a presença da extensão server-sig-algs com valor escolhido pelo invasor na conexão adulterada, comprovando assim (C3). (E4): scripts/test-asyncssh-rogue-session-attack.sh
less
. Consulte os resultados de (E2a) para obter uma lista de arquivos abertos. Navegue até o primeiro arquivo. A diferença indicará autenticação bem-sucedida para a vítima (conexão não modificada) e para o invasor (conexão adulterada), respectivamente. Depois, navegue até o segundo arquivo e examine a saída de cada conexão do cliente no final do arquivo. Na conexão não modificada, o servidor responderá com o nome de usuário da vítima, enquanto na conexão atacada, o servidor responderá com o nome de usuário do invasor. Isso comprova (C4). Para usar scan_util.py, crie o contêiner docker executando o seguinte comando dentro da pasta scan
:
docker build . -t terrapin-artifacts/scan-util
Avaliação de um arquivo de resultados zgrab2:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util evaluate -i /files/sample.json -o /files/sample.acc.json
Remoção de endereços IP bloqueados de uma lista de endereços IP retornados pelo 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
Organizando o arquivo de resultados zgrab2 removendo entradas com falhas de conexão:
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 remove quaisquer resultados intermediários e encerra e remove qualquer contêiner em execução relacionado a esses artefatos. Para reconstruir as imagens na próxima execução de um script de teste, especifique o sinalizador --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
As seguintes bibliotecas de terceiros são usadas: