Средство под названием AppLocker снижает риск компрометации рабочих машин. Правила Applockrt применяются к целевому приложению, которое может быть исполняемым файлом, скриптом, файлом установщика и даже DLL. У каждого правила есть условия — это критерии идентификации приложения, к которому это правило применяется.
Другие статьи на тему пентеста Active Directory:
- Защита от обнаружения при атаке на Active Directory
- Как обойти PowerShell AMSI при атаке на Active Directory
- Захват Active Directory на виртуальной машине с HackTheBox
Обход AppLocker
Есть три основных условия, формирующих правила: издатель, путь и хеш файла. Условие пути к файлу определяет приложение по его расположению в системе. Условие издателя определяет приложение на основе его цифровой подписи. Условие хеша файла определяет приложение на основе его хеша.
Перечисление правил AppLocker
Первым делом грамотный оператор постарается узнать правила AppLocker. В большинстве случаев применяются правила по умолчанию, но также встречаются и пользовательские настройки. Так как правила AppLocker обычно являются объектом групповой политики, то их можно запросить в Active Directory. В PowerShell даже существует модуль AppLocker, c помощью которого можно запросить правила, применяемые в данной системе. Например, следующий скрипт представит правила AppLocker в удобном формате.
1 2 3 4 5 6 7 8 9 |
Import-Module AppLocker [xml]$data = Get-AppLockerPolicy -effective -xml Write-Output "[+] Printing Applocker Rules [+]`n" ($data.AppLockerPolicy.RuleCollection | ? { $_.EnforcementMode -match "Enabled" }) | ForEach-Object -Process { Write-Output ($_.FilePathRule | Where-Object {$_.Name -NotLike "(Default Rule)*"}) | ForEach-Object -Process {Write-Output "=== File Path Rule ===`n`n Rule Name : $($_.Name) `n Condition : $($_.Conditions.FilePathCondition.Path)`n Description: $($_.Description) `n Group/SID : $($_.UserOrGroupSid)`n`n"} Write-Output ($_.FileHashRule) | ForEach-Object -Process { Write-Output "=== 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.FileHashCondition.FileHash.Data) `n Description: $($_.Description) `n Group/SID : $($_.UserOrGroupSid)`n`n"} Write-Output ($_.FilePublisherRule | Where-Object {$_.Name -NotLike "(Default Rule)*"}) | ForEach-Object -Process {Write-Output "=== File Publisher Rule ===`n`n Rule Name : $($_.Name) `n PublisherName : $($_.Conditions.FilePublisherCondition.PublisherName) `n ProductName : $($_.Conditions.FilePublisherCondition.ProductName) `n BinaryName : $($_.Conditions.FilePublisherCondition.BinaryName) `n BinaryVersion Min. : $($_.Conditions.FilePublisherCondition.BinaryVersionRange.LowSection) `n BinaryVersion Max. : $($_.Conditions.FilePublisherCondition.BinaryVersionRange.HighSection) `n Description: $($_.Description) `n Group/SID : $($_.UserOrGroupSid)`n`n"} } |
Обход правила хеша файлов
В качестве алгоритма хеширования в этом правиле по умолчанию используется SHA-256. Единственный способ, которым можно получить нелегитимные функции исполняемых приложений в обход данного правила, — это инъекция DLL (конечно, если приложение загружает DLL). К примеру, в Process Explorer была уязвимость, которая позволяла загрузить через DLL вредоносный код.
Таким образом, если существует правило, позволяющее запускать Process Explorer, то можно выполнить код. На иллюстрации ниже была загружена DLL, запускающая calc.exe.
Вместо запуска калькулятора можно использовать более существенную нагрузку. Тем не менее главная задача выполнена — получилось обойти AppLocker.
Обход правила пути
Это правило — самое распространенное, его применяют почти везде. Так как условием данного правила является расположение файла в файловой системе компьютера или в сети, то и обойти его довольно легко. На одной из конференций было представлено правило, которое позволяло запуск исполняемого файла из директории C:\Python27.
Таким образом, если каталог доступен для записи, есть возможность разместить в нем (а впоследствии и выполнить) любой файл.
Обход правила издателя
Цифровая подпись содержит информацию о компании — разработчике приложения, то есть об издателе. Таким образом, это правило идентифицирует приложение на основе его цифровой подписи и расширенных атрибутов. В случае исполняемых файлов, DLL и установщиков Windows эти атрибуты содержат название продукта, частью которого будет файл, предоставленное издателем оригинальное имя файла и номер его версии. В случае упакованных приложений и их установщиков расширенные атрибуты содержат имя и версию приложения.
Указанный тип правил — один из самых безопасных, и обходные пути очень ограничены. AppLocker проверяет, действительна подпись или нет, поэтому оператор не может просто подписать приложение ненадежными сертификатами. Но данное правило можно обойти с помощью того же способа, что и правило хеша, ведь инъекцию DLL с использованием этого правила никак не обнаружить.
Техника LOLBas
Эта техника демонстрирует функции приложений, о которых большинство системных администраторов могут и не знать. Полный список приложений, а также способы эксплуатации различных функций этих программ можно посмотреть тут. К примеру, с помощью Wsreset.txt можно обойти UAC, а с помощью Advpack.dll — выполнять команды ОС.
Ниже представлен пример выполнения команды ОС с помощью Advpack.dll.
Заключение
На этом мы заканчиваем тему защиты от обнаружения. Помни, главное — не достичь цели, а остаться незамеченным! Для тех, кто хочет получить больше информации о проникновении в Active Directory, я создал телеграм-канал @RalfHackerChannel. Здесь ты сможешь задать свои вопросы (или ответить на вопросы других юзеров). До встречи в следующих статьях!
Другие статьи на тему пентеста Active Directory
- Взлом и защита Active Directory
- Техника Lateral Movement при атаке на домен
- Захват Active Directory на виртуальной машине с HackTheBox
- Поиск учетных записей и служб в сетях Windows без привилегий