인가된 침투테스터와 버그바운티 헌터를 위한 프록시 로테이션 가이드

인가된 스코프 내에서 웹 자산 탐색, 서브도메인 열거, 콘텐츠 디스커버리에 레지덴셜 프록시 로테이션을 활용하는 실전 가이드. 법적 프레이밍과 요청 한계 에티켓을 포함합니다.

인가된 침투테스터와 버그바운티 헌터를 위한 프록시 로테이션 가이드

버그바운티 헌터와 침투테스터에게 가장 좌절스러운 순간은 무엇일까? 바로 WAF에 차단당해 스캔이 중단되는 순간이다. 수백 개의 서브도메인을 열거하려다 IP가 블록되고, ffuf가 429 에러만 뱉어내며, Burp Suite 트래픽이 탐지돼 스코프 전체가 접근 불가능해진다. 펜테스트 프록시 로테이션은 이 문제의 핵심 해결책이다.

하지만 기술적 논의에 앞서 한 가지를 명확히 해야 한다: 명시적 인가 없이 어떤 시스템도 테스트하지 마라. 스코프 밖 테스팅은 불법이며, 본 가이드는 오직 인가된 버그바운티 프로그램, 펜테스트 계약, 책임 있는 공개 정책 하에서의 활동만을 다룬다.

법적 프레이밍: 인가가 전제다

모든 보안 연구의 출발점은 명시적 인가다. 인가 없는 스캐닝은 대부분의 관할 구역에서 컴퓨터 사기 및 남용 법률에 위배된다.

  • 버그바운티 프로그램 규칙: HackerOne, Bugcrowd, Intigriti 등의 플랫폼은 스코프와 아웃오브스코프를 명확히 정의한다. 스코프 밖 자산에 대한 어떤 테스트도 즉각적인 제재와 법적 위험을 초래한다.
  • 세이프하버(Safe Harbor): 많은 프로그램이 "선의의 연구자 보호" 조항을 포함하지만, 이 보호는 스코프 내 활동에만 적용된다. 스코프를 벗어나면 보호가 사라진다.
  • 펜테스트 계약: 기업과의 계약적 테스트에서는 서명된 규칙의 계약(RoE)이 최우선이다. 요청 한계, 허용 도구, 금지 공격 벡터를 반드시 준수하라.
  • 로컬 법률: CFAA(미국), Computer Misuse Act(영국), 정보통신망법(한국) 등 관할 구역별 법률을 확인하라.
핵심 원칙: 인가받은 스코프 내에서만 활동하라. 의심스러우면 프로그램 운영자에게 먼저 문의하라. "허락보다 용서가 쉽다"는 보안 연구에 절대 적용되지 않는다.

왜 펜테스트에 레지덴셜 프록시가 필요한가

데이터센터 IP는 WAF와 보안 시스템에 쉽게 식별된다. AWS, Azure, DigitalOcean의 IP 대역은 공개되어 있으며, Cloudflare나 Akamai 같은 WAF는 이를 즉시 플래깅한다.

버그바운티 레지덴셜 프록시가 해결하는 문제들:

  • WAF 우회: 레지덴셜 IP는 일반 사용자 트래픽과 구분이 어려워 WAF가 차단하지 않는다.
  • 속도 제한 회피: 단일 IP에서의 고속 요청은 429 응답을 유발하지만, 다수의 레지덴셜 IP로 분산하면 자연스러운 트래픽 패턴처럼 보인다.
  • 지리적 분산: 글로벌 기업의 자산은 지역에 따라 다르게 응답할 수 있다. 다국가 IP로 테스팅하면 숨겨진 엔드포인트를 발견할 수 있다.
  • 연구자 신원 보호: OSINT 수집 시 연구자의 실제 IP가 타겟 로그에 남지 않아 attribution을 방지한다.
프록시 유형WAF 탐지 확률속도세션 지속성펜테스트 적합성
데이터센터높음빠름불안정제한적 (차단 위험)
레지덴셜낮음중간스티키 세션 가능★★★★★ 최적
모바일매우 낮음느림스티키 세션 가능★★★★☆ 모바일 API 테스트

