web-dev-qa-db-ja.com

LinuxデスクトップでのBadUSB攻撃を防ぐ方法は?

LinuxラップトップをBadUSB攻撃から保護するにはどうすればよいですか? ArsTechnicaによる

おそらく、適切な AppArmor プロファイルを作成すると役立つでしょうか?

45
student

BadUSB攻撃は、コンピュータがすべてのUSBポートでHIDデバイスを許可および有効化するという事実に基づいています。偽造されたネットワークアダプターは本当の危険はありません。私の答えは、udevを使用して新しいHIDデバイスの追加を一時的に無効にする方法を説明しようとしています。私はudevの専門家ではありませんが、自分のアプローチをテストしたところ、うまくいきました。

準備の場合、ファイルを作成します/etc/udev/rules.d/10-usbblock.rules内容:

#ACTION=="add", ATTR{bInterfaceClass}=="03" RUN+="/bin/sh -c 'echo 0 >/sys$DEVPATH/../authorized'"

他のクラスもブロックしたい場合は、 クラス番号を検索 して、行をコピーし、クラスを変更します。

コマンドを使用して、すべての新しいHIDデバイスをblockできるようになりました

sed -i 's/#//' /etc/udev/rules.d/10-usbblock.rules; udevadm control --reload-rules

およびunblockと:

sed -i 's/^/#/' /etc/udev/rules.d/10-usbblock.rules; udevadm control --reload-rules

シャットダウンする前に、常にブロックを解除してください。設定は永続的であり、再起動時に「正常な」HIDデバイスは拒否されます。

一時的なルールディレクトリを編集できるかどうかはわかりませんが、変更が動作に影響する場合は、シャットダウンする前にブロックを解除する必要がないため、代わりに編集する必要があります。

35
user10008

BadUSBの背後にある考えは、悪意のあるエージェントがデバイスのUSBコントローラチップを再フラッシュして、何か厄介なことをするというものです。これは興味深い可能性ですが、ここでは人々がつぶやく傾向があるといういくつかの深刻な仮定があります。

1:USBコントローラチップは、USB接続を介してファームウェアをフラッシュできる必要があります

これは、それが可能かどうかは確かにセキュリティの脆弱性です。これが許可されている場合、デバイスが接続されているホストはデバイスの特性を永続的に変更できます。通常、これには特別な機器とチップの物理ピンへの直接アクセスが必要ですが、製造元がUSBプロトコルを介して機能を公開することを決定した場合、それ自体がアラームの原因であり、その製品の脆弱性として報告する必要があります。 notですが、プロトコル自体の欠陥です。

予定されている4つのデモのうち3つにPhison Electronicsのチップが含まれているという事実は、研究者が特定の製品にこのような脆弱性を発見したことを示唆しています。

2:デバイスは、試行しているアクティビティを物理的に実行できる必要があります

デバイスのファームウェアをフラッシュすることにより、サムドライブをネットワークアダプターとして報告することができます。しかし、それはそれを成し遂げません実際にネットワークアダプタ、それはコンピュータがそれが1つであるかのようにそれに通信することを意味します。これで、コンピューターがD-Link DUB-E1のドライバーを使用してVerbatim Store-n-Goと通信を開始します。ただし、Store-n-Goに対応するハードウェアインターフェイスがD-Linkにある場合を除いて、USBスティックが壊れているだけです。

USBスティックのボードに比較的強力なマイクロコントローラーが搭載されている場合は、再プログラミングできる可能性があります。しかし、「パワフル」と「USBペリフェラル」は通常一緒に動作しません。

3:コンピュータは喜んでプレイする必要があります

引用された例の1つは、デバイスにネットワークアダプターのように動作するように指示し、すべてのトラフィックが接続先のコンピューター上でデバイスを介してループされることを想定しています。それは...ストレッチです。これを実現するには、新しく接続したネットワークアダプターを新しいデフォルトゲートウェイとして設定するようにコンピューターを構成しておく必要があります。 Windowsがそれほど変更を熱望しているかどうかはわかりませんが、Linuxコンピューターでネットワークを構成したことがあれば、それほど単純ではないことをご存じでしょう。

テイクアウェイ

このコンセプト全体がすべて二段であるわけではありません。デバイスが接続されたホストによる再フラッシュを許可している場合、それは問題です。関連する息切れのないニュース記事によって引き起こされる災難につながらないことを100%確実に述べることができます。しかし、注目に値します。

さらに重要なことに、USBは強力であり、強力なことは潜在的に危険であることを意味します。 USB経由でデバイスを接続することは、必然的にコンピューターの動作を変更することを意味し、非常に危険なことが起こり得ます。私たちはこれを90年代から知っています。コンピュータに物を取り付けるときは、十分に注意してください。しかし、この新しい発見はほとんど変わりません。ここで可能な新しい攻撃は、既存の攻撃ほど強力ではありません。新しい危険は、「信頼された」デバイスと「信頼されていない」デバイス間の境界をあいまいにすることです。

25
tylerl

BadUSBは攻撃ではありません。攻撃を設計するときに使用するツールです。

