제공 서비스
웹 보안 점검 소스코드 분석 (SAST) CRM 보안 진단 다크웹 유출 조회
요금제 스토어 블로그 파트너 마이페이지 무료 보안 점검
가이드 2026.03.31 · 조회 164

인증서 투명성(CT) 로그로 서브도메인 찾는 방법

SSL/TLS 인증서 발급 기록은 공개 CT 로그에 남습니다. 이를 활용하면 숨겨진 서브도메인을 발견하고 서브도메인 탈취 취약점을 탐지할 수 있습니다.

인증서 투명성(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 레코드와 실제 서비스 상태를 교차 확인하면 서브도메인 탈취 취약점을 탐지할 수 있습니다.

서브도메인 탈취는 다음 시나리오에서 발생합니다.

  1. 회사가 blog.example.com을 GitHub Pages에 연결했다.
  2. GitHub Pages 저장소가 삭제되거나 이름이 바뀌었다.
  3. DNS CNAME 레코드는 여전히 username.github.io를 가리킨다.
  4. 공격자가 동일한 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 레코드 검증, 서브도메인 탈취 취약점 탐지를 자동으로 수행합니다. 결과는 등급과 수정 가이드까지 함께 제공합니다.

지금 무료로 서브도메인 보안 점검하기 →

CT로그 서브도메인 인증서

내 사이트도 점검해보세요

CodeScan으로 보안 취약점을 무료로 점검할 수 있습니다.

무료 스캔 시작하기 →
🛒
추천 상품
웹서비스 런칭 전 보안 세팅
런칭 전에 반드시 해야 하는 보안 설정을 원격으로 직접 해드립니다. HTTPS, 환경변수 분리, 보안 헤더…
220,000원 150,000원

🔒 바이브코딩 보안 체크리스트 받기

바이브코딩 보안 체크리스트(PDF)를 무료로 받아보세요.