
Nim(과 Rust)로 작성된 경량 1단계 C2 임플란트.
제작자 Cas van Cooten (@chvancooten), 특별 감사를 드리는 분들:
Kadir Yamamoto (@yamakadi), Furkan Göksel (@frkngksl) , Fabian Mosch (@S3cur3Th1sSh1t), Rafael Félix (@b1scoito), Guillaume Caillé (@OffenseTeacher), 그리고 다른 많은 분들!
NimPlant가 유용하셨거나 제 작업을 일반적으로 좋아하신다면, 여러분의 지원을 환영합니다:
inline-execute, shinject(동적 호출 사용), 사용자 지정 실행 공간의 powershell, 또는 스레드 내 execute-assembly를 통한 고급 기능 또는 페이로드의 쉬운 배포NimPlant를 실행하려면 최신 버전의 Python3가 필요합니다.
requirements.txt 설치 (pip3 install -r server/requirements.txt).choosenim을 통한 설치 권장, apt가 항상 최신 버전을 제공하지 않음).cd client; nimble install -d).mingw 툴체인 설치 (brew install mingw-w64 또는 apt install mingw-w64).rustup을 통한 설치 권장).rustup target add x86_64-pc-windows-gnu.~/.cargo/config.toml 파일을 Cargo.toml에 따라 수정하고 nightly 빌드 체인 사용 (rustup default nightly).참고: Windows에서 컴파일하는 경우에도
x86_64-pc-windows-gnu타겟을 권장합니다. 결과 바이너리가 약간 더 크지만 결과 DLL에서 셸코드를 생성할 때 더 안정적인 것으로 보입니다.rust-toolchain.toml을 수정하여 타겟을x86_64-pc-windows-msvc로 변경할 수 있지만 생성된 셸코드가 모든 경우에 올바르게 작동하지 않을 수 있습니다.
NimPlant를 사용하기 전에 구성 파일 config.toml을 생성하세요. config.toml.example을 복사하여 작업하는 것을 권장합니다.
설정 개요는 아래에 제공됩니다.
| Category | Setting | Description |
|---|---|---|
| server | ip | C2 웹 서버(API 포함)가 수신할 IP입니다. 127.0.0.1 사용을 권장하며, C2를 보호하기 위해 적절한 방화벽 또는 라우팅 규칙을 설정한 경우에만 0.0.0.0을 사용하세요. |
| server | port | C2 웹 서버(API 포함)가 수신할 포트입니다. |
| listener | type | 리스너 유형, HTTP 또는 HTTPS. HTTPS 옵션은 아래에서 구성합니다. |
| listener | sslCertPath | HTTPS 인증서 파일의 로컬 경로(예: LetsEncrypt CertBot을 통해 요청하거나 자체 서명). 리스너 유형이 'HTTP'인 경우 무시됩니다. |
| listener | sslKeyPath | 해당 HTTPS 인증서 개인 키 파일의 로컬 경로. 설정된 경우 NimPlant 서버 실행 시 비밀번호를 묻습니다. 리스너 유형이 'HTTP'인 경우 무시됩니다. |
| listener | hostname | 리스너 호스트 이름. 비어 있지 않은 경우(""), NimPlant는 이 호스트 이름을 사용하여 연결합니다. 이 호스트에서 NimPlant 리스너 포트로 트래픽이 올바르게 라우팅되도록 하세요. |
| listener | ip | 리스너 IP. 'hostname'이 설정된 경우에도 필요합니다. 서버가 이 IP에 등록하는 데 사용됩니다. |
| listener | port | 리스너 포트. 'hostname'이 설정된 경우에도 필요합니다. 서버가 이 포트에 등록하는 데 사용됩니다. |
| listener | registerPath | 새 NimPlant가 등록할 URI 경로입니다. |
| listener | taskPath | NimPlant가 작업을 받을 URI 경로입니다. |
| listener | resultPath | NimPlant가 결과를 제출할 URI 경로입니다. |
| nimplant | riskyMode | 위험한 명령을 지원하도록 NimPlant를 컴파일합니다. 운영자 재량이 필요합니다. 비활성화하면 execute-assembly, powershell, shell 및 shinject에 대한 지원이 제거됩니다. |
| nimplant | sleepMask | NimPlant에 일반 sleep 호출 대신 Ekko sleep mask를 사용할지 여부. 현재는 일반 실행 파일에서만 작동합니다! |
| nimplant | sleepTime | 새 NimPlant의 기본 sleep 시간(초)입니다. |
| nimplant | sleepJitter | 새 NimPlant의 기본 지터(%)입니다. |
| nimplant | killDate | NimPlant의 종료 날짜(형식: yyyy-MM-dd). 이 날짜가 지나면 NimPlant가 종료됩니다. |
| nimplant | userAgent | NimPlant에서 사용하는 사용자 에이전트입니다. 서버에서도 이를 사용하여 NimPlant 트래픽을 검증하므로 눈에 띄지 않지만 너무 흔하지 않은 UA를 선택하는 것이 좋습니다. |
구성을 원하는 대로 설정한 후, 대상에 배포할 NimPlant 바이너리를 생성할 수 있습니다. 현재 NimPlant는 (자체 삭제) 실행 파일, 라이브러리 및 위치 독립적 셸코드(sRDI를 통해)에 대해 각각 .exe, .dll, .bin 바이너리를 지원합니다. 생성하려면 python nimplant.py compile을 실행한 다음 원하는 바이너리(exe, exe-selfdelete, dll, raw 또는 all)를, 선택적으로 임플란트 유형(nim, rust, nim-debug 또는 rust-debug - 기본적으로 Nim 컴파일)을 입력하세요. 파일은 각각 client/bin/ 또는 client-rs/bin/에 기록됩니다.
컴파일 중에 새 XOR 키를 생성하고 사용하려면 rotatekey 인수를 전달할 수 있습니다.
참고:
NimPlant는 현재 x64만 지원합니다!
DLL 파일의 진입점은 Update이며, 모든 진입점에 대해 DllMain에 의해 트리거됩니다. 즉, 예를 들어 rundll32 .\NimPlant.dll,Update를 사용하여 트리거하거나 선택한 LOLBIN을 사용하여 사이드로드할 수 있습니다(client/NimPlant.nim 또는 client-rs/src/lib.rs에서 약간의 수정이 필요할 수 있음).```
PS C:\NimPlant> python .\nimplant.py compile all
* *(# #
** **(## ##
######## ( ********
####(###########************,****
# ######## ******** *
.### ***
.######## ********
#### ### *** ****
######### ### *** *********
####### #### ## ** **** *******
##### ## * ** *****
###### #### ##*** **** .******
############### ***************
########## **********
#########**********
#######********
| \ | () __ ___ | _ | | __ _ _ __ | |_
| | | | '_ _ \| |_) | |/ _ | '_ | __|
| |\ | | | | | | | __/| | (| | | | | |
|| _||| || ||| ||_,|| ||_|
A light-weight stage 1 implant and C2 based on Nim|Rust and Python
By Cas van Cooten (@chvancooten)