인증서 투명성(Certificate Transparency)이란
인증서 투명성(CT)은 Google이 2013년 제안한 공개 감사 프레임워크입니다. 인증기관(CA)이 SSL/TLS 인증서를 발급할 때 공개 로그 서버에 기록을 남기도록 강제하는 구조입니다. 이 로그는 누구나 열람할 수 있으며, 인증서 오발급이나 악의적 발급을 탐지하기 위해 만들어졌습니다.
보안 전문가에게는 이 로그가 서브도메인 열거의 강력한 정보원이 됩니다. 조직이 어떤 서브도메인에 인증서를 발급했는지 기록이 전부 공개되기 때문입니다. DNS 브루트포스나 존 트랜스퍼 공격 없이도 서브도메인 목록을 상당 부분 수집할 수 있습니다.
crt.sh로 서브도메인 조회하기
crt.sh는 CT 로그를 인덱싱해 검색 가능하게 해주는 무료 서비스입니다. 브라우저에서 직접 검색하거나 API로 자동화할 수 있습니다.
브라우저 검색
https://crt.sh/?q=%25.example.com
%25는 URL 인코딩된 % 와일드카드입니다. %.example.com으로 example.com의 모든 서브도메인 인증서를 조회합니다.
JSON API로 자동화
import requests
import json
def get_subdomains_from_ct(domain):
url = f"https://crt.sh/?q=%25.{domain}&output=json"
resp = requests.get(url, timeout=30)
data = resp.json()
subdomains = set()
for entry in data:
name = entry.get("name_value", "")
for sub in name.split("\n"):
sub = sub.strip().lstrip("*.")
if sub.endswith(domain):
subdomains.add(sub)
return sorted(subdomains)
results = get_subdomains_from_ct("example.com")
for sub in results:
print(sub)
CT 로그에서 발견 가능한 정보
- 스테이징/개발 서버:
staging.example.com,dev.example.com,test.example.com - 내부 서비스:
admin.example.com,api.example.com,internal.example.com - 레거시 서브도메인: 더 이상 사용하지 않지만 DNS에 남아 있는 엔트리
- SaaS 연동:
mail.example.com,support.example.com등 외부 서비스 연동 흔적
서브도메인 탈취(Subdomain Takeover) 취약점
CT 로그로 서브도메인을 찾은 다음, 각 서브도메인의 DNS 레코드와 실제 서비스 상태를 교차 확인하면 서브도메인 탈취 취약점을 탐지할 수 있습니다.
서브도메인 탈취는 다음 시나리오에서 발생합니다.
- 회사가
blog.example.com을 GitHub Pages에 연결했다. - GitHub Pages 저장소가 삭제되거나 이름이 바뀌었다.
- DNS CNAME 레코드는 여전히
username.github.io를 가리킨다. - 공격자가 동일한 GitHub 사용자명으로 저장소를 만들면
blog.example.com을 장악한다.
이 취약점은 GitHub Pages, Heroku, AWS S3, Azure, Netlify, Vercel 등 다양한 플랫폼에서 발생합니다.
취약점 확인 방법
# CNAME이 가리키는 대상이 실제로 존재하는지 확인
dig CNAME blog.example.com
# 반환값이 .github.io, .herokuapp.com 등 외부 서비스이면
# 해당 서비스에서 실제로 응답하는지 HTTP 요청으로 확인
curl -I https://blog.example.com
CNAME은 존재하지만 HTTP 응답이 404이거나 "There isn't a GitHub Pages site here" 같은 메시지가 나오면 탈취 취약점일 가능성이 높습니다.
와일드카드 인증서와 서브도메인 열거의 한계
조직이 *.example.com 형태의 와일드카드 인증서를 사용한다면 CT 로그에서 개별 서브도메인이 드러나지 않습니다. 와일드카드 인증서는 CT 로그에 *.example.com으로만 기록되기 때문입니다. 이 경우 CT 로그는 보조 수단이 되며, DNS 브루트포스나 인터넷 스캔을 추가로 활용해야 합니다.
반대로 각 서브도메인마다 개별 인증서를 발급(Let's Encrypt 사용 시 일반적)하면 CT 로그에 모두 기록됩니다.
CodeScan의 CT 분석 기능
CT 로그 조회와 서브도메인 탈취 취약점 탐지를 직접 구현하려면 상당한 시간이 필요합니다. CodeScan은 URL 입력 하나로 CT 로그 기반 서브도메인 열거, DNS 레코드 검증, 서브도메인 탈취 취약점 탐지를 자동으로 수행합니다. 결과는 등급과 수정 가이드까지 함께 제공합니다.