USBGuardでLinuxのBadUSB対策:物理ポートを「アキレス腱」にしないために

Security tutorial - IT technology blog
Security tutorial - IT technology blog

なぜ「高性能」なファイアウォールでもBadUSBを防げないのか?

管理者の多くはファイアウォール、IDS/IPS、Web脆弱性スキャンに全力を注ぎがちですが、非常に危険な物理的な侵入口であるUSBポートを忘れがちです。BadUSB攻撃(Rubber Duckyなど)が恐ろしいのは、通常の方法ではマルウェアが含まれていない点にあります。代わりに、USBの制御チップにキーボード(HIDデバイス)を装ったファームウェアが書き込まれています。接続すると、1分間に1000ワードの速度でコマンドを「タイピング」し、一瞬で制御権を奪ったりバックドアを仕掛けたりすることが可能です。

典型的な例は「落とし物のUSB」シナリオです。従業員が見慣れないUSBを拾い、持ち主を探そうとして会社のPCに接続した瞬間、システムが侵害されます。もしUSBGuardが導入されていれば、その USBはコマンドが実行される前に即座に切断されます。

USBGuardはホワイトリスト方式で動作します。接続されているすべてのデバイスをスキャンし、設定したルールと照合します。未知のデバイスは、カーネルレベルで即座に拒否されます。

USBGuardのインストール:最初の鍵をかける

嬉しいことに、USBGuardは主要なLinuxディストリビューションの公式リポジトリで利用可能です。使用しているOSに合わせて以下のコマンドを実行するだけです。

Ubuntu/Debian系

sudo apt update && sudo apt install usbguard

RHEL/CentOS/Fedora系

sudo dnf install usbguard

Arch Linux系

sudo pacman -S usbguard

非常に重要な警告: マシンの前で直接作業している場合は、すぐにサービスを有効にしないでください。設定が空の状態でUSBGuardを起動すると、現在接続されているUSBキーボードやマウスがすべてブロックされてしまいます。その結果、自分のシステムから「締め出されて」しまうことになります。

防護壁の構築(ポリシー設定)

安全のために、現在マシンに接続されており、信頼できるデバイスに基づいてルールセットを作成します。

1. 初回ルールの自動生成

以下のコマンドで現在動作中のデバイスを認識し、それらを許可リストに変換します。

sudo usbguard generate-policy > rules.conf
sudo install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf

0600権限を使用することで、rootユーザーのみがこのリストを閲覧・編集できるようにします。設定ファイルの内容を詳しく確認してみましょう:

sudo nano /etc/usbguard/rules.conf

allow id 1d6b:0003 serial "0000:00:14.0" name "xHCI Host Controller" のような行が表示されます。見覚えのない「怪しい」デバイスがあれば、思い切って削除してください。

2. セキュリティ層の有効化

正しいルールファイルが作成できたら、自信を持ってデーモンを起動しましょう:

sudo systemctl start usbguard
sudo systemctl enable usbguard

3. デバイスの柔軟な管理

新しいUSBを接続すると、USBGuardはデフォルトでそれをブロックします。現在「拒否」されているデバイスのリストを確認するには、以下のコマンドを使用します:

usbguard list-devices

一時的に特定のデバイス(例:ID番号5)を許可するには、以下のようにします:

usbguard allow-device 5

次回以降も永続的に許可したい場合は、-p(permanent)フラグを追加します:

usbguard allow-device 5 -p

サーバー管理の実践的なアドバイスとして、弱いパスワードは決して使用しないでください。私はよくUSBGuardと、toolcraft.app/ja/tools/security/password-generatorで生成したパスワードを組み合わせています。このツールは100%ブラウザ上で動作するため、ネットワーク経由の情報漏洩の心配がなく、セキュリティを強化できます。

監視とトラブルシューティング

USBGuardが実際に動作しているか確認するには、システムログをリアルタイムで監視します。

ライブイベントの監視

usbguard watch

デバイスが接続または切断されるたびに、ベンダーIDとシステムの処理アクション(allow/block/reject)の詳細が画面に表示されます。

キーボードを「誤ってロック」してしまった場合

設定ミスでキーボードの操作ができなくなっても、慌てないでください。3つの救済策があります:

  1. 別のマシンからSSHでリモート接続し、rules.confファイルを修正する。
  2. 古いハードウェアがサポートしている場合は、PS/2ポートを使用する。
  3. リカバリモードで起動し、usbguardサービスを停止する。

機密環境向けの詳細設定

公共の場所に設置されているワークステーションでは、/etc/usbguard/usbguard-daemon.confファイルでより厳格なデフォルトポリシーを設定することをお勧めします:

ImplicitPolicyTarget=block

blockを指定すると、デバイスは待機リストに保持され、手動で承認する必要があります。rejectに変更すると、デバイスはハードウェアレベルで完全に切断され、OSはその存在すら認識できなくなります。

USBGuardの導入にはわずか10分ほどしかかかりませんが、得られるセキュリティ効果は計り知れません。これは、現在普及している物理的な攻撃手法に対して、システムを保護するための最後の砦となります。

Share: