EC2でT-Pot動かしてみた
はじめに
昨年のSECCONに参加して「ハニーポット観測から見えたサイバー攻撃の実態」という内容を聴講させていただき、自分でもhoneypot運用してみたくて、T-PotをAWS上で動かしてみました。
T-Potは公式説明は以下の通りで、さまざまなhoneypotが全部入りして、可視化ツールもセットで入るので分析しやすく、docker imageが用意されているので導入も簡単です。
arm64もサポートしているので、Gravitonで動かすことも可能となっています。
T-Pot is the all in one, optionally distributed, multiarch (amd64, arm64) honeypot plattform, supporting 20+ honeypots and countless visualization options using the Elastic Stack, animated live attack maps and lots of security tools to further improve the deception experience.
環境準備
AWS account
外部からの攻撃を積極的に受け付けることになるので、honeypotを独立したアカウントで運用することにしました。
honeypotの請求を区別できるようにしておきたかったことと、何かセキュリティインシデントが発生したときに他のアカウントへの影響を防ぎたかったこと、運用が終わったら諸々破棄したかったこともあってアカウントを分けることにしました。
Budget
また、乗っ取られてクラウド破産しないように、被害を早めに気付けるよう予算を1日$6で設定しました。
Security Group
外部からの攻撃を受け付ける必要があるので、公式サイトのRequire PortsをもとにSecurity Groupでポートを許可しました。
T-Pot Management
と記載れているポートに関してはMyIpからのアクセスのみを許可することで、管理コンソールへの侵入リスクを減らしました。
CloudFormation
SecurityGroupの構成は以下の通りです。AMyIpAddressは自身のIPAddressを設定してください。
Resources:
MyHoneypotSg:
Type: "AWS::EC2::SecurityGroup"
Properties:
GroupDescription: "sg for honeypot"
GroupName: "my-honeypot-sg"
SecurityGroupIngress:
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 8080
ToPort: 8080
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 8080
ToPort: 8080
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 1025
ToPort: 1025
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 1025
ToPort: 1025
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 8090
ToPort: 8090
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 8090
ToPort: 8090
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 1883
ToPort: 1883
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 1883
ToPort: 1883
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 3389
ToPort: 3389
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 3389
ToPort: 3389
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 445
ToPort: 445
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 445
ToPort: 445
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 1521
ToPort: 1521
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 1521
ToPort: 1521
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 23
ToPort: 23
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 23
ToPort: 23
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 5555
ToPort: 5555
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 5555
ToPort: 5555
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 10001
ToPort: 10001
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 10001
ToPort: 10001
- CidrIp: "MyIpAddress/32"
IpProtocol: "tcp"
FromPort: 64297
ToPort: 64297
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 9100
ToPort: 9100
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 9100
ToPort: 9100
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 5000
ToPort: 5000
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 5000
ToPort: 5000
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 502
ToPort: 502
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 502
ToPort: 502
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 5432
ToPort: 5432
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 5432
ToPort: 5432
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 623
ToPort: 623
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 623
ToPort: 623
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 1723
ToPort: 1723
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 1723
ToPort: 1723
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 5900
ToPort: 5900
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 5900
ToPort: 5900
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 8443
ToPort: 8443
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 8443
ToPort: 8443
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 123
ToPort: 123
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 123
ToPort: 123
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 443
ToPort: 443
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 443
ToPort: 443
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 47808
ToPort: 47808
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 47808
ToPort: 47808
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 11112
ToPort: 11112
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 11112
ToPort: 11112
- CidrIp: "MyIpAddress/32"
IpProtocol: "tcp"
FromPort: 22
ToPort: 22
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 44818
ToPort: 44818
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 44818
ToPort: 44818
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 5060
ToPort: 5060
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 5060
ToPort: 5060
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 8081
ToPort: 8081
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 8081
ToPort: 8081
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 6667
ToPort: 6667
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 6667
ToPort: 6667
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 1080
ToPort: 1080
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 1080
ToPort: 1080
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 2575
ToPort: 2575
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 2575
ToPort: 2575
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 143
ToPort: 143
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 143
ToPort: 143
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 53
ToPort: 53
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 53
ToPort: 53
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 2404
ToPort: 2404
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 2404
ToPort: 2404
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 11211
ToPort: 11211
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 11211
ToPort: 11211
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 50100
ToPort: 50100
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 50100
ToPort: 50100
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 5060
ToPort: 5060
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 5060
ToPort: 5060
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 102
ToPort: 102
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 102
ToPort: 102
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 19
ToPort: 19
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 19
ToPort: 19
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 110
ToPort: 110
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 110
ToPort: 110
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 21
ToPort: 21
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 21
ToPort: 21
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 6379
ToPort: 6379
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 6379
ToPort: 6379
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 25
ToPort: 25
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 25
ToPort: 25
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 1900
ToPort: 1900
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 1900
ToPort: 1900
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 135
ToPort: 135
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 135
ToPort: 135
- CidrIp: "MyIpAddress/32"
IpProtocol: "tcp"
FromPort: 64294
ToPort: 64294
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 9200
ToPort: 9200
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 9200
ToPort: 9200
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 1433
ToPort: 1433
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 1433
ToPort: 1433
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 80
ToPort: 80
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 80
ToPort: 80
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 631
ToPort: 631
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 631
ToPort: 631
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 42
ToPort: 42
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 42
ToPort: 42
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 389
ToPort: 389
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 389
ToPort: 389
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 161
ToPort: 161
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 161
ToPort: 161
- CidrIp: "MyIpAddress/32"
IpProtocol: "tcp"
FromPort: 64295
ToPort: 64295
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 25565
ToPort: 25565
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 25565
ToPort: 25565
- CidrIp: "0.0.0.0/0"
IpProtocol: "udp"
FromPort: 69
ToPort: 69
- CidrIpv6: "::/0"
IpProtocol: "udp"
FromPort: 69
ToPort: 69
- CidrIp: "0.0.0.0/0"
IpProtocol: "tcp"
FromPort: 3306
ToPort: 3306
- CidrIpv6: "::/0"
IpProtocol: "tcp"
FromPort: 3306
ToPort: 3306
SecurityGroupEgress:
- CidrIp: "0.0.0.0/0"
IpProtocol: "-1"
FromPort: -1
ToPort: -1
- CidrIpv6: "::/0"
IpProtocol: "-1"
FromPort: -1
ToPort: -1
Egressはサボってしまったけど、公式の説明通り絞った方が安全です。
EC2
公式リポジトリに記載されているSystem Requirementsを参考に以下のEC2を構築しました。
# | リソース | サイズ |
---|---|---|
1 | インスタンスタイプ | t4g.xlarge |
2 | EBS | 256[GiB] |
Docker Imageが提供されているのだからECSで動かすことも一瞬考えたのですが、ECS不慣れなのもあって変なところで詰まりたくないなと思って今回はEC2を採用しています。
インストール
公式のInstallationを参考に構築しました。
AMIはT-PotがサポートするUbuntuにしておきました。(ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-arm64-server-20240423)
Security GroupでMyIpからのsshを許可してあるので、自マシンからsshでインスタンスにログインします。
dockerとdocker-composeをインストールして、あとは手順をステップバイステップでやっていけば構築完了です。
稼働監視
攻撃の傾向を把握するため、およそ1ヶ月間(6/28-7/27)T-Potを稼働させました。
昨年のSECCONでhoneypotの運用について発表していた方のご説明によると、時期によっても攻撃のパターンは変わって来ると言っていたので、どのくらいの期間取るのがいいのかは良くわかりません。
(1-2週間で止めようと思ってたけど、ブログにまとめる時間がなくて放置した、、、とかではない・・・)
EC2の1ヶ月の稼働状況です。これを見る限り、t4g.largeとかでも全然稼働しそうでした。(CWAgent入れてないので、メモリ消費量まで見ていませんが)
管理画面からさまざまなツールにアクセスできるようになっています。
Attack Map
ほぼリアルタイムで攻撃されている状況を可視化してくれます。これ見てると、1分以内に頻繁にスキャンなどのアクセスがあることがあって面白いです。各国からガンガン来るので、セキュリティ意識が高まりました。
Kibana
kibanaでは各honeypotのログ解析ができるようです。
画像はT-Pot全体のログになります。
2M回攻撃を受け、そのうちおよそ64%(1.5M弱)がDDoS攻撃。26%が脆弱性攻撃。合わせて90%。残り10%が特定のベンダー製品やサービスを狙った攻撃など、さまざまな攻撃を検知しています。
攻撃元の地域を見てみると、中国が23%、米国が20%、香港が18%となっていた。それ以外の国は7%以下の割合で攻撃していました。
中国はポート53の攻撃が82%、ポート123が9%、
米国はポート123の攻撃が61%、ポート53が32%、
香港はポート53が58%、ポート123が42%、
とある通り、攻撃回数上位地域はポート53と123で90%以上を占めています。
攻撃回数4・5位のインドネシアとフィリピンはポート445の攻撃が増えているようでした。
インドネシアはポート53の攻撃が49%、ポート445が48%。
フィリピンはポート445が95%、ポート53が5%。
ユーザネームはsa、admin、rootあたりが多いようです。
OSSや製品のデフォルトユーザ名と思われるIDや非常に単純なIDが攻撃されやすいことが分かります。
パスワードは単純な単語やqwery配列(shiftキー押下状態も含む)をなぞっただけの文字列などが目立っていました。
Billing
今回の環境では毎日$5~6程度かかっていました。
1ヶ月ちょっと運用で$130程度になっていました。
終わりに
AWSでT-Potを構築して攻撃を分析しました。
ポート53,123,445に対する攻撃頻度が高く、中国・米国、香港から頻繁にアクセスされていることが分かりました。
要件に適した構成でAWS上でT-Potをホストすると、毎日$5~6の運用コストがかかります。
ロギング強化したり、セキュリティ系のAWSサービス使って稼働監視したりして、AWSのサービス理解も深めたかったのですが、今回はそこまでできなかったので次回挑戦してみようと思います。
Discussion