優雅な茶会をしたいと考えサーバーにT-Pot を入れました…
というのは冗談で、先日バイト中に先輩と SSH のログインについて話していたところ、不正アクセスの話題に発展して盛り上がりました。
そこで…
自分も普段サーバーを運用していく中で攻撃を受けますが(ありがちな SSH の不正ログイン未遂)、実際に攻撃者がどのようにやってきて、どんな攻撃を仕掛けてくるのかをより詳しく勉強・研究したいと感じ、T-Pot を立てることにしました。

ハニーポットとは?
ハニーポット (英: honeypot) は、コンピュータセキュリティにおいて、悪意のある攻撃を受けやすいように設定した機器を、おとりとしてネットワーク上に公開することにより、サイバー攻撃を誘引し、攻撃者の特定や攻撃手法を分析する手法、あるいは、そのような用途で使用するシステムをいう。
ハニーポットを設置する目的は、ウイルスやワームの検体の入手、不正アクセスを行うクラッカーをおびき寄せ重要なシステムから攻撃をそらしたり、記録された操作ログ・通信ログなどから不正アクセスの手法と傾向の調査を行うなどである。
(wiki調べ)
要するにネットの悪い奴らを観察するためのサーバーです
ちなみに今回はドイツ・テレコムが公開しているOSSのT-Potを使います。dockerコンテナ上で動作させることができ、お手軽にハニーポットを構築できます。
T-Potとは?
今回利用するT-Potというソフトウェアの紹介をします。

T-Potはドイツ・テレコム・セキュリティーが開発してる統合ハニーポットプラットフォームです。 20以上のハニーポットに対応していて、Elastic Stack、アニメーションを用いたマップなどをサポートし、分析体験を向上させています。
つまり、様々なハニーポットソフトを統合して管理しつつ、分析ツールも付けましたといったサーバーサイドのソフトってことです。
下の写真はオマケの分析ツールたちです。使い方がどれもわかりません。勉強します

このElastic Stackやアニメーションなどに使われるElasticsearchが本当にリソース喰い虫なんですよね。


めちゃ食います。こいつら👆️ホンマに(特にメモリーをドカ食いする)
以下の画像はT-Potのアーキテクチャを表したものです。

