...

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

by user

on
Category: Documents
7

views

Report

Comments

Transcript

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