서브도메인 탈취는 해지·삭제된 외부 서비스(클라우드·CDN·페이지 호스팅)를 여전히 가리키는 방치된 CNAME 레코드를 공격자가 재점유해 정식 서브도메인을 장악하는 공격이다.
2026년에는 유명 대학의 공식 서브도메인들이 방치된 CNAME을 통해 악용된 사례가 보고됐는데, 신뢰받는 도메인이 피싱·악성 배포에 그대로 쓰이면 브랜드 피해가 크다.
이 글은 자주 발생하는 실수 패턴, 표준 구현 코드, 30초 자가진단, 24시간 패치 순서를 정리했다.
한눈에 보는 핵심
Q. Dangling CNAME이 왜 생기나요? A. 외부 서비스(호스팅·CDN)를 해지하면서 DNS의 CNAME 레코드를 지우지 않으면, 그 서비스에서 동일 이름을 다시 등록한 공격자에게 서브도메인이 연결됩니다. Q. 어떤 피해가 있나요? A. your.brand.com 같은 신뢰 도메인이 공격자 콘텐츠를 서빙하게 됩니다. 피싱, 쿠키 탈취, 악성 다운로드, OAuth 리다이렉트 악용으로 이어집니다. Q. 어떻게 예방하나요? A. 서비스 해지 시 DNS 레코드부터 정리하고, 전체 DNS·서브도메인 인벤토리를 주기적으로 스캔해 dangling 여부를 자동 점검해야 합니다.자주 발생하는 실수 패턴
| # | 패턴 | 위험도 |
|---|---|---|
| 1 | 외부 서비스 해지 후 CNAME 레코드 미삭제 | 치명 |
| 2 | DNS·서브도메인 자산 인벤토리 부재 | 높음 |
| 3 | 와일드카드 CNAME으로 미사용 이름까지 위임 | 높음 |
| 4 | 인증서 투명성(CT) 로그로 신규 서브도메인 미감시 | 중간 |
| 5 | 탈취 모니터링·알림 없음 | 중간 |
표준 구현 코드
# dangling CNAME 자동 점검 (CI/스케줄러)
import dns.resolver, requests
SUBDOMAINS = ["app", "docs", "status", "mail"] # 자산 인벤토리
DOMAIN = "example.com"
def check(sub):
fqdn = f"{sub}.{DOMAIN}"
try:
ans = dns.resolver.resolve(fqdn, "CNAME")
target = str(ans[0].target).rstrip(".")
except Exception:
return None
try: # 대상이 미등록/에러면 탈취 위험
r = requests.get(f"https://{target}/", timeout=5)
if r.status_code in (404, 410) or "NoSuchBucket" in r.text:
return f"[위험] {fqdn} -> {target} (방치 가능)"
except Exception:
return f"[확인필요] {fqdn} -> {target} (대상 미응답)"
return None
핵심은 "동작하는 코드"와 "안전한 코드"가 다르다는 점이다.
AI 코딩 도구는 기능 충족 코드를 우선 출력하므로 보안 분기는 별도로 강제해야 한다.
미들웨어·정책·CI 게이트로 모든 경로에 일괄 적용하는 것이 표준이다.
30초 자가진단
# 1. 서브도메인의 CNAME 대상 확인
dig CNAME app.example.com +short
# 2. 대상이 살아있는지 — 404/NoSuchBucket/미등록이면 탈취 위험
curl -sI https://<CNAME대상>/
# 3. CT 로그로 내 도메인의 서브도메인 전체 나열(crt.sh 등) 후 인벤토리와 대조
위 시그널이 발견되면 결함이다. OWASP Web Security Testing Guide를 함께 참조하라.
24시간 패치 절차
| 순위 | 조치 |
|---|---|
| 1 | 외부 서비스 해지 시 DNS 레코드부터 즉시 삭제 |
| 2 | 전체 서브도메인·DNS 인벤토리 구축 |
| 3 | dangling CNAME 자동 점검을 CI/스케줄러에 등록 |
| 4 | 인증서 투명성(CT) 로그로 신규 서브도메인 감시 |
| 5 | 탈취 의심 시 알림 + 레코드 회수 절차 마련 |
지금 해야 할 것
실무자: CodeScan 무료 스캔으로 30초 점검 후 우선순위대로 패치.
CISO·임원: 조직 전체 점검·규제 대응은 SENTRIX 30분 1:1 상담으로.
결함은 발견 즉시, 늦어도 24시간 안에 패치하는 것이 표준이다.