🍯

GCE でハニーポット建ててみた

2024/06/25に公開

クラウドエース SRE 部のアイルトンです。
SRE 部の中で、セキュリティギルドのギルドマスターをしています。

ギルド活動の一環として、 Google Compute Engine (以降、GCE と表記) でハニーポットを構築してみんなで観察してみたので、その時の記録を共有したいと思います。

ハニーポットとは

不正なアクセスを受けることを前提として意図的に設置される「罠」のようなシステム・ネットワークのことです。
攻撃者に侵入させやすい状態をつくり攻撃者の行動を監視することで、攻撃に関する対策を用意するのに使われています。

検証方法

以下のブログを参考にハニーポット(T-Pot 22.04)を建て、世界中からのアクセスを観察しました。
https://knowledge.sakura.ad.jp/35289/

T-Potについて

T-Pot とは、主に Docker を用いて構成されているマルチハニーポットプラットフォームです。
https://github.com/telekom-security/tpotce

複数のポートで複数のハニーポットが待ち構える構成となっています。
tpot_architecture

T-Potでデプロイされるハニーポットは20種類以上あります。

  • adbhoney:adb(Android Debug Bridge) をエミュレートする低対話型ハニーポット
  • ciscoasa:CVE-2018–0101 に対する攻撃を観測
  • citrixhoneypot:CVE-2019–19781 に対する攻撃を観測
  • conpot:産業システムを模倣したサービスに対する攻撃を観測
  • cowrie:SSH,Telnet に対する攻撃を観測
  • ddospot:UDP ベースの DDoS 攻撃を観測
  • dicompot:医療系通信を観測
  • dionaea:マルウェア収集用。ハエトリグサという意味
  • elasticpot:Elasticsearch サーバーをエミュレートしたハニーポット
  • endlessh:SSH で侵入しようとするものに対し、非常にゆっくり応答する
  • glutton:任意のポートで任意のネットワークトラフィックを受信
  • hellpot:アクセスしたクライアントにランダムなストリーミングデータを送る
  • heralding:資格情報を収集する
  • honeypots:ネットワークトラフィック、ボットアクティビティ、およびユーザー名/パスワードのクレデンシャルを観測
  • honeytrap:TCP/UDP で待ち受ける低対話型のハニーポット
  • ipphoney:インターネットに公開されているプリンタをエミュレート
  • log4pot:CVE-2021–44228 に対する攻撃を観測
  • mailoney:スパムメール送信の踏み台攻撃を観測
  • medpot:2575 ポートでの医療機器向けの攻撃を観測
  • redishoneypot:redis 用
  • sentrypeer:IP と電話番号を収集
  • snare:既存 Web App に対する攻撃を観測
  • tanner:上記 snare から送信されるデータを評価
  • wordpot:WordPress 用

構築手順

今回、以下のような手順で検証を行いました。
特に、Google Cloud のセキュリティ機能などを用いて防御や脅威の検出等は行いませんでした。

  • GCE インスタンス/FW ポリシーなどを作成
  • GCE インスタンスで T-Pot を設定
  • FW ルールを開放
  • アクセスを観察

詳しく説明していきます。

GCE インスタンス作成

以下のスペックの GCE インスタンスを作成しました。

スペック 設定値 備考
instance name tpot-test インスタンス名
zone asia-northeast1-b 東京リージョン Bゾーン
machine_type n2-standard-4 vCPU 4,Memory 16G
disk size 250 GB pd-ssd を使用している
spot_vm true SPOT VM 有効化
external_ip true 外部 IP アドレス有効化
image debian-11 debian 12 は諸事情で難しい※

※Debian 12 だと、 systemd-resolved という内部 DNS(UDP port53) が動作しており、これの無効化が割と面倒なので使わない方がよい

T-Pot の requirement スペックは以下の通りでした。

T-Pot Type RAM Storage Description
Hive 16GB 256GB SSD As a rule of thumb, the more sensors & data, the more RAM and storage is needed.
Sensor 8GB 128GB SSD Since honeypot logs are persisted (~/tpotce/data) for 30 days, storage depends on attack volume.

また、GCE 作成に伴って必要な以下リソースも一緒に作成しています。

  • VPC ネットワーク/サブネットワーク
  • FW ポリシー ※
    • IAP のIPアドレス範囲(35.235.240.0/20) から 64295 と 64297 へのアクセス許可
    • 0.0.0.0/0 から T-Pot がハニーポットで想定するネットワークポート (詳細はこちら) へのアクセスを許可
  • GCE インスタンス用のサービスアカウント

※ 検証の準備が整うまで、FW ポリシーは無効化しておきます。(デフォルトの拒否ルールにより、全てのアクセスが遮断されます)

T-Pot セットアップ

リソースの作成が終わったら、VM に SSH アクセスをし、以下作業を行います。

  1. 25 番ポートを使用しているプロセス (exim4) がいるため停止する
sudo systemctl stop exim4 
sudo systemctl disable exim4
  1. 念のため、 sudo ss -tulp を実行し、T-Pot が使用する予定のポートが使用済みになっていないことを確認する。(SSH 22は T-Pot のセットアップでポート変更されるため問題なし)

その後はGet and install T-Potの手順に従って操作します。

## clone
git clone https://github.com/telekom-security/tpotce

## change directory
cd tpotce

## Execute installer
./install.sh

