「USBGuard」の版間の差分
(→ルール: 情報を更新) |
Kusanaginoturugi (トーク | 投稿記録) |
(相違点なし)
|
2023年5月25日 (木) 14:20時点における版
USBGuard は USB デバイスに対してホワイトリスト・ブラックリストを設定できるソフトウェアです。BadUSB などの exploit に対抗するために作られました。Linux カーネルに含まれているデバイスブロック機構を利用しており、デーモンとフロントエンドが存在します。
目次
インストール
usbguard パッケージをインストールしてください。開発版は usbguard-gitAUR でインストールできます。
公式の Qt アプレットは 削除されusbguard-notifierAUR に 置き換え られました。Qt アプレットの非公式の分岐バージョンは、usbguard-applet-qtAUR として入手できます。
設定
メインの設定ファイルは /etc/usbguard/usbguard-daemon.conf
です。編集するには root 権限が必要です。
IPC 経由でデーモンを制御したい場合、使用しているユーザー名を IPCAllowedUsers
に、ユーザーのグループを IPCAllowedGroups
に追加してルールを永続化させてください。大抵の場合、この設定が必要になります。
デフォルトでは usbguard は新しく接続されたデバイスを全てブロックします。デーモンが起動する前に接続されたデバイスはそのまま使うことができます。PresentDevicePolicy
オプションを使うことでこの設定を変更できます。apply-policy
に設定するとデーモンが再起動したときでもセキュリティが保証されます。
ImplicitPolicyTarget
オプションではルールにマッチしないデバイスの扱い方を設定できます。一番セキュアな設定は block
です。
設定に関する詳細は設定ファイル内の豊富なコメントを見てください。
使用方法
USBGuard にはコアデーモンと CLI、Qt GUI、D-Bus インターフェイスと libusbguard で使える API が備わっています。
Qt GUI や DBUS 経由で通信する他のプログラム (GNOME 統合も含む) を使用する場合は、usbguard-dbus.service
を 有効化 して 起動 して下さい。
API による通信のみを行う場合 (CLI ツールや libusbguard を利用した他のソフトウェアで行う場合) usbguard.service
を 有効化 して 起動 して下さい。
CLI は usbguard
コマンドで起動できます。
詳しくはそれぞれの man ページを見てください。
Qt アプレットは usbguard-applet-qt
で起動でき、インタラクティブなグラフィカルインターフェイスが表示されます。
ルール
必要に応じて USBGuard を構成するには、/etc/usbguard/rules.conf
を編集します。ただし、通常、ルールを手動で編集する必要はありません。root として usbguard generate-policy > /etc/usbguard/rules.conf
を実行することにより、現在接続されている USB デバイスに基づいてルールセットを生成できます。
ルールの構文は、こちら で正式に説明されています。 USB 経由で接続された hp プリンターの例は、次のようになります。
allow id 03f0:0c17 serial "00CNFD234631" name "hp LaserJet 2020" hash "a0ef07fceb6fb77698f79a44a450121m" parent-hash "69d19c1a5733a31e7e6d9530e6k434a6" with-interface { 07:01:03 07:01:02 07:01:01 }
ルールにはまずポリシーを指定します。allow
はデバイスをホワイトリストに追加し、block
はデバイスの使用を停止し、reject
はデバイスをシステムから排除します。ポリシーの後には以下の属性とオプションを記述します:
属性 | 説明 |
---|---|
id usb-device-id | USB のデバイス ID が一致。 |
id [operator] { usb-device-id ... } | USB デバイス ID がどれかに一致。 |
hash "value" | デバイスの属性値や USB 記述子のデータから計算されるハッシュが一致。USBGuard は全てのデバイスのハッシュを計算します。 |
hash [operator] { "value" ... } | デバイスのハッシュがどれかに一致。 |
parent-hash "value" | 親デバイスのハッシュが一致。 |
parent-hash [operator] { "value" ... } | 親デバイスのハッシュがどれかに一致。 |
name "device-name" | USB のデバイス名が一致。 |
name [operator] { "device-name" ... } | USB のデバイス名がどれかに一致。 |
serial "serial-number" | USB の iSerial デバイス属性が一致。 |
serial [operator] { "serial-number" ... } | USB の iSerial デバイス属性がどれかに一致。 |
via-port "port-id" | デバイスを接続するのに使用した USB 端子が一致。環境によってはシステムを再起動したりカーネルモジュールがリロードされたときに端子の番号が変わってしまうことがあるので注意してください。特定の親デバイスで接続されたことを条件にしたい場合は親デバイスのハッシュ属性を使ってください。 |
via-port [operator] { "port-id" ... } | USB 端子がどれかに一致。 |
with-interface interface-type | USB デバイスのインターフェイスタイプが一致。 |
with-interface [operator] { interface-type interface-type ... } | USB デバイスのインターフェイスタイプがどれかに一致。 |
GNOME との統合
[GNOME] には USBGuard のサポートが組み込まれています 3.36 から GNOME のアクセスを許可するためには polkit ルールの設定が必要で、デフォルトではデバイスを許可しロックスクリーンでのみブロックするように dconf が変更されています。
USBGuard デーモンに GNOME アクセスを許可する
次のファイルを作成して、USBGuard へのアクセスが割り当てられた wheel
グループを持つユーザーの下で実行されている GNOME Shell を承認します。
/etc/polkit-1/rules.d/70-allow-usbguard.rules
// Allow users in wheel group to communicate with USBGuard polkit.addRule(function(action, subject) { if ((action.id == "org.usbguard.Policy1.listRules" || action.id == "org.usbguard.Policy1.appendRule" || action.id == "org.usbguard.Policy1.removeRule" || action.id == "org.usbguard.Devices1.applyDevicePolicy" || action.id == "org.usbguard.Devices1.listDevices" || action.id == "org.usbguard1.getParameter" || action.id == "org.usbguard1.setParameter") && subject.active == true && subject.local == true && subject.isInGroup("wheel")) { return polkit.Result.YES; } });
polkit ルールへの変更は、polkit デーモン自体によって自動的に取得されます。
GNOME USB 保護をオンにする
USBGuard サービスが存在し、この設定が有効な場合、USB デバイスは usb-protection-level の設定で設定されたとおりに保護されます。以下のコマンドを実行することで有効にします。
$ gsettings set org.gnome.desktop.privacy usb-protection true
デフォルトですべての USB デバイスをブロック
lockscreen
に設定すると、ロック画面が表示されている場合にのみ、新しい USB デバイスが拒否されます。always
に設定すると、すべての新しい USB デバイスが常に拒否されます。以下のコマンドを実行して、すべての新しい USB デバイスを拒否します。
$ gsettings set org.gnome.desktop.privacy usb-protection-level always