파이썬을 활용한 사이버 보안 정찰 초보자 최고의 가이드

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

Source: Dev.to

소개

사이버 보안 정찰은 대상의 디지털 발자국을 이해하기 위한 첫 번째이자 가장 중요한 단계입니다. 초보자라면 어디를 살펴봐야 하는지, 어떻게 살펴봐야 하는지, 어떤 도구를 사용해야 하는지를 알면 네트워크 보안, 침투 테스트 및 OSINT 조사에서 효율성을 크게 높일 수 있습니다.

Python은 단순함, 다재다능함, 강력한 라이브러리 덕분에 보안 전문가들의 기본 언어가 되었습니다. 이 가이드는 정찰, DNS 열거 및 네트워크 스캔의 기본 개념을 Python으로 풀어 설명하므로, 초보자도 개념을 실질적으로 이해하고 바로 실험을 시작할 수 있습니다.

이 가이드를 마치면 다음을 할 수 있습니다

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

이러한 기술은 침투 테스트, 버그 바운티 사냥 및 OSINT 조사에 견고한 기반을 제공합니다.

사전 요구 사항

시작하기 전에 Python 3.12 환경이 준비되어 있는지 확인하십시오. 정찰 작업에 권장되는 라이브러리는 다음과 같습니다:

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

설치

python3 -m venv recon
source recon/bin/activate
pip install httpx[http2] aiodns ipwhois rich pandas

정찰 기본: 능동 vs 수동

수동 정찰

  • 대상에 접촉하지 않는다.
  • 출처에는 WHOIS, crt.sh, Shodan, GitHub, 유출된 데이터베이스 등이 있다.
  • 은밀하며 대상에 로그가 남지 않는다.

능동 정찰

  • DNS 질의, 포트 스캔, 배너 수집, 웹 크롤링 등 직접적인 탐색을 수행한다.
  • 강력하지만 로그를 생성하고 방화벽을 트리거할 수 있다.

규칙: 항상 수동 정찰부터 시작한다. 더 안전하고 비용이 들지 않으며, 능동 탐색 범위를 좁히는 데 도움이 된다.

정형화된 워크플로우

  1. 범위 정의 – IP 대역, 도메인, 직원 별명 등을 정의한다.
  2. 수동 정찰 – 공개된 아티팩트를 수집한다.
  3. 상관관계 및 피벗 – 중복 제거, 보강, 리드 생성.
  4. 능동 정찰 – 실시간 호스트, 서비스, 버전을 탐색한다.
  5. 보고 – 분석을 위한 구조화된 JSON 또는 CSV로 내보낸다.

DNS 레코드 개요

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

A / AAAA – 호스트 ↔ IP 매핑

  • A – IPv4 주소.
  • AAAA – IPv6 주소.
    이 레코드는 서비스가 어디에 호스팅되는지(클라우드 제공자, 온프레미스, 공유 호스팅 등)를 보여준다.

CNAME – 별칭 및 CDN

CNAME은 한 도메인을 다른 도메인에 연결하며, 종종 제3자 서비스를 드러낸다:

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

주요 노출 서비스:

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

NS – 권한 서버

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

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

참고: 자체 호스팅 NS 서버는 대규모 내부 인프라를 시사한다.

MX – 이메일 라우팅

MX 레코드는 이메일 수신을 담당하는 메일 서버를 보여준다:

  • Google Workspace, Microsoft 365 또는 맞춤형 메일 서버 사용 여부 파악
  • 레거시 혹은 보안 취약 메일 시스템 식별
  • 메일 인프라와 연관된 추가 서브도메인 노출

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

주요 용도:

  • SPF, DMARC, DKIM(이메일 인증)
  • 클라우드/ SaaS 검증 토큰
  • 공개 보안 공개 정보
  • 도메인 메타데이터

참고: SPF, DKIM, DMARC는 스푸핑 방지에 함께 작동한다.

SRV – 서비스 발견

SRV 레코드는 SIP, LDAP, Kerberos, VoIP, Microsoft 서비스, 게임 서버 등 서비스의 호스트명과 포트를 지정한다. 이를 통해 다음을 발견할 수 있다:

  • 내부 인증 서비스
  • 디렉터리 서비스
  • 공개 웹에 드러나지 않은 인프라 의존성

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

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

수동 열거

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

  • 인증서 투명성(CT) 로그
  • 과거 DNS 데이터
  • 검색 엔진 도크

각 출처는 도메인의 진화 단계별 정보를 제공한다.

인증서 투명성 로그

HTTPS 사이트는 반드시 SSL/TLS 인증서를 공개 CT 로그에 게시해야 한다. 여기에는 비공개로 유지하려던 서브도메인까지 포함될 수 있다.

  • crt.sh – 공개 CT 로그 검색 엔진
  • bufferover.run – CT, DNS, 역조회 데이터셋 제공

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

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

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

import requests

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

response = requests.get(url, timeout=10)
if response.status_code == 200:
    entries = response.json()
    subdomains = {entry["name_value"] for entry in entries}
    for sub in sorted(subdomains):
        print(sub)
else:
    print("Failed to fetch CT logs")

이 스크립트는 crt.sh에 대상 도메인을 포함하는 모든 인증서를 조회하고, 고유한 서브도메인 이름을 추출해 출력한다. 출력 결과를 파일로 파이프하면 이후 분석에 활용할 수 있다.

가이드 끝.

Back to Blog

관련 글

더 보기 »