強制アクセス制御 (MAC) ってなに

背景

強制アクセス制御 (Mandatory Access Control, MAC) を実現するシステムには、Linuxのセキュリティシステムである「SELinux」があります。以前からSELinuxについて気になっていたのですが、そもそも「強制アクセス制御」とは何かしっかり理解していないと感じたので調べてみました。

アクセス制御ってなに

CREXさんの記事によれば、アクセス制御とは「許可された人が、許可された情報にだけ、許可された方法でアクセスできるように管理すること」だそうです。自分では下記のようなものが「アクセス制御」されていると思います。

  • 特定のユーザーのみ、そのコンピューターにログインでき、またそのユーザーに許されたリソースにだけアクセスできる
  • SNSで、アカウント管理者だけがそのアカウントで投稿できる
  • 動画配信サービスで、契約者だけが動画を視聴することができる

逆に、「アクセス制御」されていないものも思いつきます。

  • 共用のコンピュータ
  • 誰でもアクセスできるウェブサイト
    • ただし、特定の地域やIPアドレスからのアクセスを弾く場合、「アクセス制御」していると言えるかもしれない

任意アクセス制御 (DAC)ってなに

強制アクセス制御の前に、任意アクセス制御 (Discretionary Access Control, DAC) について述べます。任意アクセス制御は強制アクセス制御と対になる概念で、あるリソースに対するアクセスは、そのリソースの所有者が自由に制御できます。

任意アクセス制御の例

  • UNIXやLinuxのファイルパーミッション
    • ファイルには所有ユーザーと所有グループが設定されており、所有ユーザーと所有グループ (とrootユーザー) は、そのファイルに対するアクセスを自由に設定できる。

どのあたりが「任意」なのかというと、ユーザーが自己の所有するリソースに対し、自由にアクセス制御をかけることができる裁量を持つ点が「任意」だそうです。

強制アクセス制御ってなに

強制アクセス制御では、リソースの所有者であってもそのリソースに対するアクセスを自由に設定することができません。アクセス設定は、システムや組織のポリシーによって制限されます。

強制アクセス制御の実装の例

  • SELinux (Security-Enhanced Linux)
    • アメリカ国家安全保障局 (NSA) が開発した、Linuxに強制アクセス制御機能を追加するモジュール。設定の難しさからか、インストールされていても無効化されがちな印象があります。
  • AppArmor
    • Canonicalが開発した、Linuxに強制アクセス制御機能を追加するモジュール。Ubuntuにデフォルでインストールされています。パスベースのルールで、SELinuxよりもわかりやすいのが特徴だそうです。

補足

強制アクセス制御では「リソースの所有者であってもそのリソースに対するアクセスを自由に設定することができ」ないのですが、例えばファイルに従来のファイルパーミッションを設定することが不可能になるわけではありません。「従来のファイルパーミッション」と「強制アクセス制御による認可」は両方とも有効になります。RedHatさんのドキュメント 4.7. SELinux Contexts – Labeling Files を見ると、次のような記載があります:

SELinux policy rules are checked after DAC rules. SELinux policy rules are not used if DAC rules deny access first.

つまり、従来のファイルパーミッションによる認可処理が行われた後にSELinuxポリシーによる認可が行われます。ここは戸惑うポイントかもしれません (私は戸惑いました)

感想

(注意: 以下は私の感想です。間違ったことが書かれているかもしれません。)

SELinux (を含む強制アクセス制御技術) は、「root権限で動作するWebサーバーアプリケーションが乗っ取られても、/var/www/html 以外にアクセスできないようにする」といったシナリオで効果を発揮してきたように記憶しています。しかし、最近だと

  • サーバーアプリケーションも非rootユーザーで動作させる
  • サーバーアプリケーションをホストで直接実行せず、コンテナで実行する

というような対策が取られつつあり、従来のようなシナリオにおいてはSELinuxの使用は過剰ではないかと思いました。もちろん、SELinuxは粒度の高いアクセス制御 (ファイル単位のアクセス制御) を提供しますし、またコンテナと組み合わせて使うこともできますが、設計のコストも上昇してしまうため、セキュリティ要件および掛けられるコストと相談が必要かと思います。

新規CTA