
自動化されたRed TeamインフラストラクチャのDockerを使用した展開
早期リリースです。Redcloudの開発状況をフォローするには、Twitterをフォローしてください。
💁☁️🐚🌱
クイックスタート - アーキテクチャ - ユースケース - スクリーンショット
Redcloudは、Dockerを使用して本格的なレッドチームインフラを展開するための、パワフルでユーザーフレンドリーなツールボックスです。ツールのためにクラウドの速度を活用しましょう。数分でデプロイできます。洗練されたWebインターフェースで使用・管理できます。
ペネトレーションテスト、シューティングレンジ、レッドチーミング、バグバウンティに最適です!
攻撃インフラを苦労なくセルフホストし、数分で自前のライブでスケーラブルかつ回復力のある攻撃インフラを展開できます。
次のデモでは、SSHを介したRedcloudのデプロイと、その後のMetasploitを示しています。次にTraefikとMetasploitにアタッチされたライブボリュームを確認します。最後に、WebターミナルでMetasploitのデータベースが機能していることを確認し、コンテナを削除してRedcloudを終了します。
セットアップ:```bash
cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys'
eval (docker-machine env default)
python --version
デプロイ:```bash
> git clone https://github.com/khast3x/redcloud.git
> cd redcloud
> python redcloud.py
Redcloudは、利用可能なテンプレートのリストを表示するために PyYAML を使用します。ほとんどのシステムでデフォルトでインストールされています。
もしインストールされていない場合は、次のコマンドを実行してください:```bash
pip install -r requirements.txt
Redcloudには3つの異なるデプロイ方法があります:
1. **ローカル**
2. **SSHを使用したリモート**. ターゲットの `authorized_keys` ファイルに公開鍵が必要です。
3. **docker-machineを使用したリモート**. `eval (docker-machine env deploy_target)` を実行して環境を docker-machine で事前ロードし、`redcloud.py` を実行します。Redcloud は自動的に docker-machine を検出し、docker-machine デプロイに関連するメニュー項目を強調表示します。
___
<h4 align="center">
<b>テンプレート</b>
<br>
<br>
</h4>
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/e38f19fa9cc10216030f7856b99170a4ac7c35399c2dd9daf19156a6e9b75e46.png" width="540" title="Redcloud テンプレート">
</p>
___
**簡単に言うと、**
`redcloud.py` は、Dockerで動作する、**攻撃的な活動のための多くのツールテンプレートが事前ロードされた** [Portainer](https://www.portainer.io/) スタックをデプロイします。デプロイ後は、[Webインターフェース](#screenshots)で Redcloud を制御できます。リバースプロキシとして [Traefik](https://traefik.io/) を使用します。システムの `ssh` または `docker-machine` を使用して、ターゲットサーバーに簡単にリモートデプロイできます。
* :rocket: 数回のクリックでクラウド上にKaliを起動したいと思ったことはありませんか?
* :package: ツール、テクニック、ステージ間をクリーンなサイロに分けたいですか?
* :ambulance: スキャンやC2の健全性を監視したいですか?
* :fire: フィッシングキャンペーンの設定といったシステム管理タスクをスキップして、より早くpwnしたいですか?
* :smiling_imp: 理想的な攻撃インフラをどのように構築するか興味がありますか?
Web UIを使用して、各コンテナの監視、管理、**操作**ができます。あなた自身のターミナルと同じように、快適なWebターミナルを使用できます。PortainerのシンプルなUIを使用して、ボリューム、ネットワーク、ポートフォワーディングを作成できます。
データセンター級のインターネットの力で、お気に入りのツールやテクニックをすべてデプロイして管理しましょう :rocket:
___
*次のセクションでは、Redcloudの設計概念についてより詳しく説明します。ただし、内部に踏み込まなくても始めることはできます。*
___
* :book: **目次**
- [はじめに](#introduction)
- [機能](#features)
- [クイックスタート](#quick-start)
- [詳細](#details)
- [Redcloudアーキテクチャ](#redcloud-architecture)
- [デプロイワークフロー](#deployment-workflow)
- [ネットワーク](#networks)
- [ボリューム](#volumes)
- [ターミナルからコンテナにアクセスする](#accessing-containers-from-the-terminal)
- [ファイルへのアクセス](#accessing-files)
- [SSL証明書](#ssl-certificates)
- [Redcloudの停止](#stopping-redcloud)
- [Portainerアプリテンプレート](#portainer-app-templates)
- [Traefikリバースプロキシ](#traefik-reverse-proxy)
- [Redcloudのセキュリティに関する考慮事項](#redcloud-security-considerations)
- [テスト済みデプロイ候補](#tested-deployment-candidates)
- [トラブルシューティング](#troubleshooting)
- [ユースケース](#use-cases)
- [スクリーンショット](#screenshots)
- [コントリビューションガイドライン](#contribution-guideline)
- [Redcloudのホスティング](#hosting-redcloud)
- [インスピレーションと謝辞](#inspirations--shout-outs)
___
## 詳細
### Redcloudアーキテクチャ
* `redcloud.py`: DockerとPortainerを使用して、Webインターフェースとアプリテンプレートの開始/停止を行います。
* `portainer`: Portainer Webインターフェース。
* `traefik`: Webインターフェース、API、ファイルコンテナへのTraefikリバースプロキシコンテナ。一部のテンプレートは利便性のために事前設定されたルートを持っています。`templates.yml`を参照してください。
* `templates`: App Templatesを提供するpython3 `http.server` コンテナ。「内部」ネットワークに存在します。
* `cert_gen`: 一般的なベストプラクティスを使用してSSL証明書を生成する[omgwtfssl](https://github.com/paulczar/omgwtfssl)コンテナ。
* https://your-server-ip/portainer: デプロイ後のRedcloud Webインターフェース。
* https://your-server-ip/files: Redcloud `redcloud_files` ボリューム。Traefikと同じ `.htpasswd` で保護された `redcloud_log` コンテナのコンテンツにもアクセスできます。デフォルトの認証情報: `admin:Redcloud`
* https://your-server-ip/api: Traefikリバースプロキシのヘルスモニタリングページ。ルート、バックエンド、リターンコードのライブ統計を表示します。Traefikを介して設定されている場合、リバースコールバックインプラントデータも表示します。
### デプロイワークフロー
**Redcloudのデプロイワークフローは以下の通りです:**
1. Redcloudリポジトリをクローン/ダウンロードします。
2. `redcloud.py` を起動します。
3. メニューからデプロイ候補を選択します(ローカル、SSH、docker-machine)。
4. `redcloud.py` は自動的に:
* ターゲットマシン上の `docker` と `docker-compose` を確認します。
* 存在しない場合は `docker` と `docker-compose` をインストールします。
* `docker-compose` を使用してターゲットにWebスタックをデプロイします。
5. デプロイが完了すると、`redcloud.py` がURLを出力します。 https://your-deploy-machine-ip/portainer にアクセスしてください。
6. Webインターフェースからユーザー名/パスワードを設定します。
7. エンドポイントを選択します(リスト内の唯一のもの)。
8. 左側の「App Templates」メニュー項目を使用してテンプレートにアクセスします :rocket:
**アプリテンプレートのデプロイは以下の通りです:**
1. テンプレートを選択します。
2. 追加オプションを追加したい場合は、「+ Show advanced options」を選択します。
3. 必要に応じてポートマッピング、ネットワークオプション、ボリュームマッピングを追加します。
4. 「Deploy the container」を選択します。
5. Portainerがコンテナを起動します。イメージを取得する必要がある場合、数分かかることがあります。サーバーがデータセンターにある場合、この手順は非常に高速です。
6. コンテナが実行中になるはずです :rocket:
7. Portainerは「Containers」ページにリダイレクトします。そこから次のことができます:
a. ライブコンテナログを表示。
b. コンテナの詳細を検査(`docker inspect`)。
c. ライブコンテナ統計(メモリ/CPU/ネットワーク/プロセス)を表示。
d. Webシェルを使用してコンテナを操作。
e. アプリテンプレートに応じて、`bash` または `sh` を使用します。ドロップダウンメニューから適切なものを選択します。
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/cf013b73e9bb7dc6f94dafbd31d9d158f7736fc676f94995c64de133ad9bebbe.png" width="540" title="Redcloudメニュー">
</p>
### ネットワーク
Redcloudを使用すると、ネットワークとコンテナを簡単に操作できます。
異なるドライバーを持つ追加のネットワークを作成し、必要に応じてコンテナを接続できます。Redcloudには2つのネットワーク、`redcloud_default` と `redcloud_inside` が付属しています。
### ボリューム
ボリュームを共有することで、コンテナ間でデータを共有できます。Redcloudには3つのボリュームがあります:
* `certs`: [omgwtfssl](https://github.com/paulczar/omgwtfssl) によって生成された証明書を含むコンテナ。
* `files`: 標準のファイル共有ボリューム。現時点では、https://your-server-ip/files をブラウズするとファイルが利用可能で、Traefikリバースプロキシコンテナが `files` ボリュームから直接提供します。典型的なユースケースは、ボリュームをMetasploitコンテナにアタッチし、ペイロードを直接 `files` ボリュームに生成することです。これで、Traefikを介してファイルサーバールートに直接新しいペイロードを提供できます。
* `logs`: ログ用に利用可能で、ファイルサーバーでも提供されます。アクセスには基本認証が必要です。デフォルトは `admin:Redcloud` です。
### ターミナルからコンテナにアクセスする
デプロイされたコンテナをターミナルで操作したい場合、Dockerを使えば非常に簡単です。以下の点に注意してください:
* ほとんどのコンテナには `bash` がありますが、一部のコンテナは代わりに `sh` を使用します
* Redcloud App Templatesのすべてのコンテナ名は `red_` で始まります(例: `red_msf-postgresql`)
* Dockerでは、`docker exec` または `attach` を使用してコンテナを操作できます
* `exec` は新しいプロセスを作成するため推奨されます
* `attach` は実行中のプロセスに直接接続するため、コンテナが停止する可能性があります
* Redcloudを実行している場合:
* ローカルまたは `docker-machine` を使用している場合、ローカルシェルでこれらのコマンドを入力してください
* `ssh` を使用している場合、まずデプロイターゲットにSSH接続してから以下のコマンドを実行してください
目的のデプロイ済みコンテナとの操作を開始するには:```bash
> docker exec -it red_container-name /bin/bash
root@70a819ef0e87:/#
次のメッセージが表示された場合、それは bash がインストールされていないことを意味します。その場合は、/bin/bash を /bin/sh に置き換えてください:```bash
docker exec -it red_container-name /bin/bash OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: "/bin/bash": stat /bin/bash: no such file or directory": unknown
docker exec -it red_container-name /bin/sh
`docker attach` を使用するには、次のように実行します:```bash
> docker attach red_container-name
attachを使用する場合、コンテナはinteractive modeで起動する必要があります。そうしないと、対話型シェルにアクセスできません。
ブラウザでhttps://your-redcloud-ip/filesにアクセスしてください。
詳細についてはfilesボリュームを参照してください。
Redcloudはデプロイ時に新しい未署名SSL証明書を生成します。
証明書はomgwtfsslによって生成され、ベストプラクティスのほとんどが実装されています。
生成後:
生成された証明書はデフォルトで/certsにダンプされ、標準的なYAML形式でstdoutにも出力されます。そのため、AnsibleやYAMLを使用する他のツールで簡単に利用できます。
証明書はcertsという共有Dockerボリュームに保存されます。コンテナをデプロイする際に「+ Advanced Settings」でこのボリュームを指定すると、コンテナからアクセスできます。Traefikリバースプロキシコンテナは設定ファイルから直接証明書を取得します。これらの証明書を独自のものと交換したい場合は、このボリューム上のファイルを置き換えてください。
また、生成された証明書を他のコンテナ(例えば、EmpireやMetasploitのリバースコールバック用、またはフィッシングキャンペーン用)と共有することもできます。
SSL関連の設定のほとんどはtraefik/traefik.tomlまたはdocker-compose.ymlファイルにあります。
メニューから直接Redcloudを停止できます。
デプロイしたAppテンプレートは、Redcloudを停止する前に手動で停止する必要があります。 PortainerのWebインターフェースまたはdocker rm -f container-nameで停止できます。
Redcloudを実行しているPortainerコンテナを強制的に停止する場合は、redcloud/フォルダ内でdocker-compose killを実行してください。
localとdocker-machineの停止オプションは同じなので、同じオプションに統合されています。
RedcloudはPortainerを使用してDockerエンジンをオーケストレーションし、インターフェースを提供します。Portainer自体は、Dockerデプロイメントをリモートで管理するための素晴らしいプロジェクトです。Portainerには非常に便利なテンプレートシステムも含まれており、これがRedcloudデプロイメントの主要コンポーネントです。
テンプレートは./templates/templates.ymlにあります。Portainerは専用のコンテナ(templates)からテンプレートファイルを取得します。
Traefikは素晴らしい「クラウドネイティブエッジルーター」です。以前のNGINXリバースプロキシセットアップに取って代わりました。
デプロイ時に、traefik/DockerfileにあるDockerfileを使用してTraefikイメージがビルドされます。これにより、admin:Redcloudの認証情報を持つ.htpasswdが追加されます。
デフォルトのデプロイでは、以下のルートが生成されます:
https://your-server-ip/portainerhttps://your-server-ip/fileshttps://your-server-ip/api認証は.htaccessデータに基づいて行われます。
Traefik API Webインターフェースから、デプロイしたルートの表示、健全性の監視、リアルタイムメトリクスの確認ができます。非常に便利です。
以下のいずれかを使用して、Traefikにトラフィックをルーティングする場所を指示する追加のラベルを追加できます:
traefik/traefik.tomlファイルdocker-compose.ymlファイルtemplates.ymlファイル詳細については、公式ドキュメントを参照してください。