서브도메인 열거: 분산 패시브 수집

서브도메인 열거는 공격 표면 매핑의 첫 단계다. Amass와 Subfinder는 패시브 소스(crt.sh, VirusTotal, Shodan 등)에서 데이터를 수집하지만, 대규모 스캔 시 API 속도 제한에 걸린다. 레지덴셜 프록시로 이를 분산하라.

Amass에 프록시 통합하기

Amass는 config.ini 파일에서 업스트림 프록시를 설정할 수 있다. ProxyHat 레지덴셜 프록시를 사용해 패시브 열거 트래픽을 분산해보자.

# amass config.ini — ProxyHat 레지덴셜 프록시 설정
[network_settings]
http_proxy = http://user-country-US:PASSWORD@gate.proxyhat.com:8080
socks_proxy = socks5://user-country-US:PASSWORD@gate.proxyhat.com:1080

# API 속도 제한 회피를 위해 국가를 순환시키려면
# 여러 설정 프로필을 생성하고 교차 사용:
#   Profile 1: user-country-US:PASSWORD
#   Profile 2: user-country-DE:PASSWORD  
#   Profile 3: user-country-JP:PASSWORD

[data_sources]
# 각 데이터 소스별 요청 간격 조정
minimum_ttl = 60
maximum_ttl = 600

실행 명령:

# 프록시가 적용된 Amass 패시브 열거
amass enum -passive -config config.ini -d target.com -o subdomains.txt

# 여러 국가에서 병렬 수집 (각 터미널에서 다른 프로필 사용)
amass enum -passive -config config_us.ini -d target.com -o subs_us.txt &
amass enum -passive -config config_de.ini -d target.com -o subs_de.txt &
wait
# 결과 병합 및 중복 제거
cat subs_*.txt | sort -u > subdomains_final.txt

Subfinder와 프록시 체인

Subfinder는 직접 프록시 플래그를 지원하지 않지만, proxychains를 통해 라우팅할 수 있다.

# /etc/proxychains4.conf 설정
[ProxyList]
http gate.proxyhat.com 8080 user-country-GB PASSWORD
http gate.proxyhat.com 8080 user-country-FR PASSWORD
http gate.proxyhat.com 8080 user-country-CA PASSWORD
# proxychains로 Subfinder 실행
proxychains4 subfinder -d target.com -all -o subfinder_results.txt

주의: Subfinder의 멀티 고루틴 아키텍처와 proxychains의 동작이 충돌할 수 있다. 안정적인 실행을 위해 -t 10으로 스레드를 제한하라.

웹 자산 탐색: DNS 브루트포싱과 콘텐츠 디스커버리

패시브 열거로 발견하지 못한 서브도메인은 액티브 DNS 브루트포싱으로 찾아야 한다. 그러나 고속 DNS 쿼리는 권한 있는 DNS 서버의 속도 제한을 트리거한다. 웹 자산 탐색 프록시로 이를 분산하라.

ffuf에 ProxyHat 프록시 통합

ffuf는 -x 플래그로 프록시를 직접 지원한다. 요청마다 IP를 로테이션하려면 ProxyHat의 세션 로테이션을 활용한다.

# ffuf 콘텐츠 디스커버리 — ProxyHat 레지덴셜 프록시 사용
# 각 요청마다 새 IP로 로테이션 (세션 ID 없이)
ffuf -u https://target.com/FUZZ \
  -w /opt/wordlists/seclists/Discovery/Web-Content/common.txt \
  -x http://user-country-US:PASSWORD@gate.proxyhat.com:8080 \
  -t 20 \
  -rate 50 \
  -mc 200,301,302,403 \
  -o ffuf_results.json

