พื้นที่เก็บข้อมูลนี้มีสิ่งประดิษฐ์สำหรับรายงาน "Terrapin Attack: Breaking SSH Channel Integrity By Sequence Number Manipulation" ซึ่งได้รับการยอมรับในการประชุม USENIX Security Symposium ครั้งที่ 33
รหัสในพื้นที่เก็บข้อมูลนี้ประกอบด้วยพร็อกซีการโจมตีแบบพิสูจน์แนวคิดสำหรับ CVE ต่อไปนี้ ท่ามกลางสิ่งประดิษฐ์อื่นๆ
PoC และสคริปต์ทั้งหมดที่อยู่ในอาร์ติแฟกต์เหล่านี้ได้รับการออกแบบมาให้ทำงานภายในคอนเทนเนอร์ Docker ด้วยเหตุนี้ ตรวจสอบให้แน่ใจว่าคุณมีระบบปฏิบัติการ Linux (ทดสอบแล้ว) หรือ MacOS / Windows (ยังไม่ทดสอบ) ล่าสุดพร้อมติดตั้ง Docker เพื่อให้ง่ายต่อการทำซ้ำผลลัพธ์กระดาษ โปรดดูสคริปต์ที่อยู่ในโฟลเดอร์ scripts
(ดูโครงสร้างพื้นที่เก็บข้อมูลด้านบน)
สคริปต์ทั้งหมดจะเรียกใช้คอนเทนเนอร์ใน --network host
เพื่อให้สามารถจับภาพได้ง่ายโดยใช้ Wireshark บนอินเทอร์เฟซ lo ตามค่าเริ่มต้น เซิร์ฟเวอร์ SSH จะผูกกับพอร์ต 2200/tcp ในขณะที่สคริปต์ PoC จะผูกกับ 2201/tcp เนื่องจากสคริปต์ PoC และเซิร์ฟเวอร์ SSH เชื่อมโยงกับ 0.0.0.0 จึงแนะนำให้ยกเลิกการเชื่อมต่อระบบของคุณจากเครือข่ายหรือกำหนดค่าไฟร์วอลล์ของคุณอย่างเหมาะสมเพื่อหลีกเลี่ยงการเปิดเผยบริการ SSH ที่ไม่ปลอดภัยไปยังเครือข่ายท้องถิ่นของคุณ
คุณยังอาจสร้างและใช้งานคอนเทนเนอร์ Docker แต่ละรายการ (การใช้งาน PoC และ SSH) ได้ตามดุลยพินิจของคุณเอง
คุณสามารถเรียกใช้ impl/build.sh
และ pocs/build.sh
เพื่อตรวจสอบการตั้งค่าของคุณ ผลลัพธ์ควรระบุว่าอิมเมจการประเมินถูกสร้างขึ้นโดยใช้ 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 | ลิบส์ช 0.10.5 |
---|---|---|---|---|---|---|
C1 Rcvเพิ่มขึ้น | - | |||||
C1 Rcv ลดลง | - | ร | ต | ต | ||
C1 SndIncrease | - | ร | คุณ | ต | ต | |
C1 Sndลดลง | - | ร | คุณ | ต | ต | |
C2 ChaCha20-Poly1305 | - | - | - | |||
C2 CBC-EtM | 0.0300 (ไม่ทราบ) 0.8383 (ปิง) | 0.0003 (ไม่ทราบ) | 0.0003 (ไม่ทราบ) 0.0074 (ปิง) | - | - | - |
ส่วนขยาย C3 Rogue | - | - | - | - | - | |
เซสชั่น C4 Rogue | - | - | - | - | - |
ตำนาน:
(E1): scripts/test-sqn-manipulation.sh
- เรียกใช้หนึ่งในสี่การโจมตีการจัดการหมายเลขลำดับเพื่อพิสูจน์ (C1)
(E2a): scripts/test-ext-downgrade.sh
- เรียกใช้การโจมตีดาวน์เกรดส่วนขยายเพื่อพิสูจน์ (C2) สำหรับ ChaCha20-Poly1305
รันไทม์ที่คาดหวัง: ประมาณ 1 นาที
การดำเนินการ: หลังจากเริ่มสคริปต์ ให้เลือกชุดไคลเอนต์และเซิร์ฟเวอร์ที่ต้องการ หลังจากนั้น เลือกรูปแบบการโจมตี 1 เพื่อเลือก ChaCha20-Poly1305
ผลลัพธ์: สคริปต์จะสรุปโดยเปิดไฟล์ต่อไปนี้พร้อมกันในเวลา less
:
diff
ของไฟล์ 3 และ 4diff
ของไฟล์ 5 และ 6นำทางไปยังไฟล์ที่สอง ไฟล์จะเปรียบเทียบเอาต์พุตของไคลเอ็นต์ SSH ที่เลือกในกรณีที่มีการโจมตีดาวน์เกรดส่วนขยายกับเอาต์พุตของการเชื่อมต่อที่ยังไม่ได้แก้ไข ส่วนต่างจะบ่งชี้ถึงการมีอยู่ของ SSH_MSG_EXT_INFO และไม่มี SSH_MSG_IGNORE ในการเชื่อมต่อที่ไม่มีการแก้ไขเท่านั้น ดังนั้นจึงเป็นการพิสูจน์ (C2) สำหรับ ChaCha20-Poly1305
(E2b): scripts/bench-ext-downgrade.sh
- เรียกใช้การโจมตีดาวน์เกรดส่วนขยาย 10,000 ครั้งเพื่อพิสูจน์ (C2) สำหรับ CBC-EtM (UNKNOWN และ 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 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
การลบที่อยู่ IP ที่ถูกบล็อกออกจากรายการที่อยู่ IP ที่ส่งคืนโดย 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
จัดระเบียบไฟล์ผลลัพธ์ 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
มีการใช้ไลบรารีบุคคลที่สามต่อไปนี้: