第11章 アプリケーションホワイトリストの設定および管理

アプリケーションのホワイトリストは、未知で潜在的に悪意のあるソフトウェアの実行を効率的に防ぎます。

11.1. RHEL でのアプリケーションのホワイトリスト登録

fapolicyd ソフトウェアフレームワークは、ユーザー定義ポリシーに基づいたアプリケーションのホワイトリスト化およびブラックリスト化の形式を導入しました。アプリケーションのホワイトリスト機能では、システム上で信頼されていないアプリケーションや悪意のあるアプリケーションを実行しないようにするための最も効率的な方法を利用できます。

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

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

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

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

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

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

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

関連情報

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

11.2. アプリケーションのホワイトリストのデプロイメント

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 権限を持たないユーザーとしてログインし、アプリケーションのホワイトリストが機能していることを確認します。以下に例を示します。

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

11.3. アプリケーションのホワイトリストにカスタムルールを追加

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

関連情報

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

11.4. RHEL アプリケーションのホワイトリストのトラブルシューティング

次のセクションでは、fapolicyd アプリケーションホワイトリストフレームワークの基本的なトラブルシューティングのヒントと、rpm コマンドを使用してアプリケーションを追加するためのガイダンスを示します。

rpm を使用したアプリケーションのインストール

  • rpm コマンドを使用してアプリケーションをインストールする場合は、fapolicyd RPM データベースの手動更新を実行する必要があります。

    1. アプリケーション をインストールします。

      # rpm -i application.rpm
    2. データベースを更新します。

      # fapolicyd-cli --update

      この手順を飛ばすとシステムがフリーズする可能性があるため、再起動する必要があります。

サービスのステータス

  • fapolicyd が正しく機能しない場合は、サービスステータスを確認します。

    # systemctl status fapolicyd

デバッグモード

  • デバッグモードは、一致したルール、データベースステータスなどに関する詳細情報を提供します。fapolicyd をデバッグモードに切り替えるには、以下を行います。

    1. fapolicyd サービスを停止します。

      # systemctl stop fapolicyd
    2. デバッグモードを使用して、対応するルールを識別します。

      # fapolicyd --debug

      fapolicyd --debug コマンドの出力は冗長であるため、エラー出力をファイルにリダイレクトできます。

      # fapolicyd --debug 2> fapolicy.output

fapolicyd データベースの削除

  • fapolicyd データベースに関連する問題を解決するには、データベースファイルを削除してください。

    # systemctl stop fapolicyd
    # rm -f /var/lib/fapolicyd/*
    警告

    /var/lib/fapolicyd/ ディレクトリーを削除しないでください。fapolicyd フレームワークは、このディレクトリー内のデータベースファイルのみを自動的に復元します。

アプリケーションパイプ

  • まれに、fapolicyd パイプファイルを削除するとロックアップが解決する場合があります。

    # rm -f /var/run/fapolicyd/fapolicyd.fifo

関連情報

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

11.5. 関連情報


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