Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
dns_watchdog_windows2 — Windows DNS 트래픽을 pktmon을 통해 모니터링하여 포이즈닝, 스푸핑, 악성 리졸버 응답, 게이트웨이 MAC 변경을 탐지하고 경고를 기록하는 PowerShell 스크립트입니다. | Kitploit
도구/GitHubGitHub/microlaser/dns_watchdog_windows2
Defensive ToolsPacket Sniffing & AnalysisNetwork ForensicsInformation GatheringNetwork SecurityIntrusion DetectionDNS AnalysisAnomaly Detection
GitHubmicrolaser/dns_watchdog_windows2

dns_watchdog_windows2

Windows DNS 트래픽을 pktmon을 통해 모니터링하여 포이즈닝, 스푸핑, 악성 리졸버 응답, 게이트웨이 MAC 변경을 탐지하고 경고를 기록하는 PowerShell 스크립트입니다.

저장소 보기
311일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

DNS Watchdog (Windows)

Windows 머신 자체의 네트워크 트래픽에서 DNS 포이즈닝 / 스푸핑의 징후를 감시하는 단일 파일 PowerShell 스크립트로, Windows 10 (1809+), Windows 11, Windows Server 2019+에 내장된 패킷 캡처 도구인 pktmon을 사용합니다. 서드파티 캡처 도구(Wireshark, Npcap, tcpdump)는 필요하지 않습니다.

OS 네트워킹 스택에서 DNS 트래픽(UDP/TCP 포트 53)을 캡처하여 일반적인 머신의 LAN 및 WAN 트래픽을 모두 포괄한 다음, 원시 패킷 자체를 파싱합니다 — pcapng 바이너리 형식, Ethernet/IP/UDP/TCP 헤더, 그리고 이름 압축 포인터를 포함한 DNS 메시지 형식을 전부 네이티브 PowerShell로 처리합니다.

macOS와 Linux를 지원하는 동반 bash/tcpdump 버전도 있습니다.

탐지하는 항목

신호중요한 이유
동일한 DNS 쿼리에 대한 상충되는 응답포이즈닝 시도의 교과서적 특징: 공격자가 위조 응답을 실제 응답과 경쟁시켜, 위조 응답이 먼저 도착해 캐시되기를 노립니다.
설정한 적 없는 DNS 서버로부터의 응답Get-DnsClientServerAddress와 비교합니다. 인식되지 않는 서버로부터의 응답은 경로 외부(off-path) 공격자가 응답을 주입하고 있음을 나타낼 수 있습니다.
대응하는 미해결 쿼리가 없는 응답모니터가 질의된 것을 본 적 없는 질문에 대한 응답 — 주입/스푸핑된 트래픽의 가능한 징후입니다(오탐을 피하기 위한 시작 유예 기간 포함).
세션 중 기본 게이트웨이 MAC 주소 변경각 캡처 주기마다 Get-NetNeighbor를 통해 폴링합니다. ARP 스푸핑은 공격자가 LAN 내 DNS 변조를 위해 위치를 잡는 일반적인 첫 단계입니다.

모든 경고는 두 부분을 출력합니다:

  • [TECHNICAL] — 추가 조사를 원하는 사람을 위한 원시 패킷 세부 정보
  • [WHAT THIS MEANS] — 이것이 왜 중요한지에 대한 평이한 설명

모든 출력은 타임스탬프가 붙은 로그 파일에도 기록됩니다.

요구 사항

  • Windows 10 (1809+), Windows 11, 또는 Windows Server 2019+이며 pktmon.exe를 사용할 수 있어야 함(이들 모두에 기본 내장)
  • 어느 정도 최신 빌드 — 분석을 위해 캡처를 변환하는 데 사용되는 pktmon pcapng는 초기 1809 릴리스 이후에 추가되었으므로, 없다면 Windows를 업데이트하세요
  • 관리자 권한으로 실행되는 PowerShell(패킷 캡처에 필요)

설치

git clone https://github.com/microlaser/dns-watchdog.git
cd dns-watchdog\windows

설치할 모듈이나 외부 종속성은 없습니다 — 스크립트 자체만 있으면 됩니다.

사용법

관리자 권한으로 상승된(elevated) PowerShell에서:

.\dns_watchdog.ps1

기본적으로 스크립트는 기본 게이트웨이와 설정된 DNS 서버를 자동 감지하고 모든 네트워크 어댑터에서 캡처합니다(pktmon은 OS 네트워킹 스택에서 동작하므로 특정 어댑터를 선택하지 않고도 자연스럽게 LAN과 WAN 트래픽을 모두 포괄합니다). Ctrl+C로 모니터링을 중지하며, 종료 시 세션 요약이 출력됩니다.

매개변수

