내가 공격자처럼 생각하는 Python Network Scanner를 만든 방법
Source: Dev.to
열린 포트는 열린 문과 같습니다. 여기서는 해당 포트를 찾아 위험도를 평가하고, 모든 결과를 MITRE ATT&CK에 매핑하는 도구를 외부 의존성 없이 어떻게 구축했는지 소개합니다.
문제
모든 네트워크에는 사각지대가 있습니다.
- 방화벽 규칙이 잘못 구성됩니다.
- 서비스가 생성된 뒤 잊혀집니다.
- 개발자가 “잠깐 테스트” 용도로 포트 3389를 열어두고 닫지 않습니다. 6개월 후, 랜섬웨어 그룹이 이를 발견합니다.
무서운 점은? 이러한 노출은 어디를 찾아야 하는지만 알면 매우 쉽게 찾을 수 있다는 것입니다.
그래서 나는 이를 찾아보는 도구를 만들었습니다.
도구가 하는 일
Network Scanner & Vulnerability Reporter – 파이썬 기반 유틸리티로:
| Feature | Description |
|---|---|
| 포트 스캔 | 대상 IP 또는 전체 CIDR 범위에서 열린 포트를 스캔합니다 |
| 서비스 식별 | 각 열린 포트에서 실행 중인 서비스를 감지합니다 |
| 취약점 매칭 | 각 서비스를 내장된 취약점 데이터베이스와 비교합니다 |
| ATT&CK 매핑 | 모든 결과를 MITRE ATT&CK 기법에 매핑합니다 |
| 위험 점수화 | 0부터 100까지의 전체 위험 점수를 계산합니다 |
| 보고서 생성 | 완전한 보고서와 완화 가이드를 생성합니다 |
| 내보내기 | SIEM 또는 티켓 시스템 연동을 위한 JSON을 출력합니다 |
| 외부 의존성 없음 | 순수 파이썬 표준 라이브러리만 사용합니다 |
왜 이렇게 만들었는가
대부분의 취약점 스캐너는 블랙 박스다. Nessus를 실행하고 PDF를 받아서 다른 사람에게 해석을 맡긴다.
나는 실제로 내부에서 무슨 일이 일어나고 있는지 이해하고 싶었다 – 스캐너가 실제로 무엇을 묻고, 응답이 의미하는 바가 무엇이며, 원시 포트 데이터를 어떻게 실행 가능한 것으로 전환할 수 있는지.
이 도구가 그 질문에 대한 나의 답이다.
Source: …
기술 아키텍처
포트 스캔 — 멀티스레드 TCP
스캐너는 socket과 concurrent.futures.ThreadPoolExecutor를 사용해 29개의 일반 포트에 대해 동시에 TCP 연결 시도를 보냅니다. 멀티스레딩 덕분에 전체 CIDR 범위에서도 스캔 속도가 빠릅니다.
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=50) as executor:
futures = {executor.submit(scan_port, ip, port): port for port in ports}
각 연결은 성공(포트 열림)하거나 타임아웃(닫힘/필터링)됩니다. 원시 패킷을 다루지 않으며, 루트 권한도 필요하지 않습니다.
서비스 식별
열린 포트는 정적 사전(dictionary)을 통해 알려진 서비스 이름과 매핑됩니다 – 예시:
22→ SSH445→ SMB3389→ RDP
… 등 29개의 서비스 전반에 걸쳐 매핑됩니다.
취약점 매칭
식별된 각 서비스는 내장된 취약점 데이터베이스와 대조됩니다. 이는 CVE 스캔이 아니라 위험 패턴 매칭입니다.
- 포트 23 열림? → 텔넷 – 평문 프로토콜 – CRITICAL 위험.
- 포트 27017 열림? → MongoDB – 인증되지 않은 접근 가능성.
데이터베이스는 실제 침해 보고서에 나타나는 서비스들을 포함합니다: SMB (EternalBlue), RDP (랜섬웨어 진입), Redis (무인증 데이터 노출), Elasticsearch (무인증 접근) 등.
MITRE ATT&CK 매핑
각 취약점 결과에는 해당 ATT&CK 기술이 태그됩니다:
| 결과 | ATT&CK 기술 |
|---|---|
| RDP 노출 | T1076 – Remote Desktop Protocol |
| SMB 노출 | T1210 – Exploitation of Remote Services |
| 텔넷 열림 | T1040 – Network Sniffing |
이렇게 하면 원시 스캔 결과가 적대자 관점의 인텔리전스로 변환됩니다 – SOC나 위협 인텔 팀이 필요로 하는 바로 그 형태입니다.
위험 점수
도구는 심각도와 결과 개수를 기반으로 복합 위험 점수(0 – 100)를 계산합니다:
| 점수 | 등급 |
|---|---|
| 70–100 | 🔴 CRITICAL |
| 45–69 | 🟠 HIGH |
| 20–44 | 🟡 MEDIUM |
| 0–19 | 🟢 LOW |
샘플 출력
=================================================================
NETWORK SCANNER & VULNERABILITY REPORTER
Target : 192.168.1.1
Open Ports : 4 | Vulnerabilities: 6
Risk Score : 85/100 [██████████████████████████████████░░░░░░]
Rating : 🔴 CRITICAL RISK
⚠️ VULNERABILITIES (6)
[CRITICAL] RDP Exposed to Internet (Port 3389)
MITRE ATT&CK : T1076 — Remote Desktop Protocol
Remediation : Restrict RDP to VPN only, enable NLA, use MFA
[CRITICAL] SMB Port Exposed (Port 445)
MITRE ATT&CK : T1210 — Exploitation of Remote Services
Remediation : Block SMB at firewall, apply MS17‑010 patch
실제 적용
- 공격 표면 매핑 – 공격자가 찾기 전에 노출된 서비스를 찾는 것이 취약점 관리 프로그램의 첫 단계입니다.
- 위험 우선순위 지정 – 모든 열린 포트가 동일한 것은 아닙니다. 도구는 점수를 매기고 순위를 매겨 가장 위험한 노출을 먼저 수정하도록 합니다.
- SIEM 통합 – JSON 내보내기는 Splunk, Elastic, 또는 ServiceNow와 같은 티켓팅 시스템에 직접 연결될 수 있습니다.
- 규정 준수 지원 – 정기적인 네트워크 스캔은 NIST CSF, CIS Controls, ISO 27001의 제어 요구사항을 충족합니다. 도구는 필요한 증거를 생성합니다.
내가 배운 것
- 멀티스레딩은 모든 것을 바꾼다.
/24에 대한 단일‑스레드 스캐너는 몇 분이 걸리지만, 50개의 동시 스레드를 사용하면 몇 초 안 된다. 스레드‑풀 크기와 타임아웃 튜닝을 이해하는 것이 진짜 기술이다. - 취약점 데이터베이스가 가장 어려운 부분이다. 포트‑스캔 로직을 작성하는 것은 직관적이다. 어떤 서비스가 위험한지, 왜 위험한지, 그리고 비‑기술적 이해관계자에게 어떻게 설명할지 결정하는 것이 보안 도구를 실제로 유용하게 만드는 GRC 사고이다.
- MITRE ATT&CK는 커뮤니케이션 프레임워크이다. 발견을 ATT&CK 기술에 매핑하는 것은 단순히 겉치레가 아니라, 위협‑인텔리전스 팀, 레드 팀, 사고 대응팀과 같은 사람들과 같은 언어로 소통하게 해준다. “
T1210— Exploitation of Remote Services”라고 라벨링된 발견은 즉시 실행 가능하다.
직접 해보기
git clone https://github.com/SankethSubhas/network-scanner-vulnerability-reporter.git
cd network-scanner-vulnerability-reporter
# Follow the README for usage instructions
스캔을 즐기세요! 🚀
Usage Examples
Scan a single host
(use scanme.nmap.org for legal testing)
python3 network_scanner.py scanme.nmap.org
Scan a network range
python3 network_scanner.py 192.168.1.0/24
Export a JSON report
python3 network_scanner.py 192.168.1.1 --output report.json
⚠️ Important: Only scan systems you own or have explicit written permission to test.
링크
- GitHub: network-scanner-vulnerability-reporter
- 포트폴리오: sankethsubhas.pages.dev
- LinkedIn: linkedin.com/in/sanketh-subhas
