公開された SSH ポートは 24 時間クレデンシャルスタッフィングの通信を受け続けます
スキャン型のボットネットはルーティング可能な IPv4 アドレス空間全体を走査し、TCP/22 で応答するすべてのホストにパスワードリストを試します。インターネットから到達できる SSH デーモンは、そのホストが企業の踏み台であっても単一の VPS であっても、同じ通信を受け取ります。
- 1 日あたり数千件の認証失敗
- TCP/22 で応答する新しいホストは、アドレスがルーティング可能になってから数時間で SSH 認証の失敗を記録し始めます。インターネットに面した一般的なサーバーは、Failed password と Invalid user のイベントを毎日数千件 systemd-journald に書き込みます。しかもそれらは、管理者 1 人が確認できる速度をはるかに超えて入れ替わるアドレス帯から到着します。
- 決して認証に成功しない通信のために CPU・メモリ・ジャーナル書き込みが消費される
- SSH 認証の試行 1 回ごとに、TCP ハンドシェイク、SSH 鍵交換、/etc/pam.d/sshd を経由する PAM 参照、そして systemd-journald への同期書き込みが発生します。したがって持続的なブルートフォースの流れは、ホストに恒常的なバックグラウンド負荷をかけ、ジャーナルの保存容量を膨らませ、本来の管理用ログインを sshd の MaxStartups キューの後ろへ押しやります。そのいずれも、攻撃者は認証に成功しなくても引き起こせます。
- パスワードを 1 つ言い当てられれば完全な侵害
- 正しいパスワードが 1 つあれば、そのアカウントの権限でインタラクティブシェルが得られます。ランサムウェアの展開、データの持ち出し、ホスト自身のアドレスから送信される迷惑メールなどです。脆弱なパスワードや公開された漏洩データから使い回されたパスワードは、辞書攻撃の前に数日で破られ、認証ログはその成功した試行を他の行とまったく同じように記録します。
- pam_faillock は攻撃を本物の管理者のロックアウトに変えてしまいます
- /etc/pam.d/sshd に設定された PAM スタックは pam_faillock で連続失敗を数え、deny のしきい値に達するとアカウントをロックします。したがって、有効なユーザー名だけを言い当てた攻撃者は — パスワードは一度も当てていなくても — そのカウンターを意図的に作動させ、本物の管理者をホストから締め出せます。結果として、防御機構そのものが生み出すサービス妨害が成立します。
SSH Protector は判定をユーザー空間から netfilter の input フックへ移します
SSH Protector デーモンは認証失敗イベントを送信元ネットワーク単位で相関させ、攻撃元の /24 全体を破棄する nftables ルールを 1 本適用します。そのルールが存在した時点から、netfilter はカーネルの input フックでパケットを破棄します — sshd が接続を受け付ける前、PAM 参照が走る前、そしてジャーナルに何かが書かれる前です。CPU 負荷、ジャーナル量、パスワード検証まで到達する試行回数が同時に下がります。

