第12章 fapolicyd を使用したアプリケーションのブロックおよび許可

ルールセットに基づいてアプリケーションの実行を許可または拒否するポリシーの設定および強制により、未知で潜在的に悪意のあるソフトウェアの実行を効率的に防ぎます。

12.1. fapolicyd の概要

fapolicyd ソフトウェアフレームワークは、ユーザー定義のポリシーに基づいてアプリケーションの実行を制御します。これは、システム上で信頼されていないアプリケーションや悪意のあるアプリケーションを実行しないようにするための最も効率的な方法です。

fapolicyd フレームワークは、以下のコンテンツを提供します。

  • fapolicyd サービス
  • fapolicyd コマンドラインユーティリティー
  • fapolicyd YUMプラグイン
  • fapolicyd ルール言語

管理者は、パス、ハッシュ、MIME タイプ、信頼に基づいて、すべてのアプリケーションに実行ルール allow および deny の両方を監査する定義できます。

fapolicyd フレームワークは、信頼の概念を導入します。アプリケーションは、システムパッケージマネージャーによって適切にインストールされると信頼されるため、システムの RPM データベースに登録されます。fapolicyd デーモンは、RPM データベースを信頼できるバイナリーとスクリプトの一覧として使用します。fapolicyd YUM プラグインは、YUM パッケージマネージャーにより処理されるシステム更新をすべて登録します。プラグインは、このデータベースの変更を fapolicyd デーモンに通知します。

rpm ユーティリティーを使用したインストールでは、データベースを手動で更新する必要があり、アプリケーションを追加する他の方法では、カスタムルールを作成し、fapolicyd サービスを再起動する必要があります。

fapolicyd サービス構成は、次の構造を持つ /etc/fapolicyd/ ディレクトリーにあります。

  • fapolicyd.rules ファイルには、実行ルールの allow および deny が含まれています。
  • fapolicyd.conf ファイルには、デーモンの構成オプションが含まれています。このファイルは、主にパフォーマンス調整の目的で役に立ちます。

関連情報

  • 詳細は、fapolicyd(8)fapolicyd.rules (5)、および fapolicyd.conf(5) の man ページを参照してください。

12.2. fapolicyd のデプロイ

RHEL に fapolicyd フレームワークをデプロイするには、以下を行います。

手順

  1. fapolicyd パッケージをインストールします。

    # yum install fapolicyd
  2. fapolicyd サービスを有効にして開始します。

    # systemctl enable --now fapolicyd

