Communitygithub.com

TLS 인증서 투명성 로그 감사

소유한 도메인에 대한 무단 또는 예상치 못한 인증서 발급을 모니터링하여 보안 위협을 탐지합니다.

TLS 인증서 투명성 로그 감사란 무엇인가요?

이 스킬은 TLS 인증서 투명성(CT) 로그를 활용하여 조직이 소유한 도메인에 대해 승인되지 않았거나 예상치 못한 인증서가 발급되는 것을 지속적으로 모니터링하고 탐지하는 방법을 상세히 설명합니다. 보안 팀, 침투 테스터, DevSecOps 엔지니어를 대상으로 하며, crt.sh API와 공개 CT 로그 서버를 통해 새로 발급된 인증서를 식별하고, 유효성을 검증하며, 알림을 생성하는 전체 워크플로우를 제공합니다. 이 스킬의 주요 기능으로는 승인되지 않은 인증 기관(CA) 탐지, 서브도메인 발견 및 검증, 피싱 인프라 식별(타이포스쿼팅, 동형 공격), 인증서 수명 주기 관리, CT 로그 무결성 검증 등이 있습니다. 자세한 단계별 지침, 주요 개념 설명(CT, SCT, 머클 트리, crt.sh 등), 실제 시나리오(금융 서비스 회사의 무단 인증서 탐지, 침투 테스트 공격 표면 매핑)를 포함하여 실무에 바로 적용 가능한 지식을 제공합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/auditing-tls-certificate-transparency-logs

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

TLS 인증서 투명성 로그 감사(Auditing TLS Certificate Transparency Logs)

사용 시점

  • 소유한 도메인에 대해 알려지지 않은 인증 기관(CA)에 의한 무단 또는 예상치 못한 인증서 발급 모니터링
  • 공개 CT 로그에 기록된 인증서를 통해 서브도메인 및 숨겨진 서비스 발견
  • 유사 도메인 인증서(타이포스쿼팅, 동형 공격)를 사용하는 피싱 인프라 탐지
  • 브라우저 정책에 따라 발급된 모든 인증서가 CT 로그에 나타나는지 확인하여 인증 기관 규정 준수 감사
  • 새로운 발급에 대한 알림을 포함한 지속적인 인증서 모니터링을 보안 운영 파이프라인에 구축

사용하지 말아야 할 경우: 인증 기관을 공격하거나 방해하는 목적, 요율 제한 또는 서비스 약관을 위반하여 CT 로그를 스크래핑하는 목적, DNS 확인을 통한 교차 검증 없이 서브도메인 열거의 유일한 방법으로 사용하는 목적.

사전 요구 사항

  • Python 3.10+ 및 requests, cryptography, pyOpenSSL 라이브러리 설치
  • crt.sh(HTTPS) 및 공개 CT 로그 서버에 대한 네트워크 액세스
  • 모니터링할 도메인 목록(소유 도메인, 브랜드 변형, 타이포스쿼 후보)
  • 새 인증서 발견 시 알림을 보내기 위한 SMTP 자격 증명 또는 웹훅 URL
  • X.509 인증서 구조 및 TLS 인증서 체인 검증에 대한 기본적인 이해

워크플로우

1단계: 도메인 인벤토리 및 기준선 설정

모니터링할 도메인에 대한 초기 인증서 인벤토리를 구축합니다:

  • 모니터링 범위 정의: 소유한 모든 루트 도메인, 등록된 브랜드 이름, 알려진 자회사를 나열합니다. 포괄적인 서브도메인 커버리지를 위해 와일드카드 패턴(%.example.com)을 포함합니다.
  • crt.sh에서 과거 인증서 조회: crt.sh JSON API를 사용하여 각 도메인에 대해 알려진 모든 인증서를 검색합니다. API 엔드포인트 https://crt.sh/?q=%.example.com&output=json은 와일드카드 패턴과 일치하는 인증서를 issuer_ca_id, issuer_name, common_name, name_value, not_before, not_after, serial_number 필드와 함께 반환합니다.
  • 기준선 데이터베이스 구축: 초기 인증서 세트를 인증서 ID, 도메인, 발급자, 유효 기간, SAN(주체 대체 이름), 최초 발견 타임스탬프 컬럼을 포함한 로컬 SQLite 데이터베이스에 저장합니다. 이 기준선은 이미 알려진 인증서에 대한 알림을 방지합니다.
  • 승인된 CA 식별: 기준선에서 도메인에 대해 합법적으로 인증서를 발급한 인증 기관 세트를 추출합니다. 이 세트에 없는 CA의 향후 발급은 높은 우선순위의 알림을 트리거합니다.
  • 서브도메인 매핑: 모든 인증서의 name_value 필드에서 고유한 서브도메인을 추출하여 초기 서브도메인 인벤토리를 구축합니다.

2단계: 지속적인 CT 로그 모니터링

새로운 인증서 발급에 대한 지속적인 모니터링을 설정합니다:

  • 정기적으로 crt.sh 폴링: 정기적인 간격(15-60분)으로 crt.sh API를 조회하여 새 인증서를 확인합니다. exclude=expired 매개변수를 사용하여 현재 유효한 인증서에 초점을 맞춥니다. 결과를 기준선 데이터베이스와 비교하여 새 항목을 식별합니다.
  • 인증서 세부 정보 파싱: 각 새 인증서에 대해 전체 SAN 목록, 발급자 체인, 유효 기간, 키 유형 및 크기, CT 로그 SCT(서명된 인증서 타임스탬프) 세부 정보, 인증서 지문(SHA-256)을 추출합니다.
  • 사전 인증서 탐지: CT 로그에는 최종 발급 전에 제출된 사전 인증서(poisoned certificate)가 포함됩니다. 이러한 사전 인증서를 조기 경고로 추적하면 인증서가 발급되려 하고 있지만 아직 활성화되지 않았음을 나타냅니다.
  • CT 로그 서명된 트리 헤드(STH) 모니터링: 고급 모니터링을 위해 CT 로그 서버에 직접 조회하여 최신 STH를 가져오고 연속된 트리 헤드 간의 일관성 증명을 확인합니다. 불일치는 로그 오작동(분할 뷰 공격)을 나타냅니다.
  • 요율 제한 인식: 쿼리 간격을 두고 응답을 캐싱하여 crt.sh의 요율 제한을 준수합니다. HTTP 429 응답에는 지수 백오프를 구현합니다. 대용량 모니터링의 경우 crt.sh PostgreSQL 인터페이스를 crt.sh:5432에서 직접 쿼리하는 것을 고려하십시오.
  • Atom/RSS 피드 대안: 더 가벼운 모니터링을 위해 crt.sh의 Atom 피드를 구독합니다: https://crt.sh/atom?q=%25.example.com은 새 로그 항목에 대한 실시간 알림을 제공합니다.

3단계: CT 데이터를 통한 서브도메인 발견

인증서 투명성 데이터에서 발견된 서브도메인을 추출하고 검증합니다:

  • 와일드카드 확장: 와일드카드 SAN(*.dev.example.com)이 있는 인증서는 DNS 영역 파일에 없을 수 있는 서브도메인의 존재를 드러냅니다. 상위 도메인을 추가 열거 대상으로 기록합니다.
  • 과거 인증서 마이닝: exclude=expired 매개변수 없이 crt.sh를 조회하여 DNS에서 여전히 확인될 수 있는 만료된 인증서의 서브도메인을 찾습니다. 이는 서브도메인 탈취에 취약할 수 있는 레거시 인프라를 나타냅니다.
  • DNS 검증: 발견된 각 서브도메인에 대해 DNS 확인(A, AAAA, CNAME 레코드)을 수행하여 서브도메인이 현재 활성 상태인지 확인합니다. 알려진 IP 범위와 교차 참조하여 섀도 IT 또는 무단 서비스를 식별합니다.
  • 타이포스쿼 탐지: 모니터링되는 도메인의 변형(비트스쿼팅, 동형, 삽입, 생략, 전치, 키보드 인접 대체)을 생성하고 CT 로그에서 이러한 변형에 발급된 인증서를 쿼리합니다. 타이포스쿼 도메인에 대한 인증서는 피싱 인프라를 강력히 나타냅니다.
  • 중복 제거 및 보강: 발견된 서브도메인을 정규화(소문자 변환, 후행 점 제거)하고 중복을 제거한 후 WHOIS 데이터, IP 지리적 위치, HTTP 응답 헤더로 보강하여 조사 우선순위를 지정합니다.

