LinuxサーバーにSSHハニーポットを構築してハッカーを捕まえる方法
サーバーの認証ログを一度でも覗いたことがあれば、インターネットに接続されているサーバーは、ハッカーからのログイン試行に絶えずさらされていることをご存じでしょう。
たとえ誰にも知られていない個人用途のサーバーであっても、自動化されたスクリプトはそれを発見し、SSHへの総当たり攻撃(ブルートフォース攻撃)を繰り返し仕掛けてきます。複雑なパスワードやその他のセキュリティ対策を講じていれば侵入される可能性は低いものの、成功してしまうリスクは常にゼロではありません。
幸いなことに、こうしたハッカーをサーバー内に閉じ込め、他の悪事に手を出せなくなるほど時間を浪費させる、便利で面白い方法が存在します。
SSHハニーポットとは?
簡単に言えば、SSHハニーポットとは、サイバー犯罪者を引きつけるために「格好の獲物」に見せかけたおとりです。しかし実際には攻撃対象ではなく、ハッカーは後になって初めて騙されていたことに気づくことになります。
ハニーポットにはさまざまな形態と用途があります。単なる目くらましとして使われることもあれば、攻撃者に関する情報を収集するために活用されることもあります。
多くの政府機関は、犯罪者を攻撃へ誘い込み、その情報を収集して後日逮捕につなげるためにハニーポットを使用しています。また、企業のシステム管理者はもちろん、趣味でLinuxサーバーを運用している個人ユーザーにとっても、ハニーポットは十分に活用できる手法です。
SSHハニーポットを使う理由
サーバーにSSHハニーポットを導入したい理由はいくつもあります。将来的な接続をブロックするための情報収集に使う場合もあるでしょうし、システム内の本来のターゲットから攻撃者の注意を逸らすためだけの場合もあるかもしれません。あるいは、攻撃の仕組みを学ぶ教育的な目的で使うこともできます。
本ガイドでは主に「おとり」としての用途に焦点を当てます。具体的には、ハッカーの注意をサーバーの脆弱な部分からそらし、さらに他の誰かのサーバーを攻撃する余裕さえ奪うことが狙いです。
そして少なくともこのケースでは、使う手法自体も一種の笑いネタになること請け合いです。
SSHの中に閉じ込める
基本的にやりたいのは、ハッカーがSSHログインへの総当たり攻撃を試みた瞬間に捕まえることです。実現方法はいくつかありますが、最もシンプルなのが「非常に長いSSHバナーをゆっくりと送信する」方法です。
こうすることで、ハッカーの自動スクリプトはバナーの受信待ち状態で足止めされます。これが数時間、場合によっては数日、数週間に及ぶこともあります。スクリプトは自動化されているため、ハッカー自身はあまり注意を払っておらず、かなりの時間が経過するまで足止めされていることに気づかないでしょう。
この手法は、ハッカーのスクリプトが粘着質のタールに絡め取られて自力で抜け出せなくなる様子になぞらえて、「SSHターピット(tarpit)」とも遊び心をもって呼ばれています。
なお、この作業にはSSHの基本的な使い方の知識が必要です。SSHの操作方法に自信がない場合は、まず入門ガイドを読んでから取り組むことをおすすめします。
endlessh
今回使用するのは、skeeto氏によって開発された「endlessh」というプログラムです。
サーバーにログインしたら、まずリポジトリをクローンしましょう(gitがインストールされている必要があります)。
git clone https://github.com/skeeto/endlessh
リポジトリを取得したら、そのディレクトリに移動してコンパイルを行います。
cd endlessh make
コンパイル中にエラーが出る場合があります。これは多くの場合、ビルドに必要な依存パッケージが不足していることを意味します。エラーメッセージで不足している依存関係を確認し、お使いのディストリビューションのパッケージマネージャーでインストールしてください。
無事にコンパイルできたら、パスの通った場所に置けるようバイナリをbinディレクトリへ移動します。
sudo mv endlessh /usr/local/bin
正しくパスが通っているか、念のため確認しておきましょう。
which endlessh
/usr/local/bin/endlesshというパスが表示されればOKです。表示されない場合は、ファイルが正しいディレクトリに移動されているか確認してください。
続いて、systemdサービスとして常時稼働できるよう、プログラムをサービスデーモンとして登録します。
sudo cp util/endlessh.service /etc/systemd/system/
完了したら、サービスを有効化してバックグラウンドで動作するようにします。
sudo systemctl enable endlessh
デフォルト設定では、endlesshは1024番以上のポートでしか動作しません。しかし、ハッカーを騙すためには標準のSSHポートで待ち受けたいところです。そのためには、サービスファイルの編集が必要になります。
ここではnanoを使って設定ファイルを編集しますが、お好みのテキストエディタを使っても問題ありません。
sudo nano /etc/systemd/system/endlessh.service
ファイルを開いたら、次の行先頭の「#」を削除してコメントアウトを解除します。
#AmbientCapabilities=CAP_NET_BIND_SERVICE
次に、以下の行の先頭に「#」を追加します。
PrivateUsers=true
ファイルを保存したら、次のコマンドを実行します。
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
続いて、endlesshにどのポートで待ち受けるかを認識させるため、設定ファイルを作成します。まず専用のディレクトリを新規作成し、その中に設定ファイルを作りましょう。
sudo mkdir -p /etc/endlessh sudo vim /etc/endlessh/config
設定ファイルに必要なのはたった1行だけです。これはendlesshにSSHの標準ポートである22番ポートで動作するよう指示するものです。標準ポートが開いている方がハッカーにとって魅力的なターゲットに見えるためです。彼らはデフォルトのSSHポートが開いていることを確認すると、そこへ侵入を試みるのです。
設定ファイルに以下を記述してください。
Port 22
最後に、endlesshサービスを起動します。
sudo systemctl start endlessh
これで作業は完了です! 標準SSHポート上でendlesshが稼働し、早速ハッカーを罠にかける準備が整いました。
動作テストをしてみよう
ハニーポットが意図どおりに機能しているか確認するため、ここでは少しハッカーになりきって、サーバーのSSHへのアクセスを試してみましょう。
ssh root@<サーバーのIPアドレス>
すべて正しく設定されていれば、sshコマンドが固まって何も反応しなくなることがわかるはずです。次に、このコマンドを実行したときに(あるいは本物のハッカーが実行したときに)何が起きているのかを見てみましょう。
同じコマンドに詳細表示オプション-vvvを付けて再実行します。
ssh -vvv root@<サーバーのIPアドレス>
これで、この小さなツールがどうやってあなたを罠にかけ、サーバーのSSHへのアクセスを妨害しているのかが明確になったはずです。クライアントに対して、非常に巨大なSSHバナーを1行ずつゆっくりと送り続けているのです。
そしてもちろん、ボットによって自動化されているため、ハッカーは数時間、場合によっては数日もの時間を無駄にした後でなければ、このことに気づかないでしょう。
よくある質問
1. これでハッカーによるSSHアクセスを防げますか?
かなり効果的な抑止力にはなりますが、ハッカーを完全に阻止できる保証はありません。注意深いハッカーであれば、いずれサーバーにハニーポットが仕掛けられていることに気づき、別のポートからSSHへのアクセスを試みる可能性があります。
ただし、「手っ取り早い獲物」だけを狙っているハッカーを防ぐには、これで十分なはずです。
2. 標準ポートでこのプログラムが動いている場合、自分はどうやってSSHを使えばいいの?
SSHが使用するポートを変更する必要があります。実はこれはハニーポットを設置していなくても有効なセキュリティ対策です。ハッカーは必ず最初に標準ポートを試し、その後に他のポートをスキャンするからです。
3. 設定ファイルに追加できるオプションは他にありますか?
はい、遅延速度の変更など、いくつかの設定項目が用意されています。
オプションの一覧は、GitHubリポジトリにあるサンプル設定ファイルで確認できます。
まとめ
今回は、サーバーにハニーポットを設置してハッカーを閉じ込め、他への攻撃ができないよう足止めする方法を学びました。ただし、これはサーバーのSSHアクセスを守るための唯一の手段ではありません。
暗号鍵を使ってSSHにログインする方法を解説した記事も参考にすれば、サーバーをさらに強固に保護できるでしょう。
-
リバースSSHトンネルでPCへの外部接続を可能にする方法【VPS活用ガイド】
インターネットサービスプロバイダー(ISP)から専用のグローバルIPアドレスが割り当てられているなら、ルーターにポート転送の設定を追加するだけで、自宅サーバーをインターネット上に公開できます。しかし、ISPがIPアドレスを近隣の利用者と共有している場合(CGNAT環境)、ポートフォワーディングでは対応できません。さらに、ファイアウォール設定で外部からの着信接続をブロックしているプロバイダーもあります。 こうした制限は、仮想プライベートサーバー(VPS)を活用することで回避できます。VPSはネットワークトラフィックの中継だけを行えばよいため、RAMが512MB未満の低スペックなプランでも十分機
-
カスタム絵文字を作成してDiscordサーバーに追加する方法
Discordは自分らしさを表現するのに最適なプラットフォームです。標準の絵文字パックだけでは物足りないと感じていませんか?実はDiscordでは、自分で作成したオリジナル絵文字をアップロードして、コミュニティの仲間を驚かせることができます。この記事では、カスタム絵文字の作成方法から、Discordサーバーへの追加手順まで、初心者にもわかりやすく解説します。 Discordのカスタム絵文字の基本 Discordでカスタム絵文字を追加するには、サーバーのオーナーであるか、「絵文字の管理」権限を持っている必要があります。権限を持つユーザーは、静的なカスタム絵文字を最大50個まで追加できます。さら