Red Hat Training

A Red Hat training course is available for RHEL 8

第13章 侵入型 USB デバイスに対するシステムの保護

USB デバイスには、スパイウェア、マルウェア、またはトロイの木馬が読み込まれ、データを盗んだり、システムを損傷する可能性があります。Red Hat Enterprise Linux の管理者として、USBGuard で USB 攻撃を阻止できます。

13.1. USBGuard

USBGuard ソフトウェアフレームワークを使用すると、カーネルの USB デバイス認証機能に基づいて許可されたデバイスおよび禁止されているデバイスの基本リストを使用して、侵入型 USB デバイスからシステムを保護できます。

USBGuard フレームワークは、次を提供します。

  • 動的対話およびポリシー強制向けの IPC (inter-process communication) インターフェースを使用したシステムサービスコンポーネント
  • 実行中の usbguard システムサービスと対話するコマンドラインインターフェース
  • USB デバイス認証ポリシーを記述するルール言語
  • 共有ライブラリーに実装されたシステムサービスコンポーネントと対話する C++ API

usbguard システムサービス設定ファイル (/etc/usbguard/usbguard-daemon.conf) には、IPC インターフェースを使用するためのユーザーおよびグループを認証するオプションが含まれます。

重要

システムサービスは、USBGuard パブリック IPC インターフェースを提供します。Red Hat Enterprise Linux では、このインターフェースへのアクセスはデフォルトで root ユーザーに限定されています。

IPC インターフェースへのアクセスを制限するには、IPCAccessControlFiles オプション (推奨)、IPCAllowedUsers オプション、および IPCAllowedGroups オプションを設定することを検討してください。

アクセス制御リスト (ACL) を未設定のままにしないでください。設定しないと、すべてのローカルユーザーに IPC インターフェイスが公開され、USB デバイスの認証状態を操作して USBGuard ポリシーを変更できるようになります。

13.2. USBGuard のインストール

この手順を使用して、USBGuard フレームワークをインストールし、開始します。

手順

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

    # yum install usbguard
  2. 初期ルールセットを作成します。

    # usbguard generate-policy > /etc/usbguard/rules.conf
  3. usbguard デーモンを起動し、システムの起動時に自動的に起動することを確認します。

    # systemctl enable --now usbguard

検証

  1. usbguard サービスが実行していることを確認します。

    # systemctl status usbguard
    ● usbguard.service - USBGuard daemon
       Loaded: loaded (/usr/lib/systemd/system/usbguard.service; enabled; vendor preset: disabled)
       Active: active (running) since Thu 2019-11-07 09:44:07 CET; 3min 16s ago
         Docs: man:usbguard-daemon(8)
     Main PID: 6122 (usbguard-daemon)
        Tasks: 3 (limit: 11493)
       Memory: 1.2M
       CGroup: /system.slice/usbguard.service
               └─6122 /usr/sbin/usbguard-daemon -f -s -c /etc/usbguard/usbguard-daemon.conf
    
    Nov 07 09:44:06 localhost.localdomain systemd[1]: Starting USBGuard daemon...
    Nov 07 09:44:07 localhost.localdomain systemd[1]: Started USBGuard daemon.
  2. USBGuard が認識する USB デバイスの一覧を表示します。

    # usbguard list-devices
    4: allow id 1d6b:0002 serial "0000:02:00.0" name "xHCI Host Controller" hash...

関連情報

  • man ページの usbguard(1) および usbguard-daemon.conf(5)

13.3. CLI で USB デバイスのブロックおよび認証

この手順では、usbguard コマンドを使用して USB デバイスを認証してブロックする方法を説明します。

前提条件

  • usbguard サービスがインストールされており、実行している。

手順

  1. USBGuard が認識する USB デバイスの一覧を表示します。

    # usbguard list-devices
    1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00
    ...
    6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
  2. デバイス 6 を認証してシステムと対話します。

    # usbguard allow-device 6
  3. デバイス 6 の認証を解除し、削除します。

    # usbguard reject-device 6
  4. デバイス 6 の認可を解除し、保持します。

    # usbguard block-device 6
注記

USBGuard では、block および reject は以下の意味で使用されます。

  • block - 今は、このデバイスと対話しない
  • reject - このデバイスを、存在しないかのように無視する

関連情報

  • usbguard コマンドのオプション一覧を表示します。

    $ usbguard --help
  • man ページの usbguard(1)

13.4. USB デバイスの永続的なブロックおよび認証

