Как стать автором
Обновить
108.23

EDR для Windows. Основы, архитектура, принципы работы

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров974

Введение

В предыдущих статьях (1, 2, 3) цикла, посвященного сбору событий в ОС Windows и Linux, мы рассмотрели, какие типы источников событий важны для мониторинга с точки зрения обеспечения информационной безопасности, а также каким образом осуществляется сбор и отправка соответствующий событий в системы мониторинга, в т.ч. был рассмотрен сбор событий с помощью агентов.

Мы планируем расширять функционал наших агентов сбора событий и внедрять подходы, используемые для реализации углубленного мониторинга событий ОС Windows, обнаружения сложных, нетиповых атак, а также реагирования на них. Упомянутые подходы лежат в основе функционирования такого класса продукта, как EDR для Windows. Их описанию будет посвящена данная статья. Обзор класса продукта EDR для Linux рассмотрен не будет, т.к. заслуживает отдельной статьи ввиду своей объемности.

Мы рассмотрим существующие проблемы обнаружения атак и предоставим теоретический концепт и подходы к разработке собственной системы EDR для Windows.

Проблемы встроенного аудита Windows

К типовым проблемам подсистемы аудита Windows можно отнести следующие:

  1. Логирование только базовых событий информационной безопасности (аутентификация/авторизация учетных записей, запуск процессов, запись в реестр, файловая активность, сетевая активность, создание/удаление учетных записей)

  2. Многие важные события (DNS, RPC, LDAP, WMI активность и т.д.) логируются только в режиме углубленного анализа (например, посредством настройки ETW либо средствами собственного драйвера-минифильтра), что позволяет многим атакам оставаться ниже радара средств мониторинга.

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

  4. Отсутствие возможностей мониторинга низкоуровневых системных вызовов (манипуляции с памятью процессов, потоков, структурами файловой системы и т.д.), что создает риски проведения атак класса code injection, process tampering и т.д.

  5. Отсутствие средств самозащиты и контроля целостности и работоспособности компонентов системы аудита ОС

  6. Отсутствие возможностей превентивных блокировок событий ИБ, а также проактивного обнаружения атак.

Частично данных недостатков лишен Sysmon, но он не обнаруживает большую часть атак класса code injection, process tampering, полностью лишен функционала самозащиты, противодействия техникам обхода и не поддерживает каких-либо превентивных блокировок атак, поэтому его ни в коем случае нельзя воспринимать как полноценный EDR, скорее как сборщик расширенной телеметрии ОС. Несмотря на это, sysmon давно стал стандартом де-факто в области аудита событий ИБ Windows, и не будет преувеличением сказать, что ни один SOC не обходится без sysmon.

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

Хуки как основа EDR

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

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

Рисунок 1. Схема работы хуков EDR
Рисунок 1. Схема работы хуков EDR

Здесь стоит упомянуть, что пространство системных вызовов Windows включает в себя верхнеуровневую часть - usermode функции Win32 API (реализованы в системных билиотеках kenel32.dll, user32.dll, advapi32.dll), Native API (реализованы в системной библиотеке ntdll.dll), которая представляет из себя прослойку между usermode и kernelmode, и ядро, которое непосредственно отвечает за выполнение системного вызова.

Рисунок 2. Пространство системных вызовов Windows
Рисунок 2. Пространство системных вызовов Windows

Функции ядра (NTOSKRNL.DLL) выглядят наиболее привлекательными с точки зрения установки хука, так как такие перехватчики будут наиболее низкоуровневыми и их будет сложнее всего обнаружить и деактивировать. И, действительно, до появления технологии Patch Guard, которая защищает ядро от перезаписи, вмешиваться в работу ядра было стандартной практикой как среди СЗИ, так и среди вирусописателей. Последние годы хуки ставятся в Win32 пространстве и внутри библиотеки ntdll.dll. Другими словами, если нам необходимо перехватить событие записи в память процесса, мы будем делать это посредством установки хука на системный вызов writeprocessmemory (из kernel32.dll) либо, что предпочтительнее, на ntwritewirtualmemory (из ntdll.dll). Таким образом, установка хуков — это мощнейший механизм перехвата и анализа событий ОС, которым активно пользуются все EDR системы. В то же время не стоит забывать, что этим механизмом злоупотребляет и malware, например кейлогеры для перехвата введенных пользователем учетных данных и переписки, а также руткиты для сокрытия своего присутствия в системе.

