ファイルシステムとセキュリティ
2018-13
OSの代表的機能
pプロセス管理
n 実行中のプログラムの管理 n コンピュータの実行状態の制御 pメモリ管理
n 主記憶の管理 n プログラム実行のためのメモリの管理 pファイル管理
n 補助記憶の管理 n HDDやSSDに保存されたデータの管理 pその他
n 通信・ネットワーク,セキュリティ,ユーザ・課金管理など… 記憶管理ファイルシステム
pファイルとは何か
n 名前がつけられて,補助記憶(HDD等)に保存されるデータ単位 n 通常は静的=保存した状態のまま,消滅したり変化したりしない n 例) プログラム,文書,ソフトウェアやOSの設定情報,その他… pファイルシステム
n ファイルを格納する方式・構造 n 名前から情報を検索する一種のデータベースともいえる pファイル管理
n ファイルシステムの構造(階層型など)を維持・管理するOSの機能 n ファイルの作成・保存・読み込み,ファイルの検索,ファイルの保護 n その他…ファイルの形式
pファイルの内部構造
n 汎用機のOSでは,表構造を基本としたいくつかのファイル編成法が 決められており,データの種類やアクセス方法によって使い分ける n Windows,UNIX等では, OSはファイル構造に関与せずにバイト列 (バイトストリーム)として扱い,内部構造は各ソフトに任されている pファイルのアクセス方法
n 順次(sequential)アクセス: 先頭のデータから順々にアクセスする n 直接(direct/random)アクセス: 途中箇所を指定してアクセスできる n 記憶媒体によって,サポートするアクセス方法が異なる pファイルの種類
n ファイルには,通常その種類を表すデータ項目を付加する n ファイル名の一部に含まれる場合は,拡張子や接尾辞と呼ばれるp
UNIXやWindows
n ディレクトリやフォルダの階層(木構造)でファイルを管理する / bin grep ln more etc group hosts passwd home taro 文書.txt データ.csv jiro src prog.c prog.h lib sbin fsck ifconfig rarp shutdown usr bin sort vi etc lib var階層型ファイルシステム
ルートディレクトリ (「/」や「\」) ファイル サブディレクトリ (子ディレクトリ) ディレクトリ (フォルダ)ディレクトリ(フォルダ)
p
ディレクトリ操作
n ディレクトリのファイル一覧 Windows: dir UNIX: ls
n ディレクトリの作成/削除 mkdir / rmdir n カレントディレクトリの移動 cd (chdir) p
カレントディレクトリ
n 実行中のプロセスは,「現在作業中のディレクトリ」という情報を持つ n デフォルトでは,各種ファイル操作はカレントディレクトリが対象になる n プロセスは,自由にカレントディレクトリを移動することができる(cd) p特別なディレクトリ記法
n . そのディレクトリ自身を表す n .. 親ディレクトリ(ひとつ上のディレクトリ)を表すパス(
PATH)
pパス
n 階層型ファイルシステムの中で,ファイルの位置を表す記法 p絶対パス
n ルートディレクトリからたどった位置で示す n 例) C:\Windows\system32\drivers\etc\hosts n 区切り記号は,UNIXでは「/」,Windowsでは「\」(日本では¥) p相対パス
n あるディレクトリからの相対位置を示す n 1階層上のディレクトリ(親ディレクトリ)に上がることを「..」で表す n 例) cd ../../kadai 2つ上のフォルダの下にあるkadaiというフォルダに移動する特殊なファイル
pディレクトリファイル
n 「フォルダ」(または「ディレクトリ」) の正体も一種のファイルである n 中には,ファイルの一覧表 (名前と番号)が記録されている pリンクファイル
n “実体”は他のファイルに つながっているファイル n ファイルの別名を作成できる n 別名「ショートカットファイル」 pその他,デバイスファイルなど
…
ファイル名 番号 aaa.txt 3410 bbb 1034 ccc.c 4566 ddd/ 10035 … ディレクトリファイル リンク ファイル名 元の ファイル名 ファイル データファイル操作
API
pストリーム型ファイル入出力
n WindowsやUNIXで標準的な方法 n ファイルの中身は,バイト列として読み書きできる n open 名前を指定してファイルを開く(必ず必要な操作) n read 開いたファイルからデータを読み込む n write 開いたファイルにデータを書き込む n seek ファイルの中の自由な位置に移動する(ランダムアクセス) n close ファイルを閉じる pメモリマップトファイル
n ディスク上のファイルの内容を主記憶に “貼り付ける” n メモリを読み書きすると,ファイルの内容の対応部分が書き換わる n 仮想記憶の技術(ページイン/アウト)を応用して実現される補助記憶装置の構造
p磁気ディスクの構造(右図)
n トラック(A)=円周(同心円)の1周分 n セクタ(C)=トラック内の小さい扇型 (ディスクの最小記憶単位) n クラスタ(D)=OSが管理する 連続した一定数のセクタ pファイルシステムの実現
n ファイルの実体=クラスタの集合 n ファイルはディスク上で隣接して 保存されているとは限らない n クラスタを順々につなげるしくみがある n クラスタの割り当てには様々な方法がある 図はWikipediaから引用ファイルシステムの構造
pファイルシステムの実現方式
n どんなタイプのファイルを考えるか? n クラスタをどうつなげてファイルを保存するか? n 階層型(ディレクトリ・フォルダ)をどう実現するか? n ドライブの内部をインデックス領域とデータ領域に分けるのが一般的 インデックス領域 データ領域 クラスタ クラスタ クラスタ クラスタ クラスタ クラスタ クラスタ ファイルA ファイルB12
FATファイルシステム
p
FAT(File Allocation Table)
n MS-DOS(および昔のWindows)の方式 n 各ディレクトリに,クラスタにつながりを格納する “表”(FAT)を用意 n FATの各セルに,対応する番号のクラスタのリンクを保持する n 単純で高速だが事故に弱い (ルートディレクトリのFATが壊れると…) 0 1 2 3 4 5 6 7 8 9 10 03 04 07 06 FF 05 00 01 F7 0 1 2 3 4 5 6 7 8 9 10 File A
#1 File A #2 File A #3 File A #5 File A #6 File A #4 空き 予約 不良
FAT
データ領域(クラスタ番号)
iノード形式
pUNIXの方式(inode形式)
n インデックス領域に,クラスタのつながりを表す多分木構造を保持 n この木構造のノードをinodeという 図はWikipediaから引用高速性と信頼性
pディスクキャッシュ
n HDDから読み込んだデータを,主記憶等のRAMにしばらく保持する n 同じ領域を頻繁に読み書きする場合に,劇的に速度が改善する pRAID
n 複数ドライブを仮想的な1台のディスクとして扱い,少しずつデータを ダブって記録することで(冗長性),信頼性向上や無停止運転を実現 n RAID1: 2台のHDDを常に同じ内容に保つ n RAID2~6: 3台以上のHDDで高度なデータ復旧機能を提供する pジャーナリングファイルシステム
n ファイルの変更履歴を保持していくファイルシステム n 何らかの事故が起きたときに,(可能な限り)前の状態に復旧できるファイルの所有権と属性
pファイルの所有権
n マルチユーザシステムでは,ファイルは所有者(owner)情報を持つ n 所有者(と管理者)だけが,ファイルの属性を変更する権限を持つ n さらに,所有グループが設定できるOSもある(UNIX系など) pファイルの属性
n 作成日,変更日,内容の読み・書きの許可,ディレクトリ一覧許可, 隠しファイル,実行許可(プログラムとして実行できるか),など pアクセス制御
n UNIXでは,各ファイルは,所有者,所有グループ,それ以外への, 読み出し(r),書き込み(w),実行(x)の許可を設定できるn Windowsでは,アクセス制御リスト(ACL: Access Control List)
16
ユーザの権限
pマルチユーザシステム
n 複数のユーザでの利用に対応したOS n 個人用OSでも,通常使用,管理用などのモードとしてユーザがある p管理者ユーザ
n UNIX, Mac OS: スーパーユーザ(root)
n Windows: Administrator (Winサーバ: Domain Admins)
n 管理者モードで操作ミスをすると致命的 ⇒ 管理者になるのは必要
なときだけにするべき (WindowsのUACは無効化しない方がよい) p
ユーザごとの権限設定
n スーパーユーザ方式: 全能モード vs 一般ユーザモード
n ケーパビリティ方式: 権限を細かく分割して個別にユーザに付与
ユーザの認証
pパスワード,暗証番号,パスフレーズ
n 最も一般的,長いものから短いものまで種々の方式がある pワンタイムパスワード(使い捨てパスワード)
n 毎回または一定時間で,パスワードが変わっていく n “パスワード計算機”(スマホアプリもある)を持ち歩く必要がある pハードウェアキー
n 磁気カード,ICカード,RFIDなど,物理的な鍵となるもの n ドングル(USBコネクタなどに指す) p生体認証
n 指紋,手のひらや指の静脈パターン,指の長さ,眼の光彩など…パスワード認証
pパスワードの格納方式
n パスワードを平文のまま保存すると,盗聴や情報漏洩に弱い n 通常のシステムでは,パスワードは高度な「一方向ハッシュ関数」に よって,ハッシュ値(整数)に変換されて記憶されているp
認証手順
n ユーザが入力したパスワードをハッシュ関数でハッシュ値に変換する n 変換されたハッシュ値と,システムが持つハッシュ値を比較する n 両者が一致していれば,認証成功(本人確認)とする パスワード “jugemujugemu...” 458485634542... ハッシュ値 一方向 ハッシュ関数 逆変換は非現実的な計算量チャレンジ
&レスポンス認証
p盗聴対策をしたパスワード認証
n ネットワークなどでのパスワード盗聴防止に用いられる n WebのBasic認証もチャレンジ&レスポンス方式 n 「チャレンジ」と呼ばれるデータの列を事前に生成して共有しておけば, ワンタイムパスワードとして使用できる p認証手順
n サーバは,「チャレンジ」と呼ばれるデータを乱数等によって生成し, クライアントに送信する(または,事前に共有しておく) n クライアントは,ユーザが入力したパスワードを「チャレンジ」を用いて 暗号化し,サーバに送信する(レスポンス) n サーバは,クライアントから送られてきたレスポンスと,それとは別に 自分で「チャレンジ」を用いて計算した暗号化を比較し,それらが一致 していれば認証成功とするデジタル署名による認証
pデジタル署名,電子印鑑
n 一般的に公開鍵暗号系を使う n 「リプレイ攻撃」に弱いので,C&R方式などと組み合わせる p公開鍵暗号系
n 暗号化の鍵(秘密鍵)と復号化の鍵(公開鍵)が異なる暗号方式 n 暗号化の方法が分かっても,復号化の方法は分からない n 秘密鍵と公開鍵が正しく対応しているときだけ復号できる p認証手順
n ユーザは,事前にシステムに自分の公開鍵を登録しておく n ユーザは自分の秘密鍵でメッセージを暗号化し,システムに送信する n システムは,ユーザの公開鍵でそれを復号化して,認証するシステムセキュリティ
p設計面からの対策
n 強い暗号アルゴリズムの使用 n 1カ所を破られても致命的な影響が生じないようにする設計 p開発面からの対策
n 現実的なセキュリティ問題の原因は,ほとんどがプログラムのバグ n 常に裏をかかれる可能性を念頭に置いた「防衛的な」コーディング n 特に,ユーザやネットワークの入力値は,疑って入念にチェックする p運用面からの対策
n システムの脆弱性・セキュリティホールを発見したらすぐに修正する n 弱いパスワードを利用しているユーザなどへ警告する n 人間的な不注意や無知による情報漏洩に注意する(ゴミ箱等も)マルウェア(
1)
pマルウェア(
malware)
n 悪意のあるソフトウェア(malicious software)のこと pコンピュータウィルス
n 狭義では,自己増殖機能(感染機能)を備えるマルウェアのこと n 例えば,PCの中で実行ファイルに次々に感染していく pトロイの木馬
n 一見有用なプログラムを装い,ユーザを騙してシステムに侵入する n 侵入した後は,そのユーザの権限を乗っ取る(“踏み台”) pスパイウェア
n システムを密かに監視し,ユーザのプライベートな情報等を収集する n すべてのキー入力を収集するキーロガーと呼ばれるものもあるマルウェア(
2)
pワーム(ネットワークワーム)
n ネットワークを介して,マシンからマシンへと自動感染して広がる n 主にネットワークプロトコルの脆弱性(弱点)を攻撃する n 過去には,インターネット全体が機能不全になったこともある pバックドア(裏口)
n システムに侵入するために,何者かによって仕掛けられた裏口 n プログラマ(開発者)の誰かが仕掛けていることもある n 侵入者がユーザから侵入を発見されないようにしたり,バックドアを 設定したりするためのソフトウェアをルートキットと呼ぶ pスパム(迷惑メール)・フィッシングサイト
n ソフトウェアではないので分類上はマルウェアではないが,ユーザを攻撃の方法
p
パスワードクラック(解読)
n 総当たり攻撃(brute force attack),辞書攻撃,並列処理など
n ソーシャル・エンジニアリングが有効(誕生日やペットの名前を調査)
p
サービス不能攻撃 (
DoS: Denial of Services)
n 想定外(例えば大量)のデータを送り,システムを機能不全にする
n 例) scanf(“%d”, &n); ← 「a」と入力したらどうなる?
n 多数のマシンから総攻撃するものを,DDoS(分散DoS)と呼ぶ p