
Сканер для идентификации серверов с программным обеспечением SSH, потенциально уязвимых к CVE-2024-6387 и CVE-2023-48795.
Сканер для идентификации серверов с SSH-программами, возможно уязвимых для CVE-2024-6387 и CVE-2023-48795.
| CVE | Название | Условие | Серьезность |
|---|---|---|---|
| CVE-2024-6387 | regreSSHion | OpenSSH < 9.8p1 | КРИТИЧЕСКИЙ |
| CVE-2023-48795 | Terrapin | OpenSSH < 9.6 | ВЫСОКИЙ |
Состояние гонки в обработчике сигнала SIGALRM сервера OpenSSH допускает неаутентифицированное RCE от root в Linux с glibc. Затрагивает все версии OpenSSH до 9.8p1.
Атака усечения префикса на рукопожатие SSH (бинарный протокол), позволяющая MITM-противнику удалять согласованные сообщения расширения безопасности в начале сеанса. Затрагивает OpenSSH < 9.6.
Скрипт напрямую подключается к SSH-порту целей и считывает идентификационный баннер (например: SSH-2.0-OpenSSH_9.7), не отправляя никаких учетных данных. Получив версию, сравнивает её с исправленными версиями для каждого CVE и классифицирует хост.
Alvo → Conexão TCP porta 22 → Leitura do banner SSH → Identificação do software
→ Parse da versão OpenSSH → Comparação com versões fixadas → Classificação + Log + CSV
Скрипт также определяет производителя/SSH-программу по баннеру, распознавая:
pip install requests packaging urllib3 dnspython
dnspythonопционален, но настоятельно рекомендуется — параллельное обратное разрешение с ним значительно быстрее. Безdnspythonскрипт используетsocketв качестве запасного варианта.
# IP individual
python ssh_scanner.py --ip 192.168.1.10
# Faixa CIDR
python ssh_scanner.py --cidr 10.0.0.0/24
# Múltiplos CIDRs
python ssh_scanner.py --cidr 10.0.0.0/24 192.168.1.0/24
# ASN (prefixos resolvidos via RIPE Stat, fallback para bgp.tools)
python ssh_scanner.py --asn AS12345
# Combinação de entradas
python ssh_scanner.py --asn AS12345 --cidr 10.0.0.0/8 --ip 1.2.3.4
# A partir de um arquivo (um IP, CIDR ou ASN por linha)
python ssh_scanner.py --file alvos.txt
# Portas adicionais (além da 22)
python ssh_scanner.py --cidr 10.0.0.0/24 --ports 22 2222 22222
DNS-разрешение выполняется пакетно перед SSH-сканированием с выделенной очередью потоков, что предотвращает влияние задержки DNS на скорость сканирования.
Все результаты записываются в ./logs/:
| Файл |
|---|
formato_estruturado.csv)Присутствующие колонки:
Пример строк:
IP | PORTA | TIMESTAMP_UTC | DOMINIO | FABRICANTE | SW_NAME | SW_VERSAO | CVEs | BANNER
192.168.1.10 | 22 | 2026-05-20T00:39:33Z | host.exemplo.com | OpenSSH | OpenSSH | 9.7 | cve-2024-6387;cve-2023-48795 | SSH-2.0-OpenSSH_9.7
192.168.1.20 | 22 | 2026-05-20T12:46:03Z | host2.exemplo.com | OpenSSH | OpenSSH | 9.4 | cve-2023-48795;cve-2024-6387 | SSH-2.0-OpenSSH_9.4
192.168.1.30 | 22 | 2026-05-20T12:47:11Z | router.exemplo.com | Mikrotik | ROSSSH | N/D | | SSH-2.0-ROSSSH
В конце сканирования, если есть уязвимые хосты, скрипт автоматически отображает первые 20 строк структурированного CSV в терминале.
Обновите OpenSSH до версии 9.8p1 или выше (покрывает оба CVE):
# Ubuntu / Debian — via repositório do sistema
sudo apt update && sudo apt install --only-upgrade openssh-server
ssh -V
# CentOS / RHEL / Rocky
sudo dnf update openssh-server
ssh -V
# Compilação a partir do fonte (versão mais recente)
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
tar xzf openssh-9.9p1.tar.gz
cd openssh-9.9p1 && ./configure && make && sudo make install
После обновления перезапустите службу:
sudo systemctl restart sshd
Этот скрипт предназначен для использования в вашей собственной инфраструктуре или с явного разрешения. Неавторизованное сканирование может нарушать различные законы, поэтому используйте с осторожностью. Любые действия и последствия, возникшие в результате неправильного использования этого инструмента, являются вашей собственной ответственностью.
Если у вас есть предложения по улучшению или вы нашли ошибки, откройте issue или отправьте Pull Request. Любой вклад приветствуется! 🚀
| Баннер | Определённый производитель |
|---|
SSH-2.0-OpenSSH_9.7 | OpenSSH |
SSH-2.0-ROSSSH | Mikrotik |
SSH-2.0-Cisco-1.25 | Cisco |
SSH-2.0-dropbear_2022.83 | Dropbear |
SSH-2.0-libssh-0.9.6 | libssh |
SSH-2.0-AsyncSSH_2.13.2 | AsyncSSH |
SSH-2.0-paramiko_2.9.5 | Paramiko |
SSH-2.0-Bitvise-... | Bitvise |
SSH-2.0-WolfSSH_1.4.14 | wolfSSH |
| Другие неопределённые | Имя, извлечённое из баннера |
| Параметр | По умолчанию | Описание |
|---|
--ports | 22 | SSH-порт(ы) для сканирования |
--workers | 60 | Одновременные потоки для SSH-сканирования |
--timeout | 3.0 | Тайм-аут SSH-подключения в секундах |
--dns-workers | 200 | Одновременные потоки для обратного DNS-разрешения |
--dns-timeout | 1.5 | Тайм-аут DNS-запросов в секундах |
--no-confirm | — | Пропускает подтверждение перед запуском (полезно в автоматизации) |
| Содержание |
|---|
ssh_scan_<timestamp>.log | Полный лог сканирования (все найденные SSH-хосты) |
ssh_scan_<timestamp>_vulneraveis.txt | Только хосты, классифицированные как VULNERÁVEL |
ssh_scan_<timestamp>_resultados.csv | Все SSH-хосты с полным статусом |
ssh_scan_<timestamp>_formato_estruturado.csv | Структурированный CSV с IP, портом, временной меткой, доменом, производителем и CVE |
| Колонка | Описание |
|---|
IP | IP-адрес хоста |
PORTA | SSH-порт, на котором захвачен баннер |
TIMESTAMP_UTC | Временная метка ISO 8601 UTC момента сканирования |
DOMINIO | Имя хоста через обратный DNS (PTR) или SEM-PTR |
FABRICANTE | Производитель, определённый по баннеру |
SW_NAME | Имя SSH-программы, извлечённое из баннера |
SW_VERSAO | Версия SSH-программы |
CVEs | Затронутые CVE, разделённые ; (строчные) |
BANNER | Полный захваченный SSH-баннер |
| Статус | Значение |
|---|
VULNERÁVEL | Подтверждённая версия OpenSSH ниже исправленной |
SEGURO | Подтверждённая версия OpenSSH на исправленной версии или выше |
VERSÃO-OCULTA | SSH обнаружен, но версия не раскрыта — не подтверждён безопасный |
SSH-NÃO-OPENSSH | Найден SSH-сервер, но не OpenSSH (Dropbear, Cisco и т.д.) |
NÃO-SSH | Порт ответил, но баннер не соответствует протоколу SSH |