USBデバイスを使用したMS Windows XPに対するDoS攻撃

長年USBバスと緊密に連携し、あらゆる種類のデバイスを実装してきたため、バスの動作に関するさまざまなジョークのかなり大きなリストをまとめました。 デバッグプロセス中に、ドロップされる可能性のあるものはすべて落ち、最も重要なことには、標準のMS Windowsディストリビューションの標準ドライバーが落ちました。 標準クラスのデバイスはブルースクリーンに私を連れて行きました、ドライバーUSBHUB.SYS、USBHID.SYS、USBCCID.SYS(後者は一般に地獄でいっぱいでした)が落ちました。 ただし、ほとんどの場合、症状は複雑で、PC自体でのユーザーのアクションが必要でした。



しかし、1つのケースが依然として大きな関心を集め、問題を分析して強調するために、デバイスの「重要な」ファームウェアを保存しました。 そのため、Windows XP 32ビット(Windows 2003 Server 32ビットでもテスト済み)を実行しているシステムで文字通りDOS攻撃を実行するUSB​​デバイスを紹介します。 Windows Vistaはこの問題の影響を受けないようです。







そのため、デバイスをUSBポートに接続した後、スタートアップ設定やユーザーセッションがブロックされているかどうかに関係なく、システムプロセスはかなりの量のプロセッサー時間を使い果たします。 シングルプロセッサシステムでは、これはすべて100%です(つまり、システムは実際にハングアップします)。2つ以上のプロセッサでは、システムは外部で完全に動作し、応答しますが、タスクマネージャーでは、すべてが「神に感謝」ではないことは明らかです。 さらに、デバイスを取り外した後、効果は保持されます! システムを再起動するだけで、すべてがスムーズであるとは限りませんが、作業は完了したようですが、再起動/シャットダウン自体は行われず、システムはカーソルのある空白の画面に残ります。



これに続いて、すべての新しいプラグインUSBデバイスもシステムで検出されません。 どうやら、デバイスを決定するプロセスを担当するサービスがハングしています。



タスクマネージャに接続した後、32ビット版のWindows 2003 Serverに表示される内容は次のとおりです。



画像



NXP LPC214xマイクロコントローラーの完成したファームウェアをお届けします。 LPCUSBスタックに基づいて作成。 ファームウェアは、標準のKeil MCB2140デバッグボードでテストされています。 ファームウェアはこちらから入手できます。アーカイブには、LPC214xにアップロードする準備ができているHEXファイルと、Keil RealView MDKバージョン4.00以降でのアセンブリに適したファームウェアプロジェクトがあります(デモモードで環境を使用できます)。



次に、問題の本質と発生条件について説明します。問題は、誤って形成されたUSB記述子にあります。



注: USB記述子は、USBデバイスを記述する一連の構造です。 デバイスの初期化プロセスで、ホストはこの記述子を要求し、それを処理し、受信した情報に従ってデバイスを初期化します(必要なドライバーの検索、デバイス設定の取得、文字列定数の設定など)。



より正確には、構成記述子には、デバイス構成に関与する記述子の合計サイズを記述するフィールドがあります(これには、構成記述子、インターフェース記述子、クラス記述子、およびエンドポイント記述子が含まれます)。 そのため、記述子を編集するプロセスのこの値は誤って誤って設定されていました。この例では、0x29の代わりに0x200が設定されているため、非常に誇張されています。




  0x09、// bSize
	 DESC_CONFIGURATION、// bDescrType
	 // LE_WORD(0x29)、// wTotalLength
	 LE_WORD(0x200)、// wTotalLength
	 0x01、// bNumInterfaces
	 0x01、// bConfigurationValue
	 0x00、// iConfiguration
	 0x80、// bmAttributes
	 0x32、// bMaxPower 





このフィールドは、何らかの理由で正しく処理されていません。 私はより深い研究を実施しませんでした。値を過大評価するだけでは不十分かもしれません。スタックの特定性がこの緊急事態に影響するため、上記の完全なファームウェアへのリンクを引用しました。



提示された問題についての結論はあなたの良心に任せます。 主な弱点は、攻撃されたマシンとの「物理的な接触」が必要だということです。 このため、ほとんどの場合、オペレーティングシステムのUSBスタックにおけるこのエラーの危険性はそれほど大きくありません。 サーバーはアクセスが制限された部屋に配置する必要があり、平均的なユーザーにとっては、このような「ジョーク」は単に不快なものになりがちです。



MS Windowsの他のバージョンがこの誤った記述子に非常に苦痛に反応することを理解することは素晴らしいことです。 Windows XPでは3台のマシンを、Windows 2003 Serverでは1台のマシン(すべての更新プログラムの完全なセットを使用)を確認しましたが、残念ながら64ビットOSはありません。 Windows Vistaの既存のマシンでは、フリーズは発生せず、デバイスが完全に機能していると認定されました(明らかに、このフィールドの値はまったく使用されません)。



All Articles