next up previous
次へ: LIDS の管理および設定コマンド 上へ: 10月勉強会発表レポート 戻る: LFS(LIDS Free Session)

カーネルの封印

Linux では、LKM(Loadable Kernel Module) など、カーネルを動的に変更する機能を使用することができま す。例として、Linux のiptables でファイアーウォールを作るときに、LKM を使用して様々な機能を動的に組み込んでおけるようにしておくと、拡張性に優 れたシステムになります。 しかし、LKM はまた、セキュリティ上で好ましくない状態ももたらします。LKM を用いたrootkitの存在なども指摘されています(下記参照)。

heroin http://www.securityfocus.com/archive/1/7758/1997-10-05/1997-10-11/0
adore http://www.team-teso.net/releases/adore-0.42.tgz
これらは、LKM を用いてファイル自身やプロセスを隠してしまい、管理者から見 付けにくくするものです。LKM はカーネル空間で動いているため、ユーザーから は何が起きているのかを見ることができません。

(詳しくは、下記を参照してください: http://www.atmarkit.co.jp/fsecurity/rensai/rootkit04/rootkit02.html)

したがって、不用意にLKM オプションを選択しないほうが、セキュリティ上では 好ましいことになります。

LIDS を用いることによって、この種のrootkit の侵入を防ぐことがで きます。LIDS では、``lidsadm -I'' コマンドを用いてカーネルモジュールを Load/Unloadすることができないようにすることができます。このことをカーネルの''封印''と呼びます。

カーネルを封印した後は、LKM は動いているカーネルにモジュールを加えたり、 外したりすることが出来なくなります。これにより、封印後のrootkit の読み込 みを防ぐことができます。

しかし、実際にはサーバーを起動するときにNIC やSCSI カード、ppp などをモ ジュールとして組み込みたい場合があると思います。そのため、サーバー起動後 の全てのモジュールが読み込まれた後にカーネルを封印するため、/etc/rcX.d/ 以下に封印のためのスクリプトを記述し、最後に起動するように設定する必要が あります。

起動から、カーネル封印までの流れは、図1になります。

図 1: Linuxの起動から、カーネル封印を経てログインまでの流れ
\includegraphics[width=12cm clip]{/home/omok/doc/koedo_oct_2003/LKM_lids.ps}

具体的には、/etc/rc2.d/S99sealingとして

#!/bin/sh

case "$1" in 
	start) /sbin/lidsadm -I ;;
	stop)  ;;
	*)	echo "Usage: $0 start" >&2; exit 1 ;;
esac
exit 0;
としておけば良いでしょう。



Kazuki Omo 平成15年9月28日