Механизм установки хуков в системе происходит по следующей схеме.

  1. Посредством вызова функции PsSetCreateProcessNotifyRoutineEx происходит регистрация т.н. callback функции драйвера, которая получает доступ к контексту создаваемого процесса: имя, путь, pid, командная строка, имя родителя.

  2. Драйвер передает pid запущенного процесса пользовательскому приложению, например, через именованный пайп либо каким-либо другим способом.

  3. Пользовательское приложение (инжектор) методом классического DLL Inject (либо каким-либо другим способом) внедряет библиотеку в адресное пространство создаваемого процесса.

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

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

  6. Пункты 1–5 повторяются для каждого нового создаваемого в системе процесса, что дает возможность EDR выявлять вызовы потенциально опасных функций и разграничивать доступ ко всем ресурсам системы (файловая система, реестр, память, сеть и т.д.).

Архитектура, задачи и логируемые события EDR

EDR также может быть оснащен компонентом контроля запуска приложений, который на основе ряда критериев принимает решение о разрешении/запрете запуска приложений. К таким критериям для запускаемого приложения можно отнести следующие: наличие ЭЦП, издатель, имя файла, версия файла, путь файла, md5/sha256 хэши. На основании связки данных критериев могут быть сформированы следующие уровни доверия приложения:

  • высокодовереннный

  • среденедоверенный

  • низкодоверенный

  • недоверенный

  • запрещенный

Можно привести следующие примеры для определения уровня доверия процессов:

  • Высокодоверенный процесс: файл подписан известным издателем и лежит в одном из каталогов C:\\Windows\\*', 'C:\\Program Files(x86)\\*', 'C:\\Program Files

  • Среднедоверенный процесс: файл подписан неизвестным издателем и лежит в одном из каталогов C:\\Windows\\*', 'C:\\Program Files(x86)\\*', 'C:\\Program Files

  • Низкодоверенный процесс: файл подписан неизвестным издателем и не лежит в одном из известных каталогах или не подписан и лежит в одном из каталогах C:\\Windows\\*', Program Files(x86)\\*', 'C:\\Program Files

  • Недоверенный процесс: файл не подписан и не лежит ни в одном из каталогах C:\\Windows\\*', 'C:\\Program Files(x86)\\*', 'C:\\Program Files

  • Запрещенный процесс: 84 858CA42DC54 947EEA910E8FAB5F668 md5 хэш файла PsExec64.exe

На основании уровня доверия процесса формируется матрица доступа к защищаемым ресурсам, которая анализируется по факту сработки хука на системный вызов при попытке обращения к защищаемому ресурсу.

Пример матрицы доступа к Run ключам реестра (автозапуск) для процессов разного уровня доверия:

"registry": {
    "autostart_run": [
            {
                "type": "highly_trusted",
                "crud_rights": "++++"
            },
            {
                "type": "medium_trusted",
                "crud_rights": "++++"
            },
            {
                "type": "low_trusted",
                "crud_rights": "?+?-"
            },
            {
                "type": "untrusted",
                "crud_rights": "----"
            }
                ]
}

где

«+» — разрешение доступа
«‑» — запрет доступа
«?» — спросить у пользователя и запомнить выбор

Если просуммировать всю телеметрию, которую целесообразно собирать EDR, получим следующую таблицу:

Активность процессов

Событие

Классический источник

Создание процесса

Sysmon, Windows Audit

Завершение процесса

Sysmon, Windows Audit

Доступ к процессу

Sysmon

Загрузка библиотеки

Sysmon, Windows Audit

Process tampering

Sysmon

Файловая активность

Создание файла

Sysmon, Windows Audit

Открытие файла

Windows Audit

Удаление файла

