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

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

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

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

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

Категории

Все категории
Loading categories
ModuleShifting — Более скрытный вариант техник инъекции Module Stomping и Module Overloading, уменьшающий количество IoC в памяти. Реализовано на Python ctypes. | Kitploit
Инструменты/GitHubGitHub/naksyn/moduleshifting
Криминалистика памятиRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubnaksyn/moduleshifting

ModuleShifting

Более скрытный вариант техник инъекции Module Stomping и Module Overloading, уменьшающий количество IoC в памяти. Реализовано на Python ctypes.

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

Популярное

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

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

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

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

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

Supported Python versions Twitter

ModuleShifting

Этот инструмент был представлен на 2023 x33fcon talk: "Улучшение скрытности методов инъекции в память" [Видео] [Статья в блоге]

Что это такое

ModuleShifting — это более скрытный вариант техник инъекции Module Stomping и Module overloading. Он реализован на Python ctypes, что позволяет выполнять его полностью в памяти через интерпретатор Python и Pyramid, избегая использования скомпилированных загрузчиков.

Техника может использоваться с PE- или shellcode-нагрузками, однако более скрытный вариант предназначен для shellcode-нагрузок, которые должны быть функционально независимы от конечной нагрузки, загружаемой shellcode-ом.

ModuleShifting при использовании с shellcode-нагрузкой выполняет следующие операции:

  1. Легитимная хостовая DLL загружается через LoadLibrary
  2. Изменение прав доступа к памяти указанного раздела на RW
  3. Запись shellcode поверх целевого раздела
  4. Добавление опционального заполнения для лучшей маскировки под ложноположительное поведение (подробнее здесь)
  5. Изменение прав доступа на RX
  6. Выполнение shellcode через указатель на функцию — дополнительные методы выполнения: callback функции или API CreateThread
  7. Запись исходного содержимого DLL поверх выполненного shellcode — этот шаг позволяет не оставлять вредоносный артефакт в памяти образа хостера DLL. Shellcode должен быть функционально независим от последующих этапов, иначе выполнение прервется.

immagine

При использовании PE-нагрузки ModuleShifting выполняет следующие операции:

  1. Легитимная хостовая DLL загружается через LoadLibrary
  2. Изменение прав доступа к памяти указанного раздела на RW
  3. Копирование PE поверх указанной целевой точки по разделам
  4. Добавление опционального заполнения для лучшей маскировки под ложноположительное поведение
  5. Выполнение базовой перелокации
  6. Разрешение импортов
  7. Финализация раздела установкой прав доступа в их исходные значения (избегает создания области памяти RWX)
  8. Выполнение TLS-обработчиков
  9. Запуск точки входа PE

Почему это полезно

ModuleShifting может использоваться для внедрения нагрузки без динамического выделения памяти (т.е. VirtualAlloc) и по сравнению с Module Stomping и Module Overloading является более скрытным, поскольку уменьшает количество IoC, создаваемых самой техникой внедрения.

Существует 3 основных различия между Module Shifting и некоторыми публичными реализациями Module Stomping (одна от Bobby Cooke и WithSecure)

  1. Заполнение: при записи shellcode или PE вы можете использовать заполнение для лучшей маскировки под распространённое ложноположительное поведение (например, приложения третьих сторон или .net DLL, записывающие определённое количество байт поверх своего раздела .text).
  2. Выполнение shellcode с помощью указателя на функцию. Это помогает избежать создания нового потока или вызова необычных callback-функций.
  3. Восстановление исходного содержимого DLL поверх выполненного shellcode. Это ключевое отличие.

Различия между Module Shifting и Module Overloading следующие:

  1. PE может быть записан, начиная с указанного раздела, а не с PE хостера DLL. При тщательном выборе целевого раздела это может уменьшить количество создаваемых IoC (например, заголовок PE хостера DLL не перезаписывается или перезаписывается меньше байт в разделе .text и т.д.).
  2. Заполнение, которое может быть добавлено к самой PE-нагрузке для лучшей маскировки под ложноположительные срабатывания.

Используя функционально независимую shellcode-нагрузку, такую как AceLdr Beacon Stageless shellcode, ModuleShifting способен выполнять локальное внедрение без динамического выделения памяти и на данный момент генерирует ноль IoC при сканировании Moneta и PE-Sieve. Я понимаю, что спящие нагрузки AceLdr могут быть обнаружены другими отличными инструментами, такими как Hunt-Sleeping-Beacon, но здесь акцент сделан на самой технике внедрения, а не на нагрузке. В нашем случае повышение скрытности внедрения обеспечивается функциональной независимостью shellcode, что позволяет восстановить записанные вредоносные байты до исходного содержимого, эффективно стирая следы внедрения.

Отказ от ответственности

Вся информация и материалы предоставлены только в образовательных целях. Следуйте инструкциям на свой страх и риск. Ни автор, ни его работодатель не несут ответственности за любой прямой или косвенный ущерб или убытки, возникшие у какого-либо лица или организации.

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

Эта работа стала возможной благодаря знаниям и инструментам, которыми поделились такие невероятные люди, как Aleksandra Doniec @hasherezade, Forest Orr и Kyle Avery. Я активно использовал Moneta, PeSieve, PE-Bear и AceLdr на протяжении всего процесса обучения, и они стали ключевыми для моего понимания этой темы.

Использование

ModuleShifting можно использовать с Pyramid и интерпретатором Python для выполнения локального внедрения процесса полностью в памяти, избегая скомпилированных загрузчиков.

  1. Клонируйте репозиторий Pyramid:

git clone https://github.com/naksyn/Pyramid

  1. Сгенерируйте shellcode-нагрузку с помощью вашего предпочтительного C2 и поместите её в папку Pyramid Delivery_files. Смотрите раздел Особые замечания о требованиях к нагрузке.
  2. Измените параметры скрипта moduleshifting.py внутри папки Pyramid Modules.
  3. Запустите сервер Pyramid: python3 pyramid.py -u testuser -pass testpass -p 443 -enc chacha20 -passenc superpass -generate -server 192.168.1.2 -setcradle moduleshifting.py
  4. Выполните сгенерированный код-колыбель (cradle) на интерпретаторе Python.

Демонстрация

https://github.com/naksyn/ModuleShifting/assets/59816245/67fcf888-3385-47da-b828-8a2dafeeb1e2

Особые замечания

Для успешного выполнения этой техники следует использовать shellcode-нагрузку, способную загружать дополнительную самодостаточную нагрузку в другую область памяти. ModuleShifting был протестирован с нагрузкой AceLdr, которая может загружать полную копию Beacon в кучу, тем самым разрывая функциональную зависимость от исходного shellcode. Эта техника будет работать с любой shellcode-нагрузкой, обладающей подобными возможностями. Таким образом, исходный shellcode становится бесполезным после выполнения, и нет причин оставлять его в памяти как IoC.

Также следует выбрать хостера DLL с достаточным пространством для shellcode в целевом разделе, иначе техника не сработает.

Возможности обнаружения

Module Stomping и Module Shifting требуют записи shellcode в память легитимной DLL. ModuleShifting устранит этот IoC после фазы очистки, но индикаторы могут быть замечены сканерами с возможностями проверки в реальном времени.

immagine

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