
PolarDNS는 침투 테스트 및 취약점 연구에 적합한 특화된 권위 있는 DNS 서버입니다.
PolarDNS는 Python 3.x로 작성된 특화된 권한 있는 DNS 서버로, 원래는 서버 측에서 DNS 재귀 확인자를 보안 테스트하기 위한 도구로 개발되었습니다.
_
PolarDNS는 다음 항목의 테스트에 사용할 수 있습니다:
UDP와 TCP 프로토콜을 모두 지원하며, 운영자에게 DNS 프로토콜 계층에 대한 완전한 제어권을 제공합니다.
PolarDNS 서버는 다양한 비표준 및 비준수 DNS 응답, RFC 사양을 위반하는 DNS 응답, 심각한 비정상 및 변형된 DNS 응답을 생성할 수 있습니다.
이는 다음에 유용할 수 있습니다:
PolarDNS를 설치하는 세 가지 방법이 있습니다.
PolarDNS는 Python 3.11 이상이 필요하며 추가 종속성이 없습니다.
이것이 PolarDNS를 설치하고 실행하는 가장 쉬운 방법입니다:
pip install polardns
polardns
리포지토리를 클론하고 PolarDNS를 직접 실행할 수도 있습니다:
git clone https://github.com/oryxlabs/PolarDNS.git
cd PolarDNS
python polardns.py
이 방법은 코드를 디버그하거나 수정하거나 새 기능을 추가하려는 경우 권장됩니다.
Docker 컨테이너에서 PolarDNS를 실행할 수도 있습니다:
docker run -p 53:53/tcp -p 53:53/udp oryxlabs/polardns
PolarDNS 서버는 polardns/polardns.toml 구성 파일을 통해 구성할 수 있습니다.
PolarDNS를 시작하면 다음과 유사한 출력이 표시됩니다:
python polardns.py
1741599804.9039893 | PolarDNS v1.6.1 서버 시작 중
1741599804.9039893 | '/path/to/your/polardns/polardns.toml' 구성 파일 사용 중
1741599804.9039893 | tcp://0.0.0.0:53 리스너 시작 중
1741599804.9039893 | udp://0.0.0.0:53 리스너 시작 중
이는 서버가 가동 중임을 나타냅니다.
기본적으로 서버는 모든 인터페이스의 UDP 및 TCP 포트 53(0.0.0.0:53)에서 수신 대기하며 DNS 쿼리에 응답할 준비가 됩니다.
다음 샘플 쿼리를 요청하여 로컬에서 테스트할 수 있으며, 이는 항상 무언가로 확인되어야 합니다.
UDP 모드로 요청:
dig always.yourdomain.com @127.0.0.1
TCP 모드로 요청:
dig always.yourdomain.com @127.0.0.1 +tcp
2.3.4.5 IP 주소를 가진 A 레코드를 받아야 하며, 이 스크린샷과 유사합니다:

이는 서버가 제대로 작동하고 있음을 나타냅니다.
PolarDNS 서버에 무언가를 확인하도록 요청함으로써, 본질적으로 서버에 어떻게 응답해야 하는지 지시하는 것입니다. 즉, 클라이언트(사용자)가 PolarDNS 서버에 어떤 종류의 응답을 생성할지 지시합니다.
예를 들어, 다음 쿼리를 고려하십시오:
dig always.ttl2000000000.slp1500.yourdomain.com @127.0.0.1
다시 2.3.4.5 IP 주소를 가진 A 레코드를 받아야 하지만, 이번에는 TTL 값이 2,000,000,000(63.4년)이고 1.5초 지연 후에 받습니다:

