
셸코드 인젝션 기법. C++ 헤더, 단독 Rust 프로그램 또는 라이브러리 형태로 제공됩니다.
이것은 AV와 EDR을 우회하기 위한 셸코드 인젝션의 새로운 기술입니다. 이 기술은 Module Stomping에서 영감을 받았으며 몇 가지 유사점이 있습니다. 현재 날짜(23-01-2022) 기준으로 hollows-hunter도 이를 찾지 못합니다.
이 기술의 가장 큰 장점은 전체 모듈이나 PE를 덮어쓰지 않고 하나의 함수만 덮어쓰며, 대상 프로세스는 대상 모듈의 다른 함수를 계속 사용할 수 있다는 점입니다.
단점은 모든 함수에서 작동하지는 않는다는 점입니다(하지만 대부분의 함수에서 작동합니다). 자세한 설명은 제 블로그: 좋은 함수, 나쁜 함수, 그리고 스톰프된 함수에 있습니다.
참고: AV가 이를 탐지할 가능성이 있습니다. 서명이 msfvenom/metasploit의 서명이라면 괜찮습니다! 셸코드를 변경하거나 암호화하기만 하면 됩니다.
업데이트: 분명히 이것이 최초의 PoC는 아니며 RastaMouse가 C#에서 유사한 내용의 블로그 게시물을 작성했습니다.
헤더를 프로그램에 포함시키거나:
#include "functionstomping.hpp"
int main() {
// Just get the pid in any way and pass it to the function.
DWORD pid = 3110;
FunctionStomping(pid);
return 0;
}
또는 러스트 프로그램을 사용하세요:
cd functionstomping
cargo b
functionstomping.exe <pid>
이 프로그램을 실행한 후에는 반드시 원격 프로세스에서 함수를 호출해야 합니다! (기본 함수 CreateFile을 사용한 경우 원격 프로세스에서 이를 호출해야 합니다!).
현재 실행되는 셸코드는 계산기를 띄우는 것뿐이지만, unsigned char shellcode[]를 자신의 셸코드로 교체하기만 하면 됩니다. C++ 헤더와 함께 프로그램을 컴파일하기 위해 C++ 17과 VS2019를 사용했고, 러스트 프로그램을 컴파일하기 위해 러스트 버전 2021을 사용했습니다(의존성은 Cargo.toml에서 확인할 수 있습니다).
저는 이 프로젝트로 인해 발생하는 컴퓨터/프로그램에 대한 어떠한 종류의 손해에 대해서도 책임을 지지 않습니다. 기여는 기쁘게 받아들입니다. 풀 리퀘스트를 보내주시면 검토하겠습니다!