.\dns_watchdog.ps1 [-LogFile <path>] [-CaptureIntervalSeconds <n>] [-GraceResponses <n>] [-KeepCaptures]
매개변수설명
-LogFile세션 로그 경로(기본값: .\dns_watchdog_<timestamp>.log)
-CaptureIntervalSeconds변환 및 분석 전 각 캡처 창의 길이. 낮을수록 = 탐지 지연 감소, 오버헤드 증가. 기본값: 5
-GraceResponses시작 시 노이즈를 피하기 위해 "대응하는 쿼리 없음" 경고가 활성화되기 전에 관찰할 응답 수. 기본값: 10
-KeepCaptures분석 후 삭제하는 대신 각 창의 .etl/.pcapng 파일을 디스크에 유지

예시 세션

=========================================================================
 DNS Watchdog (Windows) - DNS poisoning / spoofing monitor
=========================================================================
Capturing on:      all network adapters (pktmon captures at the OS networking stack,
                   which covers this host's LAN and WAN traffic together)
Default gateway:   192.168.1.1  (MAC baseline: 60-95-F8-2B-5E-78)
Configured DNS:    192.168.0.1, 192.168.1.1
Log file:          .\dns_watchdog_20260918_204725.log
...

[20:47:44.872] [ALERT] Conflicting DNS responses for the same query
  [TECHNICAL] txn=64878  query=example.com (type 28)  first_response=[AAAA:2607:f8b0:...]  conflicting_response(src=10.0.0.9)=[AAAA:dead:beef::1]
  [WHAT THIS MEANS] This machine's DNS question got two DIFFERENT answers back. Legitimate DNS servers don't normally do this. This is the textbook signature of a DNS poisoning attempt, where an attacker races a forged answer against the real one, hoping the forged one arrives first and gets cached.

작동 방식

Windows에는 tcpdump를 텍스트 파서로 파이프하는 것과 직접적으로 대응하는 기능이 없습니다 — pktmon의 실시간 콘솔 출력은 디코딩된 줄이 아니라 원시 바이트입니다. 그래서 이 스크립트는 대신 다음을 수행합니다:

  1. pktmon을 짧은 순환 창(기본 5초)으로 실행하여 .etl로 캡처
  2. 각 창을 .pcapng로 변환(pktmon pcapng)
  3. pcapng 바이너리 형식을 직접 파싱 — Enhanced Packet Block을 읽고, 각 프레임의 IP → UDP/TCP → DNS 메시지 헤더를 순회하며, DNS 이름 압축 포인터 디코딩을 포함 — 외부 라이브러리 없이
  4. 프로세스 수명 동안 유지되는 네이티브 PowerShell 해시테이블을 사용하여 캡처 창 전반에 걸쳐 DNS 트랜잭션 ID를 추적하고, 충돌과 이상 징후가 발견되는 즉시 플래그 지정
  5. MAC 주소 변경을 잡기 위해 매 주기마다 게이트웨이의 ARP 항목을 별도로 폴링

알아둘 만한 특이점: Windows는 일부 스택 체크포인트에서 이더넷 헤더가 추가되기 전에 로컬에서 생성된(아웃바운드) 패킷을 자주 캡처하므로, 아웃바운드 DNS 쿼리는 링크 계층 프레이밍이 전혀 없는 순수 IP 패킷으로 도착할 수 있는 반면, 인바운드 응답은 회선에서 완전한 이더넷 프레이밍으로 도착합니다. 파서는 두 경우 모두를 감지하고 처리합니다. pktmon은 또한 동일한 물리적 패킷을 여러 번 보고하는 경향이 있습니다(네트워크 스택의 여러 지점에서 캡처됨). 스크립트는 각 캡처 창 내에서 바이트 단위로 동일한 반복을 중복 제거하여 하나의 실제 패킷에 대해 여러 번 경고하지 않도록 합니다 — 진정으로 상충되거나 포이즈닝된 응답은 내용이 다르므로 이 중복 제거의 영향을 받지 않습니다.

한계

  • 이것은 휴리스틱 모니터이며 보장이 아닙니다. 단일의 고립된 경고는 오탐일 수 있습니다(예: 세션 중 리졸버를 전환하는 VPN, 또는 여러 유효한 IP를 반환하는 CDN). 반복되거나 군집된 경고가 일회성 경고보다 훨씬 의미 있습니다.
  • 진정으로 연속적인 캡처가 아니라 캡처 창 사이에 작은 간격(중지 → 변환 → 재시작)이 있습니다.
  • 여러 TCP 세그먼트에 걸친 DNS-over-TCP 응답은 재조립되지 않습니다 — 일반적인 조회에는 문제없지만, 대규모 영역 전송(zone-transfer) 스타일 응답에는 실질적인 한계입니다.
  • pktmon pcapng 변환에는 어느 정도 최신 Windows 빌드가 필요합니다. 매우 오래된 1809 시절 시스템은 대신 pktmon etl2txt로 폴백해야 할 수 있습니다(여기서는 구현되지 않음).
  • 실행되는 호스트의 트래픽을 관찰하며, 응답이 이 머신에 도달하기 전에 원격 리졸버의 캐시 내에서 순전히 발생하는 포이즈닝은 볼 수 없습니다.

라이선스

MIT (또는 원하는 대로 업데이트하세요).

도구 다운로드