Баландин Алексей, Security Vision
EDR (Endpoint Detection and Response) — это класс решений в области информационной безопасности, предназначенный для непрерывного мониторинга и реагирования на сложные и нетиповые угрозы на конечных устройствах, таких как рабочие станции и серверы. В отличие от классических антивирусов, которые часто бессильны против современных методов атак, таких как бесфайловые вирусы и техники "living off the land", EDR-системы работают по принципу "предполагаемой компрометации". Они осуществляют глубокий сбор телеметрии о событиях в системе, анализируют поведение процессов и предоставляют инструменты для проактивного обнаружения, блокировки и расследования инцидентов безопасности, обеспечивая комплексную защиту конечных точек.
Оглавление:
1. Что такое EDR и почему антивирус больше не справляется?
2. Ограничения стандартного аудита Windows и роль Sysmon
3. Как работает EDR: Ключевые принципы и архитектура
o Перехват системных вызовов с помощью хуков
o Механизм установки хуков в системе
o Контроль запуска приложений и уровни доверия
o Матрица доступа к защищаемым ресурсам
4. Какие данные собирает EDR для защиты системы?
5. Проактивное реагирование EDR на угрозы
6. Расширенные возможности EDR
7. Концептуальная схема EDR для Windows
9. FAQ: Часто задаваемые вопросы об EDR
Мы планируем расширять функционал наших агентов сбора событий и внедрять подходы, используемые для реализации углубленного мониторинга событий ОС Windows, обнаружения сложных нетиповых атак, а также реагирования на них. Упомянутые подходы лежат в основе функционирования такого класса продукта, как EDR для Windows. Их описанию будет посвящена данная статья.
Мы рассмотрим существующие проблемы обнаружения атак, предоставим теоретический концепт и подходы к разработке собственной системы EDR для Windows.
Что такое EDR и почему антивирус больше не справляется?
Ни для кого не секрет, что классический антивирус сам по себе уже давно не является надежным средством противодействия компьютерным атакам. Тут достаточно вспомнить про бесфайловые вирусы, которые активны последние 10 лет и против которых классический антивирус бессилен. Другая очень распространенная разновидность атак — living off the land, от которой также не может защитить классический антивирус. “Antivirus is dead” — фраза, которую произнес Brian Dye, вице-президент Symantec еще в далеком 2017 году. Это означает, что мы ни в коем случае больше не можем полагаться на один лишь антивирус при построении системы информационной безопасности и теперь мы вынуждены исходить из гипотезы, что наша инфраструктура потенциально скомпрометирована и нам необходимо в непрерывном режиме проактивно искать угрозы.
Ограничения стандартного аудита Windows и роль Sysmon
Если речь идет о Windows системах, то здесь мы можем полагаться на подсистему аудита и журнал Security, в который Windows записывает важнейшие события информационной безопасности. К типовым проблемам подсистемы аудита Windows можно отнести следующие:
- Логирование только базовых событий информационной безопасности (аутентификация/авторизация учетных записей, запуск процессов, запись в реестр, файловая активность, сетевая активность, создание/удаление учетных записей).
- Многие важные события (DNS, RPC, LDAP, WMI активность и т.д.) логируются только в режиме углубленного анализа (например, посредством настройки ETW либо средствами собственного драйвера-минифильтра), что позволяет многим атакам оставаться ниже радара средств мониторинга.
- Отсутствие фильтрации потока событий, что приводит их к лавинообразному росту и большому количеству ложных срабатываний.
- Отсутствие возможностей мониторинга низкоуровневых системных вызовов (манипуляции с памятью процессов, потоков, структурами файловой системы и т.д.), что создает риски проведения атак класса code injection, process tampering и т.д.
- Отсутствие средств самозащиты и контроля целостности и работоспособности компонентов системы аудита ОС.
- Отсутствие возможностей превентивных блокировок событий ИБ, а также проактивного обнаружения атак.
Частично данных недостатков лишен Sysmon, но он не обнаруживает большую часть атак класса code injection, process tampering, полностью лишен функционала самозащиты, противодействия техникам обхода и не поддерживает каких-либо превентивных блокировок атак, поэтому его ни в коем случае нельзя воспринимать как полноценный EDR, скорее, как сборщик расширенной телеметрии ОС. Несмотря на это, Sysmon давно стал стандартом де-факто в области аудита событий ИБ Windows. И не будет преувеличением сказать, что ни один SOC не обходится без Sysmon.
Как работает EDR: Ключевые принципы и архитектура
Перечисленных выше недостатков лишено решение класса EDR, которое, помимо выполнения роли агента, осуществляющего функции сбора и отправки событий ИБ на централизованный сервер, проактивно обнаруживает, блокирует атаки и прочую нежелательную активность.
Все современные EDR для защиты конечных точек устанавливают в системе т.н. хуки посредством драйвера ядра, осуществляющие перехваты и фильтрацию системных вызовов, которые могут быть задействованы в процессе проведения атаки. Задачей хука, установленного на системный вызов, является убедиться в его легитимности и заблокировать в случае обнаружения признаков проведения атаки.
Смысл работы хука заключается в перезаписи первых нескольких байт в начале перехватываемой функции с установкой инструкций перехода на функцию-перехватчик, которая выполняет заложенные в нее действия и в зависимости от текущего окружения либо блокирует выполнение исходной функции, либо передает выполнение исходной функции без изменения, либо меняет что-либо в переданных параметрах. Таким образом, установка хука позволяет держать выполнение исходной функции под полным контролем и в т.ч. не допустить НСД либо прочие злонамеренные действия.
Здесь стоит упомянуть, что пространство системных вызовов Windows включает в себя верхнеуровневую часть (usermode) функции Win32 API (реализованы в системных библиотеках kenel32.dll, user32.dll, advapi32.dll), Native API (ntdll.dll), которая представляет из себя прослойку между usermode и kernelmode и ядро, которое непосредственно отвечает за выполнение системного вызова.
Функции ядра (NTOSKRNL.DLL) выглядят наиболее привлекательными с точки зрения установки хука, так как такие перехватчики будут наиболее низкоуровневыми и их будет сложнее всего обнаружить и деактивировать. И, действительно, до появления технологии Patch Guard, которая защищает ядро от перезаписи, вмешиваться в работу ядра было стандартной практикой как среди СЗИ, так и среди вирусописателей. Последние годы хуки ставятся в Win32 пространстве и внутри библиотеки ntdll.dll. Таким образом, установка хуков — это мощнейший механизм перехвата и анализа событий ОС, которым активно пользуются все EDR-системы.
Механизм установки хуков в системе происходит по следующей схеме:
- Посредством вызова функции PsSetCreateProcessNotifyRoutineEx происходит регистрация т.н. callback функции драйвера, которая получает доступ к контексту создаваемого процесса: имя, путь, pid, командная строка, имя родителя.
- Драйвер передает pid запущенного процесса пользовательскому приложению, например, через именованный пайп либо каким-либо другим способом.
- Пользовательское приложение (инжектор) методом классического DLL Inject (либо каким-либо другим способом) внедряет библиотеку в адресное пространство создаваемого процесса.
- Внедренная библиотека получает управление, в большинстве случаев происходит вызов функции DLLMain, после чего происходит установка хуков на интересуемые функции.
- Теперь вызовы всех интересуемых функций внутри процесса будут замыкаться на функции-перехватчики, осуществляющие контроль исходных функций.
- Пункты 1-5 повторяются для каждого нового создаваемого в системе процесса, что дает возможность 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;
- запрещенный: по хэшу файла, например, md5 PsExec64.exe.
На основании уровня доверия процесса формируется матрица доступа к защищаемым ресурсам, которая анализируется по факту сработки хука на системный вызов при попытке обращения к защищаемому ресурсу. Пример матрицы доступа к Run ключам реестра для процессов разного уровня доверия:
JSON"registry": { "autostart_run": [ { "type": "highly_trusted", "crud_rights": "++++" }, { "type": "medium_trusted", "crud_rights": "++++" }, { "type": "low_trusted", "crud_rights": "?+?-" }, { "type": "untrusted", "crud_rights": "----" } ]}, где"+" - разрешение доступа"-" - запрет доступа"?" - спросить у пользователя и запомнить выбор
Какие данные собирает EDR для защиты системы?
Если просуммировать всю телеметрию, которую целесообразно собирать EDR, мы увидим много позиций, которые покрываются Sysmon, но не покрываются стандартным аудитом Windows, что является аргументом в пользу использования Sysmon как один из источников аудита в проектируемой EDR системе (в случае, если нет возможности для разработки собственных драйверов мини-фильтров). EDR собирает данные о файловой активности, сетевой активности, изменениях в реестре, запуске процессов, загрузке драйверов, доступе к памяти и многом другом для всестороннего анализа.
Проактивное реагирование EDR на угрозы
Одной из особенностью EDR является проактивное обнаружение и реагирование на атаки. Среди классических действий по реагированию EDR должна уметь выполнять (как в ручном, так и в автоматическом режимах):
- завершение процесса/цепочки процессов,
- удаление файла/ключа реестра,
- блокировка УЗ,
- отмена изменения ключа реестра,
- завершение сессии пользователя,
- изоляция узла,
- блокировка IP.
Расширенные возможности EDR
Хорошей практикой является построение моделей эталонного поведения хоста (baseline) как на локальном, так и сетевом уровнях, что позволит обнаруживать ранее неизвестные атаки и аномалии. Практически все современные EDR оснащены сканерами памяти (в т.ч. основанными на YARA), способные обнаруживать бесфайловое ВПО. EDR также может обнаруживать сетевые атаки, как сигантурным, так и эвристическим способом, в т.ч. на основе сетевых моделей машинного обучения для обнаружения C&C активности.
Многие EDR оснащены собственными корреляционными движками. В то же время корреляция — это все же прерогатива SIEM. На наш взгляд, грамотно настроенные компоненты контроля запуска и активности приложений (HIPS) вкупе с обученными моделями машинного обучения вполне способны нивелировать отсутствие корреляционного движка в EDR.
Концептуальная схема EDR для Windows
В результате всего сказанного получаем концептуальную схему EDR, которая покрывает основные требования, предъявляемые к EDR. Компоненты EDR можно разделить по значимости:
- Белый — базовые компоненты, обязательны для реализации EDR.
- Желтый — крайне желательные компоненты EDR.
- Фиолетовый — компоненты, который существенно расширил бы функционал EDR.
Вывод
В данной статье описаны проблематика и подходы, на основе которых предложен концептуальный прототип EDR, удовлетворяющий требованиям, предъявляемым к данному классу решений.