파이썬을 활용한 사이버 보안 정찰 초보자 최고의 가이드
Source: Dev.to
소개
사이버 보안 정찰은 대상의 디지털 발자국을 이해하기 위한 첫 번째이자 가장 중요한 단계입니다. 초보자라면 어디를 살펴봐야 하는지, 어떻게 살펴봐야 하는지, 어떤 도구를 사용해야 하는지를 알면 네트워크 보안, 침투 테스트 및 OSINT 조사에서 효율성을 크게 높일 수 있습니다.
Python은 단순함, 다재다능함, 강력한 라이브러리 덕분에 보안 전문가들의 기본 언어가 되었습니다. 이 가이드는 정찰, DNS 열거 및 네트워크 스캔의 기본 개념을 Python으로 풀어 설명하므로, 초보자도 개념을 실질적으로 이해하고 바로 실험을 시작할 수 있습니다.
이 가이드를 마치면 다음을 할 수 있습니다
- 수동 정찰과 능동 정찰의 차이를 이해한다.
- 모든 정찰 프로젝트에 대해 범위와 대상을 효과적으로 정의한다.
- Python을 사용해 DNS 레코드, 서브도메인 및 인증서 투명성 로그를 조회한다.
- 비동기 네트워크 스캔을 수행해 호스트와 서비스 정보를 탐색한다.
- 정찰 데이터를 효율적으로 조직해 분석 및 보고에 활용한다.
- OPSEC 및 속도 제한을 적용해 정찰 중 은밀함을 유지한다.
이러한 기술은 침투 테스트, 버그 바운티 사냥 및 OSINT 조사에 견고한 기반을 제공합니다.
사전 요구 사항
시작하기 전에 Python 3.12 환경이 준비되어 있는지 확인하십시오. 정찰 작업에 권장되는 라이브러리는 다음과 같습니다:
| 라이브러리 | 목적 |
|---|---|
asyncio / trio | 스레드 없이 수천 개의 작업을 동시에 처리 |
httpx | HTTP/2, 프록시, SOCKS 지원 비동기 HTTP/HTTPS 요청 |
aiodns | DNSSEC 지원 비동기 DNS 해석 |
ipwhois | ASN 및 프리픽스 조회 |
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 질의, 포트 스캔, 배너 수집, 웹 크롤링 등 직접적인 탐색을 수행한다.
- 강력하지만 로그를 생성하고 방화벽을 트리거할 수 있다.
규칙: 항상 수동 정찰부터 시작한다. 더 안전하고 비용이 들지 않으며, 능동 탐색 범위를 좁히는 데 도움이 된다.
정형화된 워크플로우
- 범위 정의 – IP 대역, 도메인, 직원 별명 등을 정의한다.
- 수동 정찰 – 공개된 아티팩트를 수집한다.
- 상관관계 및 피벗 – 중복 제거, 보강, 리드 생성.
- 능동 정찰 – 실시간 호스트, 서비스, 버전을 탐색한다.
- 보고 – 분석을 위한 구조화된 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에 대상 도메인을 포함하는 모든 인증서를 조회하고, 고유한 서브도메인 이름을 추출해 출력한다. 출력 결과를 파일로 파이프하면 이후 분석에 활용할 수 있다.
가이드 끝.