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

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

12.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 ポリシーを変更できるようになります。

12.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)

12.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)

12.4. 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

12.5. 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)

12.6. 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)

12.7. 関連情報

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

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