วิธีเปิดใช้งานการบันทึกแบบสอบถาม DNS และแยกวิเคราะห์ไฟล์บันทึกบน Windows Server
ในบทความนี้ เราจะแสดงวิธีเปิดใช้งานการบันทึก DNS สำหรับข้อความค้นหาของผู้ใช้ทั้งหมดบนเซิร์ฟเวอร์ DNS ที่ใช้ Windows Server วิธีแยกวิเคราะห์และวิเคราะห์บันทึก DNS ฉันประสบปัญหานี้เมื่อต้องเลิกใช้ตัวควบคุมโดเมน Active Directory ตัวเก่าในสำนักงานสาขา และฉันต้องเข้าใจว่าอุปกรณ์ใดที่ยังใช้เซิร์ฟเวอร์ DNS อยู่ หลังจากเปิดใช้งานบันทึก DNS และวิเคราะห์แล้ว ฉันสามารถค้นหาอุปกรณ์และกำหนดค่าใหม่เพื่อใช้เซิร์ฟเวอร์ DNS อื่นได้ นอกจากนี้ วิธีการนี้จะช่วยให้คุณค้นหาโฮสต์ที่มีกิจกรรมที่น่าสงสัยในเครือข่าย Active Directory ของคุณ (การเข้าถึง URL ที่เป็นอันตราย โฮสต์บอทเน็ต ฯลฯ)
แน่นอน คุณสามารถติดตั้ง Wireshark, Microsoft Network Monitor หรือ pktmon บนโฮสต์ DNS ของคุณเพื่อบันทึกการรับส่งข้อมูลบนพอร์ต 53 แต่การใช้การบันทึกการสืบค้น DNS ในตัวบน Windows Server จะง่ายกว่า
ตามค่าเริ่มต้น การบันทึก DNS จะถูกปิดใช้งานบน Windows Server เพื่อเปิดใช้งาน:
เปิดสแน็ปอิน ตัวจัดการ DNS (
dnsmgmt.msc) และเชื่อมต่อกับเซิร์ฟเวอร์ DNS ที่คุณต้องการ
-
เปิดคุณสมบัติและไปที่แท็บ บันทึกการแก้ไขจุดบกพร่อง
เปิดใช้งานตัวเลือก ล็อกแพ็กเก็ตสำหรับการดีบัก
จากนั้นคุณสามารถกำหนดค่าตัวเลือกการบันทึก: เลือกทิศทางแพ็กเก็ต DNS โปรโตคอล (UDP และ/หรือ TCP) ประเภทแพ็กเก็ต (การสืบค้น DNS การอัปเดต หรือการแจ้งเตือนอย่างง่าย);
เมื่อใช้ตัวเลือก กรองแพ็กเก็ตตามที่อยู่ IP คุณสามารถระบุที่อยู่ IP เพื่อบันทึกแพ็กเก็ตขาเข้าหรือขาออก (ซึ่งช่วยลดขนาดบันทึกได้อย่างมาก)
ในช่อง เส้นทางและชื่อไฟล์บันทึก ให้ระบุชื่อไฟล์ข้อความที่คุณต้องการบันทึกกิจกรรมทั้งหมด ตามค่าเริ่มต้น ขนาดของบันทึก DNS จะถูกจำกัดไว้ที่ 500MB เมื่อถึงแล้ว เหตุการณ์การค้นหา DNS เก่าจะถูกเขียนทับด้วยกิจกรรมใหม่
นอกจากนี้ คุณสามารถเปิดใช้งานการบันทึกแบบสอบถาม DNS หรือรับการตั้งค่าปัจจุบันโดยใช้ PowerShell:
Get-DnsServerDiagnosticsโปรดทราบว่าในโฮสต์ DNS ของ Windows ที่มีโหลดสูง การบันทึกแบบสอบถาม DNS อาจทำให้ CPU, RAM และพื้นที่เก็บข้อมูลมีภาระเพิ่มขึ้น (ประสิทธิภาพของดิสก์ต้องเพียงพอ)
จากนั้นเรียกใช้การสืบค้น DNS กับเซิร์ฟเวอร์ของคุณจากคอมพิวเตอร์เครื่องใดก็ได้ ตัวอย่างเช่น หากที่อยู่ IP ของโฮสต์ DNS ที่ใช้ Windows Server คือ 192.168.13.10:
nslookup a-d.site 192.168.13.10
หรือลองแก้ไขที่อยู่ DNS โดยใช้ PowerShell:
Resolve-DnsName -Name a-d.site -Server 192.168.13.10แบบสอบถามการค้นหา DNS ส่งคืนที่อยู่ IP ของไคลเอนต์ของโฮสต์ที่ร้องขอ
ตรวจสอบให้แน่ใจว่าข้อความค้นหาปรากฏในบันทึกเซิร์ฟเวอร์ DNS
โดยค้นหาไฟล์บันทึกข้อความตามที่อยู่ IP ของไคลเอ็นต์ (
192.168.13.130). คุณสามารถเปิดไฟล์บันทึกใน NotePad หรือ grep โดยใช้ PowerShell:
get-content "C:\Logs\dc01dns.log" | Out-String -Stream | Select-String "192.168.13.130"นี่คือตัวอย่างเหตุการณ์:
11/17/2021 6:00:00 AM 0D0C PACKET 00000272D98DD0B0 UDP Rcv 192.168.13.130 0002 Q [0001 D NOERROR] A (8)a-d(2)com(0)อย่างที่คุณเห็น แบบสอบถาม DNS เพื่อแก้ไขชื่อ
(8)a-d(2)com(0)ได้รับแล้ว (
rcv
) จากลูกค้า
192.168.13.130เกิน
UDPจากนั้นเซิร์ฟเวอร์ DNS สำเร็จ (
NOERROR) ตอบกลับ (
snd).
ฟิลด์ทั้งหมดจะอธิบายไว้ที่จุดเริ่มต้นของไฟล์:
Field # Information Values
------- ----------- ------
1 Date
2 Time
3 Thread ID
4 Context
5 Internal packet identifier
6 UDP/TCP indicator
7 Send/Receive indicator
8 Remote IP
9 Xid (hex)
10 Query/Response R = Response
blank = Query
11 Opcode Q = Standard Query
N = Notify
U = Update
? = Unknown
12 Flags (hex)
13 Flags (char codes) A = Authoritative Answer
T = Truncated Response
D = Recursion Desired
R = Recursion Available
14 ResponseCode
15 Question Type
16 Question Nameเนื่องจากรูปแบบเฉพาะ จึงเป็นเรื่องยากที่จะแยกวิเคราะห์และวิเคราะห์ไฟล์บันทึก DNS ดังกล่าวด้วยตนเอง ดังนั้น คุณต้องแปลงบันทึกการสืบค้น DNS ให้เป็นรูปแบบที่สะดวกยิ่งขึ้น โดยใช้สคริปต์ Get-DNSDebugLog.ps1
สคริปต์ PowerShell นี้ไม่ใช่ของฉัน แต่ยังไม่พร้อมใช้งานใน TechNet Scriptcenter ดังนั้นฉันจึงบันทึกไว้ในที่เก็บ GitHub ของฉัน: https://github.com/maxbakhub/winposh/blob/main/Get-DNSDebugLog.ps1
ดาวน์โหลดไฟล์ลงในดิสก์ของคุณ จากนั้นอนุญาตให้สคริปต์ PowerShell ดำเนินการในเซสชันคอนโซลปัจจุบัน:
Set-ExecutionPolicy -Scope Process Unrestrictedนำเข้าฟังก์ชันจาก Get-DNSDebugLog.ps1 ไปยังเซสชันของคุณ:
. C:\ps\Get-DNSDebugLog.ps1จากนั้นแปลงบันทึก DNS เป็นรูปแบบที่สะดวกกว่า:
Get-DNSDebugLog -DNSLog C:\Logs\dc01dns.log | format-tableหรือคุณสามารถส่งออกผลลัพธ์เป็นไฟล์ CSV เพื่อการวิเคราะห์เพิ่มเติมใน Excel (หรือคุณสามารถเข้าถึงไฟล์ Excel ได้โดยตรงจาก PowerShell และเขียนการสืบค้น DNS ที่คุณต้องการ)
Get-DNSDebugLog -DNSLog C:\Logs\dc01dns.log | Export-Csv C:\log\ProperlyFormatedDNSLog.csv -NoTypeInformationคุณสามารถส่งออกไฟล์ไปยัง Excel และใช้เพื่อวิเคราะห์การสืบค้น DNS (ไฟล์ประกอบด้วยที่อยู่ IP ของโฮสต์และชื่อ DNS ที่ร้องขอจากเซิร์ฟเวอร์ DNS ของคุณ)
นอกจากนี้ คุณสามารถใช้ Log Parser 2.2 (https://docs.microsoft.com/en-us/archive/blogs/secadv/parsing-dns-server-log-to-track-active- ลูกค้า) เพื่อแยกวิเคราะห์และวิเคราะห์ไฟล์บันทึก DNS ตัวอย่างเช่น คำสั่งด้านล่างจะแสดงจำนวนการสืบค้น DNS จากที่อยู่ IP แต่ละรายการ:
LogParser.exe -i:TSV -nskiplines:30 -headerRow:off -iSeparator:space -nSep:1 -fixedSep:off -rtp:-1 "SELECT field9 AS IP, REVERSEDNS(IP) AS Name, count(IP) as QueryCount FROM "C:\Logs\dc01dns.log" WHERE field11 = 'Q' GROUP BY IP ORDER BY QueryCount DESC"ในตัวอย่างนี้ เราใช้ไฟล์ข้อความเพื่อรวบรวมบันทึก DNS ใน Windows Server 2012 และใหม่กว่า คุณสามารถบันทึกการสืบค้น DNS ได้โดยตรงไปยัง Event Viewer (
Microsoft-Windows-DNS-Server/Audit). แต่ในความคิดของฉัน บันทึก DNS แบบข้อความนั้นง่ายกว่ามากในการวิเคราะห์
แน่นอน หากคุณต้องการบันทึกการสืบค้น DNS บนเซิร์ฟเวอร์หลายเครื่อง ควรใช้โซลูชันพิเศษในการรวบรวม จัดเก็บ และประมวลผลบันทึก เช่น Splunk, ELK, Graylog หรือ Azure Log Analytics
หลังจากเปิดใช้งานบันทึกการสืบค้น DNS และวิเคราะห์แล้ว ฉันพบที่อยู่ IP ของอุปกรณ์ที่ยังคงใช้เซิร์ฟเวอร์ DNS และกำหนดค่าใหม่ให้กับเซิร์ฟเวอร์ DNS อื่น หาก DC เก่าไม่มีบทบาท FSMO คุณสามารถลบออกได้ (เหตุการณ์การเข้าสู่ระบบของผู้ใช้ AD ไม่สำคัญที่นี่)





