auth.logと格闘する夜:受動的な防御だけでは不十分な理由
Linux VPSを運用しているなら、試しに grep 'Failed password' /var/log/<a href="https://itfromzero.com/ja/security-ja/linux%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3%e7%9b%a3%e6%9f%bb%e3%83%ad%e3%82%b0%ef%bc%9ait%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%8b%e3%82%a2%e3%81%8b%e3%82%89%e3%81%ae%e6%95%99%e8%a8%93.html">auth.log</a> | wc -l というコマンドを打ってみてください。返ってくる数字に驚くかもしれません。深夜2時、私は世界中のあらゆるIPアドレスから押し寄せる数千回のログイン失敗ログを眺めていました。ブルートフォース攻撃によってサーバーのリソースが浪費されることに苛立ちを感じると同時に、ある好奇心が湧いてきました。「もし侵入に成功したら、彼らは次に何をするのか? マイニングスクリプトを仕掛けるのか、ボットネットを構築するのか、それとも権限昇格を試みるのか?」
Fail2Banを導入したりSSHポートを変更したりするのは、あくまで「門を閉ざす」という内向きの対策に過ぎません。技術者として、私はもっと能動的でありたいと考えました。攻撃者のツールセットを目の前で解剖し、彼らがシェル内でどのように操作するのかを観察したい。それが、Honeypot(ハニーポット)という名の罠を仕掛けることにした理由です。
実践的なブルートフォース対策の比較
罠を仕掛ける前に、本番環境でよく使われるいくつかの手法を検討しました:
- Fail2Ban/IPTable의 利用: 安全で非常に一般的です。しかし、これは泥棒を追い払うだけで、彼らが何を盗もうとしていたのかは分かりません。また、彼らはすぐに別のIPを使って戻ってきます。
- SSHポートの変更 (Security by Obscurity): ポート22を2222や9999に変更する手法です。これにより、安価な自動スキャンスクリプトの95%をフィルタリングできます。しかし、プロの攻撃者ならNmapを実行するだけで、2秒で新しいポートを見つけ出します。
- CowrieによるHoneypotの構築: これは「カウンター(反撃)」です。あえてポート22を無防備な状態で晒します。ハッカーは「カモを見つけた」と喜んでログインに成功しますが、実際には巧妙にシミュレートされた迷宮に迷い込んでいるのです。ここでは、すべてのキーストロークと
wgetコマンドが完全に記録されます。
なぜCowrieが最適なのか?
Cowrieは Medium Interaction Honeypot(中対話型ハニーポット)に分類されます。ハッカーが権限を奪取して他者への攻撃に悪用するリスクを避けるため、本物のオペレーティングシステムは提供しません。その代わりに、極めて精巧な仮想シェルを提供します。
ハッカーには、ファイルシステムが完備されたDebianやUbuntuシステムのように見えます。彼らは自由に cd、ls、あるいは cat /etc/passwd を実行できます。最も興味深いのは、セッションリプレイ機能です。彼らが試行錯誤しながらコマンドを打ち込む様子を、まるでビデオを見ているかのように一歩ずつ振り返ることができます。
Ubuntu/DebianでCowrieを構築する手順
安全に運用するために、専用のVPSを使用することをお勧めします。スペックは1 vCPUと1GB RAMもあれば、開始するには十分です。
ステップ1:本物のSSHを別ポートへ移動
ポート22をハニーポットに譲るため、まずはサーバー自身の本物のSSHサービスを別のポートに移動させ、自分自身が罠にかからないようにします。
sudo nano /etc/ssh/sshd_config
Port 22 の行を探し、Port 2222 などに変更します。このポートに強力なパスワードを設定するために、私はよく toolcraft.app/ja/tools/security/password-generator を利用します。このツールはブラウザ上で完結するため、ネットワーク経由でパスワードが漏れる心配がありません。
変更を適用するためにSSHサービスを再起動します:
sudo systemctl restart ssh
ヒント:ログアウトする前に、必ずファイアウォールでポート2222を開放してください。そうしないと、サーバーから永久に締め出されることになります。
ステップ2:専用ユーザーの設定
ハニーポットをroot権限で実行してはいけません。これはセキュリティの鉄則です。
# 依存ライブラリのインストール
sudo apt-get update
sudo apt-get install git python3-virtualenv libssl-dev libffi-dev build-essential libpython3-dev python3-minimal authbind virtualenv -y
# ハニーポット用の専用ユーザーを作成
sudo adduser --disabled-password cowrie
作成したユーザーに切り替えます:
sudo su - cowrie
ステップ3:Cowrieのインストール
GitHubからソースコードをダウンロードし、システムライブラリを汚さないように仮想環境(virtualenv)を構築します:
git clone http://github.com/cowrie/cowrie
cd cowrie
virtualenv --python=python3 cowrie-env
source cowrie-env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
ステップ4:設定と「開店」準備
デフォルトではCowrieはポート22222で動作します。テンプレートから独自の設定ファイルを作成します:
cp etc/cowrie.cfg.dist etc/cowrie.cfg
nano etc/cowrie.cfg
ハッカーをおびき寄せるために、ホスト名を db-prod-cluster のような魅力的な名前に変更することもできます。その後、Cowrieを起動します:
bin/cowrie start
最後に、iptables を使って標準のポート22への全トラフィックをCowrieのポートへ転送します:
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 22222
攻撃者を読み解く:マルウェアの収穫とリプレイの視聴
罠を仕掛けてからわずか30分ほどで、最初の「客」が次々と訪れるのが分かるでしょう。リアルタイムでログを監視するには、JSONファイルをチェックします:
tail -f ~/cowrie/var/log/cowrie/cowrie.json
誰かが wget や curl コマンドでファイルをダウンロードすると、Cowrieは自動的にそのファイルをキャプチャし、downloads/ ディレクトリに保存します。私は以前、数百行に及ぶMiraiボットネットのスクリプトを捕獲したことがあります。それらは、実行前にサーバーがハニーポットかどうかを確認するほど巧妙に作られていました。
ハッカーが「暴れ回る」全過程を再生するには、次のコマンドを使用します:
bin/playlog var/lib/cowrie/tty/<logfile_id>
実体のない仮想マシンにルートキットをインストールしようと必死にコマンドを打つハッカーの姿を眺めるのは、非常に興味深い体験です。これは、教科書では決して学べない攻撃者の思考プロセスについて、多くの教訓を与えてくれます。
ハニーポットで遊ぶのは単なる娯楽ではありません。今日の攻撃の大部分がいかに高度に自動化されているかを痛感させてくれます。もし弱いパスワードを使っていれば、ボットが制御権を奪うのに5秒もかかりません。この経験が、皆さんのLinuxシステム保護に対するより能動的な視点を持つきっかけになれば幸いです。

