DAC(任意アクセス制御)— 所有者が権限を握る
DAC(Discretionary Access Control) は「リソースの所有者が、誰にどのアクセスを許可するかを任意に決定できる」モデルです。 「Discretionary(裁量的・任意的)」という言葉が示す通り、ポリシーの設定権限が個々のリソース所有者の判断に委ねられています。 現代のOSで最も広く採用されており、UNIXのchmodやWindows NTFSのACLはその直接的な実装です。
UNIXパーミッション(chmod)の仕組み
UNIXではすべてのファイルに owner・group・others の3層と、read(r)・write(w)・execute(x) の3種類のビットが割り当てられます。chmod 755 script.sh はオーナーに rwx、グループと他者に r-x を付与するものです。 この9ビットが 1970年代から現在まで維持されているのは、実装の単純さゆえです。
しかし単純さには代償が伴います。グループの粒度が荒く、「特定のユーザーAだけ書き込みを許可したいが他のグループメンバーには禁止したい」という要求をネイティブに表現できません。 POSIXのACL拡張(setfacl)はこの問題を緩和しましたが、管理対象が増えると可視性が失われます。
Windows NTFS ACL の仕組み
Windowsは DACL(Discretionary ACL)と SACL(System ACL)を分離した、より細粒度な設計を採用しています。 DACL には ACE(Access Control Entry) が列挙され、各エントリが「Userまたはグループ、操作、Allow/Deny」を記述します。 ACE の評価順序は重要で、Deny エントリが Allow エントリよりも優先されます。 この設計はUNIXよりも表現力が高い一方、継承と上書きの複雑なルールが監査を困難にします。
DACの強みと弱み
| 観点 | DACの特性 | 具体例 |
|---|---|---|
| 柔軟性 | リソース所有者が独自にポリシーを設定可能 | ユーザーが自分のファイルを任意のユーザーと共有できる |
| 実装の単純さ | OSカーネルレベルで少ないコードで実現 | UNIX inode の9ビットパーミッション |
| トロイの木馬耐性 | 脆弱。所有者の権限で動くプロセスが悪用可能 | ユーザーが信頼するプログラムが裏で機密ファイルをコピー |
| 権限委譲制御 | 弱い。委譲の連鎖が追跡できない | AがBに権限付与 → BがCに転嫁 → 制御不能 |
| 大組織での一貫性 | 欠如しやすい。各所有者が独立判断するため | ファイルごとに異なるポリシーが乱立 |
Confused Deputy Problem(混乱した代理人問題)
DACの本質的な脆弱性を示す有名な思考実験が Confused Deputy Problem(1988年、Hardy)です。 コンパイラプログラム(Deputy)がユーザーの依頼でコードをコンパイルするシナリオを考えます。 コンパイラは課金のために請求ファイル(/etc/billing)への書き込み権限を持っています。 悪意あるユーザーが出力先として /etc/billing を指定した場合、コンパイラは「混乱した代理人」として ユーザーの代わりにシステムファイルを上書きしてしまいます。
コンパイラ自身はポリシー違反をしていません。しかし、コンパイラが持つ権限と、コンパイラを呼び出したユーザーの意図が分離されていないため、 ユーザーの権限を超えた操作が可能になります。DACはこの「呼び出し元の権限と代理人の権限の混同」を構造的に防げません。
MAC(強制アクセス制御)と Bell-LaPadula モデル
MAC(Mandatory Access Control) では、個々のリソース所有者ではなく、システム全体の管理者が定めたポリシーによってアクセスが強制されます。 所有者であっても、そのポリシーを回避することはできません(Mandatory = 強制)。
Bell-LaPadula モデルの背景(1973年)
Bell-LaPadula(BLP)モデル は1973年、MITREコーポレーションの David Bell と Leonard LaPadula が、 Roger Schell の指導のもと米国国防総省(DoD)向けに策定したものです。 DoDが抱える「Top Secret / Secret / Confidential / Unclassified」という多段階セキュリティ(MLS: Multi-Level Security)を 数学的に形式化することが目的でした。
モデルの核心は、すべての主体(Subject)と客体(Object)に セキュリティラベル を付与し、 そのラベルが形成する 格子(Lattice)構造 の上でアクセスを制御することです。 格子は「≦ で半順序関係が成立する集合」であり、ラベル間の「支配(dominate)」関係を定義します。
graph BT UC[Unclassified] --> C[Confidential] C --> S[Secret] S --> TS[Top Secret] style TS fill:#ef4444,stroke:#b91c1c,color:#fff style S fill:#f97316,stroke:#ea580c,color:#fff style C fill:#eab308,stroke:#ca8a04,color:#fff style UC fill:#22c55e,stroke:#15803d,color:#fff
BLPの2つの主要ルール
BLPモデルは機密性を保護するため、2つの基本プロパティを定義しています。
| プロパティ名 | 通称 | ルール | 目的 |
|---|---|---|---|
| Simple Security Property | ss-property | No Read Up: 主体は自分より上位ラベルのオブジェクトを読めない | 機密情報の漏洩防止 |
| Star Property (*-property) | *-property | No Write Down: 主体は自分より下位ラベルのオブジェクトに書き込めない | 機密情報の格下げ転写防止 |
この2ルールが組み合わさることで、機密情報は常に同等以上のクリアランスを持つ主体しかアクセスできず、 低位ラベルへの「漏れ落ち」が構造的に防止されます。 Bell と LaPadula は、これら2プロパティを満たすすべての遷移が機密性を維持することを証明した Basic Security Theorem(BST) を示しました。
McLeanの批判と Tranquility Property
1985年、John McLean は BSTに対して致命的な反例 System Z を提示しました。 「全ラベルを Unclassified に再分類するポリシーは BSTを満たすが、明らかに安全でない」というものです。 この批判は、BLPが静的なラベル変更を制約していないことの問題を浮き彫りにしました。
この欠缺に対応するために追加されたのが Tranquility Property(静穏性) です。 セキュリティラベルはシステム稼働中に変更されないことを要求します(Strong Tranquility)。 実務的に非現実的なため、「ラベルを下げる変更は禁止するが上げる変更は許可する(Weak Tranquility)」 という緩和版も提案されています。
Biba モデル — 完全性の守護
Biba モデル(1975〜1977年、Kenneth Biba / MITRE Corp.)は、BLPが手つかずにした完全性(Integrity)の保護に特化して設計されました。 その構造は BLP の「数学的双対」と呼ばれます — 読み書きの方向ルールが正確に反転しているからです。
| モデル | 保護対象 | 読み取りルール | 書き込みルール |
|---|---|---|---|
| Bell-LaPadula | 機密性 | No Read Up(上位を読めない) | No Write Down(下位に書けない) |
| Biba | 完全性 | No Read Down(下位を読めない) | No Write Up(上位に書けない) |
Biba における「完全性レベル」は信頼度のランクを意味します。 高完全性レベルのデータ(検証済み財務データなど)は、低完全性レベルのソース(外部入力や未検証データ)から汚染されてはなりません。No Read Down はこの汚染経路を、No Write Up は逆方向の偽データ注入を防ぎます。
BLPとBibaを同時に満たせない問題
BLPとBibaを同じシステムに同時適用しようとすると、深刻なジレンマが生まれます。 例えば、高機密・高完全性の主体が低機密・低完全性のオブジェクトと相互作用する場合、 BLPの「No Write Down」とBibaの「No Write Up」が矛盾します。 現実のシステムでは、機密性と完全性のどちらを優先するかを明示的に設計判断する必要があり、 多くの場合ユースケースに応じてどちらかを主軸に選択します。 軍事系では BLP、金融・医療系では Biba(またはClark-Wilson)が重視されます。
Clark-Wilson モデル — 商業的完全性の設計
1987年、David Clark と David Wilson は Clark-Wilson モデル を発表しました。 DoDを対象とした BLP/Biba とは異なり、商業環境(金融・会計)における完全性保護を目的として設計されています。
Well-Formed Transaction と職務分離
Clark-Wilson の核心概念は Well-Formed Transaction(適正トランザクション)です。 データへの変更は、システムが定めた TP(Transform Procedure: 変換手続き)を通じてのみ行われなければなりません。 データへの直接アクセスは禁止され、必ずTPが完全性チェックを伴うトランザクションとして実行されます。
| 概念 | 略称 | 意味 | 例 |
|---|---|---|---|
| Constrained Data Item | CDI | 完全性制約の下に置かれたデータ | 勘定元帳、医療記録 |
| Unconstrained Data Item | UDI | 外部から入力される未検証データ | ユーザー入力フォーム |
| Transform Procedure | TP | CDIを安全に変換する認定済み手続き | 送金処理、承認ワークフロー |
| Integrity Verification Procedure | IVP | CDIの完全性を検証する手続き | 残高チェック、整合性監査 |
もう一つの柱が 職務分離(Separation of Duties)です。 「発注者と承認者は別人でなければならない」「帳簿入力者と監査者は別人」という会計の原則をシステムポリシーとして強制します。 これにより単一の悪意ある内部者がシステムを不正操作することを困難にします。 Clark-Wilson は医療・金融・製造業の ERP システムに広く影響を与え、SOX コンプライアンスの技術的基盤の一つとなっています。
Orange Book(TCSEC)とその遺産
1983年から1985年にかけて米国国防総省(DoD)が発行した TCSEC(Trusted Computer System Evaluation Criteria)、 通称 Orange Book(表紙の色に由来)は、セキュリティ評価の最初の標準化試みでした。
Orange Book は評価レベルを以下のように分類しました。
| 評価レベル | 名称 | 要件概要 | 代表例 |
|---|---|---|---|
| D | Minimal Protection | 評価基準を満たさないシステム | MS-DOS |
| C1 | Discretionary Security | 基本的なDAC、ユーザー認証 | 初期UNIX |
| C2 | Controlled Access | 細粒度DAC、監査ログ、オブジェクト再利用保護 | Windows NT 4.0 |
| B1 | Labeled Security | MAC(ラベルベース)、BLPモデル準拠 | Trusted Solaris |
| B2 | Structured Protection | 正式なセキュリティポリシーモデル、隠れチャネル対策 | Multics |
| A1 | Verified Design | 数学的証明によるデザイン検証 | SCOMP |
Orange Book は DAC と MAC という用語を公式に定義した最初のドキュメントとして重要です。 ネットワーク環境への対応力不足(「Red Book」で補完)や商業システムへの適用困難さから、 2000年代以降は国際標準 Common Criteria(CC / ISO/IEC 15408) に主役を譲りましたが、 DACとMACという概念的枠組みは現代まで継承されています。
MACの現代的実装
古典的な理論モデルは、現代のOSとクラウド基盤に形を変えて生き続けています。
SELinux の Type Enforcement
SELinux(Security-Enhanced Linux) は、NSA(米国家安全保障局)が開発し 2001年にLinuxカーネルにマージされたMACフレームワークです。 BLPの軍事的MLS概念に加え、より実用的な Type Enforcement(TE) を中心に設計されています。
TEでは、すべてのプロセスに ドメイン(domain)、すべてのファイル/リソースに タイプ(type)というラベルを付与し、ポリシーファイルで「どのドメインがどのタイプに対してどの操作を許可するか」を宣言します。 デフォルト拒否(default deny)の原則により、ポリシーに記述のない操作はすべてブロックされます。
AppArmor のプロファイル方式
AppArmor(Ubuntu/SUSE標準)は SELinux よりも簡易な設計で、 各プログラムに プロファイル を作成し、アクセス可能なファイルパスと操作を列挙します。 SELinuxがラベルベースなのに対し、AppArmorはパスベースのため理解・管理が容易ですが、 ハードリンクやsymlink経由の攻撃に対してはSELinuxより弱いとされます。
Linux Capabilities による細粒度特権制御
従来のUNIXでは特権操作は「root(uid=0)かどうか」という二値判断でした。Linux Capabilities(カーネル2.2以降)はこのスーパーユーザー権限を約40の細粒度な ケーパビリティ に分割しました。 たとえば CAP_NET_BIND_SERVICE(1024以下のポートにバインド)だけを付与すれば、 フルのrootを与えずにWebサーバーを80番ポートで起動できます。 コンテナ環境(Docker, Kubernetes)では securityContext.capabilities でケーパビリティを削除・追加することが 最小権限原則の実践として標準化されています。
| 実装 | 方式 | 強み | 弱み | 典型的用途 |
|---|---|---|---|---|
| SELinux | ラベル + Type Enforcement | きめ細かいポリシー、デフォルト拒否 | 学習コストが高い、ポリシー作成が複雑 | RHEL/CentOS/Android |
| AppArmor | パスベースプロファイル | 設定が比較的容易、可読性が高い | symlink攻撃に弱い | Ubuntu/SUSE/Debian |
| Linux Capabilities | 特権の細粒度分割 | root不要で特定操作を許可 | ケーパビリティ間の依存関係が複雑 | コンテナ環境、デーモン |
古典的なBLP・Biba・Clark-Wilsonは「どういう原則でアクセスを制御すべきか」という設計思想を与え、 SELinux・AppArmor・Linux Capabilities はその思想を現代のOS上で実装する道具です。 次章ではより実用的かつ現代的なモデルである RBAC(役割ベースアクセス制御) を詳しく扱います。
理解度チェック
Bell-LaPadulaモデルの「Star Property(*-property)」が定めるルールとして正しいものはどれですか?
キーボード: 1〜4 で選択、Enter で回答