SSHへのブルートフォースアタックにpam_ablを用いて対策する

 UnixおよびLinux系サーバの特長の1つは、SSHサービスを実行することでシステム管理者が安全にリモート接続をできるようにしてあることだ。もっともセキュリティ管理者に言わせれば、こうしたSSHサービス自体に対する攻撃も現在では当たり前の手口となってしまっている、ということになるだろう。そこで本稿では、SSHサービスを実行するマシンをブルートフォースアタック(総当たり攻撃)から防護する手段を解説することにする。そのために利用するのは、pam_ablプラグインというSSH用のプラグイン可能認証モジュール(PAM:pluggable authentication module)である。

 pam_ablの入手については、モジュールをダウンロードしてコンパイルを自分で行うか、リポジトリからバイナリパッケージをダウンロードして直接インストールすればいい。モジュールをコンパイルする場合は、ソースのダウンロードが必要だが、具体的なコンパイル手順については、pam_ablのホームページに詳しく説明されている。

 pam_ablのインストール先がUbuntu DapperないしEdgyのサーバ/デスクトップである場合は、バイナリパッケージが利用できる。それを利用するために、各自の/etc/apt/sources.listファイルにRoman Balitskyのカスタムリポジトリを追加しておく。

deb http://ubuntu.tolero.org/ dapper main(Dapper用)
deb http://ubuntu.tolero.org/ edgy main(Edgy用)

 インストレーションソースの追加が完了したら、ソースリストをアップデートし、pam_ablのインストール終了後にSSHサービスを再起動させる。

sudo apt-get update
sudo apt-get install libpam-abl
sudo /etc/init.d/ssh restart

 次に行うのはpam_ablの設定ファイル/etc/security/pam_abl.confに対する指定である。

#/etc/security/pam_abl.conf
host_db=/var/lib/abl/hosts.db
host_purge=2d
host_rule=*:3/1h,30/1d
user_db=/var/lib/abl/users.db
user_purge=2d
user_rule=!root:3/1h,30/1d

 この2行目と5行目は、禁止対象とするユーザとホストのリストをそれぞれどこに格納するかの指定である。3行目と6行目は禁止措置を施しておくパージ(purge)期間の指定であり、ここの例ではホストおよびユーザのパージ期間をどちらも2日としている。4行目と7行目は、ホストおよびユーザに関するルールの指定である。次にルール指定の詳細を説明しよう。

 設定ファイルでのルール指定は、下記の構文で記述される。

host/user_rule=<host/user>:<許容回数>/<対象期間>,<許容回数>/<対象期間>

 先の例で言うと4行目のルール(host_rule=*:3/1h,30/1d)は、誤ったクレデンシャルを入力したホストはすべて禁止し(アスタリスク記号による指定)、その際の許容回数と対象期間については、1時間以内に3回以上ないし1日以内に30回以上という条件を指定していることになる。

 同じく7行目のユーザに関するルール(user_rule=!root:3/1h,30/1d)は、rootを除くすべてのユーザ(!rootディレクティブで指定)について、ユーザパスワードの入力に1時間以内に3回以上ないし1日以内に30回以上失敗した者を禁止対象にするという指定である。

 その他、特定のユーザのみを禁止対象に指定することもできる。例えば、anze、dasa、kimzet、madisonというユーザだけを禁止したければ、下記のように指定すればいい。

anze|dasa|kimzet|madison:20/1h

 この指定を施すと、anze、dasa、kimzet、madisonという特定のユーザ4名については、1時間以内に20回ログインに失敗したら禁止対象にされることになる。

 使用可能なオプションおよびトリガについては、pam_ablのマニュアルページに一覧されている。

テスト

 設定通りに機能しているかをテストするには、ターゲットボックスでターミナルを開いて/var/log/auth.logファイルを表示させる。そして意図的にサーバへのログイン時に間違ったパスワードを3回連続して入力し、それ以降の利用がpam_ablプラグインにより禁止されるかを確認すればいい。これが仮にmadisonというユーザの行った操作であれば、ログファイルには下記のような記録が残されているはずである。

pam_abl[6248]: Blocking access from sataras.example.com to service ssh, user madison

 この結果madisonというユーザはターゲットマシンでの操作が禁止され、再度ログインできるのはこれから2日以後のことになる。

 禁止対象にされたユーザおよびホストについては、下記のコマンドを用いることで随時確認することができる。

~$ sudo pam_abl
Failed users:
madison (3)
Blocking users [!root]
Failed hosts:
sataras.example.com (3)
Blocking users [*]

まとめ

 ハッカーによる不正進入の対策法としては、SSHのリスニングポートを変更したり、iptableやTCP wrapperを用いてSSHサービスへの接続を許可するホストを限定するなど、様々な手法が存在している。ここで解説したpam_ablモジュールの実装はSSHサーバを狙ったブルートフォースアタックの防止に大きな効果を発揮するが、その設定については充分に配慮しておかないと、攻撃側にこのモジュール自体を悪用されて、自分自身がシステムからはじき出されるという憂き目にあいかねないので注意されたい。

NewsForge.com 原文