-p オプションを使用すると、USB デバイスをブロックして認証できます。これにより、デバイス固有のルールが現在のポリシーに追加されます。

前提条件

  • usbguard サービスがインストールされており、実行している。

手順

  1. usbguard デーモンがルールの書き込みを許可するように SELinux を設定します。

    1. usbguard に関連する semanage ブール値を表示します。

      # semanage boolean -l | grep usbguard
      usbguard_daemon_write_conf     (off  ,  off)  Allow usbguard to daemon write conf
      usbguard_daemon_write_rules    (on   ,   on)  Allow usbguard to daemon write rules
    2. 必要に応じて、usbguard_daemon_write_rules のブール値が無効になっている場合は、有効にします。

      # semanage boolean -m --on usbguard_daemon_write_rules
  2. USBGuard が認識する USB デバイスの一覧を表示します。

    # usbguard list-devices
    1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00
    ...
    6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
  3. デバイス 6 を永続的に認証してシステムと対話します。

    # usbguard allow-device 6 -p
  4. デバイス 6 を永続的に認証し、削除します。

    # usbguard reject-device 6 -p
  5. デバイス 6 を永続的に承認し、保持します。

    # usbguard block-device 6 -p
注記

USBGuard では、block および reject は以下の意味で使用されます。

  • block - 今は、このデバイスと対話しない
  • reject - このデバイスを、存在しないかのように無視する

検証

  1. USBGuard ルールに変更が含まれていることを確認します。

    # usbguard list-rules

関連情報

  • usbguard コマンドのオプション一覧を表示します。

    $ usbguard --help
  • man ページの usbguard(1)

13.5. USB デバイス用のカスタムポリシーの作成

以下の手順では、シナリオの要件を反映する USB デバイス用のルールセットを作成する手順を説明します。

前提条件

  • usbguard サービスがインストールされており、実行している。
  • /etc/usbguard/rules.conf ファイルには、usbguard generate-policy コマンドで生成した初期ルールセットが含まれます。

手順

  1. 現在接続している USB デバイスを認証するポリシーを作成し、生成されたルールを rules.conf ファイルに保存します。

    # usbguard generate-policy --no-hashes > ./rules.conf

    --no-hashes オプションは、デバイスのハッシュ属性を生成しません。構成設定のハッシュ属性は永続的ではない可能性があるため、回避してください。

  2. 選択したテキストエディターで rules.conf ファイルを編集します。次に例を示します。

    # vi ./rules.conf
  3. 必要に応じて、ルールを追加、削除、または編集します。たとえば、以下のルールを使用すると、大容量ストレージインターフェースが 1 つあるデバイスのみがシステムと対話できます。

    allow with-interface equals { 08:*:* }

    詳細なルール言語の説明とその他の例は、man ページの usbguard-rules.conf(5) を参照してください。

  4. 更新したポリシーをインストールします。

    # install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
  5. usbguard デーモンを再起動して、変更を適用します。

    # systemctl restart usbguard

検証

  1. カスタムルールがアクティブポリシーにあることを確認します。以下に例を示します。

    # usbguard list-rules
    ...
    4: allow with-interface 08:*:*
    ...

関連情報

  • usbguard-rules.conf(5) man page

13.6. USB デバイス用に構造化されたカスタムポリシーの作成

カスタム USBGuard ポリシーは、/etc/usbguard/rules.d/ ディレクトリー内の複数の .conf ファイルで整理できます。次に、usbguard-daemon は、メインの rules.conf ファイルを、ディレクトリー内の .conf ファイルをアルファベット順で組み合わせます。

前提条件

  • usbguard サービスがインストールされており、実行している。

手順

  1. 現在接続している USB デバイスを認証するポリシーを作成し、生成されたルールを、新しい .conf ファイル (例えば policy.conf) ファイルに保存します。

    # usbguard generate-policy --no-hashes > ./policy.conf

    --no-hashes オプションは、デバイスのハッシュ属性を生成しません。構成設定のハッシュ属性は永続的ではない可能性があるため、回避してください。

  2. 任意のテキストエディターで rules.conf ファイルを編集します。次に例を示します。

    # vi ./policy.conf
    ...
    allow id 04f2:0833 serial "" name "USB Keyboard" via-port "7-2" with-interface { 03:01:01 03:00:00 } with-connect-type "unknown"
    ...
  3. 選択した行を別を別の .conf ファイルに移動します。

    注記

    ファイル名の先頭にある 2 つの数字は、デーモンが設定ファイルを読み込む順序を指定します。

    たとえば、キーボードのルールを新規 .conf ファイルにコピーします。

    # grep "USB Keyboard" ./policy.conf > ./10keyboards.conf
  4. 新しいポリシーを /etc/usbguard/rules.d/ ディレクトリーにインストールします。

    # install -m 0600 -o root -g root 10keyboards.conf /etc/usbguard/rules.d/10keyboards.conf
  5. 残りの行をメインの rules.conf ファイルに移動します。

    # grep -v "USB Keyboard" ./policy.conf > ./rules.conf
  6. 残りのルールをインストールします。

    # install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
  7. usbguard デーモンを再起動して、変更を適用します。

    # systemctl restart usbguard

