2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

TOMOYO Linuxでガチガチのセキュリティ!

TOMOYO Linuxとは、 ここ をみてくだされ。NTTデータ 原田さん中心に開発が進められてきた。
余談だが、先日、原田さんのTOMOYO Linuxのプレゼンを聞いたけど、とても話が面白かった(笑)。作者のProjectサイトでは、TOMOYO Linuxを強制アクセス制御の拡張型と言っている。 同じような系列で、有名どころではなんと言っても selinux であろう。このselinuxは、kernel2.6に組み込まれたけど、俺は設定が複雑なのと能書きが解らないので現在拒否反応を起こしている(笑)。むしろ、selinuxより LIDS(リズ) の方が設定とか能書きは解りやすい。しかし、これもiptables的な設定方法であるため、初心者には敷居が高い。そんな背景の中で、このTOMOYO Linuxは「学習モード」と言う機能がある。俺は、失礼ながら「馬鹿ちょんモード」と呼んでいる。つまり、クラックされて悪人に自鯖へ侵入されても、予め致命的な行為を、ACCEPTモードで学習させ、ENFORCEモードで実際に実行して、その行為を禁止するのである。それも、root権限を持ってもその行為は禁止される。そんな、強制アクセス制御を可能とする。
もちろん、マニュアル設定も出来るが、細かい設定にはそれなりのUnixに熟練したスキルが必要だ。
と言う事で、ここでは俺が実際にTOMOYO LinuxをDebian Linux 3.1 Sargeにぶっこんだのでインストール方法から説明する。なにやら、このサイトをリンクしていただいて有りがたいので俺のサイトでTOMOYOLinuxに関して解らない事は ここ を参照することをお勧めする。

OS:Debian Linux3.1 Sarge
ターゲットKernel:kernel 2.6.16


1.準備
TOMOYO Linuxはカーネルへパッチを当てなければならないので、kernelの再構築が必要だ。
したがって、Debianの場合 ここ を見て貰うと解るけど、

main2:~# apt-get update
main2:~# apt-get install libncurses5-dev
main2:~# apt-get install kernel-package

その他に、
main2:~# apt-get install libreadline5-dev
が必要。


2.インストール

1)ツールをコンパイルする
えーと、必要なソース類は、 ここ に揃っていまふ。
main2:~# mkdir -p /root/ccstools
main2:~# cd /root/ccstools
main2:~/ccstools# wget http://osdn.dl.sourceforge.jp/tomoyo/19607/ccs-tools-1.1-20060401.tar.gz ← 一行で
main2:~/ccstools# tar zxvf ccs-tools-1.1-20060401.tar.gz
main2:~/ccstools# make -s all

コンパイルが終わったら、以下のファイルがccstoolsディレクトリに有るか確認する。
* loadpolicy
* editpolicy
* savepolicy
* findtemp
* sortpolicy
* setlevel
* ccs-auditd
* make_exception.sh

2)カーネルコンパイル
モジュールディレクトリを作る
main2:~# mkdir -p /lib/modules/2.6.16-ccs
main2:~# cd /usr/src/
main2:/usr/src# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz
main2:/usr/src# tar zxvf linux-2.6.16.tar.gz
main2:/usr/src# chown -R root.root linux-2.6.16

ソースからライタブル属性を削除する
main2:/usr/src# cd linux-2.6.16
main2:/usr/src/linux-2.6.16# find -print0 | xargs -0 chmod go-w —
kernelパッチをゲットする
main2:/usr/src/linux-2.6.16# wget http://osdn.dl.sourceforge.jp/tomoyo/19606/ccs-patch-1.1-20060401.tar.gz ← 一行で
パッチを当てる
main2:/usr/src/linux-2.6.16# tar zxvf ccs-patch-1.1-20060401.tar.gz
main2:/usr/src/linux-2.6.16# patch -sp1 < ccs-patch-2.6.16.txt
main2:/usr/src/linux-2.6.16# make -s menuconfig
「File systems」を選択して、一番下まで行けば以下の図のような設定が出てきます。
とりあえず、* 印を下図のように付ける。

TOMOYO Linuxが有効となり「File Access Control support」が選択されていることを確認する。

コンパイルする
main2:/usr/src/linux-2.6.16# make -s
main2:/usr/src/linux-2.6.16# make -s modules modules_install install
initrdを作る
main2:/usr/src/linux-2.6.16# mkinitrd -o /boot/initrd.img-2.6.16-ccs 2.6.16-ccs

3)grubの編集
ACCEPTモードで学習させ、ENFORCEモードで実行させるから、grubメニューを以下のように編集する。ACCEPTモードとENFORCEモードは、 CCS=0 と CCS=1 のオプションスイッチで切り分けている。
main2:/usr/src/linux-2.6.16# cd /boot/grub/
main2:/boot/grub# vi menu.lst
省略
title Debian GNU/Linux, kernel 2.6.16-ccs ACCEPT mode
root (hd0,0)
kernel /boot/vmlinuz-2.6.16-ccs ro root=LABEL=/ CCS=0
initrd /boot/initrd.img-2.6.16-ccs
savedefault
boot

title Debian GNU/Linux, kernel 2.6.16-ccs ENFORCE mode
root (hd0,0)
kernel /boot/vmlinuz-2.6.16-ccs ro root=LABEL=/ CCS=1
initrd /boot/initrd.img-2.6.16-ccs
savedefault
boot
省略

