「USBGuard」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(翻訳)
 
(→‎GNOME との統合: リンクを修正)
 
(3人の利用者による、間の13版が非表示)
1行目: 1行目:
 
[[Category:ハードウェア検出とトラブルシューティング]]
 
[[Category:ハードウェア検出とトラブルシューティング]]
  +
[[Category:セキュリティ]]
[[en:Usbguard]]
 
  +
[[en:USBGuard]]
 
USBGuard は USB デバイスに対してホワイトリスト・ブラックリストを設定できるソフトウェアです。BadUSB などの exploit に対抗するために作られました。Linux カーネルに含まれているデバイスブロック機構を利用しており、デーモンとフロントエンドが存在します。
 
USBGuard は USB デバイスに対してホワイトリスト・ブラックリストを設定できるソフトウェアです。BadUSB などの exploit に対抗するために作られました。Linux カーネルに含まれているデバイスブロック機構を利用しており、デーモンとフロントエンドが存在します。
   
 
== インストール ==
 
== インストール ==
   
{{Aur|usbguard}} パッケージを[[インストール]]してください。開発版は {{Aur|usbguard-git}} でインストールできます。
+
{{Pkg|usbguard}} パッケージを[[インストール]]してください。開発版は {{Aur|usbguard-git}} でインストールできます。
  +
  +
公式の Qt アプレットは [https://github.com/USBGuard/usbguard/releases/tag/usbguard-0.7.5 削除され]{{AUR|usbguard-notifier}} に [https://usbguard.github.io/blog/2019/usbguard-0.7.6 置き換え] られました。Qt アプレットの非公式の分岐バージョンは、{{AUR|usbguard-applet-qt}} として入手できます。
   
 
== 設定 ==
 
== 設定 ==
21行目: 24行目:
 
== 使用方法 ==
 
== 使用方法 ==
   
USBGuard にはコアデーモンと CLI、Qt GUI、D-Bus インターフェイスと libusbguard で使える API が備わっています。Qt GUI を使ったり他のプログラムから D-Bus で通信したい場合、{{ic|usbguard-dbus.service}} を起動・有効化してください。API を使って通信したい場合 (CLI ツールや libusbguard を使用するソフトウェアを使う場合)、{{ic|usbguard.service}} を起動・有効化してください
+
USBGuard にはコアデーモンと CLI、GUI、D-Bus インターフェイスと libusbguard で使える API が備わっています。
  +
  +
{{Warning|デーモンを起動/有効化する前に必ず実際に設定してください、しない場合キーボードとマウスを含むすべての USB デバイスが直ちにブロックされます!}}
  +
  +
Qt GUI や DBUS 経由で通信する他のプログラム (GNOME 統合も含む) を使用する場合は、{{ic|usbguard-dbus.service}} を [[有効化]] して [[起動]] して下さい。
  +
  +
API による通信のみを行う場合 (CLI ツールや libusbguard を利用した他のソフトウェアで行う場合) {{ic|usbguard.service}} を [[有効化]] して [[起動]] して下さい。
   
 
CLI は {{ic|usbguard}} コマンドで起動できます。
 
CLI は {{ic|usbguard}} コマンドで起動できます。
   
 
詳しくはそれぞれの man ページを見てください。
 
詳しくはそれぞれの man ページを見てください。
 
Qt アプレットは {{ic|usbguard-applet-qt}} で起動でき、インタラクティブなグラフィカルインターフェイスが表示されます。
 
   
 
=== ルール ===
 
=== ルール ===
   
{{ic|/etc/usbguard/rules.conf}} を編集することで、必要に応じて usbguard を設定できます。ただしルールを手動で編集する必要は通常ありません。
+
必要に応じて USBGuard を構成するには、{{ic|/etc/usbguard/rules.conf}} を編集ます。ただし、通常、ルールを手動で編集する必要はありません。root として {{ic|usbguard generate-policy > /etc/usbguard/rules.conf}} を実行することにより、現在接続されている USB デバイスに基づいてルールセットを生成できます
   
ルールの構文について [https://github.com/dkopecek/usbguard#rule-language こちら] で詳しく解説されています。USB 接続の HP 製プリンターのルールは以下のようになります:
+
ルールの構文は[https://github.com/USBGuard/usbguard/blob/master/doc/man/usbguard-rules.conf.5.adoc こちら] で正式にされています。
  +
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 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 }
70行目: 78行目:
 
| with-interface [operator] { interface-type interface-type ... } || USB デバイスのインターフェイスタイプがどれかに一致。
 
| with-interface [operator] { interface-type interface-type ... } || USB デバイスのインターフェイスタイプがどれかに一致。
 
|}
 
|}
  +
  +
=== GNOME との統合 ===
  +
  +