検証

  1. アクティブな USBGuard ルールをすべて表示します。

    # usbguard list-rules
    ...
    15: allow id 04f2:0833 serial "" name "USB Keyboard" hash "kxM/iddRe/WSCocgiuQlVs6Dn0VEza7KiHoDeTz0fyg=" parent-hash "2i6ZBJfTl5BakXF7Gba84/Cp1gslnNc1DM6vWQpie3s=" via-port "7-2" with-interface { 03:01:01 03:00:00 } with-connect-type "unknown"
    ...
  2. rules.conf ファイルと、/etc/usbguard/rules.d/ ディレクトリー内の .conf ファイルの内容をすべて表示します。

    # cat /etc/usbguard/rules.conf /etc/usbguard/rules.d/*.conf
  3. アクティブなルールに、ファイルのすべてのルールが正しく、正しい順序で含まれていることを確認します。

関連情報

  • usbguard-rules.conf(5) man page

13.7. USBGuard IPC インターフェースを使用するユーザーおよびグループの認証

この手順を使用して、特定のユーザーまたはグループが USBGuard のパブリック IPC インターフェースを使用するように認証します。デフォルトでは、root ユーザーだけがこのインターフェースを使用できます。

前提条件

  • usbguard サービスがインストールされており、実行している。
  • /etc/usbguard/rules.conf ファイルには、usbguard generate-policy コマンドで生成した初期ルールセットが含まれます。

手順

  1. 任意のテキストエディターで /etc/usbguard/usbguard-daemon.conf ファイルを編集します。

    # vi /etc/usbguard/usbguard-daemon.conf
  2. たとえば、wheel グループの全ユーザーが IPC インターフェースを使用できるように、ルールがある行を追加して、ファイルを保存します。

    IPCAllowGroups=wheel
  3. usbguard コマンドで、ユーザーまたはグループを追加することもできます。たとえば、次のコマンドを使用すると、joesec ユーザーが Devices セクションおよび Exceptions セクションに完全アクセスできます。さらに、joesec は現在のポリシーの一覧を表示し、ポリシーシグナルをリッスンできます。

    # usbguard add-user joesec --devices ALL --policy list,listen --exceptions ALL

    joesec ユーザーに付与されたパーミッションを削除するには、usbguard remove-user joesec コマンドを使用します。

  4. usbguard デーモンを再起動して、変更を適用します。

    # systemctl restart usbguard

関連情報

  • man ページの usbguard(1) および usbguard-rules.conf(5)

13.8. Linux 監査ログへの USBguard 認証イベントの記録

以下の手順に従って、USBguard 認証イベントのログと標準の Linux 監査ログを 1 つにまとめます。デフォルトでは、usbguard デーモンは /var/log/usbguard/usbguard-audit.log ファイルにイベントを記録します。

前提条件

  • usbguard サービスがインストールされており、実行している。
  • auditd サービスが実行している。

手順

  1. usbguard-daemon.conf ファイルを、選択したテキストエディターで編集します。

    # vi /etc/usbguard/usbguard-daemon.conf
  2. AuditBackend オプションを、FileAudit から LinuxAudit に変更します。

    AuditBackend=LinuxAudit
  3. usbguard デーモンを再起動して、設定変更を適用します。

    # systemctl restart usbguard

検証

  1. 監査 デーモンログを USB 認証イベントに対してクエリーします。次に例を示します。

    # ausearch -ts recent -m USER_DEVICE

関連情報

  • man ページの usbguard-daemon.conf(5)

13.9. 関連情報

  • man ページの usbguard(1)usbguard-rules.conf(5)usbguard-daemon(8)、および usbguard-daemon.conf(5)
  • USBGuard ホームページ

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