Скрытое выполнение кода
Hunt & Hackett представляет набор инструментов и технических статей, описывающих атакующие техники, основанные на сокрытии выполнения кода в Windows. Здесь вы найдете объяснения принципов работы этих техник, рекомендации по обнаружению и примеры исходного кода для проверки вашего покрытия детектирования.
Содержание
Этот репозиторий охватывает два класса атакующих техник, которые широко используют внутренние механизмы Windows, а также содержит предложения и инструменты для их обнаружения:
Ключевые ценности проекта:
- Системный подход. Этот репозиторий включает не просто набор инструментов или ссылок на внешние ресурсы. Каждая тема получает подробное объяснение лежащих в основе концепций; каждый конкретный случай классифицируется по общим категориям.
- Инструментарий Proof-of-Concept. Статьи сопровождаются примерами проектов на C, демонстрирующими использование описанных механизмов на практике.
- От новичка до профессионала. Вам не нужно быть экспертом по кибербезопасности, чтобы понять описываемые концепции. Тем не менее, даже специалисты в соответствующей области должны найти контент ценным и познавательным благодаря вниманию к деталям и подводным камням.
Реализация
Еще одной отличительной особенностью этого проекта является широкое использование Native API во всех примерах. Вот мотивация этого выбора:
- Функциональность. Некоторые операции, необходимые для самых продвинутых техник (например, манипуляций с процессами), не доступны через другие API.
- Контроль. Будучи самым низким уровнем взаимодействия с операционной системой, он обеспечивает наибольший контроль над её поведением. Win32 API реализован поверх Native API, поэтому всё, что можно сделать с помощью первого, можно сделать и с помощью второго.
- Доступность. Native API предоставляется библиотекой ntdll.dll и доступен во всех процессах, включая системные.
- Согласованность. Интерфейсы, предоставляемые этим API, отличаются замечательной согласованностью. После изучения фундаментальных принципов проектирования становится возможным правильно предсказывать большинство прототипов функций, исходя только из имени API.
- Устойчивость к хукам. При использовании Native API значительно проще удалить или обойти пользовательские хуки, частично ослепляя защитное ПО. Нет более низкоуровневых библиотек, которые можно было бы пропатчить, поэтому снятие хуков сводится к простой загрузке второй копии ntdll.dll и перенаправлению вызовов туда.
Замечания по сборке
Примеры кода используют заголовки Native API из проекта PHNT. Убедитесь, что клонируете репозиторий с помощью команды git clone --recurse-submodules, чтобы загрузить эту зависимость. В качестве альтернативы, после клонирования репозитория можно использовать git submodule update --init.
Для сборки проектов, входящих в репозиторий, вам понадобится свежая версия Windows SDK. Если вы используете Visual Studio, обратитесь к встроенной установке SDK. Также можно использовать автономную среду сборки EWDK. Чтобы скомпилировать все инструменты сразу, используйте MSBuild AllTools.sln /t:build /p:configuration=Release /p:platform=x64.