# 스티키 세션이 필요한 경우 (인증 컨텍스트 유지)
# 세션 ID를 지정하면 동일 IP가 유지됨
ffuf -u https://target.com/FUZZ \
  -w /opt/wordlists/seclists/Discovery/Web-Content/common.txt \
  -x http://user-session-pentest01:PASSWORD@gate.proxyhat.com:8080 \
  -t 5 \
  -rate 10

Gobuster와 프록시 로테이션

Gobuster도 -p 플래그로 프록시를 지원한다. 프록시 목록 파일을 작성해 로테이션을 구현할 수 있다.

# proxy_list.txt — 여러 국가의 ProxyHat 엔드포인트
http://user-country-US:PASSWORD@gate.proxyhat.com:8080
http://user-country-DE:PASSWORD@gate.proxyhat.com:8080
http://user-country-SG:PASSWORD@gate.proxyhat.com:8080
http://user-country-BR:PASSWORD@gate.proxyhat.com:8080
# gobuster dir 스캔 — 프록시 로테이션 사용
gobuster dir -u https://target.com \
  -w /opt/wordlists/seclists/Discovery/Web-Content/raft-medium-directories.txt \
  -p proxy_list.txt \
  -t 10 \
  --delay 500ms \
  -s "200,204,301,302" \
  -o gobuster_results.txt

스캐너 트래픽 블렌딩: Burp Suite + 업스트림 레지덴셜 프록시

버그바운티 연구에서 Burp Suite는 필수 도구다. 하지만 Burp의 자동화된 스캔 트래픽은 데이터센터 IP에서 나가면 즉시 WAF에 탐지된다. 업스트림 레지덴셜 프록시를 설정해 스캐너 트래픽을 일반 사용자 트래픽처럼 위장하라.

Burp Suite 업스트림 프록시 구성

  1. Project options → Connections → Upstream Proxy Servers로 이동
  2. 호스트 * (모든 트래픽)에 대해 프록시 설정:
    • Proxy host: gate.proxyhat.com
    • Proxy port: 8080
    • Proxy type: HTTP
    • Username: user-country-US (또는 대상 지역에 맞는 국가 코드)
    • Password: ProxyHat 비밀번호
  3. 인증이 필요 없는 호스트는 제외 목록에 추가 (예: 로컬 테스트 대상)

고급 활용 팁:

  • 액티브 스캔 시: -rate 제한을 Burp의 Throttle 설정으로 구현하라. 초당 5–10요청이 대부분의 버그바운티 프로그램에서 허용 가능한 수준이다.
  • 세션 유지: 인증된 테스팅에서는 user-session-stable01 형식의 스티키 세션을 사용해 동일 IP를 유지하라. IP 변경 시 세션이 만료될 수 있다.
  • 지역 타겟팅: 특정 지역에서만 노출되는 엔드포인트가 있다면 user-country-JP 등으로 전환해 테스트하라.

Nuclei + 프록시 로테이션

Nuclei는 -proxy 플래그와 -rate-limit 플래그를 모두 지원한다. 대규모 자산 스캔에 이상적이다.

# Nuclei 취약점 스캔 — ProxyHat 프록시 사용
nuclei -l subdomains_final.txt \
  -t /opt/nuclei-templates/cves/ \
  -t /opt/nuclei-templates/misconfiguration/ \
  -proxy http://user-country-US:PASSWORD@gate.proxyhat.com:8080 \
  -rate-limit 50 \
  -bulk-size 25 \
  -o nuclei_results.txt

요청 한계 에티켓: 스코프 계약의 숨겨진 규칙

많은 버그바운티 프로그램과 펜테스트 계약이 요청 한계를 명시한다. 이를 무시하면 단순히 차단을 넘어 프로그램에서 영구 퇴출될 수 있다.

일반적인 요청 한계 가이드라인

활동 유형권장 요청 속도비고
패시브 서브도메인 열거제한 없음 (API 한계 내)타겟 서버에 직접 요청 안 함
DNS 브루트포싱50–100 qpsDNS 서버 부하 주의
디렉토리 브루트포싱10–30 req/sWAF 차단 임계값 미만
액티브 취약점 스캔5–15 req/s프로그램 규칙 확인 필수
퍼즈 테스팅5–20 req/s엔드포인트별 튜닝 필요