4단계: 인증서 발급 알림

보안 관련 인증서 이벤트에 대한 알림 규칙을 구성합니다:

  • 승인되지 않은 CA 알림: 승인된 CA 목록에 없는 CA가 인증서를 발급할 때 트리거됩니다. 이는 도메인 하이재킹, 도메인 검증을 위한 BGP 하이재킹 또는 손상된 CA를 나타낼 수 있으므로 가장 높은 우선순위의 알림입니다.
  • 새 서브도메인 알림: 이전에 보지 못한 서브도메인이 있는 SAN을 포함하는 인증서가 발견될 때 트리거됩니다. 이는 섀도 IT 배포 및 무단 서비스를 포착합니다.
  • 와일드카드 인증서 알림: 새로운 와일드카드 인증서 발급 시 트리거됩니다. 와일드카드 인증서는 손상될 경우 영향 범위가 넓으므로 발급을 엄격히 통제해야 합니다.
  • 단기 인증서 이상 알림: 조직의 정상적인 인증서 수명 주기와 다른 비정상적으로 짧은 유효 기간(24시간 미만)의 인증서가 있을 때 알림을 보냅니다. Let's Encrypt 남용 또는 자동화된 피싱 인프라를 나타낼 수 있습니다.
  • 만료 경고: CT 로그 데이터의 not_after 필드를 기준으로 중요 서비스의 인증서가 만료에 가까워지면(30, 14, 7일) 알림을 보냅니다.
  • 알림 전달: 이메일(SMTP), Slack 웹훅, PagerDuty를 통해 알림을 보내거나 기존 보안 모니터링과 통합하기 위해 SIEM 호환 JSON 로그 형식으로 기록합니다.

5단계: CT 로그 무결성 검증 및 보고

로그 무결성을 검증하고 규정 준수 증거를 생성합니다:

  • 서명된 트리 헤드(STH) 모니터링: get-sth API 엔드포인트를 통해 각 모니터링되는 CT 로그에서 최신 STH를 가져옵니다. STH에는 트리 크기와 서명된 타임스탬프가 포함되어 있습니다. 로그의 공개 키를 사용하여 서명을 확인합니다.
  • 일관성 증명 검증: 연속된 STH 가져오기 사이에 get-sth-consistency를 통해 일관성 증명을 요청하여 로그가 추가 전용으로 유지되고 항목이 수정되거나 제거되지 않았는지 확인합니다.
  • 인증서 인벤토리 보고서: 모니터링되는 도메인에 대해 발급된 모든 인증서의 전체 인벤토리를 발급자별로 그룹화하고 유효성 상태 및 키 강도 메트릭과 함께 생성합니다.
  • CA 다양성 분석: 조직을 위해 인증서를 발급하는 CA의 수를 보고하여 통합 기회와 단일 실패 지점을 식별합니다.
  • 규정 준수 증거: PCI-DSS, SOC 2 또는 유사한 프레임워크를 적용받는 조직의 경우 CT 모니터링 로그는 인증서 수명 주기 관리 및 무단 발급 탐지 기능에 대한 증거를 제공합니다.

주요 개념

