Presentation is loading. Please wait.

Presentation is loading. Please wait.

保護と安全性.

Similar presentations


Presentation on theme: "保護と安全性."— Presentation transcript:

1 保護と安全性

2 「安全な」OS? そのOSでアプリケーションを動かしている限り危険なことは起こらないOS?
無理な注文 (3歩譲って)「情報漏えい, データの破壊, システムの機能不全が起きない」に限定すれば? rm –rf で全部のファイルが消えた! これが絶対できないOSがほしいのか? 操作者の知識や酔い具合を判定したいのか?

3 他の人が自分のファイルを全部消した 誰でもできてしまったら明らかに安全なシステムとはいえない
でも自分が放置した端末を勝手に使われたのならユーザの責任 パスワードを盗まれたら? 単純なパスワードを推測されたら? 誕生日パスワードはクレジットカード損害が補償されない

4 どこで線を引きたいのか? ○○省のwebページが改ざんされた!
これができてしまっては困るが... ネットワーク経由で自分のサーバにログインして自分のwebページを書き換えることができる これができないのは普通, 困る どこで線を引きたいのか? 思えばwikiや掲示板は誰でも「改ざん」できるし...

5 パスワード盗まれて侵入された! ユーザの責任? アプリケーションは「平文パスワード認証」を使っていた
実はインターネット上に流れているパスワードが盗み見されていた アプリケーション作成者の責任?

6 (控えめな)目標 安全と危険を一般的に線引きするのは不可能  ある操作の許可・不許可が決まる仕組みを理解する
目的・操作方法・一般常識・想定ユーザなどあらゆることに依存する  ある操作の許可・不許可が決まる仕組みを理解する アプリを安全にするための, OSとアプリとの責任分担を理解する

7 操作 「操作」 守りたいデータのありか ファイルに対する操作(読み・書き・実行) プロセスに対する操作(e.g., 強制終了)
プロセス間通信(ネットワークへの接続) 守りたいデータのありか メモリ HDDなどの2次記憶装置 ネットワーク プロセス間の分離 ファイルシステムAPI プロセス間通信API

8 復習 他のプロセスのメモリを読み書きすることはできない(例外: mmapなどを用いたプロセス間共有メモリ)
HDDやネットワークなどの外部装置にアクセスするにはシステムコールを用いなければならない この前提で, OSが提供するセキュリティ システムコールの実行許可・不許可の認定(authorization)

9 以降の概要 ファイルシステム操作のauthorization ネットワーク操作のauthorization
ファイルの許可属性(permission) プロセスのUID ネットワーク操作のauthorization ネットワーク経由アプリケーションのセキュリティ

10 ファイルシステム操作のauthorization
決定すべきこと: どのような場合に,ファイルをアクセスするシステムコールが成功するか(アクセス制御; access control) ファイルの読み書き Unix: fd = open(f, a); Win: handle = CreateFile(f, a, …); プログラムの実行 Unix: execv(f, …); Win: handle = CreateProcess(f, …);

11 ファイルへのアクセス可否を決定するパラメータ
アクセスを行ったプロセスP ユーザID: 操作を発行したプロセスは「誰か」「誰の権限で実行されているか」 アクセスされているファイルF アクセス許可: 誰に対して,何が許可されているか 所有者 アクセスの種類A 読み, 書き, 実行, アクセス許可変更, 所有者変更 open, execv, chmod, chown

12 「誰」の意味 OSが認識する主体=ユーザID 「Xはこのファイルを読める」の意味:
このXを「プロセスのユーザID (UID)」と呼ぶ つまりプロセスのユーザID (誰の権限で実行しているか)がどう決まるかを理解すればよい

13 以降の話 Unixを例に挙げて説明する Windowsも概念的には類似.だがAPIはもっと複雑

14 Unixにおける ファイルのアクセス許可 アクセス許可 アクセス許可を出す対象 read, write, execの3種類
所有者,グループ,その他全員 「グループ」: ユーザIDの集合(詳細省略) Read Write Exec 所有者 OK NG グループ その他

15 ファイルのアクセス許可を 見る・変更するシステムコール
見る struct stat s; stat(path, &s); 変更する chmod(path, mode); 許可情報は3桁の整数に符号化 4 2 1 Read Write Exec 所有者 OK NG グループ その他 4+2 4 6 4

16 ファイルのアクセス許可を 見る・変更するコマンド
見る: ls –l path 変更する chmod mode path

17 アクセス許可・所有者変更 アクセス許可情報(read, write, exec)によって,open/execの成否が決まる
ではそのアクセス許可を変更できるのは? 答え: ファイルの所有者 ではそのファイルの所有者はどう決まる? 答え: そのファイルを作成したプロセスのユーザID 特例: Unixでは特権ユーザ(root)がそれを変更できる(chown システムコール・コマンド)