一応、5つのコンポーネントから構成されているそうです。
詳しい解説はgithubに書いてありました。ここでは解説が面倒なので省略します。
構築環境
今回構築する環境を紹介します。
| 要素 | 値 |
|---|---|
| OS | Ubuntu 24.04.3 LTS |
| CPU | 4core AMD EPYC Processor |
| メモリ | 8GB |
| スワップ | 5GB |
| 容量 | 150GB |
| ソフト | T-Pot |
T-Potの動作条件の要求がかなり高くてびっくりしました。 最低作動条件が8GBなんですよ!?(おそらくそれ以下でも動くけど、ちゃんと動く保証はないんだと思う)
これくらいのスペックのVPSを日本のサービスやクラウドコンピューティングサービスで借りると余裕で月数千円が吹き飛んでいくので、外国の激安サービスを借りて構築しました。
あと、サンドボックス上とは言え、自宅に攻撃のトラフィックが来るのは嫌すぎるので、完全に自宅の鯖群とは隔離したネットワーク環境で動かしております。
これで、もし仮に攻撃者がサーバーを乗っ取ったとしても、直接我が家のネットワークに侵入してくることはほぼ不可能です。…そ、そうあってほしい(自信があまりない)…
構築方法
構築自体はかなり簡単です。公式リポジトリをクローンしてスクリプトを起動させるだけで完成します。
紳士淑女の皆様は分かっているかもですけど、これを動かすときは絶対に非root環境でやりましょう
1. 公式のレポジトリをクローンします
git clone https://github.com/telekom-security/tpotce.git
2. インストールスクリプトを起動します。これを起動すると色々聞かれるのでそれに答えていくだけでインストールが完了します
env bash -c "$(curl -sL https://github.com/telekom-security/tpotce/raw/master/install.sh)"
対話型のインストーラーなので、質問に答えていけば大丈夫です。
一番最初にパスワードを聞かれるので、今使っているユーザーのパスワードを打ってください。
次に以下のオプションが聞かれます。
### Choose your T-Pot type:
### (H)ive - T-Pot Standard / HIVE installation.
### Includes also everything you need for a distributed setup with sensors.
### (S)ensor - T-Pot Sensor installation.
### Optimized for a distributed installation, without WebUI, Elasticsearch and Kibana.
### (L)LM - T-Pot LLM installation.
### Uses LLM based honeypots Beelzebub & Galah.
### Requires Ollama (recommended) or ChatGPT subscription.
### M(i)ni - T-Pot Mini installation.
### Run 30+ honeypots with just a couple of honeypot daemons.
### (M)obile - T-Pot Mobile installation.
### Includes everything to run T-Pot Mobile (available separately).
### (T)arpit - T-Pot Tarpit installation.
### Feed data endlessly to attackers, bots and scanners.
### Also runs a Denial of Service Honeypot (ddospot).
### Install Type? (h/s/l/i/m/t)
と聞かれるので、「せっかくだから俺はこのhのオプションを選ぶぜ」って感じで好きなものを選んでください。基本的にhを選んでおけば間違い無いと思います。
(LLMオプション、メッチャ気になりますがお金がなさすぎておそらく一生縁が無さそう。)
その後は、web_uiのログインに用いるユーザー名とパスワードを設定するメッセージが出るので、指示に従って入力してください。
無事にインストールが完了するとSSHのポートが変わった旨のメッセージが出ます。ちゃんと控えておきましょう。一回再起動をして、設定等を反映させると無事セットアップ完了となります。
https://<任意のIP>:64297/に行くとログイン画面が出てくるので、インストールの際に決めた情報を入力するとダッシュボーが開きます。
ハマったところ
一応VPSを借りる前に、自宅で構築できるかのテストを行いました。 その際にちょっとだけハマったところが合ったので残しておきます。
というのも、インストール・再起動が完了してダッシュボードに入ろうとした際に、アクセスできたりできなかったりする事象が発生しました。
docker psやsystemdで確認したところ、T-Potのコンテナが数分おきに再起動を繰り返すということがわかりました。
当初、検証環境のVMがメモリ4GB,ストレージ80GBという最低作動条件を下回る環境で動かしていたので、リソース不足が原因で起動できないのかと勘違いしてました。
そのため、再度メモリを増設して再起動を試みたものの、やっぱりコンテナが停止してしまう…
ネットで同じような状況に遭遇している人はいないか確認していたところ、興味深い記事を見つけました。
上記の記事の中では、Linuxに標準で入っているメール関係のポートが競合し、一部のハニーポットが起動できず、全てを巻き込んて再起動を繰り返すといった内容でした。
自分もまさかと思い、T-Potのログをより詳しく精査しました。すると…
sudo journalctl -u tpot.service -f
Dec 18 03:49:50 ****** docker[7741]: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint heralding (09c3f8603d07e0f6e82e0b4dacf87bc809b43f51d1f0382e9cbd775d1b2cc47a): failed to bind host port 0.0.0.0:5432/tcp: address already in use
Dec 18 03:49:50 ****** systemd[1]: tpot.service: Main process exited, code=exited, status=1/FAILURE
Dec 18 03:49:50 ****** systemd[1]: tpot.service: Failed with result 'exit-code'.
Dec 18 03:49:50 ****** systemd[1]: tpot.service: Consumed 1.097s CPU time, 19.5M memory peak, 0B memory swap peak.
Dec 18 03:49:55 ****** systemd[1]: tpot.service: Scheduled restart job, restart counter is at 2.
Dec 18 03:49:55 ****** systemd[1]: Starting tpot.service - T-Pot...
一番最初に出てくるエラーログの後に原因が書かれている感じでした
failed to bind host port 0.0.0.0:5432/tcp: address already in use
訳:5432ポートが既に使われているよ?
実は検証環境のVMで構築をしており、postgresqlが既に導入されている状態でした。これがハニーポットとポート競合を引き起こして、T-Potの全てのコンポーネントを巻き込んで落としていく感じになっていました。
postgresqlは全く使う予定がなかったので、アンインストールしてT-Potを再起動したら無事起動しました。(というか一つでも起動に失敗すると全てのコンテナを巻き込んで再起動させるのはちょっと意外だった)
それ以外は特にトラブルもなく無事動き続けております。 まあ、こういう類のものは本当に素の環境で入れるべきですね。
終わりに
ハニーポットを動かし始めて開始5分で早速攻撃が来ており、凄まじい勢いで攻撃されているのがわかりました。

あと、まだ構築して数日しか経っておりますが、攻撃にも特徴がある感じが見えてきました。怖い反面、新しい発見があり面白いです。

今後、攻撃にどのような特徴があるのかといったところの情報を得ていきたいと思っております。特に12月なので、クリスマスや新年では攻撃が増えるのか?それとも減るのか?変わらないのか?結構気になるところではあります。
攻撃者やbot達にもクリスマスや新年のお休みはあるのでしょうか?
結果は今後まとめて公開しようと考えております。
ダラダラと長い文章を読んで頂きありがとうございます。 もしかしたら今年最後の記事になるかもしれません?
今年も一年、ありがとうございました。来年もよろしくお願いします🙇
参考・引用元
- https://github.com/telekom-security/tpotce?tab=readme-ov-file
- https://karst459.com/1539/
- https://zenn.dev/nakohama/articles/af56fd1d188f3e
- GCPにT-Pot建てる(自分の環境で出たエラーと解決)
- https://qiita.com/satsuki2200/items/96ca5a4b20f7dde9f557