용어정의
인증서 투명성 (CT)RFC 6962에 정의된 개방형 프레임워크로, 인증 기관이 발급한 모든 인증서를 공개적으로 감사 가능한 추가 전용 로그에 기록하도록 요구하여 도메인 소유자가 무단 발급을 탐지할 수 있도록 함
서명된 인증서 타임스탬프 (SCT)CT 로그가 인증서를 최대 병합 지연 시간(일반적으로 24시간) 내에 포함시키겠다는 약속입니다. 브라우저는 인증서를 신뢰하기 전에 여러 로그의 SCT를 요구합니다
머클 트리CT 로그에서 사용하는 암호화 데이터 구조로, 리프 노드는 인증서 해시이고 상위 노드는 자식의 해시이며, 효율적인 일관성 및 포함 증명을 가능하게 합니다
사전 인증서최종 발급 전에 CT 로그에 제출되는 인증서로, TLS에 사용되지 못하도록 하는 포이즌 확장(OID 1.3.6.1.4.1.11129.2.4.3)을 포함하지만 로그에서 그 자리를 예약합니다
crt.shSectigo가 운영하는 무료 웹 서비스로, 모든 주요 CT 로그의 인증서를 검색 가능한 PostgreSQL 데이터베이스로 집계하며 웹 및 API 액세스를 모두 제공합니다
서브도메인 탈취서브도메인의 DNS 레코드가 공격자가 회수할 수 있는 폐기된 서비스(클라우드 제공업체, CDN)를 가리키는 취약점으로, 만료된 CT 인증서를 통해 발견 가능
최대 병합 지연 시간 (MMD)CT 로그가 SCT를 반환한 후 제출된 인증서를 머클 트리에 통합해야 하는 최대 시간(일반적으로 24시간)
CAA 레코드DNS 인증 기관 인가 레코드로, 도메인에 대한 인증서를 발급할 수 있는 CA를 지정합니다. CT 모니터링은 CAA 정책 위반을 탐지합니다

도구 및 시스템

  • crt.sh: 기본 CT 로그 수집기로 https://crt.sh/?q=<query>&output=json에서 JSON API 액세스를 제공하며 와일드카드 쿼리, 신원 필터링, 인증서 세부 정보 검색을 지원합니다
  • ct-woodpecker: Let's Encrypt의 오픈 소스 CT 로그 모니터링 도구로, 로그 상태 및 일관성의 운영 모니터링을 위해 Prometheus 및 Grafana와 통합됩니다
  • certspotter: SSLMate의 CT 로그 모니터로, 새로 발급된 인증서를 감시하고 알림을 보냅니다. 호스팅 서비스 또는 자체 호스팅 도구로 사용 가능
  • Google Argon / Xenon / Icarus: Google이 운영하는 CT 로그로 가장 널리 사용되며, 각 로그 URL에서 RFC 6962 API를 통해 쿼리 가능
  • OpenSSL: 인증서 세부 정보를 파싱하고, 체인을 검증하고, CT 모니터링을 통해 검색된 인증서에서 SAN 목록을 추출하기 위한 명령줄 도구

일반적인 시나리오

시나리오: 금융 서비스 회사의 무단 인증서 발급 탐지

상황: 한 은행이 기본 도메인(bank.example.com)을 모니터링하던 중 CT 로그를 통해 secure-login.bank.example.com을 포함하는 인증서가 한 번도 사용한 적 없는 CA에서 발급되었음을 발견했습니다. 이 서브도메인은 DNS에 존재하지 않습니다.

접근 방식:

  1. CT 모니터링 에이전트가 crt.sh 결과에서 secure-login.bank.example.com에 대한 "FreeSSL CA"의 새 인증서를 탐지합니다. 이 CA는 승인된 CA 목록(DigiCert, Sectigo)에 없습니다.
  2. 승인되지 않은 CA + 새 서브도메인으로 알림이 발생하여 CT 로그 항목 후 15분 이내에 보안 팀에 에스컬레이션됩니다.
  3. 인증서 조사: 공개 키 추출, HTTP-01 또는 DNS-01 챌린지를 통해 도메인이 검증되었는지 확인, 발급 조직에 대한 WHOIS 조회
  4. secure-login.bank.example.com에 대한 DNS 조회 결과 은행이 사용하지 않는 호스팅 제공업체의 IP 주소로 확인되어 공격자 인프라임을 확인
  5. 사고 대응 시작: FreeSSL CA에 인증서 폐기 요청, 도메인 남용 신고 제출, IP를 블록리스트에 추가, 안티피싱 팀에 알림
  6. CAA DNS 레코드(bank.example.com. CAA 0 issue "digicert.com")를 구현하여 승인되지 않은 CA가 향후 인증서를 발급하지 못하도록 방지

