TOMOYO Linux (日本語) - ArchWiki

# TOMOYO Linux (日本語)

関連記事

- セキュリティ
- AppArmor
- SELinux

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

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

Note: この記事では網羅的な解説はしないので、充実した プロジェクトのユーザードキュメント の補助としてお使いください。
Tip: 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 と 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-ccs[broken link: package not found] と ccs-tools のパッケージが存在します。

### 初期設定

ポリシーを初期化してください:

    # /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 ブランチとの比較を一覧できます。

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

### インストール

ユーザースペースツールとあわせて AKARI をインストールする必要があります。akari と ccs-tools のパッケージは 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

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

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

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

### アクティベーション

`/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 ドキュメント
- 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.

## 参照

- TOMOYO Linux SourceForge ページ
- TOMOYO Linux Wiki
- AKARI SourceForge ページ
- TOMOYO Linux 1.8.x ドキュメント
- TOMOYO Linux 2.5.x ドキュメント
- TOMOYO Linux Security Goal
- Policy sample
- TOMOYO Linux on the Embedded Linux Wiki
- PacSec 2007 のプレゼンテーションスライド

Categories:

- Security (日本語)
- Kernel (日本語)