検証手順

  1. fapolicydサービスが正しく実行されていることを確認します。

    # systemctl status fapolicyd
    ● fapolicyd.service - File Access Policy Daemon
       Loaded: loaded (/usr/lib/systemd/system/fapolicyd.service; enabled; vendor p>
       Active: active (running) since Tue 2019-10-15 18:02:35 CEST; 55s ago
      Process: 8818 ExecStart=/usr/sbin/fapolicyd (code=exited, status=0/SUCCESS)
     Main PID: 8819 (fapolicyd)
        Tasks: 4 (limit: 11500)
       Memory: 78.2M
       CGroup: /system.slice/fapolicyd.service
               └─8819 /usr/sbin/fapolicyd
    
    Oct 15 18:02:35 localhost.localdomain systemd[1]: Starting File Access Policy D>
    Oct 15 18:02:35 localhost.localdomain fapolicyd[8819]: Initialization of the da>
    Oct 15 18:02:35 localhost.localdomain fapolicyd[8819]: Reading RPMDB into memory
    Oct 15 18:02:35 localhost.localdomain systemd[1]: Started File Access Policy Da>
    Oct 15 18:02:36 localhost.localdomain fapolicyd[8819]: Creating database
  2. root 権限を持たないユーザーとしてログインし、fapolicyd が機能していることを確認します。以下に例を示します。

    $ cp /bin/ls /tmp
    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted

12.3. 信頼ソースを使用して、ファイルを信頼できるとマークします。

この手順は、fapolicyd の信頼の追加ソースを使用できます。RHEL 8.3 より前のバージョンでは、fapolicyd が RPM データベースに含まれるファイルのみを信頼していました。fapolicyd フレームワークは、/etc/fapolicyd/fapolicyd.trust プレーンテキストファイルを信頼 のソースとして使用するようになりました。fapolicyd.trust は、テキストエディターまたは fapolicyd CLI コマンドで直接変更できます。

注記

カスタム fapolicyd ルールを記述する代わりに、fapolicyd.trust を使用してファイルを信頼できるとしてマークすることが推奨さ ます。

前提条件

  • fapolicyd フレームワークがシステムにデプロイされます。

手順

  1. カスタムバイナリーを必要なディレクトリにコピーします。以下に例を示します。

    $ cp /bin/ls /tmp
    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  2. カスタムバイナリーに trusted のマークを付けます。

    # fapolicyd-cli --file add /tmp/ls

    上記のコマンドは、対応する行を /etc/fapolicyd/fapolicyd.trust に追加します。

  3. fapolicyd を再起動します。

    # systemctl restart fapolicyd

検証手順

  1. たとえば、カスタムバイナリーが実行できることを確認します。

    $ /tmp/ls
    ls

関連情報

  • 詳細は、fapolicyd-cli(5) man ページを参照してください。

12.4. fapolicyd のカスタム allow および deny ルールの追加

fapolicyd パッケージのデフォルトのルールセットは、システム機能に影響しません。バイナリーとスクリプトを非標準のディレクトリーに保存したり、yum インストーラーまたは rpm インストーラーなしでアプリケーションを追加したりするようなカスタムシナリオの場合は、既存のルールを変更するか、新しいルールを追加する必要があります。以下の手順は、カスタムバイナリーを許可する新しいルールを追加する方法を示しています。

前提条件

  • fapolicyd フレームワークがシステムにデプロイされます。

手順

  1. カスタムバイナリーを必要なディレクトリにコピーします。以下に例を示します。

    $ cp /bin/ls /tmp
    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  2. fapolicyd サービスを停止します。

    # systemctl stop fapolicyd
  3. デバッグモードを使用して、対応するルールを識別します。fapolicyd --debug コマンドの出力は冗長で、Ctrl+C を押すか、対応するプロセスを強制終了するだけで停止できるため、エラー出力をファイルにリダイレクトします。

    # fapolicyd --debug 2> fapolicy.output &
    [1] 51341

    または、別の端末で fapolicyd デバッグモードを実行できます。

  4. 許可されなかったコマンドを繰り返します。

    $ /tmp/ls
    bash: /tmp/ls: Operation not permitted
  5. デバッグモードをフォアグラウンドで再開し、Ctrl+C を押して停止します。

    # fg
    fapolicyd --debug
    ^Cshutting down...
    Inter-thread max queue depth 1
    Allowed accesses: 2
    Denied accesses: 1
    [...]

    または、fapolicyd デバッグモードのプロセスを強制終了します。

    # kill 51341
  6. アプリケーションの実行を拒否するルールを見つけます。

    # cat fapolicy.output
    [...]
    rule:9 dec=deny_audit perm=execute auid=1000 pid=51362 exe=/usr/bin/bash : file=/tmp/ls ftype=application/x-executable
    [...]
  7. /etc/fapolicyd/fapolicyd.rules ファイルで、カスタムバイナリーの実行を拒否したルールの 前に 新しい allow ルールを追加します。上記のコマンドの出力では、この例に含まれるルールがルール番号 9 であることを示しています。

    allow perm=execute exe=/usr/bin/bash trust=1 : path=/tmp/ls ftype=application/x-executable trust=0

    または、/etc/fapolicyd/fapolicyd.rules ファイルに次のルールを追加することにより、/tmp ディレクトリー内のすべてのバイナリーの実行を許可できます。

    allow perm=execute exe=/usr/bin/bash trust=1 : dir=/tmp/ all trust=0
  8. カスタムバイナリーのコンテンツの変更を防ぐには、SHA-256 チェックサムを使用して必要なルールを定義します。

    $ sha256sum /tmp/ls
    780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836  ls

    ルールを以下の定義に変更します。

    allow perm=execute exe=/usr/bin/bash trust=1 : sha256hash=780b75c90b2d41ea41679fcb358c892b1251b68d1927c80fbc0d9d148b25e836
  9. fapolicyd サービスを開始します。

    # systemctl start fapolicyd

検証手順

  1. たとえば、カスタムバイナリーが実行できることを確認します。

    $ /tmp/ls
    ls

関連情報

  • 詳細は、fapolicyd-cli(5) man ページを参照してください。

12.6. 関連情報


このページには機械翻訳が使用されている場合があります (詳細はこちら)。