프록시 로테이션이 요청 한계를 "우회"하는 수단이 아님을 명심하라. 프록시는 IP 차단을 방지할 뿐, 서버의 전체 부하를 감소시키지 않는다. 스코프 계약의 요청 한계를 초과하면, IP가 바뀌어도 서버 측 로깅에서 탐지된다.

실전 요청 한계 준수 전략

  • 1단계 — 스코프 규칙 숙독: 프로그램 페이지에서 요청 한계, 금지 도구, 허용 시간대를 확인하라.
  • 2단계 — 속도 제한 하드코딩: 도구의 rate-limit 플래그를 사용해 실수로 한계를 넘지 않게 하라. ffuf의 -rate, Nuclei의 -rate-limit, Burp의 Throttle 등.
  • 3단계 — 모니터링: 응답 코드 비율을 모니터링하라. 429 비율이 5%를 넘으면 속도를 낮춰라.
  • 4단계 — 피크 시간 회피: 가능하면 비즈니스 피크 시간을 피해 스캔하라. 타겟의 서비스에 영향을 주면 안 된다.

OSINT 수집과 프록시: 타겟 Attribution 방지

OSINT 분석가와 보안 연구자는 타겟이 자신의 정체를 파악하는 것을 원하지 않는다. 레지덴셜 프록시는 수집 활동의 attribution을 방지하는 핵심 도구다.

  • WHOIS/Shodan/Censys 조회: 연구자의 실제 IP가 타겟의 로그에 남지 않는다.
  • 공개 데이터 스크래핑: GitHub 커밋 히스토리, Pastebin, 포럼 모니터링 시 IP가 노출되지 않는다.
  • 소셜 미디어 리서치: 계정 연관 분석 시 연구자의 IP가 플랫폼에 기록되지 않는다.
# curl로 OSINT 수집 — ProxyHat 레지덴셜 프록시 사용
curl -x http://user-country-US:PASSWORD@gate.proxyhat.com:8080 \
  -s "https://crt.sh/?q=%25.target.com&output=json" \
  | jq -r '.[].name' | sort -u > crt_subdomains.txt

# Shodan 검색 (API 키 필요)
curl -x http://user-country-DE:PASSWORD@gate.proxyhat.com:8080 \
  -s "https://api.shodan.io/shodan/host/search?key=YOUR_API_KEY&query=org:Target+Inc" \
  | jq '.matches[].ip_str' > shodan_ips.txt

취약점 스캐닝: 분산 속도 제한 허용 스캔

대규모 자산(수천 개 서브도메인)을 스캔할 때, 단일 IP로는 속도 제한에 걸려 완료 자체가 불가능할 수 있다. 레지덴셜 프록시 로테이션으로 분산 속도 제한 허용 스캔을 구현하라.

핵심 아이디어: 10개의 레지덴셜 IP로 분산하면, 각 IP당 요청 속도를 1/10로 낮추면서 전체 처리량은 유지할 수 있다. 서버 관점에서는 10명의 일반 사용자가 각각 느린 속도로 탐색하는 것처럼 보인다.

Python 스크립트로 분산 스캐닝 구현

#!/usr/bin/env python3
"""분산 자산 탐색 스크립트 — ProxyHat 레지덴셜 프록시 로테이션
주의: 인가된 스코프 내에서만 사용하십시오."""

import requests
from concurrent.futures import ThreadPoolExecutor, as_completed

# ProxyHat 설정
PROXY_BASE = "http://user-country-{country}:PASSWORD@gate.proxyhat.com:8080"
COUNTRIES = ["US", "DE", "GB", "JP", "SG", "BR", "CA", "FR", "AU", "KR"]

def get_proxy(country):
    return {"http": PROXY_BASE.format(country=country),
            "https": PROXY_BASE.format(country=country)}