[[GNOME]] には USBGuard のサポートが組み込まれています [https://www.phoronix.com/scan.php?page=news_item&px=GNOME-3.35.91-Released 3.36 から] GNOME のアクセスを許可するためには [[polkit]] ルールの設定が必要で、デフォルトではデバイスを許可しロックスクリーンでのみブロックするように [[GNOME#設定|dconf]] が変更されています。
  +
  +
{{Warning|最初に実際にポリシーを生成してください ([[Usbguard#使用方法|使い方]] と [[Usbguard#ルール|ルール]] を参照してください) しない場合キーボードやマウスの入力を含むすべての USB デバイスがすぐにブロックされます!}}
  +
  +
==== USBGuard デーモンに GNOME アクセスを許可する ====
  +
  +
次のファイルを作成して、USBGuard へのアクセスが割り当てられた {{ic|wheel}} グループを持つユーザーの下で実行されている GNOME Shell を承認します。
  +
  +
{{hc|/etc/polkit-1/rules.d/70-allow-usbguard.rules|<nowiki>
  +
// 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;
  +
}
  +
});</nowiki>}}
  +
  +
polkit ルールへの変更は、polkit デーモン自体によって自動的に取得されます。
  +
  +
==== GNOME USB 保護をオンにする ====
  +
  +
USBGuard サービスが存在し、この設定が有効な場合、USB デバイスは usb-protection-level の設定で設定されたとおりに保護されます。以下のコマンドを実行することで有効にします。
  +
  +
{{bc|$ gsettings set org.gnome.desktop.privacy usb-protection true}}
  +
  +
==== デフォルトですべての USB デバイスをブロック ====
  +
  +
{{ic|lockscreen}} に設定すると、ロック画面が表示されている場合にのみ、新しい USB デバイスが拒否されます。{{ic|always}} に設定すると、すべての新しい USB デバイスが常に拒否されます。以下のコマンドを実行して、すべての新しい USB デバイスを拒否します。
  +
  +
{{bc|$ gsettings set org.gnome.desktop.privacy usb-protection-level always}}
  +
  +
== 関連プロジェクト ==
  +
  +
* {{AUR|usbkill-git}} (USB ポートの変更を待機し、すぐにコンピュータをシャットダウンする anti-forensic kill-switch)
  +
* {{AUR|silk-guardian-dkms}} (不明な USB デバイスのキルスイッチ (DKMS))
   
 
== 参照 ==
 
== 参照 ==
  +
* [https://github.com/dkopecek/usbguard/ USBGuard ウェブサイト]
 
* [https://raw.githubusercontent.com/dkopecek/usbguard/master/doc/usbguard-component-diagram.png USBGuard 構成図]
+
* [https://github.com/dkopecek/usbguard/ USBGuard リポジトリ]
  +
* [https://raw.githubusercontent.com/USBGuard/usbguard/8b76c935f019facd362e2f12a4db5e24f6e58e62/doc/usbguard-component-diagram.png USBGuard component diagram]
* [https://srlabs.de/bites/usb-peripherals-turn/ BadUSB 背景情報]
 
  +
* [https://srlabs.de/bites/usb-peripherals-turn/ BadUSB のバックグラウンド情報]
* [https://www.kernel.org/doc/Documentation/usb/authorization.txt USB デバイス制御のカーネルインターフェイス]
 
  +
* [https://docs.kernel.org/usb/authorization.html USB デバイス制御用のカーネルインターフェイス]
  +
* [https://wiki.gnome.org/Internships/2018/Projects/USB-Protection GNOME USB 保護のバックグラウンド情報]
  +
* [https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/tree/master/plugins/usb-protection gnome-settings-daemon usb-protection プラグインのソース]

2023年11月14日 (火) 02:21時点における最新版

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、GUI、D-Bus インターフェイスと libusbguard で使える API が備わっています。

警告: デーモンを起動/有効化する前に必ず実際に設定してください、しない場合キーボードとマウスを含むすべての USB デバイスが直ちにブロックされます!

Qt GUI や DBUS 経由で通信する他のプログラム (GNOME 統合も含む) を使用する場合は、usbguard-dbus.service有効化 して 起動 して下さい。

API による通信のみを行う場合 (CLI ツールや libusbguard を利用した他のソフトウェアで行う場合) usbguard.service有効化 して 起動 して下さい。

CLI は usbguard コマンドで起動できます。

詳しくはそれぞれの man ページを見てください。

ルール

必要に応じて 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 が変更されています。

警告: 最初に実際にポリシーを生成してください (使い方ルール を参照してください) しない場合キーボードやマウスの入力を含むすべての USB デバイスがすぐにブロックされます!

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

関連プロジェクト

  • usbkill-gitAUR (USB ポートの変更を待機し、すぐにコンピュータをシャットダウンする anti-forensic kill-switch)
  • silk-guardian-dkmsAUR (不明な USB デバイスのキルスイッチ (DKMS))

参照