18 ファイルに対する操作(まとめ) 読み書き (open) : ファイルに対するアクセス許可により,成否が決まる
アクセス許可変更 (chmod) : 所有者とrootのみ成功 所有者変更 (chown) : rootのみ成功

19 プロセスのユーザID そのプロセスがどのユーザIDの権限で実行されているかを示す,プロセスの属性 Unixでは3種類ある
実ユーザID (real user id; uid) 実効ユーザID (effective user id; euid) 保存ユーザID (saved user id) アクセス権の検査は実効ユーザIDに対して行われる 細かい話: 他のユーザIDは何のため?

20 プロセスのユーザIDを 見るコマンド ps top

21 プロセスの実効ユーザIDは「どう」決まるのか? (1)
Aが自分のファイルのアクセス許可を「自分だけ」(600)に設定した AはEmacsでAのファイルを開けるが, 他のユーザ(B)は開けない それはA (B)が起動したEmacsの実効ユーザIDがA (B)だから でもなぜそうなのか?

22 実効ユーザIDはどう決まる? (2) AはAのユーザIDとパスワードでログインしたからに違いない
でもプロセスを起動するたびにパスワードを渡して実効ユーザIDを決めているようには見えない(cf. fork, exec) そもそも実効ユーザIDを変更するのに「必ず」パスワードが必要というのは不便 そもそもパスワードが特別安全な認証手段というわけでもない

23 なりすまし (impersonation) API
答え: 「実効ユーザID, 実ユーザID」を変更できるシステムコールがある なりすまし (impersonation) API

24 成りすまし(Impersonation)
システムコール: seteuid(new_euid); setreuid(new_uid, new_euid); コマンド: su 「抜け道」のようだが,任意のユーザ権限で実行するプロセスを作るのに必要 「login」を受けつけるプログラム(e.g., sshデーモン) 各種サーバ: メールサーバ,Webサーバ, etc. 認証はアプリの責任!

25 誰が成りすましを実行できるのか? もちろん,誰でもできたらsecurityはゼロ 基本的なUnixルール:
euid = 0 (特権ユーザ; root)は無条件に可能 つまり「誰にでもなりすませる」 通常ユーザは,現在のeuid, ruidのどちらかにのみそれぞれを変更できる 例: 一時的に一般ユーザに降格(euid  0, ruid = 0), その後またrootに戻る

26 まとめ: 私はなぜ私か? OK setreuid(user, user); NG fork exec(“/bin/bash”, …);
まとめ: 私はなぜ私か? login: プロセス ユーザ名・パスワード 入力,照合 OK setreuid(user, user); NG fork exec(“/bin/bash”, …); euid = 0 (root) euid  0 (user)

27 非rootからrootになる手段はないのか?
答え: ある もしないのなら, “su”コマンドはありえない 実行可能ファイルの属性: setuid bit 実行(exec)された際に, “プロセスの実行ユーザID = そのファイルの所有者” となる このプログラムを実行する際は誰でも自分になって良い,という許可 時に必要.だがsecurity holeのもと

28 ネットワークアプリケーションとセキュリティ

29 代表的ネットワーク アプリケーション Web メール リモートログイン ネットワークファイル共有 遠隔端末 SSH, RSH, etc.
CIFS/Samba, NFS, etc. 遠隔端末 X Window, Windows Remote Desktop ネットワークアプリケーション  ネットワーク上の他のマシンを利用して機能を実現するアプリケーション

30 ネットワークアプリケーションの基本的構成
クライアント: 機能を利用するプロセス(必要に応じて立ち上がる) サーバ: クライアントからの呼び出しに備えて常時立ち上がっている(デーモン)プロセス アプリケーションの定めるプロトコル プロセス プロセス ソケット ソケット

31 ネットワークアプリケーションに固有の難しさ
アクセスをする(論理的な)主体は遠隔にいるクライアント 実際にOSにリクエストを出すのはサーバ上にいるプロセス リクエスト プロセス プロセス システムコール発行

32 ネットワークAPI : ソケット さまざまなプロセス間通信プロトコルに共通のAPI インターネット(IP, UDP, TCP)
いくつかのLANプロトコル(AppleTalk, etc.) 1 Unixコンピュータ内 (Unix domain)

33 ソケットAPI サーバ s = socket(…); bind(s, addr,port); listen(s, n); new_s = accept(s); send/recv(new_s, …); クライアント: s = socket(…); connect(s, addr,port, …); send/recv(s, …); connect accept

34 まめ知識 ps –ef netstat –a すべてのプロセスを表示 現在使われているソケットの状態を表示 待機中(LISTEN)
接続中(ESTABLISHED)

