2026년 8월, 약 1,000만 개의 DKIM 키를 대상으로 진행한 badkeys 스캔에서 Debian의 결함 있는 OpenSSL 패키지(CVE-2008-0166)로 생성된 키 1,302개가 발견됐다. DNS 상에서는 일반적인 키처럼 보이지만, 이에 대응하는 개인키는 완전히 공개된 상태다. 2024년 한 보안 연구원은 같은 방식으로 노출된 키 하나를 사용해 합법적인 인증서 발급 기관 명의로 이메일에 서명하기도 했다. 누구나 이 개인키를 조회할 수 있게 된 이유, 이 문제가 18년 동안 방치된 과정, 그리고 자체 도메인을 테스트하는 방법을 정리한다.

예측 가능한 키
2006년(Debian 패키지 버전 0.9.8c-1)부터 적용된 Debian 및 Ubuntu의 패치는 OpenSSL의 난수 생성기를 손상시켰다. 이 문제는 Debian 보안 권고 DSA-1571을 통해 공식적으로 공개됐다.
badkeys: "실질적으로 프로세스 ID(PID)가 유일한 난수 생성 원천이었다."
해당 시스템에서 프로세스 ID 범위는 0에서 32,767에 불과했기 때문에, OpenSSL 버전, 아키텍처, 시드 파일을 고려하더라도 전체 키 조합의 수는 극히 적었다. 생성 가능한 모든 키를 미리 계산해 두는 일은 어렵지 않았다.
badkeys 프로젝트는 표준 크기(1024~4096비트)의 취약한 개인키 모음을 공개 저장소에서 제공한다. DKIM 공개키가 알려진 취약점 핑거프린트와 일치하면 간단한 조회만으로 개인키를 확보할 수 있다.
DKIM 키 교체를 강제하는 장치가 없다
DKIM 키는 만료일이 지정되지 않은 일반 DNS TXT 레코드로 존재한다.
RFC 6376(§3.3.3)에서는 키를 "정기적으로 교체할 수 있다"고 명시하고, M3AAWG 권장 사항에서는 최소 6개월마다 교체할 것을 권장하지만, 이를 강제하는 기술적 메커니즘은 존재하지 않는다.
초기 DKIM 표준은 Debian이 결함 있는 패키지를 배포하고 있던 2007년에 최종 확정됐다.
수석 연구원 Hanno Böck: "DKIM에는 키 교체 의무가 없다. 상당수 기업이 2007년에 DKIM TXT 레코드를 설정한 후 한 번도 변경하지 않은 것으로 보인다."

공유 인프라가 위험을 증폭시킨다
Böck의 2024년 감사 과정에서 777개의 DKIM 레코드가 대부분 CNAME을 통해 단일 이메일 제공업체를 가리키고 있었고, 이로 인해 완전히 동일한 약한 키에 의존하고 있음이 확인됐다.
CNAME을 사용함으로써 각 고객은 키 생성 권한을 제공업체에 위임했고, 제공업체의 취약한 키를 그대로 물려받게 됐다.
Böck이 제공업체의 security.txt 파일에 기재된 연락처로 이 결함을 제보하려 했을 때, 반송 메일이 돌아왔다.
반송 메시지: "연락하려는 그룹(security)이 존재하지 않거나, 해당 그룹에 메시지를 게시할 권한이 없을 수 있습니다."
해당 키는 결국 교체되었으나, 오랜 시간이 지난 후였다.
위조된 메일이 브랜드 로고를 취득할 수 있다
BIMI는 검증된 수신 메시지 옆에 브랜드 로고를 표시하는 표준으로, Gmail에서 지원한다. Gmail은 상표 인증서(VMC/CMC)와 함께 pct=100 조건의 quarantine 또는 reject DMARC 정책을 요구한다.
현재 BIMI 사양에 따르면, 수신 이메일 제공업체는 메시지가 DMARC를 통과한 후에만 BIMI를 평가한다. 유효한 DKIM 서명이 DMARC 요구 사항을 충족하므로, 공격자에게는 탈취한 DKIM 키 하나만 있으면 충분하다.
Hanno Böck: "BIMI 사양은 인증서와 DKIM 키 사이에 암호화적 연결이 없도록 작성되어 있다. DKIM으로 메일에 서명할 수만 있으면 BIMI를 통과하게 된다."
Böck은 이 결함을 증명하기 위해 실제 인증서 발급 기관의 노출된 키를 사용해 테스트 이메일에 성공적으로 서명했다. 이를 지원하는 받은편지함에는 그가 위조한 메시지 옆에 해당 기관의 공식 로고가 표시됐다.
이 특정 공격 방식은 BIMI가 설정된 도메인을 대상으로 한다. 그러나 일반 도메인으로 보내는 위조 이메일 역시 별다른 경고 없이 DKIM 검증을 통과한다.
2026년 9월 활성화된 한국 도메인 206,348개를 대상으로 실시한 조사에 따르면, Gmail BIMI 지원에 필요한 엄격한 DMARC 정책을 적용한 도메인은 4,245개(2.1%)에 불과했다.

DKIM 키 점검하기
키 셀렉터(selector) 위치 확인: 전송한 이메일 헤더의
DKIM-Signature항목 내에서s=속성을 확인한다.badkeys 설치: 0.0.11 이상 버전을 설치하고(
dnspython필요), 차단 목록을 업데이트한다.pip3 install badkeys dnspython badkeys --update-bl공개 레코드 스캔:
-a플래그를 사용하여 스캔을 실행한다. 결과에blocklist/debianssl이 포함되어 있다면 취약한 키다.badkeys -a --dkim-dns <selector>._domainkey.<yourdomain>취약한 키 조치: 새로운 셀렉터 아래에 새 키를 생성한다. 레코드가 CNAME을 사용하는 경우, 메일 서비스 제공업체에 연락하여 교체를 요청한다.
기존 셀렉터 제거: DNS 구역을 점검하고 사용하지 않는 셀렉터를 정리한다. Böck이 mailop 커뮤니티에 경고한 바와 같이, "공격자는 해당 키의 사용 여부에 신경 쓰지 않는다."
귀사의 DKIM 키는 마지막으로 언제 교체됐는가?
참고 문헌
- badkeys — DKIM scan 2026-08-11 (스캔 기간: 2026년 8월 11일~19일)
- Hanno Böck — 16 years of CVE-2008-0166 - Debian OpenSSL Bug - Breaking DKIM and BIMI in 2024 (최초 게시: 2024년 5월 12일, 최종 수정: 2025년 1월 4일)
- Hanno Böck, mailop 메일링 리스트 — DKIM key security scan results (2026년 8월 28일)
- Debian — DSA-1571-1 openssl: predictable random number generator (2008년 5월 13일)
- badkeys — Debian OpenSSL bug (CVE-2008-0166)
- badkeys — debianopenssl: private keys vulnerable to the Debian OpenSSL bug
- RFC Editor — RFC 6376: DomainKeys Identified Mail (DKIM) Signatures (2011년 9월)
- M3AAWG — DKIM Key Rotation Best Common Practices (2019년 3월 개정)
- IETF — Brand Indicators for Message Identification (BIMI), draft-brand-indicators-for-message-identification-14 (2026년 5월 1일)
- Google Workspace Admin Help — Set up BIMI (확인일: 2026년 9월 15일)
- badkeys — badkeys on GitHub (최신 릴리스: 0.0.20, 2026년 8월 20일)
- Panke — Email spoofing: we tested 10,000+ Korean domains (2026년 9월 1일)
