TOMOYO Linux

提供: ArchWiki
移動先: 案内検索

TOMOYO Linux は Linux 用の強制アクセス制御 (MAC) の実装です。2003年3月にローンチされ、NTT データ によって開発されています。TOMOYO Linux はシステムの振る舞いに着目し、目的を達成するのに必要な振る舞いやリソースについて報告させることができます。アクセス制限ツールとしてだけでなくシステム解析ツールとしても利用価値があります。

TOMOYO Linux におけるセキュリティのゴールは"多くのユーザーにとって現実的な要件を満たし、管理者が使いやすさを維持できる強制アクセス制御"を提供することです。TOMOYO Linux はセキュリティ専門家のためだけでなく、標準的なユーザーや管理者のために開発されています。

ノート: この記事では網羅的な解説はしないので、充実した プロジェクトのユーザードキュメント の補助としてお使いください。
ヒント: TOMOYO Linux 2.x ブランチが Arch Linux の [community] レポジトリに入っています。今のところこのブランチでは 1.x ブランチと同等の機能は完備されていませんが、手軽に始めたい人には 2.x ブランチの方が簡単にインストールできます。TOMOYO Linux 1.x ブランチはより良いセキュリティを求める人向けで、AKARI はその中間に位置します。

イントロダクション

TOMOYO Linux は簡単な方法でシステムを制御します:

  • カーネルのライフタイムに発生したアクセスリクエストの全てを記録します
  • 管理者は予想される・望ましいアクセスリクエストだけを許可するポリシーを作ります

AppArmor とは違って、TOMOYO Linux は、アプリケーションの exploit をつこうとする攻撃者からシステム全体を守るように設計されています。脅威に対処するために、TOMOYO Linux はテスト環境で全てのアプリケーションの挙動を記録し、記録された挙動内でアプリケーションの行動を本番環境で制限します。

TOMOYO Linux は他人に書かれた既製のポリシーファイルをユーザーが使うことを意図していません。自動的にポリシーファイルを生成する "学習モード" を必要に応じて使いながら、スクラッチからポリシーを作る必要があります。TOMOYO Linux はシステム内で起こっていることを逐一観測するのでシステムの解析ツールとしても有用です。strace と同じようにプログラムによって実行されている命令やアクセス中のファイル/ネットワークを報告します。

この表 では TOMOYO Linux と AppArmorSELinuxSMACK を比較しています。

開発ブランチ

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-ccsAURccs-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 フックを使えないため、高度なネットワークオペレーションのいくつかの制限が使えません
  • ケイパビリティ を使った制限は行えません
  • Looking up per-task variables is slower as they are managed outside "struct task_struct" in order to keep KABI unchanged. However, this should not be noticeable for the typical end-user as performance decrease by pathname based permission checking is dominant

このテーブル で AKARI と TOMOYO Linux 1.x、2.x ブランチとの比較を一覧できます。

ノート: 2.6.36 以後の Arch Linux カーネルでは全ての機能を有効にするのに必要なコンフィグレーションオプションの全てが提供されています。

インストール

ユーザースペースツールとあわせて AKARI をインストールする必要があります。akariAURccs-toolsAUR のパッケージは AUR で手に入ります。

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_TOMOYO=y
ノート: Arch Linux カーネルでは 2.6.36 から機能させるのに必要なオプションが全て備わっていましたが、カーネルバージョン 3.14 から、オプションは無効化されています。TOMOYO Linux 2.x を使うにはオプションを有効にしてカーネルをコンパイルする必要があります。もしくは、必要な設定がまだ残っている linux-lts カーネルを使うこともできます。

カーネルが TOMOYO Linux 2.x をサポートしているならば、後はユーザースペースツールを (AUR の tomoyo-toolsAUR から) インストールするだけです。

カーネルバージョンが 2.6.30 から 2.6.35 の場合、tomoyo-tools 2.2.x をインストールしてください。AURtomoyo-tools-2.2AUR パッケージで手に入ります。

アクティベーション

/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 アクセス要求がポリシーで許可されていない場合には拒否します。また、ポリシーへの追加も行いません。

学習用プロファイルはシステムや特定のアプリケーションを解析するために使うことができます。 Once all of the desired access requests of a domain have been identified, the policy for that domain can be edited as required before selecting the enforcing profile. This can be done for any and all domains from the start of system boot.

参照