يحتوي هذا المستودع على قطع أثرية للمقالة "هجوم Terrapin: كسر سلامة قناة SSH من خلال معالجة رقم التسلسل"، والتي تم قبولها في ندوة USENIX الأمنية الثالثة والثلاثين.
يحتوي الكود الموجود في هذا المستودع، من بين عناصر أخرى، على وكلاء هجوم إثبات المفهوم لـ CVEs التالية:
تم تصميم جميع إثباتات المفهوم (PoCs) والبرامج النصية الموجودة داخل هذه العناصر ليتم تشغيلها داخل حاويات 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 | OpenSSH 9.4p1 | أوبن إس إس إتش 9.5p1 | دروببير 2022.83 | غير متزامنSSH 2.13.2 | ليبش 0.10.5 |
---|---|---|---|---|---|---|
C1 ركف زيادة | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 Rcvتناقص | ✅ | - | ر | ✅ | ت | ت |
C1 زيادة | ✅ | - | ر | ش | ت | ت |
C1 انخفاض | ✅ | - | ر | ش | ت | ت |
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
- قم بتشغيل هجوم الرجوع إلى إصدار أقدم من الامتداد لإثبات (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
- قم بتشغيل هجوم الرجوع إلى إصدار الامتداد 10000 مرة لإثبات (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 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
يتم استخدام مكتبات الطرف الثالث التالية: