TOMOYO Linux
TOMOYO Linux は Linux 用の強制アクセス制御 (MAC) の実装です。2003年3月にローンチされ、NTT データ によって開発されています。TOMOYO Linux はシステムの振る舞いに着目し、目的を達成するのに必要な振る舞いやリソースについて報告させることができます。アクセス制限ツールとしてだけでなくシステム解析ツールとしても利用価値があります。
TOMOYO Linux におけるセキュリティのゴールは"多くのユーザーにとって現実的な要件を満たし、管理者が使いやすさを維持できる強制アクセス制御"を提供することです。TOMOYO Linux はセキュリティ専門家のためだけでなく、標準的なユーザーや管理者のために開発されています。
目次
イントロダクション
TOMOYO Linux は簡単な方法でシステムを制御します:
- カーネルのライフタイムに発生したアクセスリクエストの全てを記録します
- 管理者は予想される・望ましいアクセスリクエストだけを許可するポリシーを作ります
AppArmor とは違って、TOMOYO Linux は、アプリケーションの exploit をつこうとする攻撃者からシステム全体を守るように設計されています。脅威に対処するために、TOMOYO Linux はテスト環境で全てのアプリケーションの挙動を記録し、記録された挙動内でアプリケーションの行動を本番環境で制限します。
TOMOYO Linux は他人に書かれた既製のポリシーファイルをユーザーが使うことを意図していません。自動的にポリシーファイルを生成する "学習モード" を必要に応じて使いながら、スクラッチからポリシーを作る必要があります。TOMOYO Linux はシステム内で起こっていることを逐一観測するのでシステムの解析ツールとしても有用です。strace と同じようにプログラムによって実行されている命令やアクセス中のファイル/ネットワークを報告します。
この表 では TOMOYO Linux と AppArmor、SELinux、SMACK を比較しています。
開発ブランチ
TOMOYO Linux 1.x はオリジナルの実装です。TOMOYO Linux は2005年11月11日に初めてリリースされました。当時 Linux カーネルへのパッチとして作られ、現在も活発に開発されています。SELinux や SMACK、AppArmor など他のセキュリティモジュールと共存できます。
TOMOYO Linux 2.x は標準の Linux カーネルに統合されている実装です。2009年の6月に、Linux Security Module (LSM) インターフェースを利用する形で TOMOYO は Linux カーネル 2.6.30 にマージされました。しかしながら、LSM は TOMOYO Linux の完全な強制アクセス制御を Linux カーネルで機能させるには不十分です。そのため 1.x ブランチよりも少ない機能しか提供されていません。この表 にそれぞれのブランチの違いが比較されています。
AKARI は TOMOYO Linux 1.x をベースにローダブル・カーネル・モジュール (LKM) として機能します。そのためユーザーはカーネルにパッチをあてリコンパイルする必要がないという利点があります。このテーブル で AKARI と TOMOYO Linux 1.x・2.x ブランチの比較を一覧することができます。
TOMOYO Linux 1.x
TOMOYO Linux 1.x を使うことで TOMOYO Linux プロジェクトで開発された全ての機能を利用することができます。しかしながら、このブランチを使うには多くのハードルがあります。カーネルに ccs-patch をパッチしてその後リコンパイルしなくてはなりません。
linux-ccs とユーザースペースツールをインストールする必要があります。AUR にそれぞれ linux-ccsAUR[リンク切れ: アーカイブ: aur-mirror] と ccs-toolsAUR のパッケージが存在します。
初期設定
ポリシーを初期化してください:
# /usr/lib/ccs/init_policy
ポリシーファイルは /etc/css/
ディレクトリに保存されています。編集するには:
# ccs-editpolicy
AKARI
AKARI の制限
AKARI にはカーネルリコンパイルが必要ないという利点があります。TOMOYO Linux を単純にシステム解析に使うつもりなら、AKARI は一番簡単な方法になります。TOMOYO Linux をシステム制限に使うのなら、TOMOYO Linux 1.x ブランチの機能を得るために最低限の労力が必要です。ただ、少しの機能制限を考慮しなくてはなりません:
- どの機能が制限されるかはカーネルのバージョンと、ディストリビューションによる設定によります:
CONFIG_SECURITY=y [required] CONFIG_KALLSYMS=y [required] CONFIG_PROC_FS=y [required] CONFIG_MODULES=y [required] CONFIG_SECURITY_PATH=y [optional: for using absolute pathnames] CONFIG_SECURITY_NETWORK=y [optional: for providing network restriction]
- LSM フックを使えないため、高度なネットワークオペレーションのいくつかの制限が使えません
- ケイパビリティを使った制限は行えません
- KABI を変えないため "struct task_struct" の外側で管理されるタスク別の変数は操作が遅くなります。ただし、普通に使う場合は性能への影響はあまりありません。
このテーブル で AKARI と TOMOYO Linux 1.x、2.x ブランチとの比較を一覧できます。
インストール
ユーザースペースツールとあわせて AKARI をインストールする必要があります。akariAUR と ccs-toolsAUR のパッケージは AUR で手に入ります。
akariAURをインストールするには、事前に http://akari.osdn.jp/1.0/chapter-3.html.ja の手順に沿ってgpg鍵をインポートする必要があります。
AKARI を有効にするためにブートローダの設定を変える必要があります:
title Arch Linux root (hd0,0) kernel /boot/vmlinuz-linux root=/dev/sda1 ro init=/sbin/ccs-init initrd /boot/initramfs-linux.img
初期設定
ポリシーを初期化してください:
# /usr/lib/ccs/init_policy --module_name=akari
ポリシーファイルは /etc/css/
ディレクトリに保存されています。編集するには:
# ccs-editpolicy
TOMOYO Linux 2.x
TOMOYO Linux 2.x の制限
Linux カーネルのメインラインに取り込まれている TOMOYO Linux 2.x の機能は完全ではありませんが、2.5.x からほとんど遜色がなくなっています。1.x ブランチと比べると実装されていない機能が少数あります。この表 でそれぞれの開発ブランチの差を比較できます。
インストール
TOMOYO Linux 2.x は Linux のメインラインのカーネルの一部です。以下のカーネルコンフィグレーションが必要です:
CONFIG_SECURITY=y CONFIG_SECURITYFS=y CONFIG_SECURITY_NETWORK=y [Arch Linux カーネルでは無効になっています] CONFIG_SECURITY_PATH=y CONFIG_SECURITY_TOMOYO=y [Arch Linux カーネルでは無効になっています]
カーネルが TOMOYO Linux 2.x をサポートしているならば、後はユーザースペースツールを (AUR の tomoyo-toolsAUR から) インストールするだけです。
アクティベーション
/etc/default/grub
の GRUB_CMDLINE_LINUX_DEFAULT パラメータに security=tomoyo TOMOYO_trigger=/usr/lib/systemd/systemd
を追加:
GRUB_CMDLINE_LINUX_DEFAULT="quiet security=tomoyo TOMOYO_trigger=/usr/lib/systemd/systemd"
その後、grub.cfg
をリコンパイル:
# grub-mkconfig -o /boot/grub/grub.cfg
/usr/lib/systemd/systemd
が実行された時に TOMOYO は /etc/tomoyo/policy/current
の全てのポリシーをロードします。
次に、アクティベーションが上手くいったかどうか確認してください。dmesg の出力に以下のような行が表示されてなければなりません:
$ dmesg |grep -A 1 -B 1 TOMOYO [ 0.003375] Security Framework initialized [ 0.003387] TOMOYO Linux initialized [ 0.003396] AppArmor: AppArmor disabled by boot time parameter -- [ 6.829798] Calling /usr/bin/tomoyo-init to load policy. Please wait. [ 6.833709] TOMOYO: 2.5.0 [ 6.833712] Mandatory Access Control activated.
最初のうちは、コンピュータがシャットダウン・再起動に入った時にメモリー内のポリシーをファイルシステムに自動保存させたほうが良いかもしれません。そうしたい場合は、/usr/lib/systemd/system/tomoyo-savepolicy.service
スクリプトを書いて下さい:
/usr/lib/systemd/system/tomoyo-savepolicy.service
[Unit] Description=Tomoyo savepolicy [Service] Type=oneshot ExecStart=/bin/true ExecStop=/usr/bin/tomoyo-savepolicy StandardInput=tty RemainAfterExit=yes [Install] WantedBy=multi-user.target
systemctl でサービスを有効化・無効化できます:
# systemctl enable tomoyo-savepolicy.service
初期設定
ポリシーを初期化してください:
# /usr/lib/tomoyo/init_policy
ポリシーファイルは /etc/tomoyo/
ディレクトリに保存されています。編集するには:
# tomoyo-editpolicy
デフォルトでは、tomoyo は "Disabled" プロファイルで起動します (下のプロファイル表を見て下さい)。いますぐに学習モードを有効にすると良いでしょう。/etc/tomoyo/policy/current/domain_policy.conf
の <kernel>
ネームスペースのプロファイルを切り替えるだけです:
<kernel> use_profile 1 use_group 0
学習が必要なのかどうかよくわからない場合は、ここは無視してください。後で tomoyo-editpolicy を使って "Domain transition editor" でドメインを選択して S を押せばプロファイルを切り替えられます。
初期設定が終わったら、コンピュータを再起動してください。
ログデーモン
Tomoyo にはログデーモン /usr/sbin/tomoyo-auditd
が存在します。Skype などのアプリケーションなどで挙動を監視したいときに便利です (Skype を参照)。/etc/tomoyo/tools/auditd.conf
に最初から入っている設定ファイルに詳しい説明があり、ログファイルは /var/log/tomoyo
に保存されます。
systemd で使用するには公式の ドキュメント の 4.6 に書かれている /lib/systemd/system/tomoyo-auditd.service
ファイルを作成してください。
使用方法
TOMOYO Linux や AKARI を効果的に使うためにもドキュメントをよく読みましょう:
編集をはじめるためにポリシーエディタを起動します。TOMOYO Linux 1.x もしくは AKARI を使っている場合は ccs-tools を使います:
# /usr/sbin/ccs-editpolicy
TOMOYO Linux 2.x を使っている場合は tomoyo-tools を使います:
# /usr/sbin/tomoyo-editpolicy
システムが動いている間、TOMOYO Linux はドメインを作りツリーに加えます。TOMOYO Linux のアクセス解析・制限はドメインを通して適用されます。全てのプロセスはシングルドメインに属し、プロセスはプログラムを起動するたびに新しいドメインに遷移します。ドメインの名前は実行した順番に連結されて表現されます。例えば、カーネルが属しているドメインの名前は "<kernel>" で、カーネルによって起動した /sbin/init
のドメインの名前は "<kernel> /sbin/init"。もし /sbin/init
が /etc/rc.d/rc
を起動すると、そのドメインは "<kernel> /sbin/init /etc/rc.d/rc" になります。必要に応じてドメイン遷移を抑制したり初期化することができます。
それぞれのドメインにはプロファイルが割り当てられます。デフォルトでは異なる4つのプロファイルが定義されています:
Disabled | 通常のカーネルのように動作します。 |
Learning | アクセス要求がポリシーで許可されていなくても拒否しません。また、同じアクセス要求を次回以降は許可するためにポリシーに追加します。 |
Permissive | アクセス要求がポリシーで許可されていなくても拒否しません。ただし、ポリシーへの追加も行いません。 |
Enforcing | アクセス要求がポリシーで許可されていない場合には拒否します。また、ポリシーへの追加も行いません。 |
学習用プロファイルはシステムや特定のアプリケーションを解析するために使うことができます。ドメインのアクセス要求を全て確認して、ドメインのポリシーを必要に応じて編集してから Enforcing プロファイルを選択してください。システムの起動から全てのドメインに対して設定できます。