Sysmon, Windows Audit

Модификация файла

Windows Audit

Переименование файла

Windows Audit

Низкоуровневый доступ к файловой системе

Sysmon

Манипуляции с учетными записями

Создание УЗ

Windows Audit

Модификация УЗ

Windows Audit

Удаление УЗ

Windows Audit

Логин

Windows Audit

Логофф

Windows Audit

Сетевая активность

TCP соединение

Sysmon, Windows Audit

UDP соединение

Sysmon, Windows Audit

URL

Suricata

DNS запрос

Sysmon, Windows Audit

Загрузка файла

Suricata

JA3(S), JA4(S)

Suricata

Хэши

MD5

Sysmon, Windows Audit

SHA256

Sysmon, Windows Audit

IMPHASH

Sysmon, Windows Audit

Манипуляции с реестром

Создание ключ/значение

Sysmon, Windows Audit

Изменение ключ/значение

Sysmon, Windows Audit

Удаление ключ/значение

Sysmon, Windows Audit

Манипуляции с задачами планировщика

Создание задачи

Windows Audit

Удаление задачи

Windows Audit

Модификация задачи

Windows Audit

Манипуляции со службами

Создание службы

Windows Audit

Удаление службы

-

Модификация службы

-

Манипуляции с драйверами

Загрузка драйвера

Sysmon

Модификация драйвера

-

Выгрузка драйвера

-

Операции с устройствами

Монтирование виртуального диска

-

Отключение USB устройства

-

Подключение USB устройства

Windows Audit

Другие события

Изменение групповых политик

Windows Audit

Активность именованных пайпов

Создание именованного пайпа

Sysmon

Подключение к именованному пайпа

Sysmon

Манипуляции с памятью

Доступ к памяти процесса

Sysmon

Чтение/запись памяти процесса

-

Изменение атрибутов памяти процесса

-

Манипуляции с потоками

Создание удаленного потока

Sysmon

Манипуляции с хэндлами процессов

Создание дубликата хэндла процесса

-

Манипуляции с токенами доступа

Создание дубликата токена доступа

-

WMI активность

WmiEventConsumerToFilter

Sysmon

WmiEventConsumer

Sysmon

WmiEventFilter

Sysmon

Активность BIT JOBS

Активность BIT JOBS

Windows Audit

Активность Powershell

Script-Block активность

Windows Audit

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

Среди классических действий по реагированию EDR должна уметь выполнять (как в ручном, так и в автоматическом режимах):

  • завершение процесса/цепочки процессов

  • удаление файла/ключа реестра, блокировка УЗ

  • отмена изменения ключа реестра

  • завершение сессии пользователя

  • изоляция узла

  • блокировка IP

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

Практически все современные EDR оснащены сканерами памяти (в т.ч. основанными на YARA), способными обнаруживать бесфайловое ВПО. Взять за основу собственного сканера памяти можно уже имеющиеся бесплатные тулзы (Moneta, pe-sieve, Loki, hollows_hunter и т. д.).

EDR также может обнаруживать сетевые атаки, как сигантурным, так и эвристическим способом, в т. ч. на основе сетевых моделей машинного обучения. Отличным кейсом для EDR является обнаружение C&C активности на основе алгоритмов JA3/JA4 либо собственных реализаций особенно для известных C&C фреймворков (Cobalt Strike, Sliver, Brute Ratel, Havoc и т. д.).

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

В результате всего сказанного получаем концептуальную схему EDR, которая покрывает основные требования, предъявляемые к EDR.

Рисунок 3. Типовая архитектура EDR
Рисунок 3. Типовая архитектура EDR

Разными цветами выделены компоненты EDR в порядке их значимости:

Белый — базовые компоненты, обязательные для реализации EDR
Желтый — крайне желательные компоненты EDR
Фиолетовый — компоненты, которые существенно расширили бы функционал EDR

Вывод

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

Теги:
Хабы:
+13
Комментарии3

Публикации

Информация

Сайт
www.securityvision.ru
Дата регистрации
Дата основания
2016
Численность
101–200 человек
Местоположение
Россия