実際のgrubメニュー画面は以下のようになる。

4)カーネルで制御できる項目を保存
main2:~# mkdir -p /root/security
main2:~# cp /proc/ccs/status /root/security/status.txt

5)ポリシーの初期設定
main2:~# vi /root/security/profile0.txt
MAC_FOR_FILE=1
main2:~# vi /root/security/profile1.txt
MAC_FOR_FILE=3

6)ポリシーの変更を許可するプログラムの設定
■ ポリシーを再読み込みする loadpolicy
■ ポリシーを編集する editpolicy
■ 制御レベルを変更する setleve

main2:~# vi /root/security/manager.txt
/root/ccstools/loadpolicy
/root/ccstools/editpolicy
/root/ccstools/setlevel

7)halt、rebootコマンドの編集
main2:~# vi /etc/init.d/halt
省略
halt –help 2> /dev/null
/root/ccstools/savepolicy a

halt -d -f -i $poweroff $hddown
省略

main2:~# vi /etc/init.d/reboot
省略
reboot –help 2> /dev/null
/root/ccstools/savepolicy a

reboot -d -f -i
省略

8)監査ログを取得するための準備
main2:~# mkdir -p /var/log/tomoyo
main2:~# /root/ccstools/ccs-auditd /dev/null /var/log/tomoyo/reject_log.txt

9)ログの切り出しファイル作成
main2:~# vi /etc/logrotate.d/tomoyo
/var/log/tomoyo/reject_log.txt {
  weekly
  rotate 9
  missingok
  notifempty
  nocreate
}

これで、インストールはとりあえずおしまい。


3.実際に動かしてみる

1)ポリシーを学習させる
実際に学習させて、実行してみる。再起動して、ACCEPTモードで立ち上げる。そして、以下のコマンドを打つ。
俺の場合は、sshでリモートloginした。

main2:~# id
uid=0(root) gid=0(root) groups=0(root)
main2:~# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
main2:~# /bin/sh
main2:~# date
Sun Apr 9 20:05:15 JST 2006
main2:~# tail -3 /etc/passwd
identd:x:100:65534::/var/run/identd:/bin/false
sshd:x:101:65534::/var/run/sshd:/bin/false
canna:x:104:104:Canna server,,,:/var/lib/canna:/bin/false
main2:~# exit
exit
main2:~# /root/ccstools/editpolicy

下図参照

自分が打ったコマンドのヒストリーが有るかを確認する。

main2:~# reboot

2)ポリシーを実行する
次に、ENFORCEモードで立ち上げて有効になってるかをチェックする。
以下のようにコマンドを打つとコマンドが許可されなければ有効になっている。
main2:~# id
uid=0(root) gid=0(root) groups=0(root)
main2:~# head -3 /etc/passwd
-bash: /usr/bin/head: Operation not permitted
main2:~# /bin/sh
-bash: /bin/sh: Operation not permitted
main2:~# tail -3 /etc/passwd
-bash: /usr/bin/tail: Operation not permitted

サーバのモニタには、以下のようなTOMOYO ERRORが表示されてAccessが許可されていない。

以上が、俺がやったTOMOYO Linuxの動作検証だった。

3)便利なコマンドラインモニター(モニターリング機能)
例えば、リモートで侵入してきたクラックな方々の挙動を逐一モニターリングが出来るのは非常に有益な機能である。例えば、以下のようにリモートクライアントでターゲット鯖に難なくloginされたとする。

login as: xxxxx
Using keyboard-interactive authentication.
Password:**********
Linux tomoyo 2.6.17-ccs #1 PREEMPT Wed Aug 9 14:27:12 JST 2006 i686 GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Last login: Wed Aug 9 15:25:54 2006 from 192.168.0.2
xxxxx@tomoyo:~$ su –
Password:**********
tomoyo:~# cd /tmp/
tomoyo:/tmp# touch crack
-su: /usr/bin/touch: Operation not permitted
tomoyo:/tmp#

これは、何者かがloginしてroot権限をゲットして、/tmpディレクトリへcrackというバックドアを仕掛けようとしてパーミッションエラーで怒られているところである。これに対し、モニター画面には以下のようなメッセージが表示される。

上の画面の下から2番目からの表示では、touchコマンドを実行したがAccess deniedになっていることを表してる。このように、リモートで侵入したところでAccess制御もかかってるし、モニターリングされているしで悪人には良いとこなしの状態となる(笑)。

4)ポリシーエディタを使う
TomoyoLinuxは、ただの馬鹿ちょんモードだけではなく保存されたポリシーをポリシーエディタにて編集することができる。以下にその手順を示す。
以下は、VMwarePlayerにDebian/GNU LinuxSarge3.1を入れてTomoyoPatchを当てた環境である。

■AcceptModeで起動する

■ポリシーエディタを起動する

■ポリシーエディタで編集する
前回のAcceptModeでのFreeコマンド入力により、/bin/rmコマンドと/bin/touchコマンド(カーソルが当たってる番号付近)がポリシー登録されていた。

/bin/rmと/bin/touchへカーソルを合わせて削除した。

■再起動して、EnforceModeで立ち上げる

■コマンド入力してみる
/tmpディレクトリにabcというファイルを作ろうと試みたが、touchコマンドがはじかれてることが解る。

次に、/etc/hostsファイルを削除しようと試みたが、rmコマンドがはじかれてるのが解る。

以上

コメント