Redcloudは自己署名のhttps証明書でデプロイされ、Webコンソールとのすべてのやり取りをプロキシ経由で行います。
ただし、デフォルトのネットワークではコンテナのポートが外部に公開されます。
以下のことができます:
labelsを追加して、Traefikでルートを作成する。docker-compose.ymlファイルを参考にしてください。さらに:
dockerおよびdocker-machineのインストールにはroot権限が必要です。公式ドキュメントに従って権限を下げることができます。redcloud.pyはicanhazip.comを使用してRedcloudのパブリックIPアドレスを取得します。| デプロイターゲット | ステータス |
|---|---|
| Ubuntu Bionic | ✔️ |
| Ubuntu Xenial | ✔️ |
| Debian Strech | ✔️ |
python --versionでデフォルトのPythonバージョンを確認してください。RedcloudにはPython 3以上が必要です。pythonの代わりにpython3を使用してください。redcloud.pyは、デプロイ候補の.ssh/authorized_keysに公開鍵があり、ユーザーの公開鍵を使用してパスワードなしの認証が行われる必要があります。これはほとんどのVPSワークフローのデフォルト設定です。evalコマンドを実行するだけです。dockerおよびdocker-machineのインストールにはroot権限が必要です。公式ドキュメントに従って権限を下げることができます。rm -rf /opt/portainer/dataapt-get install python3-distutilsを使用してpython3-distutilsパッケージをインストールする必要があるかもしれません。/files/URIを介して即座に提供する。/files/URIを使用してログを取得する。
msfconsoleの使用
あらゆる助けを歓迎します。これはサイドプロジェクトなので、おそらくいくつかのボルトやネジが不足しています。とりわけ:
RedcloudはDockerが動作する任意のUnixサーバーでホストできます。
Redcloudはクラウド環境での使用を想定しており、sshが使えるシンプルなVPSや、AWS EC2、GCPなどでも問題ありません。
多くのクラウドプロバイダーが、自社のサービスに慣れるための無料クレジットを提供しています。主要ベンダーから無料ホスティングクレジットを入手する方法をカバーしたリストやチュートリアルが多数あります。このリストは良い出発点です。
デプロイ方法としては、私は個人的にdocker-machineを使用するのを好みます。クラウドプロバイダーのドライバーセットアップが完了すれば、新しいマシンを生成して管理するのが非常に簡単になるからです。sshを使用する場合は、evilsocketのshellzプロジェクトを見て、キーとプロファイルを管理することをお勧めします。
Red Team Infrastructure Wiki - bluscreenofjeff
Automated Red Team Infrastructure Guide - rastamouse
Safe Red Team Infrastructure - Tim MalcomVetter
Red Baron - Coalfire Research
Rapid Attack Infrastructure - Obscurity Labs
Decker - Steven Aldinger
hideNsneak - Mike Hodges
最後に、ツールの統合をご希望の場合は、Twitterでご連絡ください。このプロジェクトは私の自由時間に維持されています。今後の機能についてはdevブランチをご確認ください。
Redcloudはもともと、情報セキュリティの学生向けのトレーニング環境のデプロイを容易にするために開発されました。
このプロジェクトの最新情報を受け取りたい場合:
portainerはデフォルトのボリュームロケーション/opt/を使用できません。これを解決するには、docker-compose.ymlファイルを開き、/opt/portainer/data:/dataを書き込みアクセス可能なフォルダ(例:/tmp/portainer/:/data)に置き換え、Redcloudを実行する前に/tmp/portainerディレクトリを作成してください。