第18章 前置き

目次

18.1. AppArmor のインストール
18.2. AppArmor の有効化と無効化
18.3. プロファイルを行なうアプリケーションの選択
18.4. プロファイルの構築と修正
18.5. プロファイルの更新

お使いのシステムに AppArmor をうまく導入するには、下記の要件について注意深く 考慮する必要があります:

  1. プロファイルを行なうアプリケーションを決めること。 詳しくは 18.3項 「プロファイルを行なうアプリケーションの選択」 をお読みください。

  2. 18.4項 「プロファイルの構築と修正」 の概要に従って、必要な プロファイルを構築すること。必要であれば、結果を確認してプロファイルを 調整する必要もあります。

  3. お使い間環境が変化したような場合にはプロファイルを更新するか、もしくは AppArmor のレポートツールが記録するセキュリティイベントに対して何らかの処理 を行なうこと。詳しくは 18.5項 「プロファイルの更新」 をお読みください。

18.1. AppArmor のインストール

AppArmor は openSUSE を既定値でインストールした場合は、インストールされません。 AppArmor を完全にインストールするには、パターン apparmor を選択してインストールしてください。インストールには YaST ソフトウエア管理 モジュールを利用するか、下記の zypper コマンドを利用します:

zypper in -t pattern apparmor
  • apparmor-docs

  • apparmor-parser

  • apparmor-profiles

  • apparmor-utils

  • audit

  • libapparmor1

  • perl-libapparmor

  • yast2-apparmor

18.2. AppArmor の有効化と無効化

AppArmor は openSUSE をインストールしていれば、既定で起動するように 設定されています。 AppArmor の起動設定を変更するには、下記の 2 種類の 方法があります:

YaST システムサービス (ランレベル) の使用

システムの起動時に実行されるスクリプト群に対して、 AppArmor の起動処理を 追加したり削除したりすることで、 AppArmor を有効にしたり無効にしたりする ことができます。設定の変更は、再起動後に反映されます。

AppArmor コントロールパネルの使用

YaST AppArmor コントロールパネルを利用することで、動作中のシステムに 対して AppArmor の状態を有効または無効に切り替えることができます。ここでの 変更は即時に反映されます。コントロールパネルでは、イベントの開始や停止 のほか、システムの起動処理内に AppArmor の起動を追加するかどうかを設定する こともできます。

AppArmor を恒久的に無効化する (システム起動時に実行されないようにする) には、 下記の手順で行ないます:

  1. YaST を起動します。

  2. システム+システムサービス (ランレベル) を選択します。

  3. 熟練者モード を選択します。

  4. boot.apparmor と書かれている行を選択してから、 セット/リセット+サービスを無効にする を押します。

  5. あとは OK を押して YaST ランレベルエディタを終了します。

これで AppArmor は次回の再起動では初期化されなくなり、再度有効化しない限り 停止状態になります。 YaST のランレベルツールを利用すれば、サービスを 再度有効化するのも上記と似た手順で行なうことができます。

AppArmor のコントロールパネルを利用すると、動作中のシステムで AppArmor の状態を 切り替えることができます。これらの変更は即時に反映され、システムの再起動 後にもその設定が維持されます。 AppArmor の状態を切り替えるには、下記の手順で 実施します:

  1. YaST を起動します。

  2. AppArmor+AppArmor コントロールパネル を選択します。

  3. AppArmor を有効にする を 選択します。無効にしたい場合は選択を外します。

  4. あとは 完了 を押して AppArmor コントロールパネルを閉じます。

18.3. プロファイルを行なうアプリケーションの選択

プログラムに対する保護は、お使いの環境において攻撃を受ける可能性の あるプログラムに対してのみ、実施する必要があります。そのため、実際に 実行するアプリケーションのみをプロファイルしてください。攻撃を受ける 可能性のあるアプリケーションとしては、下記のようなものがあります:

ネットワークでの通信を行なうもの
Web アプリケーション
cron ジョブ

現時点でネットワークポートを開いている動作中のプロセスが何であるのかを 調べて、制限を行なうためのプロファイル作成に役立てるには、 rootaa-unconfined を実行します。

例18.1 aa-unconfined の出力

19848 /usr/sbin/cupsd not confined
19887 /usr/sbin/sshd not confined
19947 /usr/lib/postfix/master not confined
29205 /usr/sbin/sshd confined by '/usr/sbin/sshd (enforce)'

上記の出力例では、それぞれのプロセスが not confined と示されていて、制限を行なうのに独自のプロファイルが必要である旨が 示されています。 confined by と書かれているものは、 既に AppArmor で保護されていることを示しています。

[Tip]さらなる情報

プロファイルを行なうにあたって、正しいアプリケーションを選択するための 詳細については、 19.2項 「免疫を与えるプログラムの判断」 をお読みください。

18.4. プロファイルの構築と修正

openSUSE に同梱されている AppArmor は、最も重要なアプリケーション向けの プロファイルが事前に設定された形で公開されています。この状態から AppArmor を利用し、任意のアプリケーションに対する独自のプロファイルを作成することも できるようになっています。

