Python을 이용한 사이버 보안 정찰 초보자를 위한 최고의 가이드

발행: (2025년 12월 4일 오후 11:48 GMT+9)
10 min read
원문: Dev.to

Source: Dev.to – Best Beginner’s Guide for Cybersecurity Recon with Python

배울 내용

가이드가 끝날 때까지 다음을 할 수 있게 됩니다:

  • 패시브액티브 정찰의 차이를 이해한다.
  • 모든 정찰 프로젝트에 대해 범위대상을 효과적으로 정의한다.
  • Python을 사용해 DNS 레코드, 서브도메인, 인증서 투명성 로그를 조회한다.
  • 호스트 및 서비스 탐지를 위해 비동기 네트워크 스캔을 수행한다.
  • 분석 및 보고를 위해 정찰 데이터를 효율적으로 정리한다.
  • 정찰 중 은밀함을 유지하기 위해 OPSEC 및 속도 제한 기법을 적용한다.

이러한 기술은 다음을 위한 탄탄한 기반이 된다:

  • 침투 테스트
  • 버그 바운티 사냥
  • OSINT 조사

시작할 준비가 되셨나요? 다음 섹션에서 실습 예제와 코드 스니펫을 계속 확인하세요.

사전 요구 사항

시작하기 전에 Python 3.12 환경이 준비되어 있는지 확인하세요. 아래에 나열된 라이브러리는 정찰 작업에 권장됩니다.

라이브러리목적
asyncio / trio스레드 없이 수천 개의 작업을 동시에 처리
httpxHTTP/2, 프록시 및 SOCKS 지원이 포함된 비동기 HTTP/HTTPS 요청
aiodnsDNSSEC 지원이 포함된 비동기 DNS 해석
ipwhoisASN 및 프리픽스 조회
rich진행 표시줄이 있는 깔끔한 터미널 출력
pandas데이터 정리, CSV/HTML 내보내기

설정

# Create a virtual environment
python3 -m venv recon
source recon/bin/activate

# Install the required packages
pip install httpx[http2] aiodns ipwhois rich pandas

Recon 기본: 능동 vs 수동

수동 정찰

  • No direct interaction with the target. → 대상과 직접적인 상호작용이 없습니다.
  • Typical sources: WHOIS, crt.sh, Shodan, GitHub, leaked databases. → 일반적인 소스: WHOIS, crt.sh, Shodan, GitHub, 유출된 데이터베이스.
  • Stealthy – leaves no logs on the target system. → 은밀함 – 대상 시스템에 로그를 남기지 않습니다.

능동 정찰

  • Direct probing: DNS queries, port scans, banner grabbing, web crawling. → 직접 탐색: DNS 쿼리, 포트 스캔, 배너 수집, 웹 크롤링.
  • Powerful, but generates logs and can trigger firewalls. → 강력함, 하지만 로그를 생성하고 방화벽을 작동시킬 수 있습니다.

Rule: Always start with passive recon. It’s safer, cost‑free, and helps narrow down what to probe actively.
Rule: 항상 수동 정찰부터 시작하세요. 더 안전하고 비용이 들지 않으며, 능동적으로 탐색할 대상을 좁히는 데 도움이 됩니다.

표준 워크플로우

#단계설명
1Scope Definition범위 정의 – IP 범위, 도메인 및 직원 별명을 식별합니다.
2Passive Recon수동 정찰 – 공개적으로 이용 가능한 아티팩트를 수집합니다.
3Correlation & Pivot상관관계 및 피벗 – 데이터 중복을 제거하고, 발견을 보강하며, 리드를 생성합니다.
4Active Recon능동 정찰 – 실시간 호스트, 서비스 및 버전을 탐색합니다.
5Reporting보고 – 분석을 위해 구조화된 JSON 또는 CSV 형식으로 결과를 내보냅니다.

DNS 레코드 개요

DNS는 인터넷이 식별하고 트래픽을 라우팅하는 기반입니다. 레코드 유형을 이해하면 조직의 온라인 구조에 대한 초기 인사이트를 얻을 수 있습니다.

A / AAAA – 호스트‑대‑IP 매핑

  • A – IPv4 주소.
  • AAAA – IPv6 주소.

이 레코드들은 서비스가 어디에 호스팅되는지(클라우드 제공업체, 온‑프레미스, 공유 호스팅)를 보여줍니다.

CNAME – 별칭 및 CDN

blog.example.com → cname → example-blog.hosting.net