주의할 점:

  • 와일드카드 패턴(%.bank.example.com)을 모니터링하지 않고 서브도메인에 대한 인증서를 놓침
  • 실제 인증서가 발급되기 전에 CT 로그에 나타나는 사전 인증서를 무시하여 조기 경고 이점을 잃음
  • 사고 후 모든 도메인에 CAA 레코드가 제대로 구성되었는지 확인하지 않음
  • 승인된 변경 후 기준선 데이터베이스를 업데이트하지 않아 합법적인 인증서 갱신에 과도한 알림이 발생

시나리오: CT 로그 서브도메인 발견을 통한 공격 표면 매핑

상황: 침투 테스터가 CT 로그를 외부 정찰의 첫 번째 단계로 사용하여 활성 스캔 전에 대상 조직의 인터넷 연결 서비스를 매핑합니다.

접근 방식:

  1. %.target.com 및 모든 알려진 자회사 도메인에 대해 crt.sh를 조회하여 8년 동안 2,400개의 고유 인증서를 수집합니다.
  2. 만료된 인증서를 포함한 모든 인증서의 SAN 필드에서 347개의 고유 서브도메인을 추출합니다.
  3. 347개 서브도메인 모두에 대해 DNS 확인을 수행하여 A/AAAA 레코드가 있는 189개의 활성 서브도메인을 찾습니다.
  4. 서브도메인 탈취 후보인 폐기된 클라우드 서비스(S3 버킷, Azure 엔드포인트에 대한 CNAME)를 가리키는 12개의 서브도메인을 식별합니다.
  5. 대상의 문서화된 범위에는 없지만 연결 가능하고 이전 소프트웨어 버전을 실행 중인 staging-api.target.com 및 dev-portal.target.com을 발견합니다.
  6. 알려진 자산 인벤토리와 CT에서 파생된 공격 표면 간의 격차를 보여주는 결과를 대상 조직에 제시합니다.

주의할 점:

  • CT에서 발견된 모든 서브도메인이 자산 소유자 확인 없이 범위 내에 있다고 가정
  • 와일드카드 DNS 응답을 확인하지 않아 catch-all로 확인될 때 서브도메인이 존재하는 것처럼 보이게 함
  • 포괄적인 커버리지를 위해 수동 DNS 데이터베이스와 교차 참조하지 않고 CT 데이터에만 의존

출력 형식

## CT 로그 모니터링 보고서

**도메인**: example.com
**모니터링 기간**: 2026-03-01 ~ 2026-03-19
**추적된 총 인증서**: 142
**탐지된 새 인증서**: 7
**생성된 알림**: 2

### 알림: 승인되지 않은 CA 발급
- **심각도**: 치명적
- **인증서 CN**: secure-login.example.com
- **SAN**: secure-login.example.com, ...

### 알림: 새 서브도메인 발견
- **심각도**: 높음
- **새 SAN**: staging-api.example.com
- **출처**: 만료된 인증서 #85123 (2025-08-14 발급, DigiCert)
- **DNS 상태**: 확인됨 (A: 203.0.113.42)
- **HTTP 상태**: 200 OK, 서버: nginx/1.24.0

---

*보고서 자동 생성: 2026-03-19T14:30:00Z*
*다음 조회 예정: 2026-03-19T15:00:00Z*

참고 문헌

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

abusing-shadow-credentials-for-privesc

Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-apt-group-with-mitre-navigator

Query ATT&CK data with attackcti, mitreattack-python, and stix2, then build MITRE ATT&CK Navigator layers and multi-layer heatmap overlays mapping one or more APT groups

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-command-and-control-communication

Analyzes malware C2 communication over HTTP, HTTPS, DNS, and custom

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

관련 스킬