保護と安全性.

Slides:



Advertisements
Similar presentations
経済学のための情報処理 はじめに.
Advertisements

情報実験:ネットワークコンピューティング入門
Unix生活 Vol.1
Samba日本語版の設定と運用のノウハウトラブルシューティング編
(株)アライブネット RS事業部 企画開発G 小田 誠
Android と iPhone (仮題) 情報社会とコンピュータ 第13回
実習用サーバの利用開始手順 (Windowsの場合) TeraTerm Proをインストール 公開鍵をメールで送付
Ibaraki Univ. Dept of Electrical & Electronic Eng.
社内システム進捗 前回までの決定事項 →システムは「Scala PlayFramework2」で作成
UNIX Life KMSF M2 saburo.
CGI Programming and Web Security
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
Phenixサーバ クラックまとめ.
「コンピュータと情報システム」 07章 インターネットとセキュリティ
Netscape Communicator Eudora Microsoft Word
仮想計算機を用いたファイルアクセス制御の二重化
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
第5章 情報セキュリティ(前半) [近代科学社刊]
保護と安全性.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
TCPソケットプログラミング ソケットプログラミング TCP-echoのデータ通信手順
第13回 今日の目標 §4.3 情報セキュリティー 情報化社会の特徴を社会的な面から概観する 情報に関わる危険の要因を示す
Telnet, rlogin などの仮想端末 ftp などのファイル転送 rpc, nfs
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ま と め と 補 足 ネットワークシステムⅠ 第15回.
情報コミュニケーション入門 総合実習(1) 基礎知識のポイント(2)
Linux リテラシ2006 第6回 デーモン CIS RAT.
インターネット技術特論 B:コマンドライン, shell 山口 実靖
鯖管のすヽめ.
第2章 第1節 情報通信の仕組み 1 ネットワークの仕組み 2 通信プロトコル 3 認証と情報の保護
公開鍵認証方式の実習 TeraTermの場合
第8章 Web技術とセキュリティ   岡本 好未.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
SAccessor : デスクトップPCのための安全なファイルアクセス制御システム
情報の収集と共有 第3章 3節  ネットワーク社会のルールとマナー 2 情報の安全性確保 p68~p71.
Linux リテラシ 2006 第4回 ネットワーク CIS RAT.
FreeBSDインストール 2002年4月10日.
九州大学キャンパスクラウド 利用法 情報ネットワーク特論 講義資料.
ネットワークアプリケーションと セキュリティ
分散IDSの実行環境の分離 による安全性の向上
インターネットにおける真に プライベートなネットワークの構築
セキュリティ 05A2013 大川内 斉.
Cisco Umbrella のご紹介 2018 年 1 月.
オペレーティングシステム イントロダクション
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
Linux リテラシ 2006 第5回 SSH と SCP CIS RAT.
gate-toroku-system のしくみ
Ibaraki Univ. Dept of Electrical & Electronic Eng.
情報通信ネットワークの 仕組み.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
公開鍵認証方式の実習 MacOS Xの場合.
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
インターネット             サーバーの種類 チーム 俺 春.
サーバ・クライアントシステム ( X Window System) 2006/01/20 伊藤 和也 original: 前坂たけし
最低限インターネット ネットワークにつなぎましょ!
コンピュータにログイン 第1章 コンピュータにログイン 啓林館 情報A最新版 (p.6-13)
Linux の世界に 触れてみよう! 情報実験 第 3 回 (2005/10/21)
gate登録システム: 設計ポリシーから使い方まで
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
Step.8 ファイアウォール PC 3 PC 1 PC 2 許可したアクセス のみ通過させる アクセスする ファイアウォール
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
異種セグメント端末による 分散型仮想LAN構築機構の設計と実装
gate-toroku-system のしくみ
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
tcp wrapper 2002年9月24日 大橋 巧 牧之内研究室「インターネット実習」Webページ
ユーザ認証の盗聴 2002/9/10 峯 肇史 牧之内研究室「インターネット実習」Webページ
VPNクライアント接続 サーバー保守のための安全な経路+作業者単位のアクセス制御 簡単な図 (網羅性より象徴性)
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

保護と安全性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

seteuid, setreuidの動作 各プロセスは二つの属性 実効uid (effective uid; euid), 実 uid (real uid; reuid)を持つ reuid=0, euid=0 seteuid(e) setreuid(r, e) seteuid(0) reuid=0, euid=e reuid=r, euid=e

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

まとめ: 私はなぜ私か? 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)

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

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

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

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

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

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

ソケット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

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

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

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

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

例1: 遠隔ログイン 例: SSH 要件 任意のクライアントから接続を受け付ける クライアントがログイン後のユーザ名を主張する ssh tau@server.eidos.ic.i.u-tokyo.ac.jp 認証が成功したら主張されたローカルユーザXと同一の権限を与える

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

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

例2: ネットワークファイルシステム 例: CIFS (Samba), NFS 多数のマシン,多数のユーザ間でファイルを共有 ファイルサーバ クライアント open(“foo.txt”, …); ファイルサーバ ファイル

ファイルシステム:認証方法 ファイルサーバが,どうやって,クライアントプロセスのuidを確かめるか? ファイルサーバ ファイルシステム open(“foo.txt”, …);

認証方法1 (CIFS) クライアントごとにsshと似た認証をする パスワードなど入力が必要だと, 多数のクライントでの共有には手間が多すぎ パスワードなしで認証しても,クライントごとに1プロセスを消費するのは多クライアント・ユーザでは問題 ファイルシステム クライアント ファイルサーバ ファイル open(“foo.txt”, …);

認証方法2 (NFS) クライアント「マシン」をまとめて認証 ファイルサーバ: 特定マシン(IPアドレス, ポート)からの依頼は信用する ポートは,特権ポート(rootでしか使えないポート; 通常1024以下)を使う ファイルシステム クライアント ファイルサーバ ファイル open(“foo.txt”, …); open “foo.txt” by uid=xxx

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