最近、私はBadUSBや RubberDucky のようなものについて読んでいます。これらは、本質的に、コンピュータにキーボードであることを伝えるUSBスティックです。プラグインされると、実行するように指示されたコマンドを「入力」します。私の質問は、キーボードがほとんどすべてのOSで自動的に信頼されるのはなぜですか?たとえば、OSが接続された新しいキーボードを検出した場合、なぜパスワードプロンプトをポップアップして、そのキーボードがパスワードを入力するまで何もしないようにしませんか?これが大量のユーザビリティの問題を引き起こすとは思われません。これまたは別の保護手段が使用されない理由はありますか?
コンピュータに接続したデバイスの信頼モデルは、本質的に難しいものです。 USB標準は、文字通り誰でもUSBデバイスを作成できるように作成されました。セキュリティは要因ではありませんでした。それがあったとしても、どこに信頼を置きますか?映画業界はこのモデルをHDMIで試しましたが、基本的には惨めに失敗しました。誰かに何かをするデバイスを同時に与えることはできませんし、同じことをする方法を彼らに理解させないようにすることもできません。
あなたの例は、ユーザーに信頼を置くことを提案しています。最も明らかな問題は、キーボードを使用するためだけにパスワードを入力したくないということです。それを除けば、それは本当に何かを解決するでしょうか?
ユーザーすでにはデバイスを信頼します。そうでない場合、デバイスをコンピューターに接続しません。信頼はすでに確立されているので、なぜそれを機能させるために必要なことを何もしないのではないでしょうか。
そもそも、キーボードはブートプロセスのOSよりもずっと前から信頼されている傾向があります。BIOSパスワードまたはBitlockerキーを持っている場合は、OSがロードされる前にキーボードを使用して入力します。実際、特に悪意のあるキーボードは、起動可能なドライブのふりをして、OSを起動する前にルートキットを起動することで、OSの読み込みを妨げる可能性があります。
同じルールをマウスに拡張することもできます(事前定義されたポイントのセットをクリックして仮想キーボードを開き、好きなように入力できます)。
または、信頼できるデバイスのみを使用し、悪事が発生するわずかなリスクを受け入れることを決定することもできます。
答えは使いやすさです。
ユーザーは、マウス/キーボードが信頼できることをどのように同意する必要がありますか?悪意のある可能性のあるキーボード/マウスでは?キーボードを交換/交換する必要がある場合、どのように対処しますか?特にサーバーシナリオでは、複数のキーボード/マウスが別の場所に格納されており、サーバーに物理的にアクセスする必要がある場合は次善の策をとります。どのキーボードがどのサーバーに属していたかを数か月/年後に覚えておかないと、キーボードが壊れる可能性さえあります。交換用キーボードの使い方は?未知のキーボードに同意しますか?最初のキーボードでこれを行う方法?友人の新しいPCを試して、自分のキーボードを使用して、それを友人に渡すとします。彼は自分のキーボードにどのように同意すべきですか?編集:最初に使用する前にパスワードを要求することもできますが、私の最後の段落を参照してください。
したがって、基本的に未解決の質問は次のとおりです。コンピュータは、他のハードウェア/ソフトウェア/悪者/ ..によって偽装/迂回できないユーザーへの信頼できる/安全な接続を確立できます。 。簡単に使える方法で?
コンピュータセキュリティの10の不変の法則のルール3は、次のとおりです。「悪意のあるユーザーがコンピュータに物理的に無制限にアクセスできる場合、それはもはやコンピュータではありません。」悪者からBadUSBを挿入した場合、あなたは悪者の手先であり、彼にプロキシで物理的にアクセスできるようにします。悪いUSBよりも同様の悪い攻撃があることに注意してください。たとえば、悪意のある人からデバイスをFireWireまたはその他のDMAインターフェースに挿入すると、メモリの読み取り/書き込み、コードの実行、さらにはWindows/Linux/Macのロック画面の実行が可能になります。信頼できないデバイスをコンピュータに絶対に入れないでください。
編集:このルールとそのような攻撃は、標準が考えられたときには考慮されていなかったため(物理的なセキュリティはとにかく物理的なアクセスが制限されている場合を除いて、それほど重要ではありませんでした)、そのようなものは標準の一部にはなりませんでした。物理的なアクセスによる簡単な攻撃は既に多く存在していたため、このような小さなEdgeのケースを検討する価値はありませんでした。特に、複数のオペレーティングシステムとBIOSの間で自動化を共有する必要がある場合は、システムの複雑さが大幅に増大します( 「BIOSの場合はF10を押してください」)と保存する数。次の問題は、パスワードを表示する場所を決定するときに発生します。特に、欠陥のあるラップトップ画面のように複数のモニターが検出された場合に発生します。これもすべてユーザーからの受け入れに悪影響を及ぼし、代わりに使いやすい標準が標準になったのかもしれません。デバイスは経済的な作業会社によって製造されているため、複雑さが増し(=コスト)、受け入れが少なくなります(販売される製品が少なくなる)ため、このスリムなEdgeケースは、当時は重要ではありませんでした。
市場には、企業の高セキュリティ環境用の信頼できるUSBデバイスを定義できる専用のソフトウェアがありますが、前述の点のため、広く使用されていません。
OSはそれ自体の外の世界について何も知りません。ハードウェアが実際に存在するかどうかを確認する方法がないため、ハードウェアを信頼するように設計されています。実際、ハードウェア上で実行されているOSの概念と映画 The Matrix を比較すると、かなり注目されます。 OSは単純にバイトのコレクションであり、最終的にハードウェアによって処理されます。それは実際のハードウェアの一部で実行されているか、互いに等しく認識されていない他のOSで仮想化されているか、まとまりとして全体として機能するハードウェアの複数のユニットに物理的に分散している場合もあります。唯一の実際の要件は、ハードウェアが、OSが動作する必要があると信じている方法と一致する方法で動作することです。
結局のところ、OSはハードウェアなしでは存在できず、真実を伝えるためにハードウェアに完全に依存しています。より安全なシステムの作成に向けていくらかの進歩がありましたが(たとえば、PCIバスがDMAを使用する方法を制限し始めたとき)、それらはまだほとんどがセキュリティに対するハードウェアソリューションです。 OSはUSBデバイスからの入力を拒否できますが、デバイスが嘘をついている可能性があるため、USBデバイスを調べることによってそれを確実に判断することはできません。自分が何をしたいのかを識別することができ、OSはそれについて何もできません。ハードウェアの検証は、より多くのハードウェアから行う必要があります。 OSが知っているのは、既知のプロトコルに準拠する既知のバスで信号を受信していることだけです。たとえば、ハイパーバイザーで実行されている他の種類のソフトウェアを使用して簡単にエミュレートできます。 OSは違いを見分けることができません。
悪意のあるソフトウェアに対して事態をより困難にするために、非同期キーを備えたある種の暗号化チップを必要とするなど、おそらく悪意のある偶発的な行為から保護するが、開発を妨げるだけのブラックリスト/ホワイトリストキーシステムを使用するなど、確かに何かを行うことができます。新しいハードウェアのコストを上げ、消費者を苛立たせ、ホワイトリストに参加できない、またはブラックリストによって積極的にブロックされている競争を締め出す。問題に対する完全な解決策はなく、ハードウェアレベルで妥当な解決策を実行する必要があります。OSは、ハードウェアが本当の意味であるかどうかを簡単に判断できないためです。
問題は常にセキュリティと利便性の間にあるようです。 HID攻撃では、これらの攻撃に必要な物理的なアクセスにより、バランスは便利なようです。明らかにこれを実装することはできますが、現時点ではこれを行う必要はないようです。そのため、脅威が最小限の場合は、追加のコードと問題を追加する必要があります。