USBデバイスをコンピューターに差し込むと、デバイスはコンピューターにそれがどのようなものかを伝え、コンピューターが適切なドライバーを選択できるようにします。たとえば、キーボードは「ヒューマンインターフェイスデバイス」であるのに対し、サムドライブは「USBマスストレージ」デバイスとして宣言されます。

BadUSBは、コンピュータからプラグインされたUSBデバイスのファームウェアを書き換えるための技術です。たとえば、サムドライブが自分自身をマウスとして識別し、ポインターをランダムに移動させることができます。または、接続されたキーボードと大容量記憶装置を備えたUSBハブとしてサムドライブを識別させることもできます。プラグインされると、一連のキーストロークによってサムドライブのプログラムが実行されます。

ここでの斬新なことは、USBデバイスが彼らの見た目とは異なるデバイスを作ることではありません-諜報機関、サイバー犯罪者、およびその他の人々は、何年もの間これを行ってきました。これは、USB接続を介して一般的なハードウェアに実行でき、マシンに接続されているサムドライブに自分自身を書き込み、ドライブのファームウェアをドライブが接続されたときにウイルスを実行しようとします。

これは非常に低いレベルで動作し、攻撃者が実行できることに対して非常に柔軟であるため、これを防御するのは困難です。 Linuxシステムでできることの1つは、すべてのリムーバブルメディアが「noexec」としてマウントされていることを確認することです。これにより、プログラムが実行されなくなり、攻撃が困難になります。また、何かを差し込んだときにUSBデバイスツリーをチェックして、予期しないものが表示されていないかどうかを確認することもできます。

技術以外のレベルでは、感染の可能性があるシステムに接続されているUSBデバイスの使用を避けます。

14
Mark

最近、UDevとLinuxカーネルのUSB認証機能を利用してUSBデバイスのホワイトリスト/ブラックリストを実装する SBGuard に取り組み始めました。これは、UDevイベントをリッスンし、カスタム ルール言語 で記述された一連のルールに基づいてUSBデバイスを承認または承認解除するユーザー空間デーモンです。

攻撃者がデバイスを再プログラミングして、適切なホワイトリストをバイパスするように(つまり、できるだけ具体的に)設定することは、はるかに困難になると思います。もちろん、USBGuardはすべての攻撃からユーザーを保護できるわけではなく、攻撃者がUSBデバイスに物理的にアクセスできる場合、そのようなデバイス(キーボードなど)のコピーを作成するために必要なすべての値にアクセスできます。キーボードは、通常、同じタイプの2つのキーボードを区別するiSerial値をエクスポートしないため、特に悪いケースです。

ただし、既知のデバイスのホワイトリストを使用することは、USBデバイス上の非表示/予期しないインターフェイスに対しては優れています。悪名高い例は、キーボードまたはネットワークカードの追加です(別の/マルウェアに感染したマシンで再プログラミングすることにより)。 USBフラッシュディスクにマスストレージインターフェイスが1つしかなく、突然何かが増えることがわかっている場合は、システムとやり取りさせないでください。これがUSBGuardの主な使用例です。

同じレベルは、UDevルールといくつかのヘルパーを使用してUSB記述子を解析するだけで実装できますが、USBGuardの方が便利です。

9
Daniel Kopeček

最も簡単な方法は、セキュアカーネルを使用することです。つまり、grsecurityパッチカーネルを使用します。

http://grsecurity.net/

Grsecはブート後にUSBを無効にする2つのオプションを提供しています:

ソフトなもの:

https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Deny_new_USB_connections_after_toggle

ユーザーは引き続きsysctl(kernel.grsecurity.deny_new_usb)を使用してUSBのロックを解除できます

難しいもの:

https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Reject_all_USB_devices_not_connected_at_boot

起動後にUSBがまったくない

Grsecは、Linuxカーネルのセキュリティレベルを強化するソースパッチのセットであり、さらに多くのセキュリティ問題(バッファオーバーフロー、スタックexecなど)から保護します。参照 https://grsecurity.net/features .php

独自のgrsecurityパッチが適用されたLinuxカーネルを任意のLinuxディストリビューションで構築できますが、それをサポートするディストリビューションは次のとおりです。

http://hardened.gentoo.org/

http://pentoo.ch/about

http://www.netsecl.com/home

4
neofutur

最初のUSB HIDキーボード/マウスを受け入れ、画面上でさらにUSB HIDキーボード/マウスを受け入れます。おそらく最も簡単な方法でしょう。そのようなものを実装したOSやソフトウェアはまだ知りません。

または、ユーザーがキーボードから入力する必要があるものを画面に表示して、不正なデバイスではないことを確認します。同様に、数字または文字の短いシーケンス。 (不正なデバイスは画面上にあるものをどのようにして知るのですか?)

3
linagee

あなたが望むことを正確に行うプロジェクトがあります:

  • usbkill
  • usbdeath (usbkillに基づくbashスクリプト)
  • usbcut (usbdeathのフォーク、よりフレンドリー)

私はubuntu 18.04でusbdeathとusbcutをテストしました。違いは、不正なデバイスを挿入すると、usbdeathがPCの電源をオフにすることです。代わりにusbcutがデバイスを不正にブロックします(PCの電源を切らずに)

1
ajcg