第1回 知られざるセキュリティフレームワーク「LSM」の役割


Linuxカーネルには、バージョン2.6から「Linux Security Module」(LSM)というセキュリティフレームワークが導入されています。この連載ではLSMの仕組みを紹介するとともに、これを活用してオリジナルのセキュリティモジュールを作り上げていきます(編集部)

村上 純一
株式会社フォティーンフォティ技術研究所
研究開発部 αUnit シニア・リサーチエンジニア
2008/3/18

 ITインフラを語る上でセキュリティは欠かせない要素です。Linuxにも、セキュリティを強化する「LSM」(Linux Security Module)という枠組みが用意されています。

 実はこのLSMは、これまで何かと物議を醸してきました。本稿ではSELinuxやそのほかのセキュリティモジュールの紹介に始まり、Linuxカーネルに実装されているLSMのフレームワークとしての機能をひもとき、独自の機能拡張を行うために必要な事柄を説明していきたいと思います。

関連記事:
参考 Linux Kernel Watch 2006年5月版 「LSM不要論」に揺れるSELinux&AppArmor
http://www.atmarkit.co.jp/flinux/rensai/watch2006/watch05b.html
参考 Linux Kernel Watch番外編:セキュリティをやってるやつらは狂っている?!
http://www.atmarkit.co.jp/fsecurity/special/103kernelwatch/kernelwatch01.html

SELinuxの背後にいるLSM

 RedHatはもちろん、CentOSやFedoraといった最近のRedHat系ディストリビューションでは、標準でカーネルにSELinuxが組み込まれており、Enforcingモード注1)で動作しています。しかし「SELinuxはよく分からないから……」という理由から、インストール直後にまずSELinuxを無効にしてしまう方も多いのではないでしょうか? このSELinuxの背後で動いている仕組みがLSMです。

注1:Enforcingモードとは、設定したポリシーに基づいて実際にアクセス制御を行うモードのことを指します。これに対し、許可されていないアクセスがあった場合でもログを出力するだけで、実際にはアクセス制御を行わないモードを「Permissiveモード」と呼びます

 Linuxでは、安定版カーネルである2.6シリーズから、LSM(Linux Security Module)と呼ばれるセキュリティフレームワークが正式に導入されました。

 LSMは、あくまでカーネルにセキュリティ機能を拡張するためのフレームワークであり、それ自体が何らかのセキュリティ機能を提供するわけではありません。しかし、LSMを利用してセキュリティモジュールを開発すれば、カーネルのリビルドなしにセキュリティ機能を拡張することができます(注2)。

 前述したSELinuxは、現状ではRedHat系ディストリビューションではOS標準としての立場にありますが、技術的にいうと、LSMを利用したセキュリティモジュールの1つだといえます。

注2:従来のセキュリティモジュールでは、デバイスドライバなどでも利用されているLKM(ローダブルカーネルモジュール)と呼ばれる仕組みが利用可能でした。しかし、2008年1月にリリースされたカーネル2.6.24からは、セキュリティモジュールをLKMとして実装することができなくなりました。このため、ユーザーはカーネルのビルド時に静的にセキュリティモジュールを組み込む必要があります

紆余曲折を経て……開発の背景

 まず、LSMが開発された背景を簡単に紹介しましょう。2001年3月、カリフォルニア州サンノゼで開催されたKernel Summit 2001において、NSAにより、Linuxカーネルに対するセキュリティ機構としてSELinuxが提案されました。

 当時、SELinuxは関数に直接手を加えるカーネルパッチとして開発されており、NSA側は、開発版カーネルである2.5シリーズにSELinuxをマージしたいと考えていました。しかしこのときは、Linus氏が開発ツリーへのマージを却下しました。SELinux以外にもセキュリティ機構を提供するカーネルパッチが存在していたため、SELinuxのみマージすることをよしとしなかったためです。

 代わりにLinus氏は、こうしたプロジェクトに対し、カーネルパッチではなく何らかのモジュールとしてセキュリティ機構を実装するよう呼びかけました。

 これに応える形で発足したのがLSMの開発プロジェクトで、Immunixを筆頭に、NSAのほか、McAfee、IBMなどのソフトウェアベンダによって進められました。

 結果、LSMはローダブルカーネルモジュールとして実装されたセキュリティモジュールを動的にロードすることによりカーネルのセキュリティ機能を拡張可能なフレームワークとして完成しました。そして2003年12月、カーネル2.6シリーズにマージされることになりました。

LSMが提供する2つの機能

 LSMのフレームワークは、カーネルに以下の2つの機能を提供します。

