此存储库包含论文“Terrapin Attack: Breaking SSH Channel Integrity By Sequence Number Manipulation”的工件,该论文已在第 33 届 USENIX 安全研讨会上被接受。
此存储库中的代码除其他工件外还包含以下 CVE 的概念验证攻击代理:
这些工件中包含的所有 PoC 和脚本都设计为在 Docker 容器内运行。因此,请确保您拥有最新的 Linux(已测试)或 MacOS / Windows(未经测试)操作系统并安装了 Docker。为了轻松复制论文结果,请参阅scripts
夹中包含的脚本(请参阅上面的存储库结构)。
所有脚本都将在--network host
中运行容器,以便在 lo 接口上使用 Wireshark 轻松捕获。默认情况下,SSH 服务器将绑定到端口 2200/tcp,而 PoC 脚本将绑定到 2201/tcp。由于 PoC 脚本和 SSH 服务器绑定到 0.0.0.0,建议断开系统与网络的连接或正确配置防火墙,以避免向本地网络泄露不安全的 SSH 服务。
您还可以自行决定构建和运行单独的 Docker 容器(PoC 和 SSH 实现)。
您可以运行impl/build.sh
和pocs/build.sh
来检查您的设置。输出应表明正在使用 Docker 构建评估映像。如果没有输出,则所有 docker 镜像都已构建。
$ impl/build.sh
[+] Building 2.0s (15/15) FINISHED
[...]
= > = > naming to docker.io/terrapin-artifacts/openssh-server:9.4p1
[...]
$ pocs/build.sh
[...]
攻击 | 腻子 0.79 | OpenSSH 9.4p1 | OpenSSH 9.5p1 | 掉落熊 2022.83 | 异步SSH 2.13.2 | libssh 0.10.5 |
---|---|---|---|---|---|---|
C1 Rcv增加 | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 Rcv减少 | ✅ | - | 右 | ✅ | 时间 | 时间 |
C1 Snd增加 | ✅ | - | 右 | U | 时间 | 时间 |
C1 Snd减少 | ✅ | - | 右 | U | 时间 | 时间 |
C2 ChaCha20-Poly1305 | ✅ | ✅ | ✅ | - | - | - |
C2 CBC-EtM | 0.0300(未知) 0.8383(平) | 0.0003(未知) | 0.0003(未知) 0.0074(平) | - | - | - |
C3 盗贼扩展 | - | - | - | - | ✅ | - |
C4 盗贼会话 | - | - | - | - | ✅ | - |
传奇:
(E1): scripts/test-sqn-manipulation.sh
- 运行四个序列号操纵攻击之一来证明 (C1)。
(E2a): scripts/test-ext-downgrade.sh
- 运行扩展降级攻击以证明 ChaCha20-Poly1305 的 (C2)。
预计运行时间:约1分钟。
执行:启动脚本后,选择任意客户端和服务器组合。然后,选择攻击变体1,选择ChaCha20-Poly1305。
结果:脚本将通过在less
中同时打开以下文件来结束:
diff
diff
导航到第二个文件。该文件将发生扩展降级攻击时所选 SSH 客户端的输出与未修改连接的输出进行比较。差异将指示仅在未修改的连接中存在 SSH_MSG_EXT_INFO 和不存在 SSH_MSG_IGNORE,从而证明 (C2) ChaCha20-Poly1305。
(E2b): scripts/bench-ext-downgrade.sh
- 运行扩展降级攻击 10,000 次以证明 (C2) CBC-EtM(未知和 PING)。
(E3): scripts/test-asyncssh-rogue-ext-negotiation.sh
less
中打开一组七个文件来结束。有关打开的文件列表,请参阅 (E2a) 的结果。导航到第二个文件。差异将表明在被篡改的连接中存在带有攻击者选择的值的 server-sig-algs 扩展,从而证明(C3)。 (E4): scripts/test-asyncssh-rogue-session-attack.sh
less
中打开一组七个文件来结束。有关打开的文件列表,请参阅 (E2a) 的结果。导航到第一个文件。差异将分别表明受害者(未修改的连接)和攻击者(被篡改的连接)的身份验证成功。然后,导航到第二个文件并检查文件末尾每个客户端连接的输出。在未修改的连接中,服务器将使用受害者用户名进行响应,而在受到攻击的连接中,服务器将使用攻击者用户名进行响应。这就证明了(C4)。 要使用 scan_util.py,请通过在scan
文件夹中运行以下命令来构建 docker 容器:
docker build . -t terrapin-artifacts/scan-util
zgrab2 结果文件的评估:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util evaluate -i /files/sample.json -o /files/sample.acc.json
从 zmap 返回的 IP 地址列表中删除被阻止的 IP 地址:
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
通过删除连接失败的条目来整理 zgrab2 结果文件:
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
,它会删除任何中间结果,并终止和删除与这些工件相关的任何正在运行的容器。要在下次执行测试脚本时重建映像,请指定--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
使用以下第三方库: