slide (PowerPoint)
Download
Report
Transcript slide (PowerPoint)
安全なソフトウェア実行システム
SoftwarePotの設計と実装
大山恵弘1 神田勝規2 加藤和彦1,3
1. 科学技術振興事業団 さきがけ研究21
2. 筑波大学 第三学群 情報学類
3. 筑波大学 電子・情報工学系
2002年3月5日
SPA '02
1
背景
何をされるかわからないコードの氾濫
ex. 怪しいフリーソフト, IE, Outlook, FlashTrack
ファイルの改竄、機密の漏洩
中には有用そうなコードも存在
そういうコードを安全に実行したい
2002年3月5日
SPA '02
2
本研究のゴール
流通するソフトウェアの安全な実行
対象: フリー/商用ソフト、モバイルコード
「安全」 = 資源を不正に操作されない
ex. 「このソフトはこのファイルを読めない」
ex. 「このソフトはこのホストにしか通信できない」
→ SoftwarePot
2002年3月5日
SPA '02
3
発表の流れ
設計
実行例
実装
実験
関連研究
2002年3月5日
SPA '02
4
既存のシステムとその問題
ActiveX, RPM:
署名者を信用するかしないかの二択
Java sandbox:
任意のプログラミング言語を扱えない
Chroot, jail:
管理者権限が必要
2002年3月5日
SPA '02
5
SoftwarePotの概要
ファイルシステム(FS)を含むsandbox
仮想FS上でソフトウェアを実行
資源へのアクセスを制御
Java2 permission的セキュリティポリシー
イメージ的にはRPMやLHA
ソフトウェア流通システム
アーカイブ as 仮想FS
ユーザレベルアプリケーション/ミドルウェア
2002年3月5日
SPA '02
6
パッケージの作成
ソフト作者
実際のFS
配布・流通
ポットファイル
2002年3月5日
SPA '02
7
ポットファイルの作成に使うファイル
# 仮想パス
/data/foo.txt
/mybin/viewer
/pic/dog.jpg
…
…
2002年3月5日
# 実際のファイルのパス
abc.txt
/usr/bin/viewer
./gra/dog.jpg
SPA '02
8
パッケージの使用
ソフト利用者
仮想FS
ソフトウェア
セキュリティ
ポリシー
実際のFS
2002年3月5日
SPA '02
9
ポットファイルが持つ情報
ディレクトリ構造
ファイルの内容
実ファイルにマップする必要がある
ファイルの情報
/var/ld/
/dev/null
/etc/net.conf
2002年3月5日
SPA '02
10
セキュリティポリシーが与える情報
仮想環境と実際の環境との「接続」の設定
ファイルのマッピング
通信のリダイレクト
アクセス制御の設定
通信可能なホストとポート番号
実行を禁止するシステムコール
2002年3月5日
SPA '02
11
実際のFSとの「接続」
こういう風に
接続しろ
セキュリティ
ポリシー
2002年3月5日
SPA '02
12
セキュリティポリシー
(マッピングの設定)
map:
# 仮想パス
/dev/null
/dev/zero
/workdir
# 実パス
/dev/null
/dev/zero
$PWD/tmp
path:
# $PWD/tmp以下への書き込み禁止
deny w $PWD/tmp
2002年3月5日
SPA '02
13
セキュリティポリシー
(アクセス制御)
socket:
deny # デフォルトでは全部の通信禁止
# 学内の80番ポートへのconnectは許可
allow connect *.tsukuba.ac.jp 80
syscall:
# fork系の実行を禁止
deny fork fork1 vfork
# ファイル削除を禁止
deny unlink
2002年3月5日
SPA '02
14
セキュリティポリシー
(実行環境の仮想化)
indirect:
# パスワードファイルをフィルタ
/etc/passwd
$HOME/bin/filter /etc/passwd
socket:
# connectをリダイレクト
rdr connect 202.226.93.133 23 -> 130.158.85.97 10023
2002年3月5日
SPA '02
15
誰がセキュリティポリシーを書く?
ソフト作者
ポットファイルと組で配布
実行者がポリシーを読んで確認
ソフト実行者
PCオタクが自分のためのカスタムポリシーを記述
第三者機関
ex. VeriPot(株)
2002年3月5日
SPA '02
16
FSをsandboxに含めた理由は?
実際のFSを極力さらしたくない
「接続」部分を小さくしたい
ポリシーの安全性を検査する作業を楽にしたい
機密ファイルは加工して見せたい
/etc/passwd, access_log, /etc/wtmp
2002年3月5日
SPA '02
17
実行例
tcsh
emacs
StarOffice
2002年3月5日
SPA '02
18
dumbo> execpot tcsh.plc tcsh.pot
% pwd
仮想FS上で
/
シェルが動く
% ls
dev etc mybin mydata usr
% cd mydata
% ls
sample.txt
% cat sample.txt
Hello world!
ニセの/etc/passwd
% pwd
/mydata
しか見えない!
% cat /etc/passwd
nobody:x:60001:60001:Nobody:/:
% 2002年3月5日
SPA '02
19
% wget http://www.yahoo.co.jp/
Connecting to www.yahoo.co.jp:80... connected!
0K -> .......... .......... ..........
19:53:20 (42.06 KB/s) - `index.html' saved
[30879]
% ls
index.html
% wget http://www.dod.gov/
Connecting to www.dod.gov:80... 強制終了
% ls
index.html
% rm index.html
System call unlink not allowed.
rm: cannot unlink `index.html‘: システムコールに
割り込みがかかりました。
%
2002年3月5日
SPA '02
20
ルートディレクトリに
sample.txtが!
2002年3月5日
SPA '02
21
他人のホームがない!
2002年3月5日
SPA '02
22
実装
プラットフォーム
Solaris/SPARC
Linux/x86
Cで16000行
2002年3月5日
SPA '02
23
実装方式
アーカイブを一時ディレクトリに展開
アプリケーションのプロセス一つに
監視プロセス一つを生成
システムコール引数を検査、書き換え
ex. open(“/data/foo.txt”)
open(“/tmp/xxx/data/foo.txt”)
ポリシー違反したらkill
2002年3月5日
SPA '02
24
システムコールフック
フックするシステムコールは一部
open, stat, connect等
read/writeはフックしない
実装
Solaris: /proc file system
Linux: カーネルモジュール
カーネルパッチ不要
2002年3月5日
SPA '02
25
実験
Solaris 2.6
Sun Ultra 60 Workstation
UltraSPARC II, メモリ512MB
2002年3月5日
SPA '02
26
安全性確認実験
許されない操作を行ったアプリケーション
がkillされることを確認
2002年3月5日
SPA '02
27
性能測定実験
二種類のプログラム
マイクロベンチマーク
広く使われているアプリケーション
実行時間を比較
オリジナル
SoftwarePot使用時
2002年3月5日
SPA '02
28
マイクロベンチマーク
Fib
getpid-loop
open-loop
SoftwarePotなし
SoftwarePotあり
13.4
10.6
0.19
13.5
14.7
8.4
(秒)
Syscall以外の部分 → OHなし
非ファイルsyscall → 40%のOH
ファイルsyscall → 1回に0.8ミリ秒加算
2002年3月5日
SPA '02
29
現実のアプリケーションの性能
オリジナル
SoftwarePot
正規化実行時間
2
1
0
Emacs Lisp
2002年3月5日
LaTeX
SPA '02
make & gcc
catman
30
オーバヘッド
100%
75%
50%
25%
0%
Emacs Lisp
2002年3月5日
LaTeX
SPA '02
make & gcc
catman
31
ファイルシステムコールが
1秒間に呼び出される回数
400
300
200
100
0
Emacs Lisp
2002年3月5日
LaTeX
SPA '02
make & gcc
catman
32
関連研究
Proof-Carrying Code [Necula 97]
静的なポリシーenforce
Ufo, Consh [UC Berkeley]
仮想FS上でソフトウェアを実行
「仮想FSをソフトウェアパッケージとして
流通させる」という着想なし
2002年3月5日
SPA '02
33
関連研究
世界OS [石井ら ’01]
実際のFS全体を複製した仮想FSを構築
仮想FSからは「実ファイルの本物」にアクセスできない
仮想FSを流通させるための機構なし
Java permission, Janus
FSのsubsetを見せる
cf. SoftwarePot: ニセFSを見せる
2002年3月5日
SPA '02
34
関連研究
仮想機械 as sandbox
ex. VMware, User-mode Linux, Jail
NFSによるファイルマップ
→ Inflexible
→ 管理者になってmount/umountは面倒
ソフトウェア流通には使いにくい
巨大な仮想ディスクを流通させるのは困難
2002年3月5日
SPA '02
35
まとめ
ファイルシステムを含むsandbox
実際のFSからできる限り隔離
セキュリティポリシーでアクセス制御
Java permission-like, Janus-like
性能低下は2倍以下
頻繁にファイルアクセスしても2倍以下
2002年3月5日
SPA '02
36
今後の課題
ポリシーの表現力UP
資源消費制御
ユーザとコードベースに応じたポリシー変更
ファイル依存関係の検出支援
「このバイナリの実行にはどのライブラリが
必要か?」
2002年3月5日
SPA '02
37
SoftwarePot HP!!!
http://www.osss.is.tsukuba.ac.jp/pot/
ソースコード絶賛配布中!
2002年3月5日
SPA '02
38