Побег плохого админа. Как обойти защиту от админа и обмануть антивирус

0
11

Содержание статьи

Представь себе, что ты получил доступ к контроллеру домена с правами админа. Твои следующие шаги? Я бы сразу скопировал себе базу NTDS (ведь там есть хеши для доменных учеток), а еще бы посмотрел, что покажет mimikatz, — это могут быть хеши от паролей для различных учеток и иногда сами пароли открытым текстом.

Вот только базу NTDS просто так не скопировать — она представляет собой залоченный файл, который нельзя открыть и прочитать. Чтобы это обойти, атакующие вычитывают эту базу напрямую с диска, с помощью собственного парсера NTFS. Программы вроде mimikatz тоже работают не в лоб, а с некоторыми хитростями.

И однажды можно обнаружить, что на одном из серверов прочитать данные с диска напрямую нельзя — что-то мешает. И mimikatz тоже завершается с ошибкой. Хотя права админа есть. Что же это?

Защита от админа в исполнении драйвера

Когда-то, во времена Windows XP, почти все пользователи работали с правами админа. Исключения встречались в основном в корпоративном секторе.

Сейчас от такой практики отходят, но в реальности многие взломы так или иначе приводят к получению атакующим прав админа. Это может происходить в результате эксплуатации уязвимости, ошибок конфигурации софта, работающего с повышенными привилегиями, или банального перебора паролей. Получение атакующим прав админа на одной из машин в домене — это путь к контроллеру домена. Атакующий может, например, перехватить пароль доменного админа на одной из пользовательских машин (когда на нее зайдет сам админ), а затем залогиниться на контроллер домена.

Поскольку бизнес слишком медленно реагирует на такие угрозы (да и Microsoft те бреши, которые за уязвимости не считаются, закрывает очень долго), то некоторые производители начали реализовывать защиту от админа. Такая защита бывает в антивирусах (в виде модулей самозащиты), также есть отдельные продукты, предназначенные для защиты серверов и рабочих станций от действий «плохого админа».

Хорошо известно, что защиту на том же уровне привилегий реализовать можно только через усложнение (security through obscurity), поэтому для защиты от программ, работающих с правами администратора, то есть в ring 3, нужно применять драйвер, который работает в ring 0.

С помощью драйвера можно запретить определенные опасные операции с процессами, дисками, файлами и реестром.

Модули самозащиты антивирусов, как правило, препятствуют удалению или отключению антивируса, изменению его компонентов, изменению или удалению его конфигурации. Это реализуется при помощи перехвата функций API, изучения переданных им аргументов и блокирования опасных операций (путем возврата ошибки без вызова перехваченной функции). Например, перехват функции удаления ключа реестра должен блокировать удаление ключа реестра, если этот ключ относится к антивирусу (ведь антивирус можно отключить, если удалить записи о его сервисах, — в таком случае при следующей загрузке операционной системы антивирус не запустится).

Самозащитой антивирусов, конечно, дело не ограничивается — существует продукт, позволяющий гибко настроить ограничения для программ, в том числе работающих с правами админа. Этот продукт называется Symantec Data Center Security (DCS).

DCS предназначен для защиты главным образом серверов. В его функциональность входит защита сервисов, работающих с повышенными привилегиями, защита операционных систем после окончания их поддержки, мониторинг целостности файлов, защита от эксплоитов. Также этот продукт реализует некоторые функции хостовой IDS/IPS.

Symantec DCS позволяет задавать гибкие правила для каждой программы (далее в статье будет говориться про версию Data Center Security Server Advanced 6.7.2.1390 этого программного решения). Например, можно запретить одной программе читать какой-то файл, но разрешить чтение для другой программы (при том, что обе программы работают с правами админа). Или запретить модификацию определенного файла всем программам, кроме заданной. И так далее, вплоть до настройки разрешений для ключей реестра и узлов, с которыми допускается сетевое взаимодействие. Гибкость настройки правил разграничения доступа впечатляет! При этом, кстати, поддерживаются общие наборы правил, то есть безопасник не попадет в трясину настройки правил для каждого экзешника.

Следует отметить, что перечисленные ограничения не основаны на дескрипторах безопасности Windows, вместо этого на уровне драйвера реализуется собственный механизм разграничения доступа.

В ходе тестирования было установлено, что Symantec DCS успешно защищает от прямого чтения данных с диска (попытка такого чтения завершается с ошибкой), от mimikatz и от некоторых других популярных векторов рекогносцировки и распространения по сети. Мечта безопасника, казалось бы…

Немного о защитном драйвере

Из-за PatchGuard почти все производители защитных средств опираются на официальные способы перехвата функций. Для реестра, например, это функции обратного вызова (callbacks), устанавливаемые драйверами с помощью функции CmRegisterCallback или CmRegisterCallbackEx.

Посмотрим на отрывок из официальной документации:

  • Драйверы могут целиком обработать операцию над реестром (или преобразовать запрошенную операцию в другую операцию) и исключить обработку этой операции менеджером конфигурации (примечание: под менеджером конфигурации понимается компонент ядра операционной системы, который отвечает за работу с реестром на низком уровне).
  • Драйверы могут изменить результат выполнения операции над реестром и возвращаемое значение (примечание: более подробно это описано в соответствующем разделе).

Декомпилированный фрагмент фильтрующей функции для реестра из драйвера Symantec DCS: видно, что в некоторых случаях драйвер изменяет возвращаемое значениеДекомпилированный фрагмент фильтрующей функции для реестра из драйвера Symantec DCS: видно, что в некоторых случаях драйвер изменяет возвращаемое значение

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

Аналогичный подход применяется в отношении файловой системы и сетевого трафика: так, драйвер мини-фильтра может перехватывать операции с файлами, запрещать или разрешать их, а с помощью фильтрующей прослойки (filtering layer) можно разрешать или запрещать сетевые пакеты.

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

Продолжение доступно только подписчикам

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

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here

− 2 = 1