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            C
                     B
                              A
             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
                                        /bin/bash
• 非シェルセッション                                 /bin/bash
       – シェルが提供されない                                 ???
                                                          ???
             • ポートフォワーディングなど
2008.11.13                                                      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:非対話的シェルセッション

• 独自のレイヤーを構築します。
       – 利用するもの
             •   scp や sftp コマンドの -S オプション
             •   振る舞いを監視するためのサーバ側プログラム
             •   振る舞いを指定するためのクライアント側プログラム
             •   TOMOYO Linux の execute_handler ディレクティブ




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



             アプリケーション層           アプリケーション層
                             1
             振る舞い指示機能            振る舞い監視機能
             (独自プログラム)           (独自プログラム)


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




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



             アプリケーション層               アプリケーション層
                             1
                                 2
             振る舞い指示機能                振る舞い監視機能
             (独自プログラム)               (独自プログラム)


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




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



             アプリケーション層               アプリケーション層
                             1
                                 2
             振る舞い指示機能        3       振る舞い監視機能
             (独自プログラム)               (独自プログラム)


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




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



             アプリケーション層               アプリケーション層
                             1
                                 2
             振る舞い指示機能        3       振る舞い監視機能
             (独自プログラム)           4   (独自プログラム)


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




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



             アプリケーション層               アプリケーション層
                             1
                                 2
             振る舞い指示機能        3       振る舞い監視機能
             (独自プログラム)           4   (独自プログラム)
                             5

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




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



             アプリケーション層                 アプリケーション層
                             1
                                 2
             振る舞い指示機能        3         振る舞い監視機能
             (独自プログラム)           4     (独自プログラム)
                             5
                                 Go!
              /usr/bin/ssh             /usr/sbin/sshd




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




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




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




2008.11.13                                    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

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