保護と安全性.

Slides:



Advertisements
Similar presentations
ユーザ認証を考慮した 情報コンセントの活用 明治大学 情報システム管理課 服部裕之 ( ) ’ 99私情協 学内 LAN 運用管理講習会.
Advertisements

情報基礎A 情報科学研究科 徳山 豪.
情報実験:ネットワークコンピューティング入門
Unix生活 Vol.1
(株)アライブネット RS事業部 企画開発G 小田 誠
実習用サーバの利用開始手順 (Windowsの場合) TeraTerm Proをインストール 公開鍵をメールで送付
受動的攻撃について Eiji James Yoshida penetration technique research site
Ibaraki Univ. Dept of Electrical & Electronic Eng.
社内システム進捗 前回までの決定事項 →システムは「Scala PlayFramework2」で作成
UNIX Life KMSF M2 saburo.
ネット時代のセキュリティ2(脅威の例) 2SK 情報機器工学.
CGI Programming and Web Security
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
Phenixサーバ クラックまとめ.
「コンピュータと情報システム」 07章 インターネットとセキュリティ
ネットワークコミュニケーション よく使われるアプリケーション DNS 7/5/07.
Webサイト運営 09fi118 橋倉伶奈 09fi131 本間昂 09fi137 三上早紀.
Vulnerability of Cross-Site Scripting
Netscape Communicator Eudora Microsoft Word
仮想計算機を用いたファイルアクセス制御の二重化
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
第5章 情報セキュリティ(前半) [近代科学社刊]
セキュリティ・チェックリスト解説 【5~10分】
第13回 今日の目標 §4.3 情報セキュリティー 情報化社会の特徴を社会的な面から概観する 情報に関わる危険の要因を示す
Telnet, rlogin などの仮想端末 ftp などのファイル転送 rpc, nfs
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ま と め と 補 足 ネットワークシステムⅠ 第15回.
情報コミュニケーション入門 総合実習(1) 基礎知識のポイント(2)
保護と安全性.
鯖管のすヽめ.
第2章 第1節 情報通信の仕組み 1 ネットワークの仕組み 2 通信プロトコル 3 認証と情報の保護
公開鍵認証方式の実習 TeraTermの場合
第8章 Web技術とセキュリティ   岡本 好未.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
型付きアセンブリ言語を用いた安全なカーネル拡張
SAccessor : デスクトップPCのための安全なファイルアクセス制御システム
Linux リテラシ 2006 第4回 ネットワーク CIS RAT.
九州大学キャンパスクラウド 利用法 情報ネットワーク特論 講義資料.
ネットワークアプリケーションと セキュリティ
第7回ネットワークプログラミング 中村 修.
7. セキュリティネットワーク (ファイアウォール)
仮想計算機を用いて OSを介さずに行う安全な ファイルアクセス制御
分散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: 前坂たけし
仮想環境を用いた 侵入検知システムの安全な構成法
Linux の世界に 触れてみよう! 情報実験 第 3 回 (2005/10/21)
gate登録システム: 設計ポリシーから使い方まで
サーバ・クライアントシステム (X Window System )
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
異種セグメント端末による 分散型仮想LAN構築機構の設計と実装
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
tcp wrapper 2002年9月24日 大橋 巧 牧之内研究室「インターネット実習」Webページ
ユーザ認証の盗聴 2002/9/10 峯 肇史 牧之内研究室「インターネット実習」Webページ
VPNクライアント接続 サーバー保守のための安全な経路+作業者単位のアクセス制御 簡単な図 (網羅性より象徴性)
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

保護と安全性

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

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

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

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

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

誰が成りすましを実行できるのか? もちろん,誰でもできたら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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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