Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PacSec2008 at 青山ダイヤモンドホール



   振る舞いに基づく
SSHブルートフォース対策

               平成20年11月13日
             TOMOYO Linux Project
     ...
はじめに

• 遠隔管理などで利用されるSSHサービスへ
  の不正なログインを許してしまうと、情報漏え
  いだけでなく、踏み台やトロイの木馬の設置
  のような被害が生じます。
       – 近年の攻撃手法は高度化・洗練化されてきており...
準備:フローチャート

• この図の見方はご存じですよね?
             1




             2
                       No
                 Yes

          ...
準備:状態遷移図

• この図の見方はご存じですよね?


                 B            C
                     B
                              A
     ...
準備:Linux における状態遷移図の例

• /sbin/initを起点にツリー状に広がります。
  /sbin/init
               /sbin/mingetty
                             ...
準備:TOMOYO Linuxとは

• 状態遷移をデザインし強制するツール
       – プログラムの中で発生するプログラムの実行要求
         を監視し、その可否を制限する。
       – プログラムの実行により状態遷移を行...
準備:SSHセッションの種類

• 対話型シェルセッション
       – シェルが提供され、自由にコマンドを入力できる
             • 自由に資源にアクセスできる
• 非対話型シェルセッション
       – シェル起動時に...
従来の対策

• 知識に基づく認証
       – ブルートフォース攻撃の対象になります。
• ログイン認証を突破されないことを前提とした
  対策
       – 突破される確率を減らす
             • ファイアウォールと連...
提案する対策

• 振る舞いに基づく認証
       – 状態遷移を活用します。
• 従来のログイン認証を突破されることを前提と
  した対策
       – 従来のログイン認証から先を制限します。
       – とりあえずログインシェ...
従来の対策のフロー

• ログイン認証までをカスタマイズする
             SSHサーバがクライアントからの接続を受け付ける


                    ログイン認証を行う
                     ...
提案する対策のフロー

• ログイン認証から先をカスタマイズする
             SSHサーバがクライアントからの接続を受け付ける


                    ログイン認証を行う
                   ...
扉をあけて

• 常識は捨ててください。
       – 「なんでもあり」の世界です。
       – あなた自身のアイデアを実装してください。


• 新しい世界の始まりです。
       – セキュアな世界へようこそ!




200...
ケース1:対話型シェルセッション

• 打鍵タイミングを利用します。
       – 利用するもの
             • 自作プログラム /bin/timeauth
    /usr/sbin/sshd

              ...
ケース1:対話型シェルセッション


               Authenticate me!




2008.11.13                        13
ケース1:対話型シェルセッション


               Authenticate me!
                          Enter password.




2008.11.13               ...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                             Enter password.
               Password is...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース1:対話型シェルセッション

• 利点
       – 使える要素が制限されない
             • RFCなどの標準に従う必要がない
             • どんな要素を使っているかを秘匿できる
       – 想定...
ケース1:対話型シェルセッション

• 難点
       – 「アクセス制御機能を強化したOS」が必要
             • ログインシェルから実行できるコマンドを制限するため
             • MAC(強制アクセス制御)...
ケース2:対話型シェルセッション

• ワンタイムパスワードとメールを利用します。
       – 利用するもの
             • SMTPサーバ
             • 自作プログラム /bin/mailauth
    ...
ケース2:対話型シェルセッション


               Authenticate me!




2008.11.13                        36
ケース2:対話型シェルセッション


               Authenticate me!
                          Enter password.




2008.11.13               ...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション


               Authenticate me!
                           Enter password.
               Password is *...
ケース2:対話型シェルセッション

• 利点
       – ワンタイムパスワードを生成したプロセス自身が検
         証も行う
             • 時刻やカウンタなどの同期機構が不要
             • プロセス...
ケース2:対話型シェルセッション

• 難点
       – メールを受信できる必要がある
             • 携帯電話のようなメール受信端末を所持していること
       – メールを送信できる必要がある
           ...
ケース3:非対話的シェルセッション

• 環境変数の有無やその内容を利用します。
       – 利用するもの
             •   SSH サーバの AcceptEnv ディレクティブ
             •   SSH ...
ケース3:非対話的シェルセッション
             SSHサーバがクライアントからの接続を受け付ける

                      ログイン認証を行う                失敗
               ...
ケース3:非対話的シェルセッション


               Authenticate me!




2008.11.13                        95
ケース3:非対話的シェルセッション


               Authenticate me!
                          Enter password.




2008.11.13              ...
ケース3:非対話的シェルセッション


               Authenticate me!
                           Enter password.
               Password is ...
ケース3:非対話的シェルセッション


               Authenticate me!
                           Enter password.
               Password is ...
ケース3:非対話的シェルセッション


               Authenticate me!
                           Enter password.
               Password is ...
ケース3:非対話的シェルセッション


               Authenticate me!
                           Enter password.
               Password is ...
ケース3:非対話的シェルセッション


               Authenticate me!
                           Enter password.
               Password is ...
ケース3:非対話的シェルセッション


               Authenticate me!
                           Enter password.
               Password is ...
ケース3:非対話的シェルセッション


               Authenticate me!
                           Enter password.
               Password is ...
ケース3:非対話的シェルセッション


               Authenticate me!
                           Enter password.
               Password is ...
ケース3:非対話的シェルセッション

• 利点
       – クライアントからは透過に見える
             • コマンドラインでの操作が不要
             • 標準入出力の扱いが不変
       – 環境変数をパス...
ケース3:非対話的シェルセッション

• 難点
       – TOMOYO Linux 専用
             • execute_handler を備えているのは TOMOYO Linux
               だけ
  ...
ケース3:非対話的シェルセッション

• 応用例:環境変数による権限分割
/usr/sbin/sshd   玄関
                          ログインシェル



                            ...
ケース3:非対話的シェルセッション

                    再検査
                                           ダミー
/usr/sbin/sshd

                ...
ケース4:非対話的シェルセッション

• 独自のレイヤーを構築します。
       – 利用するもの
             •   scp や sftp コマンドの -S オプション
             •   振る舞いを監視するた...
ケース4:非対話的シェルセッション



             アプリケーション層           アプリケーション層
                             1
             振る舞い指示機能      ...
ケース4:非対話的シェルセッション



             アプリケーション層               アプリケーション層
                             1
                       ...
ケース4:非対話的シェルセッション



             アプリケーション層               アプリケーション層
                             1
                       ...
ケース4:非対話的シェルセッション



             アプリケーション層               アプリケーション層
                             1
                       ...
ケース4:非対話的シェルセッション



             アプリケーション層               アプリケーション層
                             1
                       ...
ケース4:非対話的シェルセッション



             アプリケーション層                 アプリケーション層
                             1
                     ...
ケース4:非対話的シェルセッション




             アプリケーション層       アプリケーション層




              /usr/bin/ssh   /usr/sbin/sshd




2008.11.1...
ケース4:非対話的シェルセッション

• 利点
       – 標準の機能で利用できない要素(標準入出力や
         コマンドラインパラメータなど)を使える
       – 環境変数と組み合わせて利用できる
            ...
ケース4:非対話的シェルセッション

• 難点
       – クライアント側にもプログラムを用意する必要があ
         る。




2008.11.13                       118
PAMではできないの?

• 自由度・難易度が違います。
       – 標準入出力やパラメータなどを独占できるので、
         他のPAMモジュールとの干渉が起こりません。
• 誰にでも作ることができます。
       – RFC...
PAMではできないの?

• クライアント側の対応が不要です。
       – PAMの場合はクライアントが対応していないと使
         えません。
       – PAMを通過後に実行される処理(シェルなど)に
         ...
PAMではできないの?

• 強制することができます。
       – 他のPAMモジュールの設定や実行結果により省
         略される心配がありません。
       – 生じうる状態遷移がMACにより規定されているの
      ...
まとめ

• ホスト内での認証なので独自プロトコルを利用
  可能です。
       – アイデアの勝負です。
• 利用可能な要素は無限にあります。
       – 正しい振る舞い(状態遷移)を知られない限りブ
         ルートフォ...
ケース5:非シェルセッション

• クライアントプログラムをカスタマイズします。
       – 利用する機能
             • 独自のSSHクライアントプログラム(例えば JSCH)
             • TOMOYO ...
ケース5:非シェルセッション

• 利点
       – プログラムの実行を伴わずに権限を切り替えでき
         る
             • アクセス要求の順序をパスワードの代わりに使用
       – 対話的・非対話的シェル...
ケース5:非シェルセッション

• 難点
       – 使える要素が少ない
             • プログラムの実行を伴わないで実現する必要がある
       – おそらく TOMOYO Linux 専用
             ...
ケース6:即席ハニーポットの構築

• 侵入者をハニーポットへリダイレクトできます。
       – もちろん、強制ログアウトもできます。
    /usr/sbin/sshd

             /bin/bash
        ...
論文はこちらです。

• セキュリティ強化OSによるログイン認証の強化
  手法
       – http://sourceforge.jp/projects/tomoyo/docs/win
         f2005.pdf
      ...
Upcoming SlideShare
Loading in …5
×

振る舞いに基づくSSHブルートフォースアタック対策

1,703 views

Published on

PacSec 2008講演資料

関連動画
http://www.youtube.com/watch?v=jYaPascaUZw
http://www.youtube.com/watch?v=iSHg9Sec_QE
http://www.youtube.com/watch?v=-2AQSqNa58c

Published in: Technology
  • Be the first to comment

振る舞いに基づくSSHブルートフォースアタック対策

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

×