先日、あるホスティング会社の管理インフラで発生した不正侵入を調査しました。特別なことは何もありませんでした。ゼロデイ脆弱性も、国家レベルの攻撃ツールもありません。それぞれ単独では無害な、ありふれた習慣の連鎖が重なり、攻撃者に1週間以上も気づかれないアクセスを許していたのです。本記事では、侵入の経緯、発覚のきっかけ、そしてほぼすべての段階で侵入を防げたはずの8つの習慣を紹介します。
whoには一度も表示されませんでした。このトンネルは9日間開いたままでした。/tmpに隠しPHPファイルを残していました。SSHのパスワードログインを無効にし、担当者ごとに個別の鍵を発行します。そうすればパスワードが漏れても役に立たず、1つの認証情報が盗まれても全マシンに侵入されることはありません。SSH鍵ログインの設定をご覧ください。
踏み台サーバーや管理サーバーは他のすべてのサーバーにアクセスできるため、最も価値の高い標的になります。専用の認証情報、最も厳しいファイアウォール、最も綿密な監視を適用してください。万一侵害された場合は、クリーンアップではなく再構築してください。
トンネルが9日間も放置されたのは、ログインを誰にも知らせる仕組みがなかったからです。SSHとパネルのログインごとにTelegramへ通知が届けば、見知らぬIPはすぐに目に留まります。設定は約10分で完了します:Telegram通知によるログイン監査。
whoだけでなくss -tnpも確認し、見知らぬIPからの長時間続くSSH接続がないか調べてください。トンネルやSFTPセッションは、通常のコマンドでは見えません。
ホスティングパネル、請求システム、サーバーコントロールパネルは、すべてへの鍵を握っています。二段階認証を有効にし、可能であれば管理画面へのアクセスを既知のIPに限定してください。aaPanel(宝塔パネル)についてはaaPanelセキュリティ強化ガイドをご覧ください。
更新日時は簡単に偽装できます。仕込まれたファイルを探すときは、通常のユーザー空間のプロセスでは巻き戻せない変更日時(ctime)と作成日時(birth time)を使ってください。
find /var/www /tmp /dev/shm -newerct "-14 days" -type f 2>/dev/null
stat /path/to/suspicious.php # compare Modify with Change and Birth
データベースのポート、パネルのポート、管理用のパスをインターネット全体に公開すべきではありません。自分のIPのみを許可し、Webサイトはオリジンを隠すプロキシの背後に置き、ファイアウォールのデフォルトポリシーは拒否にしてください。CloudflareでオリジンIPを隠す方法をご覧ください。
アクティブなセッションは停止しますが、何かを削除する前にログや不審なファイルを安全な場所にコピーしてください。その後、侵害されたマシンから参照可能だったすべてのパスワード、鍵、APIトークンを変更します。データベースや決済ゲートウェイの認証情報も含みます。完全なクリーンアップのチェックリストはLinuxサーバーが侵害されていないか確認する方法にあります。
被害の封じ込めは、問題が起きる前に確保している制御手段にかかっています。IMIDCの専用サーバーでは、他のすべてをファイアウォールで遮断した後でもVNCコンソールでサーバーの画面にアクセスでき、レスキューシステムを起動してディスクをオフラインで調査でき、信頼できなくなったサーバーを再インストールできます。これらはすべてクライアントエリアからお客様ご自身で行えます(専用サーバーコントロールパネルガイドを参照)。第三者の視点が必要なときは、24時間365日対応のサポートチームがログの確認やクリーンアップをお手伝いします。
grep "Accepted password" /var/log/auth.log* | tail # any password logins?
ssh-keygen -lf /root/.ssh/authorized_keys # do you know every key?
ss -tnp | grep sshd # unknown long-lived connections?
crontab -l; ls /etc/cron.d /etc/systemd/system # anything you did not add?
find /tmp /var/tmp /dev/shm -name ".*" -type f # hidden files in temp dirs?
見慣れないものがあれば、それ以上変更を加える前に手を止めて調査してください。チケットを作成していただければ、IMIDCのチームが対応をお手伝いします。