SSH 취약점 스캐너
- SSH 취약점 스캐너는 Nmap을 사용하여 취약한 SSH 버전에 대한 도메인 목록을 스캔하는 Python 스크립트
- SSH 서비스에 대한 여러 포트를 확인하고 보안 취약점 있는 버전 식별
특징
- 한 줄에 하나, txt파일을 생성하여 도메인을 입력 후 입력한 도메인 검색
- SSH 서비스에 대한 모든 포트 확인 (종합적인 포트 스캐닝)
- 취약한 SSH 버전을식별하여 강조 표시
- 동시 스캐닝에 스레디을 사용하여 성능 향상
- DNS 확인 실패를 포함한 오류 처리
- 명확한 가시성을 위한 형식으로 결과 출력
요구사항
- 파이썬 3.x
- 파이썬 nmap 라이브러리 (python3-nmap)
- 파이썬 termcolor 라이브러리 (termcolor)
- Kail Linux 사용
설치
1. 저장소 복제
git clone https://github.com/thegenetic/CVE-2024-6387-exploit.git
cd CVE-2024-6387-exploit
2. 종속성 설치
pip install -r requirements.txt
사용법
- domains.txt 한 줄에 하나씩 도메인 입력하여 스캔할 도메인 포함 텍스트 파일 생성
옵션
-Pn : 모든 호스트를 온라인 상태로 처리 (호스트 검색 건너뜀)
-sV : 서비스/버전 정보를 확인하기 위해 열려 있는 포트 조사
-p- : 65535개의 모든 포트 스캔
-- script ssh2-enum-algos, ssh-auth-methods, ssh-hostkey, ssh-run, sshv1 : 더자세한 정보를 보려면 ssh 특정 스크립트 사용
Python 코드
- VS 실행
전체코드
import sys
import socket
import subprocess
from threading import Thread, Lock
from queue import Queue
from termcolor import colored
# Global variables
lock = Lock()
results = {}
# Function to perform Nmap scanning for SSH service on a domain
def scan_domain(domain, queue):
try:
ip_address = socket.gethostbyname(domain)
print(f"Scanning {domain} ({ip_address})...")
# Use Nmap to scan SSH service on multiple ports
ports = "22,222" # Example ports, you can adjust as needed
nmap_command = f"nmap -Pn -sV -p {ports} --script ssh2-enum-algos,ssh-auth-methods,ssh-hostkey,ssh-run,sshv1 {ip_address}"
try:
output = subprocess.check_output(nmap_command, shell=True, stderr=subprocess.STDOUT)
process_nmap_output(domain, output.decode())
except subprocess.CalledProcessError as e:
print(f"Error scanning {domain}: {e.output.decode()}")
results[domain] = f"Nmap Error: {e.output.decode()}"
except socket.gaierror as e:
print(f"Error: Could not resolve domain {domain}: {str(e)}")
results[domain] = f"DNS resolution error: {str(e)}"
queue.task_done()
# Function to process Nmap output and update results
def process_nmap_output(domain, output):
vulnerable_versions = [
'SSH-2.0-OpenSSH_8.5p1',
'SSH-2.0-OpenSSH_8.6p1',
'SSH-2.0-OpenSSH_8.7p1',
'SSH-2.0-OpenSSH_8.8p1',
'SSH-2.0-OpenSSH_8.9p1',
'SSH-2.0-OpenSSH_9.0p1',
'SSH-2.0-OpenSSH_9.1p1',
'SSH-2.0-OpenSSH_9.2p1',
'SSH-2.0-OpenSSH_9.3p1',
'SSH-2.0-OpenSSH_9.4p1',
'SSH-2.0-OpenSSH_9.5p1',
'SSH-2.0-OpenSSH_9.6p1',
'SSH-2.0-OpenSSH_9.7p1'
]
if "Nmap scan report" in output:
lines = output.splitlines()
for line in lines:
if "SSH" in line and "open" in line:
parts = line.split()
port = parts[0]
version = parts[-1]
if any(vuln_version in version for vuln_version in vulnerable_versions):
result = colored(version, 'red')
else:
result = colored(version, 'yellow')
lock.acquire()
if domain not in results:
results[domain] = {}
results[domain][port] = result
lock.release()
# Function to scan domains from input file using threading
def scan_domains(input_file):
queue = Queue()
with open(input_file, 'r') as f:
domains = f.read().strip().splitlines()
# Start threads for scanning domains
for domain in domains:
queue.put(domain)
t = Thread(target=scan_domain, args=(domain, queue))
t.daemon = True
t.start()
# Wait for all threads to complete
queue.join()
# Print scan results
print("\nScan Results:\n")
for domain, data in results.items():
print(f"{domain}:")
if isinstance(data, str):
print(data)
else:
for port, version in data.items():
print(f"{port}: {version}")
if not data:
print("No SSH service detected on open ports")
print()
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python ssh_vuln_scanner.py <input_file>")
sys.exit(1)
input_file = sys.argv[1]
scan_domains(input_file)
대상자 tcpdump를 통한 패킷 분석
결론
요즘 가장 핫한 CVE라 ssh2024-6387이라고 생각이 든다. 패킷 분석을 할 때 마다 ssh관련 트래픽이 폭증하는 걸 목격하기도하며, 실제로 가상머신을 활용하여 exploit도 해보고 패킷을 뜯어보니 공격 코드들이 잘 만들어져있고 쉬워서 누구나 손 쉽게 사용 가능할 것 같다. 그래서 Nmap을 이용하여 SSH를 식별하는 것을 포스팅 해보았다. CVE 2024-6387은 위험도도 높기도 하며, 많은 사용자들이 사용중이다. 이 다음 포스팅은 CVE-6387 하도록 노력해봐야겠다.
참조
https://github.com/thegenetic/CVE-2024-6387-exploit
'정보보안 > CVE' 카테고리의 다른 글
[CVE-2020-1938] Ghostcat Tomcat AJP Protocol 취약점 (2) | 2024.12.06 |
---|---|
CVE란? 모르면 위험한 보안 취약점 리스트 (3) | 2024.11.05 |
[CVE-2022-42889] Text4Shell 취약점 (3) | 2024.07.23 |
[CVE-2023-27524] Apache Superset 취약점 (2) | 2024.07.01 |
[CVE-2023-46604] Apache ActiveMQ 취약점 (0) | 2024.05.26 |