Этот репозиторий содержит артефакты для статьи «Атака Terrapin: нарушение целостности канала SSH путем манипулирования порядковыми номерами», принятой на 33-м симпозиуме по безопасности USENIX.
Код в этом репозитории содержит, помимо других артефактов, прокси-серверы для проверки концепции для следующих 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. Если выходных данных нет, все образы 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 | ОпенСШ 9.4p1 | ОпенСШ 9.5p1 | Дропбер 2022.83 | Асинхронный SSH 2.13.2 | либсш 0.10.5 |
---|---|---|---|---|---|---|
C1 RcvIncrease | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 RcvDecrease | ✅ | - | Р | ✅ | Т | Т |
C1 СндУвеличение | ✅ | - | Р | ты | Т | Т |
C1 СндУменьшение | ✅ | - | Р | ты | Т | Т |
C2 ЧаЧа20-Поли1305 | ✅ | ✅ | ✅ | - | - | - |
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
— запустите атаку на понижение версии расширения 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, создайте Docker-контейнер, выполнив следующую команду внутри папки 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
Используются следующие сторонние библиотеки: