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

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

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

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

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

Категории

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

herpaderping

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

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

Популярное

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

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

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

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

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

Process Herpaderping

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

![][png.mimioogle]

![][gif.SurivDemo]

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

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

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

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

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

![][svg.StateDiagram]

plantuml

@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, сохраняя даже оригинальную подпись. Обратите внимание на множественные выполнения одного и того же двоичного файла и на то, как процесс выглядит для пользователя по сравнению с тем, что находится в файле на диске.

![][gif.ProcessHerpaderp]

![][png.procmon]

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

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

[Техническое глубокое погружение][md.DivingDeeper]

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

При разработке продуктов для обеспечения безопасности платформ 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.

Сравнение

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

Скачать инструмент