내가 공격자처럼 생각하는 Python Network Scanner를 만든 방법

발행: (2026년 3월 9일 AM 08:09 GMT+9)
9 분 소요
원문: Dev.to

Source: Dev.to

Sanketh Subhas

열린 포트는 열린 문과 같습니다. 여기서는 해당 포트를 찾아 위험도를 평가하고, 모든 결과를 MITRE ATT&CK에 매핑하는 도구를 외부 의존성 없이 어떻게 구축했는지 소개합니다.

문제

모든 네트워크에는 사각지대가 있습니다.

  • 방화벽 규칙이 잘못 구성됩니다.
  • 서비스가 생성된 뒤 잊혀집니다.
  • 개발자가 “잠깐 테스트” 용도로 포트 3389를 열어두고 닫지 않습니다. 6개월 후, 랜섬웨어 그룹이 이를 발견합니다.

무서운 점은? 이러한 노출은 어디를 찾아야 하는지만 알면 매우 쉽게 찾을 수 있다는 것입니다.

그래서 나는 이를 찾아보는 도구를 만들었습니다.

도구가 하는 일

Network Scanner & Vulnerability Reporter – 파이썬 기반 유틸리티로:

FeatureDescription
포트 스캔대상 IP 또는 전체 CIDR 범위에서 열린 포트를 스캔합니다
서비스 식별각 열린 포트에서 실행 중인 서비스를 감지합니다
취약점 매칭각 서비스를 내장된 취약점 데이터베이스와 비교합니다
ATT&CK 매핑모든 결과를 MITRE ATT&CK 기법에 매핑합니다
위험 점수화0부터 100까지의 전체 위험 점수를 계산합니다
보고서 생성완전한 보고서와 완화 가이드를 생성합니다
내보내기SIEM 또는 티켓 시스템 연동을 위한 JSON을 출력합니다
외부 의존성 없음순수 파이썬 표준 라이브러리만 사용합니다

왜 이렇게 만들었는가

대부분의 취약점 스캐너는 블랙 박스다. Nessus를 실행하고 PDF를 받아서 다른 사람에게 해석을 맡긴다.

나는 실제로 내부에서 무슨 일이 일어나고 있는지 이해하고 싶었다 – 스캐너가 실제로 무엇을 묻고, 응답이 의미하는 바가 무엇이며, 원시 포트 데이터를 어떻게 실행 가능한 것으로 전환할 수 있는지.

이 도구가 그 질문에 대한 나의 답이다.

Source:

기술 아키텍처

포트 스캔 — 멀티스레드 TCP

스캐너는 socketconcurrent.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 → SSH
  • 445 → SMB
  • 3389 → 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.

링크

0 조회
Back to Blog

관련 글

더 보기 »