上記スクリプトで、Hive か Sensor かといった選択肢があるので、今回は Hive を選択しました。
また、exa や mi といった通常コマンドも置き換えられてしまうので、テスト用インスタンスは捨てるつもりでセットアップする方がよいです。

諸々問題なさそうであれば最後に sudo systemctl reboot を実行して再起動します。
SSH の標準ポート等が変更された状態で起動されます。

T-Pot の再起動が終わると、通常のポート (TCP port 22) で接続できなくなるので、以下のコマンドを使って接続します。

gcloud compute ssh tpot-test --zone asia-northeast1-b --tunnel-through-iap -- -p 64295

FW ルールの解放

Google Cloud のコンソールや Terraform コードで FW ルールを有効化し、ポートを any 解放します。

アクセスの観察

T-Pot のダッシュボードを見るために、以下のコマンドを使って IAP トンネルを張ります。

gcloud compute start-iap-tunnel tpot-test 64297 --local-host-port localhost:8080 --zone asia-northeast1-b

ローカル端末のブラウザで https://localhost:8080 のようにアクセスできます。

検証条件

FW をオープンにした時間:約 10 時間

検証結果

結果まとめ

約 10時間 T-Pot を建てた結果は以下のようになりました。

総アクセス数:29,403 件
最も多くアクセスされたハニーポット:Dionaea (マルウェア収集用)
最も多くアクセスされたポート:445( Windows のファイル共有サービスが主に利用するポート)
最も多くアクセスがあった国:ベトナム
dashboard
vietnam
port

開放中の様子

FW 開放直後、アメリカ/中国/日本からアクセスが早速ありました。
start

アクセスされた IP はマスクしています。
このとき日本やアメリカからのアクセスに使用された IP アドレスはセキュリティ関連会社が所持している IP アドレスのようでした。
世界中の IP アドレスをスキャンして安全性等をレポーティングする団体(ex. Shadowserver)があり、今回のアクセスもそのスキャン時に使用されたのではないかと考えています。

Shadowserver

The Shadowserver Foundationという、世界中の有志のセキュリティ専門家によって運営されているサービス
Scanning Projectという取り組みで、世界中の IP アドレスをスキャンし、結果のレポーティングを行なっている。
https://www.shadowserver.org/

T-Pot の機能の一つに AttackMap というものがあります。
リアルタイムで世界のどこからアクセスがあるのかを観察することができます。
画面収録を行った時間はレバノンからのアクセスが多くあったようです。
gif1

以下ダッシュボードでは、自分がたてているハニーポットだけでなく、世界中のハニーポットへのアクセスを観察できました。
gif2

以下は T-Pot の標準的なダッシュボードです。
ハニーポット別のアクセス数やアクセスされたポートの種類、パスワードとして入力を試みられた文字列などを確認できます。
画像の中のIP アドレス、入力を試みられたユーザ名/パスワードなどは悪用を防ぐため一部マスクしてあります。
password や 123456 など、簡単な文字列の試みが多いですが、意外とランダムな文字列もありました。
dashborad2

上記以外にもいろいろなダッシュボードが用意されていました。
dashboards

T-Potでは、ダッシュボード以外にも色々なツールが使えます。

Spiderfoot(複数のソースからオープンソースインテリジェンス(OSINT)を収集し、データを並び替え、調査や分析を行うための自動化ツール)
spider1
spider2
spider3

elasticvue
Chrome 拡張等で Elasticsearch を GUI 操作するためのツール
elastic

CyberChef
データ型を変換などできるツール
cyberchef

ギルドメンバーによる考察

ギルドメンバーでアクセスを観察しながら話し合った内容についてを紹介します。

  • 開始直後からアクセスがあった
    • Google の IP 範囲は広く知られているので、重点的にクローリングされているのでは?
    • Google 外で取得した IP アドレスを利用して検証を行えばまた別の結果が得られるのかもしれない
  • 最も多くアクセスされたハニーポットが Dionaea でポートはほとんど 445
    • まずは単純アクセスで様子見して、使えるポートを探しているのでは?
  • 攻撃元の地理的な条件
    • いくつものサーバを経由して攻撃しているだろうから、本当に記載されている国々からの攻撃なのかはわからない
    • 日本以外の国にサーバを建てると、攻撃されやすさも変わってくるのかもしれない
  • セキュリティ関連会社からのアクセス
    • セキュリティ関連会社がクロールし、脆弱性を発見したら連絡してくれるサービスがあるのでそれなのでは?
  • 試行されているパスワードが意外とランダム
    • 1234 や password などといった簡単なパスワードを予想していた
    • どこかで漏れたパスワードを使用しているのではないか(クレデンシャルスタッフィング)
  • その他
    • 世の中には RaaS (Ransomware as a Service) というものがあり、より手軽に攻撃を仕掛けることができるようになっているので、どのような攻撃をされるのかを実際に観察してみることには意義があるのでは

ギルドメンバー所感&まとめ

今回、初めてハニーポットを構築、アクセスを観察してみて、単純に怖かったです。
ポートを開放した直後からアクセスがあったことには驚きました。
公開サーバは常に世界中の悪意にさらされていることを前提にセキュリティ対策を取る必要がありますね。

今後の展望

今回、T-Pot を使用してハニーポットの構築とアクセスの観察ができたので、今後は Google Cloud のセキュリティ関連機能を使って、どの程度攻撃を検出・防御できるのか検証してみたいと思います。

Discussion