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,530 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
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,530
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
9
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

振る舞いに基づく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

×