AWS ペネトレーションテストラボ
Terraformを用いたIaCとしてAWS上に展開されるペネトレーションテストラボ。SSHおよびWireGuard VPNを介してアクセス可能なKali Linuxインスタンスをデプロイします。脆弱性を含むインスタンスはプライベートサブネット内に配置されます。
注:
- IDはリージョン「eu-west-1」のみ定義されています。
- 他のリージョンの場合、Kali AMI IDを指定し、Metasploitable3のID(ビルド後)を指定する必要があります。
変更履歴
- [2022-01-30]
- sudoersを設定し、ユーザーグループがsudo nmapを実行可能にしました。
- セキュリティグループがリバースシェル用のポート8800-8899へのインバウンド接続を許可します。
- [2021-12-26]
- 自動的に最初のアベイラビリティーゾーンを設定
- Packerを使用して新しいMetasploitable AMIを作成
- Metasploitable3マシンへのlog4jshell脆弱性の初期統合(ただし使用不可)
- [2021-12-22]
- MetasploitableイメージをビルドするPacker(./metasploitable3/を参照)
- Kaliのuser_dataスクリプトの修正
- us-east-1でのデプロイを検証
- [2021-12-09]
- IDを提供する代わりに最新のKali Linux AMI IDを検索
- 非推奨のためterraform template_fileを置き換え
- Windows Server AMI(TODO: 脆弱性のあるソフトウェアをインストール)
- [2021-09-15]
- WireGuardマルチピア作成の修正
- Infection MonkeyアプリをKali Linuxに統合
- 新しいKaliバージョン2021.3へのアップグレード
- [2021-06-02] AMI IDをKali 2021.2を使用するように変更
- [2021-03-10] 新しいKaliバージョン2021.1を使用
図

コンポーネント
- Kaliインスタンス(秘密鍵はkali.pemに保存されます)
- WireGuard VPNサービス: クライアントファイル client_vpn.wg
- SSH/SCP経由でアクセス可能
- パブリック サブネット 10.0.0.5/24
- ポート5000で動作するInfection Monkey(VPNまたはSSH経由でのみアクセス可能)
- 脆弱性マシン「Metasploitable」(AMIビルドは公開)
- その他の脆弱性ラボ/マシン/Docker(未実装)
追加機能
- ユーザー管理
- KaliインスタンスにRSAを使用して非特権ユーザーを自動的に作成
- ユーザーごとのWireGuard VPNクライアントファイル
- syslogへのコマンドライン監査ログ記録
- auditdが有効化され、ユーザーアクションの監査用にsudo_logキーとusers_logキーが設定されています(ausearchコマンドも参照)
- TODO: 端末監査をCloudWatchまたは一度だけ書き込み可能なS3バケットに転送
使用方法
- 必要条件:
- Terraform CLI インストールガイド
- AWS CLI インストールガイド
- $PATHがAWS CLIおよびTerraform用に設定されていること
- AWSアカウントを作成し、AWS CLIで認証情報を設定:
aws configure
- AWS MarketplaceでのKali Linuxサブスクリプション
- 事前にビルドされたMetasploitable3 AMIイメージ(eu-west-1リージョンでは公開AMIが利用可能)参照
デプロイ
variables.tfで0または1を設定して、デプロイする脆弱性インスタンスを有効化/無効化します。
variable "deploment-control" {
type = map
default = {
#"instance" = 0 or 1, to disable or enable
"metasploitable3" = 1
"dvca" = 0
}
description = "Control which EC2 instances are deployed, 0 for none or 1"
}
- Terraformを使用してインフラをデプロイします。
terraform init
terraform plan
terraform apply -auto-approve
出力
Terraformの出力には以下のエントリが表示されます:
- kaliユーザー(sudo経由のroot)へのSSH接続コマンド
- kaliユーザーのWireGuardクライアントファイルがKaliサーバーから自動的に取得されます
- WireGuardクライアントファイルを取得するSCPコマンド(定義されたterraform local-execコマンドが失敗した場合の保険)
- Kaliインスタンスに作成された各通常ユーザーについて
- SSH接続用の秘密鍵ファイル
- VPN接続用のWireGuardクライアントファイル
使い方
Kaliへの接続はSSHまたはWireGuardのいずれかを使用します:
- SSH: (コマンドラインのみ)自動生成された秘密鍵を使用(terraform出力を参照)
KALI_IP=<KALI_IP> # configure kali public ip
ssh -i kali.pem -o StrictHostKeyChecking=no -o IdentitiesOnly=yes kali@${KALI_IP}
- WireGuard: ローカルのKaliインスタンスをWireGuard経由で接続(生成されたclient_vpn.wgファイルを参照)
KALI_IP=<KALI_IP> # configure kali public ip
scp -i kali.pem -o StrictHostKeyChecking=no IdentitiesOnly=yes kali@${KALI_IP}:/home/kali/client_vpn.wg .
####
(local_kali)$ sudo apt-get install –y wireguard
(local_kali)$ sudo gedit /etc/wireguard/wg0.conf # copy contents of client_vpn.wg
(local_kali)$ sudo chmod 700 /etc/wireguard/wg0.conf
(local_kali)$ sudo wg-quick up wg0
(local_kali)$ ping 10.0.0.5 # test connectivity with kali instance in AWS
破棄
terraform destroy -auto-approve
参照