
В этой статье мы покажем, как включить регистрацию DNS-запросов для всех пользователей на DNS-сервере под управлением Windows Server, как разбирать и анализировать журналы DNS. Я столкнулся с этой задачей, когда мне нужно было вывести из эксплуатации старый контроллер домена Active Directory в филиале, и мне нужно было понять, какие устройства все еще используют DNS-сервер. Включив журнал DNS и проанализировав его, я смог найти эти устройства и перенастроить их на использование других DNS-серверов. Кроме того, этот метод поможет вам найти узлы с подозрительной активностью в сети Active Directory (доступ к вредоносным URL, узлы ботнетов и т. д.).
pktmon
команду на DNS хост для перехвата трафика на 53 порту, но проще использовать встроенную регистрацию DNS запросов в Windows Server.По умолчанию протоколирование DNS на Windows Server отключено. Чтобы включить ее:
- Откройте Диспетчер DNS оснастка (
dnsmgmt.msc
) и подключитесь к нужному DNS-серверу; - Откройте его свойства и перейдите к пункту Ведение журнала отладки вкладка;
- Включите Вести журнал пакетов для отладки опция;
- Затем можно настроить параметры протоколирования: выбрать направление DNS-пакетов, протокол (UDP и/или TCP), типы пакетов (простые DNS-запросы, обновления или уведомления);
- Использование Фильтрация пакетов по IP-адресу Опция позволяет указать IP-адреса, для которых необходимо регистрировать входящие или исходящие пакеты (это позволяет значительно уменьшить размер журнала);
- В Путь и имя файла журнала поле, укажите имя текстового файла, в который вы хотите записывать все события. По умолчанию размер журнала DNS ограничен 500 МБ. После его достижения старые события поиска DNS будут заменены новыми.
Также можно включить регистрацию DNS-запросов или получить текущие настройки с помощью PowerShell:
Get-DnsServerDiagnostics
Затем запустите DNS-запрос к вашему серверу с любого компьютера. Например, если IP-адрес нашего DNS-хоста под управлением Windows Server равен 192.168.13.10:
nslookup woshub.com 192.168.13.10
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 выполняться в текущем сеансе консоли:
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 в систему здесь не имеют значения).