
CVE-2024-6387 및 CVE-2023-48795에 취약할 가능성이 있는 SSH 소프트웨어를 실행하는 서버를 식별하기 위한 스캐너.
CVE-2024-6387 및 CVE-2023-48795에 취약할 가능성이 있는 SSH 소프트웨어 서버 식별 스캐너
| CVE | 이름 | 조건 | 심각도 |
|---|---|---|---|
| CVE-2024-6387 | regreSSHion | OpenSSH < 9.8p1 | CRITICAL |
| CVE-2023-48795 | Terrapin | OpenSSH < 9.6 | HIGH |
OpenSSH 서버의 SIGALRM 신호 핸들러의 경쟁 조건으로 인해 glibc를 사용하는 Linux 시스템에서 루트 권한으로 인증되지 않은 RCE가 가능합니다. 9.8p1 이전의 모든 OpenSSH 버전에 영향을 미칩니다.
SSH 핸드셰이크(이진 프로토콜)의 접두사 절단 공격으로, MITM 공격자가 세션 시작 시 협상된 보안 확장 메시지를 제거할 수 있습니다. OpenSSH 9.6 미만에 영향을 미칩니다.
스크립트는 대상의 SSH 포트에 직접 연결하여 식별 배너(예: SSH-2.0-OpenSSH_9.7)를 읽고, 자격 증명을 전혀 보내지 않습니다. 버전을 확인한 후 각 CVE의 수정 버전과 비교하여 호스트를 분류합니다.
대상 → TCP 포트 22 연결 → SSH 배너 읽기 → 소프트웨어 식별
→ OpenSSH 버전 파싱 → 수정 버전과 비교 → 분류 + 로그 + CSV
스크립트는 배너에서 SSH 제조사/소프트웨어도 식별하여 다음을 인식합니다:
pip install requests packaging urllib3 dnspython
dnspython은 선택 사항이지만 적극 권장됩니다 — 병렬 역방향 조회가 이 라이브러리를 사용하면 훨씬 빨라집니다.dnspython이 없으면 스크립트는 대체로socket을 사용합니다.
# 개별 IP
python ssh_scanner.py --ip 192.168.1.10
# CIDR 범위
python ssh_scanner.py --cidr 10.0.0.0/24
# 여러 CIDR
python ssh_scanner.py --cidr 10.0.0.0/24 192.168.1.0/24
# ASN (RIPE Stat을 통해 접두사 확인, fallback: bgp.tools)
python ssh_scanner.py --asn AS12345
# 입력 조합
python ssh_scanner.py --asn AS12345 --cidr 10.0.0.0/8 --ip 1.2.3.4
# 파일 기반 (한 줄에 IP, CIDR 또는 ASN)
python ssh_scanner.py --file alvos.txt
# 추가 포트 (22번 외)
python ssh_scanner.py --cidr 10.0.0.0/24 --ports 22 2222 22222
DNS 조회는 SSH 스캔 전에 전용 스레드 풀에서 일괄 실행되므로, DNS 지연이 스캔 속도에 영향을 미치지 않습니다.
모든 결과는 ./logs/에 기록됩니다:
| 파일 | 내용 |
|---|---|
ssh_scan_<timestamp>.log |
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
스캔이 끝나면 취약한 호스트가 있을 경우 스크립트가 자동으로 구조화된 CSV의 처음 20줄 미리보기를 터미널에 표시합니다.
OpenSSH를 9.8p1 이상으로 업데이트하세요 (두 CVE 모두 해결):
# Ubuntu / Debian — 시스템 저장소를 통해
sudo apt update && sudo apt install --only-upgrade openssh-server
ssh -V
# CentOS / RHEL / Rocky
sudo dnf update openssh-server
ssh -V
# 소스에서 컴파일 (최신 버전)
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
이 스크립트는 자신의 인프라에서 사용하거나 명시적 승인 하에 사용하기 위한 것입니다. 승인되지 않은 스캔은 여러 법률을 위반할 수 있으므로 주의해서 사용하십시오.
이 도구의 오용으로 인한 모든 행동과 결과는 사용자 자신의 책임입니다.
개선 제안이나 버그를 발견하시면 이슈를 열거나 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 호스트) |
ssh_scan_<timestamp>_vulneraveis.txt | VULNERÁVEL로 분류된 호스트만 |
ssh_scan_<timestamp>_resultados.csv | 전체 상태가 포함된 모든 SSH 호스트 |
ssh_scan_<timestamp>_formato_estruturado.csv | IP, 포트, 타임스탬프, 도메인, 제조사 및 CVE가 포함된 구조화된 CSV |
| 열 | 설명 |
|---|
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 프로토콜과 일치하지 않음 |