Upgrade to Pro — share decks privately, control downloads, hide ads and more …

USBGuard でUSB デバイスを保護(2023年版)

USBGuard でUSB デバイスを保護(2023年版)

Kenichiro MATOHARA

April 23, 2023
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. ポリシー生成 usbguard generate-policy で現在接続されているデバイスを接続 されているポートで許可,それ以外はblock する設定情報が書き出され る.(以前と比べてhash等が使えるようになっている) $ usbguard generate-policy

    allow id 1d6b:0002 serial "0000:00:14.0" name "xHCI Host Controller" hash "jEP/6WzviqdJ5VSeTUY allow id 1d6b:0003 serial "0000:00:14.0" name "xHCI Host Controller" hash "3Wo3XWDgen1hD5xM3PSN allow id 18d1:4ee7 serial "43570d33" name "SDM439-MTP _SN:9E71312D" hash "bUT6xGWCUcrmzAXIjnhlN allow id 05e3:0610 serial "" name "USB2.1 Hub" hash "CbRB9LX/JdGjNWCYSOcIwMVXE0UpOR03LCotWrTbu allow id 5986:054c serial "200901010001" name "USB HD Webcam" hash "9k1B2RV7iLzVYE0EUiXoKSr4V0X allow id 8087:0a2b serial "" name "" hash "TtRMrWxJil9GOY/JzidUEOz0yUiwwzbLm8D7DJvGxdg=" paren allow id 05e3:0626 serial "" name "USB3.1 Hub" hash "15SBGsOo8K+JjtOKSCn7t0i6ifer4wmhzep1yEB5p allow id 1b3f:2008 serial "" name "USB Audio Device" hash "2WvHLXDFTIVfoa/z54LmFuVBuBbDPnCPaly allow id 17ef:6047 serial "" name "ThinkPad Compact USB Keyboard with TrackPoint" hash "SkOJyG 10
  2. ポリシーをルールファイルに書 いて反映 1 設定ファイル作成 2 設定の既定値書き込み 3 設定調整(今回は外付けキーボードをどのポートでも利用できる よう修正) $

    sudo install -m 0600 -o root -g root /dev/zero /etc/usbguard/rules.conf $ usbguard generate-policy | sudo tee /etc/usbguard/rules.conf $ sudo vi /etc/usbguard/rules.conf 1 2 3 11
  3. 設定例(generate-policyで自動生成 されたもの) Lenovo Trackpoint Keyboard 既定値( 1 of 2 )

    1 デバイスの許可拒否(allow/block/reject) 2 USB VenderID:ProductID 3 シリアル 4 名前 5 デバイス属性値と USB 記述子データから計算されたハッシュ  実際は1行 allow \ id 17ef:6047 \ serial "" \ name "ThinkPad Compact USB Keyboard with TrackPoint" \ hash "SkOJyGDMSWYWvEMS0OImUGa5DaH6Ndg4WOGcPTy3MQc=" \ 1 2 3 4 5 14
  4. Lenovo Trackpoint Keyboard 既定値( 2 of 2 ) 1 親デバイスのハッシュ

    2 USBポート 3 インターフェイスタイプ( ) 4 デバイス属性  どのポートでも利用できるようにしたい場合は,この設定から parent-hash と via-port を消す. parent-hash "CbRB9LX/JdGjNWCYSOcIwMVXE0UpOR03LCotWrTbuCM=" \ via-port "1-4.4" \ with-interface { 03:01:01 03:01:02 } \ with-connect-type "unknown" 1 2 3 4 03から始まるのはHID device class 15
  5. 特定のYubikeyを特定のポートだ けで許可する allow 1050:0011 name "Yubico Yubikey II" serial "0001234567"

    \ via-port "1-2" hash "044b5e168d40ee0245478416caf3d998" reject via-port "1-2" 18
  6. 疑わしい(BadUSBのような)デバ イスを拒否する  マスストレージ(08h)かつ,HID(03h)/ビデオ (e0h)/CDC(02h)のデバイスを拒否する 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:*:* } 19
  7. USBGuard daemon を有効にする 1 USBGuard を起動 2 USBGuard を有効に 

    KeyboardがUSB接続の場合設定ミスで操作できなくなる可能 性がある.リモート接続や sudo systemctl start usbguard; sleep 60; sudo systemctl stop usbguard のようなことをしておいたほうがいい. $ sudo systemctl start usbguard $ sudo systemctl enable usbguard 1 2 22
  8. 後で接続したデバイスを有効に したい 1 block されているデバイスを確認 2 list-devices の結果を参考にしてルールファイルに追記 3 USBGuard

    daemon 再起動 $ usbguard list-devices | grep -i block 12: block id 046d:081b serial "159F4170" name "" hash "YSWl6EEC6EF4Rmi5/mMzQlVbZymdd0s1tK8gJ8Q $ echo 'allow id 046d:081b serial "159F4170" name "" hash "YSWl6EEC6EF4Rmi5/mMzQlVbZymdd0s1tK8g | sudo tee -a /etc/usbguard/rules.conf $ sudo service usbguard reload Restarting Usbguard daemon. 1 2 3 23
  9. デスクトップ向け通知(usbguard- notifier) usbguard-notifier でUSBGuard の通知をポップアップで利用で きる 1 usbguard-notifer を導入 2

    usbguard-notifier を起動(USBデバイスを接続して動作確 認) 3 usbguard-notifier を有効に $ sudo apt install usbguard-notifier $ systemctl --user start usbguard-notifier $ systemctl --user enable usbguard-notifier 1 2 3 24
  10. デバイス名指定  同様に block, reject も可能 $ lsusb | grep

    Qualcomm Bus 001 Device 127: ID 05c6:9024 Qualcomm, Inc. SDM439-MTP _SN:9E71312D $ sudo usbguard allow-device name \"Qualcomm, Inc. SDM439-MTP _SN:9E71312D\" 28