悪意あるUSBを検出するLinuxカーネルドライバが登場
見た目はただのUSBケーブル。だが中身は、あなたのPCを乗っ取る兵器かもしれない。Linuxカーネルに、その脅威をカーネルレベルで検知する新ドライバが提案されている。
見た目はただのUSBケーブル。だが中身は、あなたのPCを乗っ取る兵器かもしれない。Linuxカーネルに、その脅威をカーネルレベルで検知する新ドライバが提案されている。
充電ケーブルが「キーボード」になる日
USBポートにケーブルを挿す。充電が始まる。何も起きていないように見える。だが、その瞬間からPCはWi-Fi経由で遠隔操作されている――そういう攻撃ツールが、すでに商用化されている。
O.MGケーブルと呼ばれるペネトレーションテスト用のツールは、見た目は完全に普通のUSBケーブルだ。しかしコネクタの内部にWi-Fiチップと小型マイクロコントローラが仕込まれており、PCに接続された瞬間に「キーボード」として認識される。OSはHID(ヒューマンインターフェースデバイス)を無条件に信頼するため、ファイアウォールもアンチウイルスも素通りする。
かつてNSAの同等ツール「COTTONMOUTH-I」は2万ドル(約320万円)した。今は約120ドルで誰でも買える。攻撃のコストが2桁下がった、という事実が重い。
BadUSBやO.MGケーブルのような攻撃は、コンピュータがキーボードやマウスといった物理デバイスに与える「暗黙の信頼」を悪用する。ソフトウェア的な防御はほぼ無力だ。
この穴を、カーネルの中から塞ごうとする動きが出てきた。
hid-omg-detect:カーネルが「怪しい入力」を嗅ぎ分ける
2026年4月4日、開発者ズベイル・アルマホがLinuxカーネルメーリングリストに投稿したパッチ(v2)が、hid-omg-detectというカーネルモジュールだ。名前の由来は明らかにO.MGケーブルを意識している。
このドライバは、接続されたHIDデバイスが「人間」ではなく「スクリプト」によって操作されていないかを、受動的に監視する。検出の根拠は3つある。キーストロークのタイミングエントロピー(人間の打鍵は不規則だが、スクリプトは均一になりやすい)、接続直後の即時入力(plug-and-type latency:人間がケーブルを挿してからキーを叩くまでには数秒のラグがある)、そしてUSBディスクリプタの異常パターンだ。
設計思想で注目すべきは、このドライバが何もブロックしないという点だ。HIDイベントの遮断も遅延も改変も行わない。閾値を超えた場合にカーネルログに警告を出し、ユーザースペース側のツール(USBGuardなど)に判断を委ねる。
カーネルドライバが直接デバイスをブロックしないのは、偽陽性のリスクがあるからだろう。正当なキーボードを誤検知して遮断すれば、ユーザーはPCを操作できなくなる。検知と遮断を分離した設計は、技術的に堅実な判断だと思う。
hid-omg-detectは「門番」ではなく「番犬」だ。吠えて知らせるが、噛みつくかどうかは飼い主が決める。
USBGuardとの連携が前提
hid-omg-detectが警告を出した後、実際にデバイスをブロックする役割を担うのがUSBGuardだ。Linuxカーネルに組み込まれたUSBデバイス認可メカニズムを利用して、ホワイトリスト・ブラックリスト方式でUSBデバイスの接続を制御するフレームワークである。
USBGuardはRed Hat Enterprise Linux 7.4以降に標準搭載され、Arch LinuxやUbuntuでもコミュニティパッケージとして利用できる。デバイスのベンダーID、プロダクトID、シリアル番号、接続ポート、インターフェースタイプなどの属性に基づいてポリシーを記述する仕組みだ。
ただし、USBGuard単体では「接続されたデバイスが悪意あるものかどうか」を判定する能力はない。あくまで「許可リストにないデバイスを弾く」という静的なフィルタリングだ。hid-omg-detectは、この仕組みに「動的な行動分析」というレイヤーを追加する。許可リストに載っているベンダーIDを偽装したデバイスでも、打鍵パターンが機械的であれば検知できる可能性がある。
コミュニティの反応:期待と懐疑
Phoronixのフォーラムでは、このパッチに対する議論が活発だ。あるユーザーは「これはずっとやりたかったことだ。物理アクセスが制限されたセキュリティモデルでは、ここが巨大な穴だった。キーボードはユーザーとまったく同じ権限を持っている。それが怖い」と歓迎した。
一方で、「USBGuardの何が不満なのか」という冷静な指摘もある。既存のデバイスをホワイトリストで管理し、未知のデバイスをブロックするだけで十分ではないか、という立場だ。ヒューリスティクスによる検知は、攻撃者がソースコードを読めるオープンソース環境では回避策を作られやすいという懸念もある。
このパッチの行方を左右するのは、カーネルコミュニティの判断だ。
Greg KHも4月5日にパッチに返信しており、eBPFプログラムとして実装する方がカーネルツリーへの統合よりも柔軟かもしれないという意見が出ている。
v1からv2へのアップデートでは、グローバルリストとmutexをデバイスごとのdrvdataに置き換え、スピンロック保持中のロギングを除去し、VID/PIDの検索をprobe()に移動するなど、コードの品質が着実に改善されている。435行のコンパクトなドライバだ。まだレビュー段階だが、議論の方向性としてはカーネルツリーへのマージよりも、eBPFベースの実装に落ち着く可能性もある。
「信頼」の再定義
このドライバの話は、実装の良し悪しだけでは終わらない。
OSが物理入力デバイスを無条件に信頼するという設計は、USBが普及した1990年代後半から変わっていない。当時、充電ケーブルの中にコンピュータが入るとは誰も想像しなかった。O.MGケーブルが約120ドルで買える現在、その「信頼」は負債になりつつある。
hid-omg-detectがカーネルに入るかどうかはわからない。だが、「キーボードが本当にキーボードか」をOSが問い始めたこと自体が、ひとつの転換点だろう。
参照元
他参照
関連記事
- トーバルズ、Linux 7.0来週リリースへ rc7で最終確認
- Flatpakに致命的な脆弱性、サンドボックスを完全に突破される
- Linux 7.0でPostgreSQL性能半減、修正困難か
- Gentooのエイプリルフールがガチだった件──36年越しのカーネルが動く
- BUS1がRustで復活──LinuxカーネルIPC再挑戦
- Metaが暴いた/proc/interruptsの隠れたボトルネック
- Linux 7.0-rc6直前、EXT4に異例の大量バグ修正が投入された
- AIのバグ報告がゴミから本物へ——Linuxカーネル管理者が語る「謎の転換点」
- Firefox 149.0.2公開、5件の高深刻度脆弱性を修正
- Rust Coreutils 0.8が登場、dd 45%高速化とブラウザ実行環境