이 저장소에는 제33회 USENIX 보안 심포지엄에서 채택된 "Terrapin Attack: Breaking SSH Channel Integrity By Sequence Number Manipulation" 논문에 대한 아티팩트가 포함되어 있습니다.
이 저장소의 코드에는 다음 CVE에 대한 개념 증명 공격 프록시가 포함되어 있습니다.
이러한 아티팩트에 포함된 모든 PoC와 스크립트는 Docker 컨테이너 내에서 실행되도록 설계되었습니다. 따라서 Docker가 설치된 최신 Linux(테스트됨) 또는 MacOS/Windows(테스트되지 않음) 운영 체제가 있는지 확인하십시오. 논문 결과를 쉽게 재현하려면 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 | 오픈SSH 9.4p1 | 오픈SSH 9.5p1 | 드롭베어 2022.83 | 비동기SSH 2.13.2 | libssh 0.10.5 |
---|---|---|---|---|---|---|
C1 Rcv증가 | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 수신감소 | ✅ | - | 아르 자형 | ✅ | 티 | 티 |
C1 Snd증가 | ✅ | - | 아르 자형 | 유 | 티 | 티 |
C1 Snd감소 | ✅ | - | 아르 자형 | 유 | 티 | 티 |
C2 차차20-폴리1305 | ✅ | ✅ | ✅ | - | - | - |
C2 CBC-EtM | 0.0300(알 수 없음) 0.8383(핑) | 0.0003(알 수 없음) | 0.0003(알 수 없음) 0.0074(핑) | - | - | - |
C3 불량 확장 | - | - | - | - | ✅ | - |
C4 불량 세션 | - | - | - | - | ✅ | - |
전설:
(E1): scripts/test-sqn-manipulation.sh
- 증명하기 위해 4가지 시퀀스 번호 조작 공격 중 하나를 실행합니다(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가 없음을 나타내므로 ChaCha20-Poly1305에 대해 (C2)를 증명합니다.
(E2b): scripts/bench-ext-downgrade.sh
- 확장 다운그레이드 공격을 10,000회 실행하여 CBC-EtM(UNKNOWN 및 PING)을 증명합니다(C2).
(E3): scripts/test-asyncssh-rogue-ext-negotiation.sh
less
에서 7개 파일 세트를 여는 것으로 종료됩니다. 열린 파일 목록은 (E2a)의 결과를 참조하세요. 두 번째 파일로 이동합니다. 차이점은 변조된 연결에서 공격자가 선택한 값이 있는 server-sig-algs 확장이 있음을 나타내므로 입증됩니다(C3). (E4): scripts/test-asyncssh-rogue-session-attack.sh
less
에서 7개 파일 세트를 여는 것으로 종료됩니다. 열린 파일 목록은 (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
다음 타사 라이브러리가 사용됩니다.