ในบทความนี้ เราจะแสดงวิธีเปิดใช้งานการบันทึก 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
โปรดทราบว่าในโฮสต์ Windows DNS ที่มีการโหลดสูง การบันทึกการสืบค้น DNS อาจทำให้ CPU, RAM และพื้นที่จัดเก็บข้อมูลมีภาระงานเพิ่มขึ้น (ประสิทธิภาพของดิสก์ต้องเพียงพอ)
จากนั้นเรียกใช้การสืบค้น DNS กับเซิร์ฟเวอร์ของคุณจากคอมพิวเตอร์เครื่องใดก็ได้ ตัวอย่างเช่น หากที่อยู่ IP ของโฮสต์ DNS ของเราที่ใช้ Windows Server คือ 192.168.13.10:
nslookup woshub.com 192.168.13.10
หรือเรียกใช้พยายามแก้ไขที่อยู่ DNS โดยใช้ PowerShell:
Resolve-DnsName -Name woshub.com -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)woshub(2)com(0)
อย่างที่คุณเห็น แบบสอบถาม DNS เพื่อแก้ไขชื่อ (8)woshub(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-clients) เพื่อแยกวิเคราะห์และวิเคราะห์ไฟล์บันทึก 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 และวิเคราะห์แล้ว ฉันพบที่อยู่ IP ของอุปกรณ์ที่ยังคงใช้เซิร์ฟเวอร์ DNS และกำหนดค่าใหม่ให้กับเซิร์ฟเวอร์ DNS อื่น ถ้า DC เก่าไม่มีบทบาท FSMO คุณสามารถลบออกได้ (เหตุการณ์การเข้าสู่ระบบของผู้ใช้ AD ไม่สำคัญที่นี่)