Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
herpaderping — Доказательство концепции, инструмент и техническое глубокое погружение в Process Herpaderping. Process Herpaderping обходит средства безопасности, скрывая намерения процесса. | Kitploit
Инструменты/GitHubGitHub/jxy-s/herpaderping
Оборонительные ИнструментыЭксплуатацияТестирование на Проникновение
GitHubjxy-s/herpaderping

herpaderping

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

Репозиторий
1.2k2243 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Process Herpaderping

Process Herpaderping — это метод сокрытия намерений процесса путем изменения содержимого на диске после того, как образ был отображен. Это приводит к любопытному поведению со стороны продуктов безопасности и самой ОС.

Краткое описание

Обычно продукт безопасности реагирует на создание процесса, регистрируя callback в ядре Windows (PsSetCreateProcessNotifyRoutineEx). На этом этапе продукт безопасности может проверить файл, который использовался для отображения исполняемого файла, и определить, следует ли разрешить выполнение этого процесса. Этот kernel callback вызывается при вставке начального потока, а не при создании объекта процесса.

Из-за этого субъект может создать и отобразить процесс, изменить содержимое файла, а затем создать начальный поток. Продукт, выполняющий проверку в callback создания, увидит измененное содержимое. Кроме того, некоторые продукты используют подход сканирования при записи, который заключается в мониторинге записи в файлы. Знакомая оптимизация здесь заключается в записи того, что файл был записан, и откладывании фактической проверки до возникновения IRP_MJ_CLEANUP (например, когда файловый дескриптор закрывается). Таким образом, субъект, использующий рабочий процесс write -> map -> modify -> execute -> close, обойдет сканирование при записи, которое полагается исключительно на проверку в IRP_MJ_CLEANUP.

Чтобы злоупотребить этим соглашением, мы сначала записываем двоичный файл в целевой файл на диске. Затем мы отображаем образ целевого файла и передаем его ОС для использования при создании процесса. ОС любезно отображает исходный двоичный файл для нас. Используя существующий дескриптор файла и до создания начального потока, мы изменяем содержимое целевого файла, чтобы скрыть или подменить файл, лежащий в основе образа. Через некоторое время мы создаем начальный поток, чтобы начать выполнение исходного двоичного файла. Наконец, мы закроем дескриптор целевого файла. Давайте рассмотрим это пошагово:

  1. Записываем целевой двоичный файл на диск, оставляя дескриптор открытым. Именно он будет выполняться в памяти.
  2. Отображаем файл как раздел образа (NtCreateSection, SEC_IMAGE).
  3. Создаем объект процесса, используя дескриптор раздела (NtCreateProcessEx).
  4. Используя тот же дескриптор целевого файла, скрываем файл на диске.
  5. Создаем начальный поток в процессе (NtCreateThreadEx).
    • В этот момент сработает callback создания процесса в ядре. Содержимое на диске не соответствует тому, что было отображено. Проверка файла на этом этапе приведет к неверной атрибуции.
  6. Закрываем дескриптор. Здесь произойдет IRP_MJ_CLEANUP.
    • Поскольку мы скрыли содержимое того, что выполняется, проверка на этом этапе приведет к неверной атрибуции.

plantuml

root@kitploit:~
@startuml
hide empty description

[*] --> CreateFile
CreateFile --> FileHandle
FileHandle --> Write
FileHandle --> NtCreateSection
Write -[hidden]-> NtCreateSection
NtCreateSection --> SectionHandle
SectionHandle --> NtCreateProcessEx
FileHandle --> Modify
NtCreateProcessEx -[hidden]-> Modify
NtCreateProcessEx --> NtCreateThreadEx
Modify -[hidden]-> NtCreateThreadEx
NtCreateThreadEx --> [*]
FileHandle --> CloseFile
NtCreateThreadEx -[hidden]-> CloseFile
NtCreateThreadEx --> PspCallProcessNotifyRoutines
PspCallProcessNotifyRoutines -[hidden]-> [*]
CloseFile --> IRP_MJ_CLEANUP
IRP_MJ_CLEANUP -[hidden]-> [*]
PspCallProcessNotifyRoutines --> Inspect
PspCallProcessNotifyRoutines -[hidden]-> CloseFile 
IRP_MJ_CLEANUP --> Inspect
Inspect -[hidden]-> [*]

CreateFile : Создать целевой файл, оставить дескриптор открытым.
Write : Записать полезную нагрузку в целевой файл.
Modify : Скрыть файл на диске.
NtCreateSection : Создать раздел, используя дескриптор файла.
NtCreateProcessEx : Раздел образа для процесса отображается и кэшируется в объекте файла.
NtCreateThreadEx : Используется кэшированный раздел.
NtCreateThreadEx : Уведомления о процессе срабатывают в ядре.
Inspect : Содержимое на диске не соответствует тому, что было выполнено.
Inspect : Проверка файла на этом этапе приведет к неверной атрибуции.
@enduml

Поведение

В демонстрации ниже вы увидите, что CMD.exe используется в качестве цели выполнения. Первый запуск перезаписывает байты на диске шаблоном. Второй запуск перезаписывает CMD.exe файлом ProcessHacker.exe. Инструмент Herpaderping исправляет двоичный файл, чтобы он максимально походил на ProcessHacker.exe, сохраняя даже оригинальную подпись. Обратите внимание на множественные выполнения одного и того же двоичного файла и на то, как процесс выглядит для пользователя по сравнению с тем, что находится в файле на диске.

Углубленное изучение

Мы наблюдали за поведением, и кое-что из этого может быть удивительным. Давайте попробуем объяснить это поведение.

Техническое глубокое погружение

Предыстория и мотивация

При разработке продуктов для обеспечения безопасности платформ Windows многие инженеры в этой области (включая меня) полагались на предвзятые представления о том, как ОС будет обрабатывать данные. В этом сценарии некоторые могут ожидать, что файл на диске останется «заблокированным» при создании процесса. Вы не можете удалить файл. Вы не можете записать в него. Но вы можете его переименовать. Как показано здесь, при определенных условиях вы действительно можете в него записать. Будьте бдительны в своих предположениях, всегда ставьте их под сомнение и проводите исследования.

Мотивация для этого исследования возникла при обнаружении того, как проводить анализ, когда файл записывается. Имея предварительный опыт исследования Process Hollowing и Doppelganging, я теоретизировал, что это может быть возможно. Цель — обеспечить лучшую безопасность. Вы не можете создать лучший замок, не поняв сначала, как взломать старый.

Похожие техники

Herpaderping похож на Hollowing и Doppelganging, но есть некоторые ключевые различия:

Process Hollowing

Process Hollowing включает изменение отображенного раздела до начала выполнения, что абстрактно выглядит так: map -> modify section -> execute. Этот рабочий процесс приводит к тому, что предполагаемый поток выполнения Hollowed-процесса отклоняется в непредусмотренный код. Doppelganging можно считать формой Hollowing. Однако Hollowing, на мой взгляд, ближе к инъекции в том смысле, что Hollowing обычно включает явную запись в уже отображенный код. Это отличается от Herpaderping, где нет измененных разделов.

Process Doppelganging

Process Doppelganging ближе к Herpaderping. Doppelganging злоупотребляет транзакционными файловыми операциями и обычно включает следующие шаги: transact -> write -> map -> rollback -> execute. В этом рабочем процессе ОС создаст раздел образа и учтет транзакции, поэтому кэшированный раздел образа в итоге оказывается тем, что вы записали в транзакцию. ОС исправила эту технику. Ну, они исправили крах, который она вызывала. Может быть, они считают это «легальным» использованием транзакции. К счастью, Windows Defender перехватывает технику Doppelganging. Doppelganging отличается от Herpaderping тем, что Herpaderping не полагается на транзакционные файловые операции. И Defender не перехватывает Herpaderping.

Сравнение

Для справки, обобщенные техники:

ТипТехника
Hollowingmap -> modify section -> execute
Doppelgangingtransact -> write -> map -> rollback -> execute
Herpaderpingwrite -> map -> modify -> execute -> close

Мы видим различия, изложенные здесь. Хотя Herpaderping, возможно, более шумный, чем Doppelganging, в том смысле, что вредоносные биты действительно попадают на диск, мы видели, что продукты безопасности все еще неспособны обнаружить Herpaderping.

Возможное решение

Здесь нет четкого исправления. Кажется разумным, что предотвращение отображения/кэширования раздела образа при наличии доступа на запись к файлу должно закрыть дыру. Однако это может быть или не быть практическим решением.

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

С точки зрения обнаружения, нет хорошего способа идентифицировать фактические биты, которые были отображены. Проверка в IRP_MJ_CLEANUP или callback, зарегистрированном в PsSetCreateProcessNotifyRoutineEx, приводит к неверной атрибуции, поскольку биты на диске были изменены; вам пришлось бы перестроить файл из созданного раздела. Стоит отметить, что в Windows 10 появился новый callback, который вы можете зарегистрировать как PsSetCreateProcessNotifyRoutineEx2, однако он страдает той же проблемой, что и предыдущий callback: он вызывается при выполнении начального потока, а не при создании объекта процесса. Microsoft добавила PsSetCreateThreadNotifyRoutineEx, который вызывается при вставке начального потока, если зарегистрирован с PsCreateThreadNotifyNonSystem, в отличие от старого callback, который вызывался перед началом выполнения. Расширение PSCREATEPROCESSNOTIFYTYPE для вызова при создании объекта процесса тоже не поможет, как мы видели в разделе Углубленное изучение, объект раздела образа кэшируется при вызове NtCreateSection, а не NtCreateProcess.

Мы не можем легко идентифицировать, что было выполнено. Нам остается пытаться обнаружить эксплуатационное поведение со стороны субъекта; я оставлю обнаружение индикаторов поведения в качестве упражнения для читателя.

Известные затронутые платформы

Ниже приведен список продуктов и ОС Windows, которые были протестированы по состоянию на (31.08.2020). Тесты проводились с известным вредоносным двоичным файлом.

Ответственное раскрытие

Эта уязвимость была раскрыта Microsoft Security Response Center (MSRC) 17.07.2020, и 22.07.2020 MSRC открыло дело. MSRC завершило расследование 25.08.2020 и определило, что находки действительны, но не соответствуют их критериям для немедленного исправления. На данный момент их дело закрыто без решения и помечено для будущего рассмотрения без указания сроков.

Мы не согласны с серьезностью этой ошибки; это было сообщено MSRC 27.08.2020.

  1. Существуют аналогичные уязвимости в этом классе (Hollowing и Doppelganging).
  2. Уязвимость, как показано, побеждает встроенные функции безопасности ОС (Windows Defender).
  3. Уязвимость позволяет субъекту получить выполнение произвольного кода.
  4. Пользователь не уведомляется о выполнении непредусмотренного кода.
  5. Информация о процессе, представленная пользователю, неточно отражает то, что выполняется.
  6. Средства для точной идентификации процесса неинтуитивны или неверны, даже на уровне ядра.

Исходный код

Этот репозиторий содержит инструмент для отработки метода Herpaderping по сокрытию процесса. Использование следующее:

root@kitploit:~
Process Herpaderping Tool - Copyright (c) Johnny Shaw
ProcessHerpaderping.exe SourceFile TargetFile [ReplacedWith] [Options...]
Usage:
  SourceFile               Исходный файл для выполнения.
  TargetFile               Целевой файл для выполнения исходного файла.
  ReplacedWith             Файл для замены целевого. Необязательно,
                           по умолчанию перезаписывает двоичный файл шаблоном.
  -h,--help                Выводит справку по инструменту.
  -d,--do-not-wait         Не ждать завершения порожденного процесса,
                           по умолчанию ждет.
  -l,--logging-mask number Задает маску логирования, по умолчанию полное
                           логирование.
                               0x1   Успехи
                               0x2   Информационные
                               0x4   Предупреждения
                               0x8   Ошибки
                               0x10  Контекстные
  -q,--quiet               Работает тихо, переопределяет маску логирования, без заголовка.
  -r,--random-obfuscation  Использует случайные байты вместо шаблона для
                           сокрытия файла.
  -e,--exclusive           Целевой файл создается с монопольным доступом,
                           и дескриптор удерживается открытым как можно дольше.
                           Без этой опции дескриптор имеет полный доступ
                           для совместного использования и закрывается как можно скорее.
  -u,--do-not-flush-file   Не сбрасывать файл после перезаписи.
  -c,--close-file-early    Закрывает файл до создания потока (до того, как
                           callback уведомления о процессе сработает в ядре).
                           Недействительно с опцией "--exclusive".
  -k,--kill                Завершает порожденный процесс независимо от
                           успеха или неудачи; это полезно в некоторых
                           средах автоматизации. Принудительно включает
                           опцию "--do-not-wait".

Клонирование и сборка

Репозиторий использует подмодули; после клонирования обязательно инициализируйте и обновите подмодули. Файлы проектов предназначены для Visual Studio 2019.

root@kitploit:~
git clone https://github.com/jxy-s/herpaderping.git
cd .\herpaderping\
git submodule update --init --recursive
MSBuild .\herpaderping.sln

Благодарности

Следующие компоненты используются без изменений. Спасибо их авторам.

  • Windows Implementation Libraries (WIL)
    Библиотека C++, состоящая только из заголовков, созданная для упрощения жизни разработчиков на Windows благодаря читаемым типобезопасным интерфейсам C++ для общих шаблонов кодирования Windows.
  • Process Hacker Native API Headers
    Коллекция заголовочных файлов Native API. Собрана из заголовочных файлов Microsoft и файлов символов, а также в результате большого объема обратной разработки и догадок.
Скачать инструмент
Операционная системаВерсияУязвима
Windows 7 Enterprise x866.1.7601Да
Windows 10 Pro x6410.0.18363.900Да
Windows 10 Pro Insider Preview x6410.0.20170.1000Да
Windows 10 Pro Insider Preview x6410.0.20201.1000Да
Продукт безопасностиВерсияУязвим
Windows Defender AntiMalware Client4.18.2006.10Да
Windows Defender Engine1.1.17200.2Да
Windows Defender Antivirus1.319.1127.0Да
Windows Defender Antispyware1.319.1127.0Да
Windows Defender AntiMalware Client4.18.2007.6Да
Windows Defender Engine1.1.17300.2Да
Windows Defender Antivirus1.319.1676.0Да
Windows Defender Antispyware1.319.1676.0Да
Windows Defender AntiMalware Client4.18.2007.8Да
Windows Defender Engine1.1.17400.5Да
Windows Defender Antivirus1.323.267.0Да
Windows Defender Antispyware1.323.267.0Да