カーネルの各処理に対するフックメカニズム

 LSMは、セキュリティチェックが必要だと考えられるカーネル内のさまざまな処理において、登録されているセキュリティモジュールへのコールバック関数の呼び出しを行います。

 例えば、LSMが無効な場合やセキュリティモジュールが登録されていない場合、ディレクトリエントリの読み出しは、プロセスのクレデンシャル(実効ユーザーID、実効グループID)とディレクトリのパーミッションに基づいて行われます。

 一方LSMが有効な場合は、登録されているセキュリティモジュールへのコールバック関数が呼び出され、セキュリティモジュールによるアクセス制御が行われます(図1)。

図1
図1 LSMによるセキュリティモジュールを利用したアクセス制御

 カーネルから呼び出されたセキュリティモジュールのコールバック関数では、独自のセキュリティモデルにのっとったアクセス制御を行います。ここでどのようなセキュリティモデルを採用するかは各セキュリティモジュールの自由であり、同時にセキュリティモジュールにとって一番の肝であるといえます。

 こうしたセキュリティモジュールへのコールバック関数呼び出しは広範囲に及んでおり、カーネル2.6.18ではおよそ150のフックが存在します。

関連記事:
参考 全貌を現したLinuxカーネル2.6[第4章]
http://www.atmarkit.co.jp/flinux/special/kernel26/kernel26_04b.html

カーネルオブジェクトに対するセキュリティモジュール用のデータ領域

 プロセスやオープンしたファイルといったカーネルオブジェクトに対して、セキュリティモジュール用の追加のデータ領域を提供します。これらのカーネルオブジェクトに対して、セキュリティモジュールが独自の管理情報を付与できるようにするためです。

実はこんなに! LSMを用いたセキュリティモジュール

 LSMを利用して開発されているセキュリティモジュールは、SELinux以外にも複数存在します。以下に一例を紹介します。

SELinux

 NSAによって開発されている、強制アクセス制御(MAC)を実現するセキュリティモジュールです。カーネルのメインツリーにマージされており、実質的にメインツリー内でLSMを利用している唯一のセキュリティモジュールだといえます。そのため過去には、「LSMというフレームワークは不要ではないのか?」という議論が何度か勃発し、linux-kernelメーリングリスト(LKML)を騒がせています。

関連記事:
参考 Red Hat Enterprise Linux 5で始めるSELinux
http://www.atmarkit.co.jp/fsecurity/special/97rhel/rhel01.html

AppArmor

 SUSE Linuxで採用されているセキュリティモジュールです。アプリケーションごとに「プロファイル」と呼ばれる制限を適用することで、アプリケーションの意図しない動作を防ぐことができます。

関連記事:
参考 セキュアOS論争から見える「カジュアル」なセキュアOS
http://www.atmarkit.co.jp/fsecurity/rensai/secureos03/secureos03.html

Capability

 Capability(ケーパビリティ)は、SELinuxなどのセキュアOS以前からLinuxに実装されていた、root権限を分割して管理するための仕組みです。2.6シリーズ以降ではLSMを利用して再実装されています。現時点で2.6シリーズの最新版である2.6.24、また次にリリースされる2.6.25ではいくつかの機能が追加されており、従来に比べて機能・設定の柔軟性が向上しています。

関連記事:
参考 権限を最小化するLinuxカーネルケーパビリティ
http://www.atmarkit.co.jp/fsecurity/rensai/lids03/lids01.html

Dazuko

 元々は独Aviraによって、リアルタイムウイルススキャン用に開発されたLSMです。ユーザープロセスによるファイルアクセスをインターセプトし、仮想デバイスドライバを通してファイルスキャンやファイルアクセスのモニタリングを行えるようにします。

1/2

Index
Inside Linux Security Module
 第1回 知られざるセキュリティフレームワーク「LSM」の役割
Page 1
 SELinuxの背後にいるLSM
 紆余曲折を経て……開発の背景
 LSMが提供する2つの機能
 実はこんなに! LSMを用いたセキュリティモジュール  
  Page 2
 ソースコードで見るLSMの動作
 フレームワークとしてのLSM


 Linux Squareフォーラム Linux/システム学習関連記事
連載:Windowsユーザーに教えるLinuxの常識(全12回)
Windowsのセオリーが通用しないLinux。Linux初心者向けに、LinuxというOSの考え方/常識をゼロから伝授!
連載:LFSで作って学ぶLinuxの仕組み(全4回)
管理者(root)は、何をしなければならないのか? 管理に際して検討すべきことは? 管理のための技術とは? など、駆け出し管理者のための考え方や方法論を検討する
連載:Linux管理者への道(全8回)
「Linux From Scratch」というシンプルなLinuxをインストール&環境構築する作業を通して、LinuxがOSとして機能するための仕組みや設定を見直そう
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間