보통 드러나는 서비스:

  • CDN 제공업체 (Cloudflare, Akamai)
  • 이메일 플랫폼
  • SaaS 대시보드
  • 클라우드 호스팅 환경 (AWS, GCP, Azure)

NS – 권한 서버

NS 레코드는 도메인에 대해 권한을 가진 서버를 나타내며, 다음을 추론하는 데 도움이 됩니다:

  • 호스팅 제공업체
  • DNS가 자체 관리되는지 외부에 위임되는지 여부
  • 중복성 / 장애 조치 구성
  • 영역 오구성으로 인한 가능한 서브도메인

Note: 자체 호스팅 NS 서버는 대규모 내부 인프라를 나타내는 경우가 많습니다.

MX – 이메일 라우팅

MX 레코드는 이메일을 수신하는 메일 서버를 보여주며 다음을 드러낼 수 있습니다:

  • Google Workspace, Microsoft 365, 또는 맞춤형 메일 서버 사용 여부
  • 레거시 또는 보안이 취약한 메일 시스템
  • 메일 인프라와 연결된 추가 서브도메인

TXT – 보안 정책 및 검증 아티팩트

목적예시
이메일 인증SPF, DKIM, DMARC
도메인 검증클라우드/ SaaS 검증 토큰
공개 공개보안 정책, 소유권 진술
기타맞춤 메타데이터, API 키(숨김)

Note: SPF, DKIM, DMARC를 함께 사용하면 위조 이메일을 방지할 수 있습니다.

SRV – 서비스 검색

SRV 레코드는 SIP, LDAP, Kerberos, VoIP, Microsoft 서비스, 게임 서버 등과 같은 서비스에 대한 호스트명과 포트를 지정합니다. 이를 통해 다음을 파악할 수 있습니다:

  • 내부 인증 서비스
  • 디렉터리 서비스
  • 공개 웹에서는 보이지 않는 인프라 의존성

Source:

서브도메인 탐색 – 공격 표면 확대

서브도메인은 종종 고유한 애플리케이션, API, 관리자 패널, 혹은 온보딩 시스템을 호스팅합니다(예: api.example.com, vpn.example.com, dev.example.com). 이를 발견하면 공격 표면이 넓어집니다.

1. 수동 열거

이미 인터넷을 모니터링하고 있는 외부 소스에서 정보를 수집합니다:

  • Certificate Transparency (CT) 로그
  • 과거 DNS 데이터
  • 검색엔진 도크

각 소스는 도메인의 진화 단계별 다른 정보를 제공합니다.

2. Certificate Transparency 로그

모든 HTTPS 사이트는 SSL/TLS 인증서를 공개 CT 로그에 게시해야 합니다. 여기에는 비공개로 유지될 의도였던 서브도메인도 포함될 수 있습니다.

도구 / 서비스설명
crt.sh공개 CT‑로그 검색 엔진
bufferover.runCT, DNS, 역조회 데이터를 집계

CT 로그를 통해 발견된 서브도메인 예시

api.example.com
dev.example.com
staging-api.example.com
internal-vpn.example.com

초보자용 파이썬 스크립트 – CT 로그 가져오기

import requests

domain = "example.com"
url = f"https://crt.sh/?q=%25.{domain}&output=json"

try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()
    entries = response.json()
    subdomains = {entry["name_value"] for entry in entries}
    for sub in sorted(subdomains):
        print(sub)
except requests.RequestException as e:
    print(f"Error fetching CT logs: {e}")

example.com을 대상 도메인으로 교체하세요. 이 스크립트는 crt.sh에 도메인을 포함하는 모든 인증서를 조회하고, 중복을 제거한 서브도메인 목록을 출력합니다.

3. 다음 단계

  1. 수동 데이터와 능동 탐지를 병합 – 예: HTTP 요청 전송, 포트 스캔 실행.
  2. 결과를 pandas DataFrame에 저장 – CSV/JSON으로 손쉽게 내보낼 수 있습니다.
  3. 은밀하게 진행 – 속도 제한(asyncio.sleep)과 무작위 사용자‑에이전트(httpx)를 구현합니다.

이 기본기를 바탕으로 보다 고급 리콘 파이프라인을 구축하고, 추가 데이터 소스를 통합하며, 전체 규모의 침투 테스트나 버그 바운티 워크플로우로 원활히 전환할 수 있습니다.

Back to Blog

관련 글

더 보기 »