CVE-2020-1350 (SIGRed) - Windows DNS DoS 익스플로잇
이 버그에 대한 공로는 전적으로 Check Point Research (@_cpresearch_)에게 있으며, 이들은 이 버그에 대한 놀라운 분석글을 작성했습니다 (작성자 @sagitz_에게도 감사드립니다).
해당 분석글은 여기에서 찾을 수 있습니다.
이 익스플로잇은 @maxpl0it이 작성했습니다.
작동 방식 요약:
- LAN에서 악성 도메인(예: 9.evil_domain.com)에 대한 DNS 요청(구체적으로 SIG 레코드 요청)을 트리거합니다.
- 이 요청은 취약한 Windows 서버의 DNS 서버로 전송됩니다.
- 취약한 서버는 요청을 전달하도록 설정된 DNS(일반적으로 표준 Google IP)로 요청을 보냅니다.
- Google DNS는 악성 도메인의 네임서버로 응답합니다.
- 그러면 취약한 서버가 DNS 클라이언트 역할을 하여 악성 DNS 서버에 요청을 보냅니다.
- 악성 서버는 2바이트 숫자를 오버플로우하는 페이로드로 응답하여 필요한 것보다 더 작은 할당이 발생하도록 합니다.
- 서명이 복사되면서 문제가 발생하여(당연히) 취약한 서버의 DNS 서버가 충돌합니다.
일반 설정:
- 이 익스플로잇을 사용하려면 자체 네임서버가 자신의 서버를 가리키도록 도메인을 설정해야 합니다.
- 서버를 설정하고 이 스크립트를 실행하세요. TCP와 UDP 모두에서 포트 53을 수신합니다.
- 포트가 사용 중이라는 오류가 발생하면 netstat -pa를 사용하여 도메인 포트에서 수신 중인 프로세스(아마 systemd-resolved)를 확인하고 비활성화 및 중지하세요. 서버에서 수신 중인 것이 없다면 다시 실행하기 전에 이 스크립트의 모든 인스턴스를 종료했는지 확인하세요.
예를 들어, 악성 DNS 서버를 시작하기 위해 python sigred_dos.py ibrokethe.net을 실행했습니다.
테스트 설정:
- Windows 서버에 액세스할 수 있는 경우 조건부 전달자를 구성하여 ibrokethe.net이 스크립트를 실행 중인 호스트의 IP 주소를 가리키도록 할 수 있습니다. 이렇게 하면 요약의 3단계와 4단계를 효과적으로 건너뜁니다.
실행:
Windows DNS 서버에서 취약점을 트리거하려면 nslookup -type=sig 9.your_domain_name_here dns_server_to_target을 실행하세요.
여기서 서브도메인 '9'는 실제로 필요합니다. 스크립트가 처리하므로 이에 대한 도메인 레코드 변경을 할 필요가 없습니다.
예를 들어, 서버에서 실행 중인 상태에서 nslookup -type=sig 9.ibrokethe.net 127.0.0.1을 실행했습니다.