プロファイルを管理する方法としては 2 種類の方法があります。 1 つは YaST の AppArmor モジュールで、グラフィカルなフロントエンドを利用する方法です。 もう 1 つは AppArmor スイート自身で提供されている、コマンドラインツールを 利用する方法です。いずれの方法とも、基本的には同じ動作です。

プロファイルを作成するには、それぞれのアプリケーションに対して下記の 手順を実施します:

  1. まずは root になった状態で AppArmor を利用し、アプリケーションの 大まかなプロファイルを作成します。これは aa-genprof プログラム名 のように実行する ことで作成できます。

    上の手順のほか、下記の手順でもかまいません。

    YaST+AppArmor+AppArmor プロファイルウイザード を実行して 基本的なプロファイルを作成します。このとき、プロファイル対象の アプリケーションはフルパスで指定します。

    基本的なプロファイルについて概要を作成すると、 AppArmor は学習モードに 移行します。学習モードでは実行したプログラムの動作が記録されますが、 制限は行なわれません。

  2. AppArmor に対して動作概要を正確に学習させるため、アプリケーションのすべての 機能を使用します。

  3. aa-genprof では S を押し、 AppArmor によって ステップ 2 で生成したログについて、ファイルの分析作業を 実施します。

    もしくは

    AppArmor プロファイルウイザード 内で システムログをスキャンして AppArmor イベントを検出 を押し、ログファイルの分析を行ないます。ウイザードが示す手順に従い、 プロファイルを完成させてください。

    AppArmor は、アプリケーションが動作していたときに記録したログファイルを検索し、 それぞれのイベントに対して正しいアクセス権を設定するように問い合わせが 表示されます。それぞれのファイルに対して設定することができるほか、 グロブを利用して複数を一括指定することもできます。

  4. お使いのアプリケーションの複雑さにもよりますが、 ステップ 2ステップ 3 の手順を繰り返す必要がある場合もあります。 この場合はアプリケーションの制限を設定し、制限された環境下でアプリケーションの 動作をテストし、新しいログイベントを処理し直してください。アプリケーションの すべての機能に対して正しく制限を行なうには、この手順を繰り返し実施する 必要となる場合があります。

  5. すべてのアクセス許可を設定したら、お使いのプロファイルを強制モードに 切り替えてください。作成したプロファイルが適用され、 AppArmor はプロファイル に記されたとおりの制限を行ないます。

    不平 (complain) モードで実行し、既存のプロファイルが存在する アプリケーションに対して aa-genprof を起動すると、 プロファイルはその学習サイクルを終了すると学習モードにあり続けます。 プロファイルのモード切替について、詳しくは 23.6.3.2項 「aa-complain—不平モード/学習モードへの突入」23.6.3.3項 「aa-enforce—強制モードへの突入」 をお読みください。

制限された環境で動作させた際は、対象のアプリケーションに対して必要な 作業を行ない、プロファイル設定をテストしてください。通常は制限された環境下 でも問題なく動作し、 AppArmor が動作しているかどうかが気になることはありません。 しかしながら、お使いのアプリケーションの動作に明らかな問題が見つかった場合 は、まずシステムログを確認して AppArmor がアプリケーションを制限しすぎていない かどうかを確認してください。お買いのシステムで使用しているログ機構に依存 しますが、 AppArmor のログを確認する際は下記の場所をご覧ください:

/var/log/audit/audit.log
/var/log/messages
dmesg

また、プロファイルを調整するには ステップ 3 の手順に 従い、対象のアプリケーションに対するログメッセージを分析してください。 問い合わせがあった場合は、アクセス権や制限についても判断を行なってください。

[Tip]さらなる情報

プロファイルの構築や修正について、詳しくは 第20章 プロファイルの構成と文法, 第22章 YaST を利用したプロファイルの構築と管理, 第23章 コマンドラインからのプロファイル構築 をお読みください。

18.5. プロファイルの更新

ソフトウエアやシステムの更新は、常日頃から発生しうるものです。そのため、 AppArmor 向けに設定したプロファイルは、それらの更新にあわせて細かい調整を加える 必要がある場合があります。 AppArmor ではシステムログを調査してポリシー違反など の AppArmor イベントを確認し、必要に応じてプロファイルを調整することができる ようになっています。プロファイル定義以外の方法でアプリケーションの動作を 調整するには、 プロファイルの更新ウイザード を使用します。

プロファイルセットを更新するには、下記の手順で行ないます:

  1. YaST を起動し、 AppArmor+プロファイルの更新ウイザード を選択します。

  2. 問い合わせがあった場合は、記録のあった任意のリソースや実行形式に対する アクセス権限や実行権限を調整します。

  3. すべての質問に回答したら、 YaST を終了します。変更点は関連する プロファイルに適用されます。

[Tip]さらなる情報

システムログを利用してプロファイルを更新する方法について、より詳しい情報は 22.5項 「ログ項目からのプロファイル更新」 をお読みください。


openSUSE セキュリティガイド 13.1