
Nim(およびRust)で書かれた軽量な初期段階C2インプラント。
作者: Cas van Cooten (@chvancooten), 素晴らしい方々に特に感謝します:
Kadir Yamamoto (@yamakadi), Furkan Göksel (@frkngksl) , Fabian Mosch (@S3cur3Th1sSh1t), Rafael Félix (@b1scoito), Guillaume Caillé (@OffenseTeacher), およびその他多数!
もし NimPlant が役に立った場合、または私の仕事全般を気に入っていただけた場合、サポートは大歓迎です:
Nimplant を実行するには、Python3 の最新バージョンが必要です。
注: 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 Webサーバー(APIを含む)がリッスンするIP。127.0.0.1の使用を推奨。C2を保護するための適切なファイアウォールまたはルーティングルールを設定している場合にのみ0.0.0.0を使用してください。 |
| server | port | C2 Webサーバー(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に通常のスリープ呼び出しの代わりにEkkoスリープマスクを使用するかどうか。現時点では通常の実行可能ファイルでのみ機能します。 |
| nimplant | sleepTime | 新しいNimPlantのデフォルトのスリープ時間(秒)。 |
| 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)
Compiling .exe for NimPlant Compiling self-deleting .exe for NimPlant Compiling .dll for NimPlant Compiling .bin for NimPlant
Done compiling! You can find compiled binaries in 'client/bin/'.
### Dockerによるコンパイル
Dockerを使用すると簡単で、依存関係の問題を回避できます。必要なビルド時および実行時の依存関係はすべてコンテナに事前インストールされているためです。
Dockerを使用するには、[Docker Hub](https://hub.docker.com/r/chvancooten/nimplant) から公開されている `chvancooten/nimplant` コンテナ(CI/CD経由でビルド)を使用するか、ソースから `Dockerfile` をビルドします。
> ソースからビルドするには、メインディレクトリから以下を実行します:
>
> ```bash
> docker build . -t nimplant
> ```
これにより、`nimplant:latest` というタグが付いたコンテナがビルドされます。注意:開発依存関係のため、時間がかかり、コンテナサイズが大きくなる可能性があります!
完了したら、コマンドラインからコンテナを実行してアーティファクトをコンパイルできます。```bash
docker run --rm -it -v ${PWD}:/nimplant chvancooten/nimplant:latest compile exe rust
注: これはコマンドの例です。マウントされたボリュームなどの引数は状況に合わせて調整してください。
バイナリの準備ができたら、NimPlantサーバーを起動できます!ローカルでコンパイルした場合、同じ config.toml ファイルから読み込むため、追加の設定は不要です。サーバーを起動するには、python nimplant.py server を実行するだけです(Linuxで実行する場合はsudo権限が必要です)。Nimplantがチェックインすると、コンソールを使用するか、Webインターフェース(デフォルトでは http://localhost:31337)にアクセスできます。
注記: