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