Share
Embed
USBGuard でUSB デバイスを保護(2023年版)
鹿児島Linux勉強会 2023.04(オンライン開催)::
https://kagolug.connpass.com/event/280899/
source::
https://gitlab.com/matoken/kagolug-2023-04/-/blob/main/slide/slide.adoc
Kenichiro MATOHARA
April 23, 2023
Transcript
32 slides
-
公共のUSB充電ステーションの 危険性に関する注意喚起 'Juice Jacking': The Dangers of Public USB Charging
Stations | Federal Communications Commission 3 -
以前の発表 udev + sysfs でUSB デバイス接続時に条件に合わせて許可拒否 USBを保護するUSBGuard 鹿児島Linux勉強会2017.01(2017-01-04) https://kagolug.connpass.com/event/47774/ https://bitbucket.org/matoken/linux-
2017.01/src https://speakerdeck.com/matoken/usbwobao- hu-suruusbguard 5 -
その後 GUI フロントエンドのusbguard-applet-qt → Debianでは bullseye(stable)でdrop (Archにはあるよう) USBGuard 通知の
usbguard-notifier が bookworm(testing) で入った 6 -
権限の設定 IPC経由でUSBguardにアクセスするための権限 plugdev groupに居たのでそのままでOKだった $ sudo grep ^IPCAllow /etc/usbguard/usbguard-daemon.conf IPCAllowedUsers=root
IPCAllowedGroups=root plugdev $ id | grep -m 1 -o plugdev plugdev 9 -
ポリシー生成 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 -
ポリシーをルールファイルに書 いて反映 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 -
設定例(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 -
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 -
特定のYubikeyを特定のポートだ けで許可する allow 1050:0011 name "Yubico Yubikey II" serial "0001234567"
\ via-port "1-2" hash "044b5e168d40ee0245478416caf3d998" reject via-port "1-2" 18 -
疑わしい(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 -
まだUSBキーボードが1つも許可 されていない場合にのみキーボ ードのみのデバイスを許可する allow with-interface one-of { 03:00:01 03:01:01 }
\ if !allowed-matches(with-interface one-of { 03:00:01 03:01:01 }) 20 -
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 -
後で接続したデバイスを有効に したい 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 -
デスクトップ向け通知(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 -
id指定 1 usbguard watch や usbguard list-devices で確認でき るidを指定 $
sudo usbguard allow-device 103 1 27 -
デバイス名指定 同様に 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 -
SEE ALSO: usbauth 2015年にSUSE 向けに最初に作成されたらしい.Linux 4.4+ 設定は自分で1から書かないといけなそう?(未確認) usbauth - USB
firewall against BadUSB attacks kochstefan/usbauth-all 29 -
奥付 発表 2023-04- 23(sun) 発表者 利用ソフトウェア ライセンス 鹿児島Linux勉強会 2023.04(オンライン開催) Kenichiro
Matohara(matoken) Asciidoctor Reveal.js CC BY 4.0 31