35 インターネットとセキュリティ (1) 「誰が」ソケットに対してアクセスできるのか?
通常,acceptしているソケットには誰でもconnectできる 相手のIPアドレスやポートに基づいてconnectの許可・不許可をする仕組みはある iptables ルータ機器に備わったフィルタリング しかし,相手プロセスのユーザIDに基づいたアクセス制御は組み込まれていない 全世界のユーザを管理・把握することはできないので,無理もない

36 インターネットとセキュリティ (2) ? 現在のOSにはインターネット越しのユーザに対する保護・アクセス制御の概念はない
アクセス制御(相手が誰なのかの判別; 認証)はアプリケーションの役目 サーバ ??? ? tau’s data コンピュータA コンピュータX

37 インターネットとセキュリティ (3) ひとたび計算機がインターネットに接続すれば,LANを流れるデータは容易に傍受可能

38 ネットワークアプリケーションのアクセス制御の実例
アプリケーションごとに異なる,アクセス制御の方針 それを実現するための,アプリケーションの構成

39 パターン1 : LANアプリケーション ユーザ集合が同一な複数のマシンで用いるアプリケーション 例: 部署内, 研究室内の複数のマシン
ネットワーク越しにファイルをアクセスする ネットワーク越しにログイン(リモートログイン)

40 リモートログイン 例: SSH 基本方針 接続を受け付ける クライアントがログイン後のユーザ名を主張する
認証が成功したら主張されたローカルユーザXと同一の権限を与える

41 遠隔ユーザの認証 パスワード認証 公開鍵認証 クライアントがサーバへ,ユーザXのパスワードを送信 SSH, RSH
サーバに保管してある公開鍵と,クライアントに保管してある秘密鍵が,対応する鍵の対であることを検証する SSH, PGP

42 認証後の処理 認証成功後,要求されたユーザに成りすます(setuid) ユーザ ssh tau@... ソケット
root権限で実行,認証実行 ユーザ ssh ログイン プロセス (sshd) ソケット bash as tau

43 メールの送信 方針: 誰でも誰へでもメールを送れる(迷惑メールは×だが…) メール送信の基本的な仕組み あて先アドレスにより定まる
メールクライアント あて先アドレスにより定まる メール(SMTP)サーバ メール(SMTP)サーバ クライアントに設定されている

44 通常のSMTPサーバのアクセス制御 同一LANからの送信要求は許可 受信(自分宛のメール)は無条件で許可
送信者の身元確認(認証)は行われない メールの目的から考えて, 送り主が自分のシステムのユーザとは限らないのでこれはやむを得ない

45 (一昔前の) Web 認証不要 サーバの方針: 誰からのアクセスも許可 クライアントの方針: ページを画面に表示するのみ ファイル
適当なユーザID Webサーバ プロセス Webブラウザ ファイル

46 現在のWeb サーバ側 クライアント側 買い物,銀行などの個人データへのアクセスを伴うアプリケーション
サーバから送られたscript (プログラム)の実行による動的な(見栄えの良い)ページの表示

47 Webにおけるアクセス制御 クライアントの認証 サーバの認証 Webサーバに組み込まれた基本認証(パスワードによるページの保護)
その他の各Webアプリケーション(CGI)ごとの認証 サーバの認証 IPアドレスによる認証 公開鍵(証明書)による認証

48 ネットワークセキュリティ(まとめ) 多くの部分がOSの守備範囲外
Unixはrootに, ほとんどのファイルへのアクセス権限 他のユーザになりすます権限 を与え,あとはアプリケーションに任せる

49 おまけ: 世の中を騒がせている「セキュリティ騒動」のパターン(1)
例: XXXXのバッファオーバーフロー脆弱性 XXXX : ネットワークサーバ(ssh, Window file共有, sendmail, etc.) root権限で実行中にバッファオーバーフローにより,任意の命令列が実行される 狙いはshellを実行する 考察: なぜroot権限で走る必要があるのか?

50 世の中を騒がせている「セキュリティ騒動」のパターン(2)
Internet Explorerのバグで情報がネットワークに流出 ブラウザはローカルのユーザ権限で実行 ブラウザは(かっこいいページを表示するため)ダウンロードされたscriptプログラムを勝手に実行する ブラウザ自身がアクセス制御をしなければ,直ちにローカルユーザのデータは丸見え

51 世の中を騒がせている「セキュリティ騒動」のパターン(2) 続き
そこでブラウザは「どのサイトからのscriptはどのデータにアクセスしてよいか」という独自のアクセス制御を「自前で,事細かに」実装する そこに間違い(バグ)があるとたちまち情報流出の危険ができる


Download ppt "保護と安全性."

Similar presentations


Ads by Google