Comments
Description
Transcript
振る舞いに基づく SSHブルートフォース対策
PacSec2008 at 青山ダイヤモンドホール 振る舞いに基づく SSHブルートフォース対策 平成20年11月13日 TOMOYO Linux Project 半田 哲夫 TOMOYO is a registered trademark of NTT DATA CORPORATION in Japan. Linux is a trademark of Linus Torvalds. Other names and trademarks are the property of their respective owners. はじめに • 遠隔管理などで利用されるSSHサービスへ の不正なログインを許してしまうと、情報漏え いだけでなく、踏み台やトロイの木馬の設置 のような被害が生じます。 – 近年の攻撃手法は高度化・洗練化されてきており、 従来の防御手法だけでは対処しきれない可能性 が増えてきています。 • 「アクセス制御機能を強化したOS」を用いて、 全く新しい防御手法を紹介します。 – 例として TOMOYO Linux を利用します。 2008.11.13 1 準備:フローチャート • この図の見方はご存じですよね? 1 2 No Yes 3 4 2008.11.13 2 準備:状態遷移図 • この図の見方はご存じですよね? B A C B A C B C D D E E A 2008.11.13 3 準備:Linux における状態遷移図の例 • /sbin/initを起点にツリー状に広がります。 /sbin/init /sbin/mingetty /sbin/mingetty /etc/rc.d/rc.sysinit /bin/login /etc/rc.d/rc.sysinit /bin/login /sbin/start_udev /sbin/start_udev /bin/unicode_start /bin/unicode_start /bin/kbd_mode /bin/kbd_mode /bin/setfont /bin/setfont 2008.11.13 4 準備:TOMOYO Linuxとは • 状態遷移をデザインし強制するツール – プログラムの中で発生するプログラムの実行要求 を監視し、その可否を制限する。 – プログラムの実行により状態遷移を行う。 • リクエストを観測し制限するツール – プログラムの中で発生するファイルの読み書き要 求を監視し、その可否を制限する。 – プログラムの実行要求やファイルのオープン要求 によりプロセスの内部状態を更新する。 2008.11.13 5 準備:SSHセッションの種類 • 対話型シェルセッション – シェルが提供され、自由にコマンドを入力できる • 自由に資源にアクセスできる • 非対話型シェルセッション – シェル起動時に -c で指定されたコマンドが実行 される • scp や sftp など /usr/sbin/sshd • 非シェルセッション – シェルが提供されない • ポートフォワーディングなど 2008.11.13 /bin/bash /bin/bash ??? ??? 6 従来の対策 • 知識に基づく認証 – ブルートフォース攻撃の対象になります。 • ログイン認証を突破されないことを前提とした 対策 – 突破される確率を減らす • ファイアウォールと連動して認証に失敗したクライアント を一定期間再接続禁止にする • 公開鍵認証を用いる – 攻撃の分散化やパスワード・秘密鍵の漏洩が始 まっています。 2008.11.13 7 提案する対策 • 振る舞いに基づく認証 – 状態遷移を活用します。 • 従来のログイン認証を突破されることを前提と した対策 – 従来のログイン認証から先を制限します。 – とりあえずログインシェルを与えてみて、期待通り の振る舞いをするかどうかを観察します。 • 労働契約における試用期間をイメージしてください。 2008.11.13 8 従来の対策のフロー • ログイン認証までをカスタマイズする SSHサーバがクライアントからの接続を受け付ける ログイン認証を行う 成功 失敗 作業を行う SSHサーバとの接続を切断する 2008.11.13 9 提案する対策のフロー • ログイン認証から先をカスタマイズする SSHサーバがクライアントからの接続を受け付ける ログイン認証を行う 失敗 成功 振る舞いを検査 正常 不審 作業を行う SSHサーバとの接続を切断する 2008.11.13 10 扉をあけて • 常識は捨ててください。 – 「なんでもあり」の世界です。 – あなた自身のアイデアを実装してください。 • 新しい世界の始まりです。 – セキュアな世界へようこそ! 2008.11.13 11 ケース1:対話型シェルセッション • 打鍵タイミングを利用します。 – 利用するもの • 自作プログラム /bin/timeauth /usr/sbin/sshd /bin/bash /bin/bash /bin/timeauth ??? /bin/timeauth ??? /bin/bash /bin/bash ??? ??? 2008.11.13 12 ケース1:対話型シェルセッション Authenticate me! 2008.11.13 13 ケース1:対話型シェルセッション Authenticate me! Enter password. 2008.11.13 14 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** 2008.11.13 15 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. 2008.11.13 16 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. 2008.11.13 17 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. 2008.11.13 18 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 19 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 20 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is PacSec 2008.11.13 21 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is PacSec NG. Go away! 2008.11.13 22 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 23 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 24 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 25 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is P 2008.11.13 26 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa 2008.11.13 27 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c 2008.11.13 28 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c S 2008.11.13 29 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c S e 2008.11.13 30 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c S e c 2008.11.13 31 ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c S e c OK. Go ahead. 2008.11.13 32 ケース1:対話型シェルセッション • 利点 – 使える要素が制限されない • RFCなどの標準に従う必要がない • どんな要素を使っているかを秘匿できる – 想定外の認証方式 • 侵入者が思いも付かない方法を使える • パスワード文字数が少なくても、タイミング情報と組み 合わせることでブルートフォースを無意味に 2008.11.13 33 ケース1:対話型シェルセッション • 難点 – 「アクセス制御機能を強化したOS」が必要 • ログインシェルから実行できるコマンドを制限するため • MAC(強制アクセス制御)と呼ばれる機能を利用 – Round Trip Timeが大きいと使いにくい • 外国からのアクセスを防ぐのには好都合? 2008.11.13 34 ケース2:対話型シェルセッション • ワンタイムパスワードとメールを利用します。 – 利用するもの • SMTPサーバ • 自作プログラム /bin/mailauth /usr/sbin/sshd /bin/bash /bin/bash /bin/mailauth ??? /bin/mailauth /bin/bash /bin/bash ??? 2008.11.13 ??? ??? 35 ケース2:対話型シェルセッション Authenticate me! 2008.11.13 36 ケース2:対話型シェルセッション Authenticate me! Enter password. 2008.11.13 37 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** 2008.11.13 38 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. 2008.11.13 39 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. 2008.11.13 40 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. 2008.11.13 41 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 42 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 43 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 44 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 45 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 46 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 47 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 48 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 49 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 50 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 51 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 52 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 53 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 54 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 55 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 56 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 57 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is OK. Go ahead. 2008.11.13 58 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 59 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 60 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 61 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 62 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 63 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 64 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 65 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 66 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 67 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 68 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 69 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 70 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 71 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 72 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 73 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 74 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is OK. Go ahead. 2008.11.13 75 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 76 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 77 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 78 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 79 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 80 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 81 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 82 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 83 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 84 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 85 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 86 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 87 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 88 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 89 ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is NG. Go away! 2008.11.13 90 ケース2:対話型シェルセッション • 利点 – ワンタイムパスワードを生成したプロセス自身が検 証も行う • 時刻やカウンタなどの同期機構が不要 • プロセスの消滅と同時にワンタイムパスワードも失効 – ワンタイムパスワードが侵入者以外に漏洩しても 問題にならない • プロセスを生成したユーザ以外には何の価値もない 2008.11.13 91 ケース2:対話型シェルセッション • 難点 – メールを受信できる必要がある • 携帯電話のようなメール受信端末を所持していること – メールを送信できる必要がある • SMTPサーバやWebサーバのメール送信CGIなどが 利用可能なこと 2008.11.13 92 ケース3:非対話的シェルセッション • 環境変数の有無やその内容を利用します。 – 利用するもの • • • • SSH サーバの AcceptEnv ディレクティブ SSH クライアントの SendEnv ディレクティブ 自作プログラム /bin/env_check TOMOYO Linux の execute_handler ディレクティブ /usr/sbin/sshd /bin/env_chk /bin/env_chk /bin/bash /bin/bash 2008.11.13 93 ケース3:非対話的シェルセッション SSHサーバがクライアントからの接続を受け付ける ログイン認証を行う 失敗 成功 SSHサーバが環境変数を設定する 認証成功 を起動する SSHサーバが execute_handler 環境変数の検査を行う 成功 失敗 ログインシェルを起動する 要求されたコマンドを実行する SSHサーバとの接続を切断する 2008.11.13 94 ケース3:非対話的シェルセッション Authenticate me! 2008.11.13 95 ケース3:非対話的シェルセッション Authenticate me! Enter password. 2008.11.13 96 ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** 2008.11.13 97 ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. 2008.11.13 98 ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. 2008.11.13 99 ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. NG. Go away! 2008.11.13 100 ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Use this environ. 2008.11.13 101 ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Use this environ. OK. Ready. 2008.11.13 102 ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Use this environ. OK. Ready. Let me access shell. 2008.11.13 103 ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Use this environ. OK. Ready. Let me access shell. OK. Go ahead. 2008.11.13 104 ケース3:非対話的シェルセッション • 利点 – クライアントからは透過に見える • コマンドラインでの操作が不要 • 標準入出力の扱いが不変 – 環境変数をパスワードの代わりに使える • 環境変数名を秘密にできる • 環境変数の内容に応じて権限を分割することも可能 – 対話的シェルセッションを開始する前に適用する ことも可能 2008.11.13 105 ケース3:非対話的シェルセッション • 難点 – TOMOYO Linux 専用 • execute_handler を備えているのは TOMOYO Linux だけ – SSHクライアントが環境変数を送信する機能 (SendEnv)をサポートしていない可能性 2008.11.13 106 ケース3:非対話的シェルセッション • 応用例:環境変数による権限分割 /usr/sbin/sshd 玄関 ログインシェル /bin/bash /usr/libexec/openssh/sftp-server 読み書きモード 2008.11.13 107 ケース3:非対話的シェルセッション 再検査 ダミー /usr/sbin/sshd /bin/env_chk 読み書きモード /bin/rw-sftp /bin/bash ダミー /usr/libexec/openssh/sftp-server /bin/ro-sftp /bin/bash 読み込み専用モード /usr/libexec/openssh/sftp-server 2008.11.13 108 ケース4:非対話的シェルセッション • 独自のレイヤーを構築します。 – 利用するもの • • • • 2008.11.13 scp や sftp コマンドの -S オプション 振る舞いを監視するためのサーバ側プログラム 振る舞いを指定するためのクライアント側プログラム TOMOYO Linux の execute_handler ディレクティブ 109 ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 2008.11.13 振る舞い指示機能 (独自プログラム) 振る舞い監視機能 (独自プログラム) /usr/bin/ssh /usr/sbin/sshd 110 ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 振る舞い指示機能 (独自プログラム) /usr/bin/ssh 2008.11.13 2 振る舞い監視機能 (独自プログラム) /usr/sbin/sshd 111 ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 振る舞い指示機能 (独自プログラム) /usr/bin/ssh 2008.11.13 3 2 振る舞い監視機能 (独自プログラム) /usr/sbin/sshd 112 ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 振る舞い指示機能 (独自プログラム) /usr/bin/ssh 2008.11.13 2 3 4 振る舞い監視機能 (独自プログラム) /usr/sbin/sshd 113 ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 振る舞い指示機能 (独自プログラム) /usr/bin/ssh 2008.11.13 2 3 4 5 振る舞い監視機能 (独自プログラム) /usr/sbin/sshd 114 ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 振る舞い指示機能 (独自プログラム) /usr/bin/ssh 2008.11.13 2 3 4 5 振る舞い監視機能 (独自プログラム) Go! /usr/sbin/sshd 115 ケース4:非対話的シェルセッション 2008.11.13 アプリケーション層 アプリケーション層 /usr/bin/ssh /usr/sbin/sshd 116 ケース4:非対話的シェルセッション • 利点 – 標準の機能で利用できない要素(標準入出力や コマンドラインパラメータなど)を使える – 環境変数と組み合わせて利用できる • 独自認証対応の可否に応じた権限分割ができる 2008.11.13 117 ケース4:非対話的シェルセッション • 難点 – クライアント側にもプログラムを用意する必要があ る。 2008.11.13 118 PAMではできないの? • 自由度・難易度が違います。 – 標準入出力やパラメータなどを独占できるので、 他のPAMモジュールとの干渉が起こりません。 • 誰にでも作ることができます。 – RFCなどの標準に縛られません。 2008.11.13 119 PAMではできないの? • クライアント側の対応が不要です。 – PAMの場合はクライアントが対応していないと使 えません。 – PAMを通過後に実行される処理(シェルなど)に 対応していないクライアントはありえません。 2008.11.13 120 PAMではできないの? • 強制することができます。 – 他のPAMモジュールの設定や実行結果により省 略される心配がありません。 – 生じうる状態遷移がMACにより規定されているの で、想定外の抜け道(バッファオーバーフローや コマンドインジェクション)の心配がありません。 – 外部プログラムの助けを借りるのが容易です。 2008.11.13 121 まとめ • ホスト内での認証なので独自プロトコルを利用 可能です。 – アイデアの勝負です。 • 利用可能な要素は無限にあります。 – 正しい振る舞い(状態遷移)を知られない限りブ ルートフォースは不可能です。 • 安価に構築でき、負担の少ない方法を選べま す。 2008.11.13 122 ケース5:非シェルセッション • クライアントプログラムをカスタマイズします。 – 利用する機能 • 独自のSSHクライアントプログラム(例えば JSCH) • TOMOYO Linux の task.state キーワード アプリケーション層 /usr/sbin/sshd 要求順序監視機能 (TOMOYO Linux) 2008.11.13 123 ケース5:非シェルセッション • 利点 – プログラムの実行を伴わずに権限を切り替えでき る • アクセス要求の順序をパスワードの代わりに使用 – 対話的・非対話的シェルセッションを開始する前 に適用することも可能 2008.11.13 124 ケース5:非シェルセッション • 難点 – 使える要素が少ない • プログラムの実行を伴わないで実現する必要がある – おそらく TOMOYO Linux 専用 • SSHサーバプログラム(/usr/sbin/sshd)を改造すること なくプロセスの状態変数(task.state)を操作しているた め – クライアントを自作する必要性 2008.11.13 125 ケース6:即席ハニーポットの構築 • 侵入者をハニーポットへリダイレクトできます。 – もちろん、強制ログアウトもできます。 /usr/sbin/sshd /bin/bash /bin/bash /bin/timeauth ??? /bin/timeauth /bin/force-logout /bin/bash /bin/bash ??? ??? 2008.11.13 126 論文はこちらです。 • セキュリティ強化OSによるログイン認証の強化 手法 – http://sourceforge.jp/projects/tomoyo/docs/win f2005.pdf – http://sourceforge.jp/projects/tomoyo/docs/win f05-slides.pdf – 3年前に書かれた内容ですので内容が古いです。 – しかし、考え方は現在でも役に立ちますし、実際 に適用することができます。 2008.11.13 127