昨日までは ccs-tools パッケージに含まれているサンプルプログラムの紹介をしてきました。
ccs-tools パッケージには含まれていないサンプルプログラムが他にもたくさんあります。
しかし、公開許可が出ていないので紹介することができません。
そのため、とりあえずネタ切れ状態ということにさせていただきます。
http://www.unixuser.org/~haruyama/security/openssh/20051108.html や http://yoosee.net/d/archives/2005/11/08/002.html によると、 最近は ssh サーバへのブルートフォース攻撃が増えてきているそうです。 でも、強制アクセス制御を導入すれば、ログイン認証を複数回行なえるようになるので、 ssh 経由の不正ログインに対する防衛策としても利用することができます。
ccs-tools パッケージで紹介した認証方式は、実現可能な認証方式のほんの一部です。 ログイン後に起動されるシェルで利用可能な要素は全て認証方式として使えます。
例えば、コマンドラインパラメータの内容をチェックする認証プログラムでも構いません。
認証プログラムが生成したワンタイムパスワードを携帯電話にメールすることで、 その携帯電話を持っている人だけがそのワンタイムパスワードを入力できるようにしても構いません。
追加の認証に失敗したら強制的にログアウトさせ、 /etc/shadow のパスワードを自動的に変更して正当な利用者に新しいパスワードをメールすることも可能でしょう。 パスワード破りではなくバッファオーバーフローで侵入された場合には無意味ですが。(^x^;
CERBERUS は1台のサーバ内に閉じているので、 RFC 等を無視した闇鍋プロトコルで大丈夫です。プロトコルを公開する必要さえ無いのです。
要件は1つ。必要な条件を満たした場合に新しいプログラムを起動することだけです。いかにして侵入者を欺くかに専念すればよいのです。
運良くパスワードを見つけてログインしただけの侵入者には、認証プロトコルを知ることさえできないので手も足も出せません。
まさしく、鉄壁のログイン認証なのです。
PermitRootLogin yes にしようが、 PasswordAuthentication yes にしようが、全然怖くありません。
実際、セキュリティスタジアム 2004 では root パスワードを公開して ssh ログインしてもらい、簡単には突破できないことを確認できました。
セキュリティスタジアム 2004 には、ディスクの内容が同一で、強制アクセス制御を有効にしたものと無効にしたものの2台を出展しました。 攻撃側は、強制アクセス制御が無効になっているマシンに ssh ログインをして、認証を行なうシェルスクリプトの内容を表示した上で、苦労の末ようやく CERBERUS を攻略することができました。 もし、認証プログラムの処理内容が見えないようになっていたら、絶対に突破できなかったことでしょう。
強制アクセス制御はプログラムの実行を制限し、ファイルの読み書きも制限します。ポリシーで許可されていない操作は全て禁止できるわけです。
つまり、「認証プログラムの処理内容とポリシーの内容を知っている」正当な利用者だけが、 CERBERUS を通過することができます。
「認証プログラムの処理内容を知らない、ポリシーの内容も知らない」という侵入者には、疲れて嫌気がさすまで無駄な格闘をしてもらうわけです。
「へぇ〜、強制アクセス制御ってこんな用途にも使えるんだぁ」と気付いていただければ幸いです。
TOMOYO Linux は、ファイル1個、プログラム1個を単位にアクセスの可否を制御できるため、 CERBERUS を非常に簡単に実現できます。 また、 TOMOYO Linux は学習モードを搭載しているので、認証を行なうプログラムを創って実行するだけで、「私だけのケロちゃん☆ちぇっく」(←元ネタは「私だけのムービー☆スター」(笑))を実現できます。
次回は、 CERBERUS を適用できない部分( scp と sftp )への対処方法について紹介したいと思います。