Endlesshのインストール方法:攻撃ボットをLinux上の無限SSHトラップに「閉じ込める」手法

Security tutorial - IT technology blog
Security tutorial - IT technology blog

SSHブルートフォース攻撃という悪夢

毎秒、世界中のLinuxサーバーのポート22を数千のボットが「ノック」し続けています。公開IPを持つVPSを管理しているなら、セキュリティログを確認してみてください1日に数万回もの不正ログイン試行という、驚くべき数字を目にするはずです。10以上の実稼働システムの監査を通じて、ボットが adminroottest といった一般的なユーザー名で絶えずスキャンを行っていることが分かりました。

現在、最も一般的な解決策は Fail2ban を使用してIPをブロックすることです。しかし、Fail2banは単に接続を切断するだけです。ブロックされた攻撃者は、すぐに別のターゲットに移ります。それなら、彼らを「幽閉」してみてはどうでしょうか? 追い出す代わりに、Endlessh という出口のない罠に閉じ込めるのです。

Endlesshとは何か? SSH Tarpit de威力

Endlesshを、デジタルな「底なし沼(Tarpit)」だと想像してください。その仕組みは驚くほどシンプルですが、非常に効果的です。ボットがSSHポートに接続すると、Endlesshはパスワードを要求する代わりに、非常にゆっくりと延々と続くバナー行を送信し始めます。

SSHプロトコルの仕様では、クライアントはサーバーからのバナーをすべて受信し終えるまで認証を開始できません。Endlesshはこの隙を突き、各行を約10秒間隔で送信します。相手側のボットは無限の待機状態に陥ります。パスワード入力ステップに進むこともできず、サーバーがネットワーク混雑で反応が遅いだけだと思い込み、自ら接続を切断することもありません。

1つの接続を数日間にわたって「幽閉」し続けることも可能です。これにより、攻撃者は無意味なソケットにリソースを消費せざるを得なくなります。結果として、ボットネット全体の効率を大幅に低下させることができます。

導入のステップ

作業を始める前に、非常に重要な注意事項があります。Endlesshをポート22にインストールする前に、必ず本物のSSHポートを別の番号(例:2222)に変更してください。 この手順を忘れると、あなた自身がサーバーから締め出されてしまいます。

ステップ1:本物のSSHポートを変更する

まず、SSH設定ファイルを開きます:

sudo nano /etc/ssh/sshd_config

#Port 22 の行を探し、コメントアウトを解除して新しいポートに変更します:

Port 2222

次に、ファイアウォールでこのポートを開放し、サービスを再起動します。新しいポートでログインできることを確認するまで、現在のセッションは閉じないでください。

sudo ufw allow 2222/tcp
sudo systemctl restart ssh

ステップ2:Endlesshのインストール

UbuntuやDebianの場合、Endlesshは公式リポジトリで提供されています。インストールは数秒で完了します:

sudo apt update
sudo apt install endlessh

他のディストリビューションを使用している場合や、最適化のためにソースからビルドしたい場合は、Gitを使用します:

git clone https://github.com/skeeto/endlessh
cd endlessh
make
sudo cp endlessh /usr/local/bin/

ステップ3:トラップの設定

設定ファイルは通常 /etc/endlessh/config にあります。存在しない場合は新規作成してください。以下は、低負荷で最大限の効果を得るために調整した設定例です:

# 標準のポート22で待機
Port 22

# 10秒(10000ミリ秒)ごとにバナーを1行送信
Delay 10000

# 帯域幅を節約するために各行の長さを制限
MaxLineLength 32

# 最大同時接続数を4096に制限
MaxClients 4096

LogLevel 1

ステップ4:権限付与とサービスの起動

通常、1024未満のポートを使用できるのはroot権限のみです。安全のため、setcap を使用して、root権限なしでEndlesshがポート22を使用できるようにします:

sudo setcap 'cap_net_bind_service=+ep' /usr/bin/endlessh

次に、Systemdを使用してサービス管理ファイルを作成します:

sudo nano /lib/systemd/system/endlessh.service

ファイルに以下の内容を貼り付けます:

[Unit]
Description=Endlessh SSH Tarpit (SSHトラップ)
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/endlessh -f /etc/endlessh/config
KillMode=mixed
Restart=always
User=nobody
Group=nogroup

[Install]
WantedBy=multi-user.target

以下のコマンドでトラップを有効化します:

sudo systemctl enable endlessh
sudo systemctl start endlessh

実際の効果を確認する

トラップが動作しているか確認するために、別のマシンからポート22に接続を試みてみましょう:

ssh -p 22 user@your-server-ip -v

ターミナルが停止した状態になります。-v フラグのおかげで、10秒ごとにランダムな文字列が少しずつ表示されるのが確認できるはずです。「犠牲者」のリストを確認するには、ログを確認します:

journalctl -u endlessh -f

過去には、1つのボットが120,000秒(33時間以上)もトラップに留まっていた記録もあります。攻撃者がシステムを破壊する代わりに時間を浪費しているのを見るのは、非常に満足感のあるものです。

おわりに

Endlesshは非常に興味深いツールですが、これだけで万全というわけではありません。SSHキーの使用2要素認証(2FA)の有効化、IPホワイトリストの制限といった、コアなセキュリティ層は引き続き維持する必要があります. Endlesshは心理的な攪乱層として機能します。無差別なスキャン攻撃を一掃するのに非常に効果的で、リスクに満ちたネットワーク環境においてサーバーをより静かな状態に保つのに役立ちます。

Share: