Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
4.12. USBGuard の使用
USBGuard ソフトウェアフレームワークは、デバイス属性に基づいて基本的なホワイトリストおよびブラックリストのを実装することで侵入 USB デバイスに対してシステム保護を提供します。ユーザーが定義したポリシーを強制するには、USBGuard が Linux カーネル USB デバイス認証機能を使用します。USBGuard フレームワークは、以下のコンポーネントを提供します。
- 動的対話およびポリシー強制に関する IPC (inter-process communication) インターフェースを使用したデーモンコンポーネント
- 実行中の USBGuard インスタンスと対話するコマンドラインインターフェース
- USB デバイス認証ポリシーを記述するルール言語
- 共有ライブラリーに実装したデーモンコンポーネントと対話する C++ API
4.12.1. USBGuard のインストール
usbguard パッケージをインストールするには、
root
で以下のコマンドを実行します。
~]# yum install usbguard
初期ルールセットを作成するには、
root
で以下のコマンドを実行します。
~]# usbguard generate-policy > /etc/usbguard/rules.conf
注記
USBGuard ルールセットをカスタマイズするには、
/etc/usbguard/rules.conf
ファイルを変更します。詳細は、man ページの usbguard-rules.conf(5)
を参照してください。使用例は 「ルール言語を使用した独自ポリシーの作成」 を参照してください。
USBGuard デーモンを起動するには、
root
で以下のコマンドを実行します。
~]#systemctl start usbguard.service
~]#systemctl status usbguard
● usbguard.service - USBGuard daemon Loaded: loaded (/usr/lib/systemd/system/usbguard.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2017-06-06 13:29:31 CEST; 9s ago Docs: man:usbguard-daemon(8) Main PID: 4984 (usbguard-daemon) CGroup: /system.slice/usbguard.service └─4984 /usr/sbin/usbguard-daemon -k -c /etc/usbguard/usbguard-daem...
システムの起動時に USBGuard が自動的に起動するようにするには、
root
で以下のコマンドを実行します。
~]# systemctl enable usbguard.service
Created symlink from /etc/systemd/system/basic.target.wants/usbguard.service to /usr/lib/systemd/system/usbguard.service.
USBGuard が認識する USB デバイスを一覧表示するには、
root
で以下のコマンドを実行します。
~]# 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
システムと対話するようにデバイスを認証するには、
allow-device
オプションを使用します。
~]# usbguard allow-device 6
デバイスの認証を解除してシステムから削除するには、
reject-device
オプションを使用します。デバイスの認証解除だけを行う場合は、usbguard
コマンドに block-device
オプションを付けて使用します。
~]# usbguard block-device 6
USBGuard では、block および reject は以下の意味で使用されます。
- block - 今は、このデバイスとはやりとりしない
- reject - このデバイスが存在していないかのように、無視する
usbguard
コマンドのオプションをすべて表示するには、以下のように、--help
ディレクティブを付けて実行します。
~]$ usbguard --help
4.12.2. ホワイトリストおよびブラックリストの作成
usbguard-daemon.conf
ファイルは、コマンドラインオプションを解析したあと、usbguard
デーモンによりロードされ、デーモンのランタイムパラメーターを設定するために使用されます。デフォルトの設定ファイル (/etc/usbguard/usbguard-daemon.conf
) を上書きするには、-c
コマンドラインオプションを使用します。詳細は、man ページの usbguard-daemon(8)
を参照してください。
ホワイトリストまたはブラックリストを作成するには、
usbguard-daemon.conf
ファイルを編集し、以下のオプションを使用します。
USBGuard 設定ファイル
RuleFile=
<path>usbguard
デーモンはこのファイルを使用して、それからポリシールールセットをロードし、IPC インターフェース経由で受け取った新しいルールを記述します。IPCAllowedUsers=
<username> [<username> ...]- このデーモンが IPC 接続を許可するユーザー名の、スペース区切りの一覧。
IPCAllowedGroups=
<groupname> [<groupname> ...]- このデーモンが IPC 接続を許可するグループ名の、スペース区切りの一覧。
IPCAccessControlFiles=
<path>- IPC アクセス制御ファイルを保持するディレクトリーへのパス
ImplicitPolicyTarget=
<target>- ポリシー内のどのルールにも一致しないデバイスを扱う方法。許容される値は allow、block、および reject です。
PresentDevicePolicy=
<policy>- デーモンが起動するときにすでに接続されているデバイスを処理する方法。
- allow - 存在するデバイスをすべて認証する
- block - 存在するデバイスの認証をすべて解除する
- reject - 存在するデバイスをすべて削除する
- keep - 内部ステータスの同期だけを行う
- apply-policy - 存在するすべてのデバイスに対してルールセットを評価する
PresentControllerPolicy=
<policy>- デーモンが起動するときにすでに接続されている USB コントローラーの処理方法
- allow - 存在するデバイスをすべて認証する
- block - 存在するデバイスの認証をすべて解除する
- reject - 存在するデバイスをすべて削除する
- keep - 内部ステータスの同期だけを行う
- apply-policy - 存在するすべてのデバイスに対してルールセットを評価する
例4.5 USBGuard 設定
以下の設定ファイルは、
usbguard
デーモンが、/etc/usbguard/rules.conf
ファイルからルールをロードし、usbguard
グループのユーザーだけが IPC インターフェースを使用できるようにします。
RuleFile=/etc/usbguard/rules.conf IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/
IPC Access Control List (ACL) を指定するには、
usbguard add-user
コマンドまたは usbguard remove-user
コマンドを使用します。詳細は usbguard(1)
を参照してください。この例では、usbguard
グループのユーザーだけが、USB デバイス認証ステータスの修正、USB デバイスの一覧表示、例外イベントのリッスン、および USB 認証ポリシーの一覧表示を可能にするには、root
で以下のコマンドを実行します。
~]# usbguard add-user -g usbguard --devices=modify,list,listen --policy=list --exceptions=listen
重要
デーモンは、USBGuard に公開 IPC インターフェースを提供します。Red Hat Enterprise Linux では、このインターフェースへのアクセスがデフォルトで
root
ユーザーにのみ制限されます。IPCAccessControlFiles
オプション (推奨)、または IPCAllowedUsers
オプションおよび IPCAllowedGroups
オプションを設定して IPC インターフェースへのアクセスを制御することを検討してください。ACL は未設定のままにしないでください。未設定のままにすると IPC インターフェースがすべてのローカルユーザーに公開され、USB デバイスの認証状態を操作し、USBGuard ポリシーを修正できるようになります。
詳細は、man ページの
usbguard-daemon.conf(5)
の IPC アクセス制御セクションを参照してください。
4.12.3. ルール言語を使用した独自ポリシーの作成
usbguard
デーモンは、ルールセットが定義するポリシーに基づいて USB デバイスを認証するかどうかを決定します。USB デバイスがシステムに挿入されると、デーモンが既存のルールを順次スキャンし、一致ルールが見つかると、ルールのターゲットに基づいて認証 (allows)、認証解除 (blocks)、または削除 (rejects) します。一致するルールが見つからない場合、決定は暗黙のデフォルトターゲットに基づいています。暗黙のデフォルトは、ユーザーが決定を行うまで、デバイスをブロックします。
ルール言語の文法は以下のようになります。
rule ::= target device_id device_attributes conditions. target ::= "allow" | "block" | "reject". device_id ::= "*:*" | vendor_id ":*" | vendor_id ":" product_id. device_attributes ::= device_attributes | attribute. device_attributes ::= . conditions ::= conditions | condition. conditions ::= .
ターゲット、デバイス指定、デバイス属性などのルール言語の詳細は、man ページの
usbguard-rules.conf(5)
を参照してください。
例4.6 USBguard のサンプルポリシー
- Allow USB mass storage devices and block everything else
- このポリシーは、大容量のストレージデバイス以外のデバイスをブロックするだけではありません。USB フラッシュディスクで非表示のキーボードインターフェースを持つデバイスがブロックされます。1 つの大容量ストレージインターフェースを持つデバイスだけがオペレーティングシステムと対話できます。ポリシーは、以下のような 1 つのルールで構成されます。
allow with-interface equals { 08:*:* }
ブロックルールがないため、ブロックは暗黙的です。暗黙ブロックは、暗黙的ターゲットがデバイスに対して選択される場合に、USBGuard イベントをリッスンさせるデスクトップアプレットがユーザーに決定を求めることができるため、デスクトップユーザーに便利です。 - 特定の Yubikey デバイスが、特定ポートを経由して接続できるようにします。
- そのポートでその他のすべてのものを拒否します。
allow 1050:0011 name "Yubico Yubikey II" serial "0001234567" via-port "1-2" hash "044b5e168d40ee0245478416caf3d998" reject via-port "1-2"
- インターフェースの疑わしい組み合わせを持つデバイスを拒否します。
- キーボードまたはネットワークインターフェースを実装する USB フラッシュディスクは非常に疑わしくなります。以下のルールセットは、USB フラッシュディスクを許可して、疑わしいインターフェースを追加して、デバイスを明示的に拒否するポリシーを形成します。
allow with-interface equals { 08:*:* } reject with-interface all-of { 08:*:* 03:00:* } reject with-interface all-of { 08:*:* 03:01:* } reject with-interface all-of { 08:*:* e0:*:* } reject with-interface all-of { 08:*:* 02:*:* }
注記
ブラックリストはアプローチとしては間違っており、一連のデバイスをブラックリストに登録して残りを許可するような設定は行わないでください。。上述のポリシーは、ブロックが暗黙的なデフォルトであることを前提としています。「問題のある」ものとみなされる一連のデバイスを拒否するアプローチとは、そのようなデバイスへのシステムの公開をできるだけ制限する方法としては適切な方法となります。 - キーボードのみの USB デバイスを許可
- 以下のルールは、キーボードインターフェースがすでに許可されている USB デバイスがない場合に限り、キーボードのみの USB デバイスを許可します。
allow with-interface one-of { 03:00:01 03:01:01 } if !allowed-matches(with-interface one-of { 03:00:01 03:01:01 })
usbguard generate-policy
コマンドを使用して初期ポリシーを生成したら、/etc/usbguard/rules.conf
を編集して USBGuard ポリシールールをカスタマイズします。
~]$usbguard generate-policy > rules.conf
~]$vim rules.conf
更新したポリシーをインストールして変更を有効にするには、以下のコマンドを実行します。
~]# install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
4.12.4. その他のリソース
USBGuard の詳細は、以下のドキュメントを参照してください。
- man ページの
usbguard(1)
- man ページの
usbguard-rules.conf(5)
- man ページの
usbguard-daemon(8)
- man ページの
usbguard-daemon.conf(5)
このページには機械翻訳が使用されている場合があります (詳細はこちら)。