PolarDNS에는 다음과 같은 주요 기능이 있습니다:
현재 70개 이상의 서로 다른 특징과 19개의 응답 수정자가 구현되어 있습니다. 서로 다른 특징을 사용하고 응답 수정자와 결합함으로써 수많은 응답 변형을 생성할 수 있습니다.
구현된 모든 특징 및 응답 수정자의 포함된 카탈로그 를 참조하십시오.
이를 통해 PolarDNS는 매우 비정상적이고, 이상하며, 심지어 변형된 DNS 응답을 생성할 수 있어, 운영자가 수신 측이 그러한 상황을 어떻게 처리하는지, 그리고 수신 측이 기술적으로 견고하고 성숙한지 확인할 수 있습니다.
PolarDNS가 생성할 수 있는 DNS 응답의 예는 다음과 같습니다:
이는 다음과 같은 다양한 취약점 발견으로 이어질 수 있습니다:
자세한 내용, 더 많은 예제 및 사용 사례는 BlackHat MEA 2023 프레젠테이션(BONUS 슬라이드 포함)을 참조하십시오.
재귀 DNS 서버 테스트를 시작하기 위해 필요한 사항에 대한 개략적인 개요입니다.
example123.com)을 구매합니다.polardns/polardns.toml 구성 파일을 편집하고 도메인 이름과 네임서버 IP 주소를 적절히 변경합니다(둘 다 동일한 구성).이제 인프라가 선택한 모든 재귀 DNS 확인자를 테스트할 준비가 되었습니다.
대상 DNS 재귀 확인자 테스트를 시작하려면 쿼리를 대상 DNS 확인자로 보내야 합니다. 예:
dig always.example123.com @<TARGET-RESOLVER-IP>
예를 들어, CloudFlare 공용 DNS를 테스트하려면:
dig always.example123.com @1.1.1.1
확인 과정에서 대상 DNS 확인자는 권한 있는 PolarDNS 네임서버(example123.com 테스트 도메인 관리)에 연결하여 쿼리를 확인합니다.
PolarDNS 서버 중 하나가 대상 DNS 확인자에 응답합니다. 확인자는 PolarDNS의 응답을 수신, 구문 분석 및 처리합니다. 그런 다음 최종 답변을 클라이언트(사용자)에게 반환합니다.
다음은 테스트 프로세스의 시각적 개요입니다:

DNS 확인자에게 example123.com 도메인 아래의 다양한 하위 도메인을 확인하도록 지시함으로써 DNS 확인자의 동작을 효과적으로 테스트하고 다양한 예상치 못한 상황(응답)을 어떻게 처리하는지 확인할 수 있습니다.
예를 들어, 변형된 DNS 응답, 주입된 레코드가 있는 응답, 또는 불법 문자를 포함한 레코드를 얻었을 때 어떻게 처리하며, 궁극적으로 클라이언트(사용자)에게 어떤 종류의 답변을 보내는지 확인할 수 있습니다.
PolarDNS는 다양한 DNS 확인자와 통합되어 포괄적인 엔드투엔드(E2E) DNS 서버 테스트 스위트를 실행할 수 있습니다.
이 통합은 GitHub Actions에 의해 구동되며, 현재 다음 6개의 DNS 확인자에 대한 참조 템플릿(워크플로우)을 사용할 수 있습니다:
GitHub Action이 트리거되면(예: 커밋 시 또는 수동으로), 워크플로우는 다음 단계를 수행합니다:
자체 E2E 테스트를 추가하려면 test-e2e/ 디렉토리에 배치하기만 하면 됩니다.
완전한 기능의 DNS 서버 E2E 테스트 스위트를 찾고 계십니까? [email protected]으로 문의하십시오.
PolarDNS에 새 기능을 추가하는 것은 진정으로 새로운 DNS 문제를 발견하는 데 필수적입니다. 그리고 PolarDNS를 사용하면 비교적 쉽게 그렇게 할 수 있습니다.
PolarDNS를 사용하면 자체 DNS 서버를 구축하지 않고도 새 기능을 빠르게 추가하고, 아이디어를 시험해 보거나, PoC를 개발할 수 있습니다. 필요한 것은 Python 코드를 이해하는 능력과 DNS 프로토콜을 실험하려는 호기심뿐입니다.
시작하는 데 도움이 되는 자세한 단계별 기여 가이드가 있습니다. 여기에서 새 기능을 추가하는 방법뿐만 아니라 PolarDNS를 디버그하는 방법, 문제를 제출하는 방법, 아이디어를 공유하는 방법 등도 찾을 수 있습니다.
PolarDNS를 가지고 놀 때 유용한 몇 가지 훌륭한 리소스입니다.
DNS 프로토콜 관련 링크:
DNS 서버:
PolarDNS에 기여해 주신 모든 분들께 감사드립니다! ❤️