
小さな、意図的に脆弱なWindowsドメインをRDPハニーポットとして完全自動で展開します。
意図的に安全でない脆弱なWindowsドメインをRDPハニーポットのために完全自動でデプロイします。
セルフホストの仮想化(libvirt + QEMU/KVM)上で動作します(クラウドベースのソリューション向けに簡単にカスタマイズ可能です)。
RDPハニーポットテストを目的として、小規模なWindowsドメインを自動的に(ユーザー操作なしで)手間なくセットアップするために使用します。
ドメインコントローラ、デスクトップコンピュータ、そして悪意ある者の行動をログに記録する設定済みのGraylogサーバを備えています。
Packer: 必要なインストールメディアをダウンロードし、無人で自動化されたベース仮想マシンイメージをセットアップします。
Terraform: Packerで準備された仮想マシンイメージを使用してlibvirt仮想化インフラ(ネットワーク+仮想マシン)をプロビジョニングします。
Ansible: ユーザー操作なしで自動的にインフラ(DC、Desktop、Graylog)を構成します。
Packer+Terraform+Ansibleのパイプラインを実行した後、構成されたWindowsドメインが稼働し、デスクトップのRDPサービスを公開インターネットに接続して、Graylogを通じてイベントを監視できます。
実行システムの特徴は以下の通りです:
仮想化にはホストシステムにある程度のパワーが必要です:
Ubuntu 18.04 LTSホストでテスト済み。
まず、リポジトリをクローンします:
git clone https://github.com/tothi/ad-honeypot-autodeploy
cd ad-honeypot-autodeploy
Packerを開始する前に、初期パスワードを設定します(複雑さの要件に注意):
./init_passwords.sh
次に初期イメージを構築します。
cd packer
Windows Server 2016とUbuntuのインストールメディアはPackerスクリプトによってダウンロードされるべきです。VirtIOは添付のget-virtio.shスクリプトでダウンロードする必要があります:
./get-virtio.sh
Windows 10は手動でダウンロードする必要があります。一時的なダウンロードリンクを取得してISOフォルダに保存してください。ダウンロードリンクはこちらから入手できます。English (International)の64ビット版を選択し、ISOをISO/Win10_21H2_EnglishInternational_x64.isoに保存します。
GraylogのワールドマップでIPロケーションをマッピングするには、MaxMind GeoIPデータベースが必要です。残念ながらライセンス条項により再配布できないため、MaxMindサイトから手動でダウンロードする必要があります(登録後)。無料のGeoLite2バージョンで動作するはずです。"GeoLite2 City"データベースをMMDB形式で入手し(GZIPをダウンロードして解凍)、resources/GeoLite2-City.mmdbに配置します。
Packerをお持ちでない場合は、packer.ioサイトから最新版を入手するか(プリコンパイル済みバイナリをダウンロード)、Hashicorpリポジトリを追加してパッケージングシステムに追加してください(Terraformにも便利です)。
イメージを再構築する場合は、以前のビルドをクリーンアップすることを忘れないでください:
rm -fr output_*
イメージを再ダウンロードしたい場合は、packer_cacheを削除します:
rm -fr packer_cache
これらの準備手順の後、Packerビルドを並行して実行します:
./packer-build-all.sh

イメージは妥当な時間内に準備できるはずです(ホストハードウェアの性能に応じて約20-30分)。
次に、Terraformを使用してインフラをデプロイできます。
Terraform(>=0.13)をお持ちでない場合は入手してください(上記のPackerのインストール方法を参照)。
libvirt用Terraformプロバイダは、applyフェーズ中にTerraform Registryから自動的にダウンロードされるはずです。
Terraformフォルダに移動:
cd ../terraform
ワーキングディレクトリを初期化します(初回使用時のみ必要):
terraform init
インフラを構築して起動します("apply the changes"):
terraform apply
terraform applyを実行するユーザーがrootでない場合は、/usr/sbin/iptablesを実行するためのsudo権限が必要です(パスワードなしで)。

短時間(約2〜3分)後、ネットワークと仮想マシンが起動して実行されます。障害が発生した場合、terraform destroyだけでは不十分な場合があり、リソースの手動削除が必要になることがあります。
警告: プライベートネットワークの保護に注意する必要があります。ここで提供されているterraform設定(main.tf)には、私自身のテスト環境用のカスタムファイアウォールルール(192.168.3.0/24ハニーポットネットワークからの192.168.0.0/16宛先トラフィックをブロック)のみが含まれています。
次は構成フェーズです。
ansibleフォルダに移動:
cd ../ansible
推奨されるインストール方法は、Python venv仮想環境に最新のAnsibleと必要な追加依存関係をインストールすることです:
python3 -m venv venv
. ./venv/bin/activate
pip3 install -r requirements.txt
後で使用するには、以下のようにvenvをアクティベートします
. ./venv/bin/activate
現在のセッションで不要になった場合はdeactivateで解除します。
Ubuntu Graylogマシンにubuntuユーザーでアクセスするために、ファイル名id.pubのSSH公開鍵(ssh-keygenを使用)をansibleフォルダに配置する必要があります(ansibleがそれを~ubuntu/.ssh/authorized_keysに追加します)。
wordlist.txtファイルには、展開されたドメインユーザー用の(意図的に脆弱な)パスワードがいくつか含まれており、カスタマイズ可能です。
構成フェーズを実行します:
ansible-playbook -i hosts setup-domain.yml -v

20〜25分後、すべての準備が整います。
libvirtのネットワーク設定(NAT)に従い、ホストは公開インターネットにアクセスできます(ホストシステムが許可している場合)。
ホストへのアクセスはホストシステムを介して可能です。実用的には、SSH SOCKSトンネルとproxychainsを使用したRDPまたはWinRMアクセスが非常に便利です。
例えば、libvirtホストIPが192.168.0.10の場合、以下でlocalhost:5000で待受するSOCKSトンネルを作成します:
ssh 192.168.0.10 -D5000 -NTv
そしてWindows 10デスクトップにアクセスします(:5000トンネル用に適切に構成された/etc/proxychains.confを使用):
proxychains xfreerdp /v:192.168.3.112 /u:administrator
または、SSH ProxyJumpとカスタムフォワードトンネルを使用して、Graylog Ubuntuサーバのローカル:9000で待受するGraylog Webインターフェースにアクセスします:
ssh -J 192.168.0.10 [email protected] -NTv -L9000:127.0.0.1:9000
次にURLhttp://localhost:9000を開くと、Graylog Webインターフェースにアクセスできます。
RDPハニーポットをアクティブにするには、192.168.3.112:3389へのパブリックアクセスを許可するだけです(例えば、ルーターのポートフォワーディング設定とホストマシンのiptablesルールを使用;私のヘルパースクリプトはrdp_public.shです)。そしてGraylogを監視し続けてください。;)
| ホスト名 | IPアドレス | オペレーティングシステム | 役割 |
|---|
| dc1 | 192.168.3.100 | Windows Server 2016 | ドメインコントローラ |
| desktop12 | 192.168.3.112 | Windows 10 (version 2004) | ドメインメンバーワークステーション |
| graylog | 192.168.3.191 | Ubuntu 18.04 LTS | Graylogサーバ |
| kali | 192.168.3.192 | Kali Rolling (2022.3) | 攻撃運用 |