def check_subdomain(subdomain, country):
    proxy = get_proxy(country)
    try:
        r = requests.get(f"https://{subdomain}",
                        proxies=proxy,
                        timeout=10,
                        allow_redirects=False)
        return {"subdomain": subdomain, "status": r.status_code, "country": country}
    except Exception as e:
        return {"subdomain": subdomain, "status": "error", "detail": str(e), "country": country}

# 서브도메인 목록 로드
with open("subdomains_final.txt") as f:
    subdomains = [line.strip() for line in f if line.strip()]

# 국가별로 로테이션하며 분산 스캔
results = []
with ThreadPoolExecutor(max_workers=10) as executor:
    futures = {}
    for i, sub in enumerate(subdomains):
        country = COUNTRIES[i % len(COUNTRIES)]
        futures[executor.submit(check_subdomain, sub, country)] = sub
    
    for future in as_completed(futures):
        result = future.result()
        if result["status"] != "error":
            results.append(result)
            print(f"[{result['country']}] {result['subdomain']}: {result['status']}")

print(f"\n활성 서브도메인: {len(results)}/{len(subdomains)}")

실전 워크플로우: 종합 자산 탐색 파이프라인

인가된 스코프 내에서의 완전한 자산 탐색 파이프라인을 구성해보자.

  1. 패시브 열거 (1일차): Amass + Subfinder로 패시브 소스에서 서브도메인 수집. ProxyHat 레지덴셜 프록시로 API 속도 제한 회피.
  2. DNS 브루트포싱 (2일차): puredns + ProxyHat 프록시로 DNS 브루트포싱. 속도 제한 50 qps 유지.
  3. 콘텐츠 디스커버리 (3일차): ffuf/gobuster로 각 활성 서브도메인의 숨겨진 경로 탐색. 국가별 프록시 로테이션으로 WAF 차단 회피.
  4. 취약점 스캐닝 (4일차): Nuclei로 알려진 취약점 템플릿 스캔. rate-limit 30 req/s 준수.
  5. 수동 테스팅 (5일차+): Burp Suite + 업스트림 레지덴셜 프록시로 수동 익스플로잇 및 비즈니스 로직 테스트.

각 단계에서 스코프 규칙을 재확인하라. 새로 발견된 서브도메인이 스코프 내인지, 특정 테스트 유형이 금지되어 있는지 확인해야 한다.

핵심 요약

  • 인가가 최우선: 명시적 인가 없는 테스팅은 불법이다. 버그바운티 스코프와 펜테스트 계약을 항상 준수하라.
  • 레지덴셜 프록시 = WAF 우회 핵심: 데이터센터 IP는 즉시 탐지된다. 레지덴셜 IP는 일반 사용자 트래픽과 구분이 어렵다.
  • 로테이션은 IP 차단 방지용: 요청 한계 우회용이 아니다. 서버 전체 부하는 스코프 계약을 준수해야 한다.
  • 도구 통합은 간단: Amass(config.ini), ffuf(-x), gobuster(-p), Nuclei(-proxy), Burp(업스트림 프록시) 모두 몇 줄의 설정으로 ProxyHat과 연동된다.
  • 속도 제한은 하드코딩: 실수 방지를 위해 도구의 rate-limit 플래그를 항상 설정하라.
  • Attribution 방지: OSINT 수집 시 연구자의 실제 IP 보호는 운영 보안의 기본이다.

인가된 보안 연구에서 프록시 로테이션은 도구가 아니라 방법론이다. 올바르게 사용하면 WAF 차단 없이 더 깊이, 더 넓게, 더 안전하게 자산을 탐색할 수 있다. ProxyHat의 레지덴셜 프록시 네트워크로 펜테스트 효율성을 한 단계 높여보라.

ProxyHat 레지덴셜 프록시 요금제 보기 →

시작할 준비가 되셨나요?

AI 필터링으로 148개국 이상에서 5천만 개 이상의 레지덴셜 IP에 액세스하세요.

가격 보기레지덴셜 프록시
← 블로그로 돌아가기