面 和毅
オープンソースのセキュアOS「LIDS(Linux Intruder Detection System)」の活用方法を解説する。LIDSは,比較的簡単な設定作業によりきめ細かなアクセス制御を実現できることから,セキュアOSに不慣れなユーザーにも使いやすいという特徴を持つ。連載では,LIDSの機能やWebサーバー構築を例にした具体的な設定方法を解説する。
LinuxなどのUNIX系OSでは,root権限(管理者権限)を持ったユーザー(rootユーザーやスーパーユーザーともいう)は,システムに対してあらゆる操作が行える。言い換えれば,rootにすべての権限が集中している。そのため,悪意を持った第三者にroot権限を奪取されてしまった場合には,システムに多大な損害が発生することは避け難い。
こうしたことから,セキュリティの観点からは,「rootへの権限の集中」はUNIX系OSの弱点とみなせる。この弱点を克服するための解決策の一つがセキュアOSの導入である。
強制アクセス制御とカーネル保護
LIDSは,オープンソースで開発されているセキュアOSである。LinuxベースのセキュアOSのなかでは比較的簡単に設定作業が行えて導入が容易なことから注目を集めている。
LIDSの最初のバージョンは,開発者のXie Huagang氏とPhilippe Biondi氏により,1999年10月15日に公開された。最初のバージョンは,Linuxのカーネル2.2用だったが,カーネルのバージョンアップに伴い,現在ではカーネル2.4用とカーネル2.6用という2種類のバージョンが開発・公開されている。
LIDSが提供する機能は主に,「強制アクセス制御」と「カーネル保護」に大別できる。それぞれについて,通常のLinux(LIDSを組み込んでいないLinux)と,LIDSを組み込んだLinuxを対比させながら説明する。
(1)強制アクセス制御
通常のLinuxでは,ユーザーが自分の所有するファイルやディレクトリのアクセス権(パーミッション)を自由に変更できる。また,rootユーザーは無制限にファイルやディレクトリにアクセスしたり,パーミッションの設定を変更したりできる。こうしたアクセス制御方式を,任意アクセス制御(DAC=Discretionary Access Control)と呼ぶ。
これに対して,LIDSを組み込んだLinuxでは,ユーザーは自分の所有するファイルやディレクトリに対してもあらかじめ設定されたアクセスしか行えない。アクセス権限の変更も行えない。これはrootユーザーにも当てはまる。アクセス権限を設定・変更できるのは,セキュリティ管理者のみである。こうしたアクセス制御方式を,強制アクセス制御(MAC=Mandatory Access Control)と呼ぶ。
この強制アクセス制御により,例えrootユーザーであっても,システムに対して行える操作が制限される。そのため,悪意を持った第三者にroot権限を奪取された場合でも,その権限が及ぶ範囲内にシステムの被害を限定できる。
強制アクセス制御ではまた,ファイルやディレクトリに対するアクセス制御だけでなく,プロセスに関するアクセス制御も行える。例えばシステムの再起動を行うプロセス(reboot)に関するアクセス権限や,ネットワーク設定を変更するプロセス(ifconfig)に関するアクセス権限などを設定できる。
(2)カーネル保護
Linuxは,「カーネル・モジュール」と呼ばれるソフト部品をカーネルに組み込むことで,カーネルの機能を拡張できる仕組みを持つ。例えば,ネットワーク・インタフェース・カードを使えるようにするためのデバイス・ドライバなどが,カーネル・モジュールとして提供されている。通常のLinuxでは,こうしたカーネル・モジュールを自由にカーネルに組み込めるようになっている。
しかし,この仕組みを悪用して,カーネル・モジュールとして組み込み可能な「rootkit」がインターネットなどに出回っている。rootkitとは,悪意を持った第三者が不正侵入を行うために用いるソフトウエアである。rootkitをカーネルに組み込まれてしまった場合には,パスワードを盗み見るなどの不正行為や,不正行為の痕跡の隠ぺい,さらには他のホストへの攻撃などが行われてしまう。
通常のLinuxがこのようなぜい弱性を持つのに対して,LIDSを組み込んだLinuxでは,カーネル・モジュールの組み込みを不可能にできる。これをカーネル保護機能と呼ぶ。カーネル保護機能により,カーネル・モジュールとして流通しているrootkitの侵入を防御できる。
不正侵入されても,被害を最小限にくい止められる
![]() |
図1●LIDSによるアクセス制御の例 Apacheのプロセスは,設定ファイルの読み込みとログの追記しか行えないように設定 |
(1)システムのすべてのディレクトリと一部のファイルに対して,読み込みと書き込みに関するアクセス権限を適切に設定する。
(2)Apache HTTP Server(以下,Apache)のプロセスが,ポート80番(http)と同443番(https)のみを使えるように設定する。
(3)Apacheのプロセスが,Apacheの設定ファイル(httpd.conf)の読み込みとログ(access_log)の追記のみを行えるように設定する(図1[拡大表示])。
このように設定したWebサーバー・システムが不正侵入されてしまったとしよう。具体的には,不正侵入者にApacheのぜい弱性を突かれて,その権限を奪われてしまったとする。この場合でも,LIDSの機能を用いた上記設定により,不正侵入者の行為を次のように限定できる。
このように,例え不正侵入されてしまったときでも,被害を最小限にくい止められることがLIDSを導入するメリットである。さらにLIDSを用いたシステムでは,リモートからの侵入が極めて困難になっている。これについては,第2回以降の連載で説明する。
設定作業が簡単に行えるようになったLIDS 2系列
最後に,LIDSの1系列と2系列の差異について簡単に紹介しておこう。
冒頭でも紹介したように,LIDSでは,カーネル2.4用とカーネル2.6用という2種類のバージョンが開発・公開されている。カーネル2.4用は「LIDS 1.2.0」といったバージョン番号を持つのでLIDS 1系列,カーネル2.6用は「LIDS 2.2.0」といったバージョン番号を持つのでLIDS 2系列と呼ばれることが多い。
LIDS 2系列では,1系列に比べて,下記の機能が追加されている。
(1)「ステートフルACL」の採用。これにより,強制アクセス制御の設定がより簡単に行えるようになった。
(2)「ACLディスカバリ・モード」の採用。これにより,アクセス制御リストのチェックが容易になった。
これらの機能は,LIDS 1系列にもバックポートされるようになってきているが,本来はLIDS 2系列で新たに実装されたものである。
この連載では,カーネル2.6用となるLIDS 2系列が今後の主流になるとみられることから,特に断らない限り,LIDS 2系列を対象に解説していく。
次回は,アクセス制御リストとケーパビリティについて説明する予定である。
■著者紹介
面 和毅(おも かずき)氏
学生時代よりUNIXに親しむ。1997年からサーバー構築およびセキュリティ全般を扱う仕事に従事,Linuxを使い始める。現在はLIDSの普及活動に注力。SELinuxコミュニティ内でのLIDS支部の立ち上げや,LIDS関連文書の日本語化,LIDSを用いたシステム構築の紹介などを行っている。