図1は、例えばパーソナルコンピュータ(PC)を表す場合がある従来のUSBホストシステム100を示すブロック図である。USBホストシステム100は、例えば、システムバス140により相互接続されたプロセッサ110、メモリ120、基本入出力システム(BIOS)130、及びUSBホストコントローラ150を含む。BIOS130は、システム100をブートストラップ、すなわち「ブート」するために必要なブートローダー・ソフトウェアを実行する前に、種々のテスト及び初期化機能(例えば、種々のシステムデバイスのパワー・オン・セルフテスト、識別、及び初期化等)を実施するファームウェアインタフェースを提供する。USBホストコントローラ150は、ホストシステム100をUSBバス155に接続されたUSBデバイス236に接続するために必要な機械的、電気的、及び信号的回路を含む。その目的のために、USBホストコントローラ150は、USBデバイス236のためのハードウェアインタフェースを提供する。USBデバイス236には、キーボード、マウス、マスストレージ、デジタルカメラ、並びに多数の他のタイプのデバイスが含まれ得る。
メモリ120は、本明細書に記載する種々の実施形態に関連するソフトウェアプログラム及びデータ構造を記憶するために、プロセッサ110、BIOS130、及び/又はUSBホストコントローラ150によりアドレス指定可能な複数の場所を含む場合がある。プロセッサ110は、かかるソフトウェアプログラムを実行し、本明細書に記載するデバイス識別データベースのようなデータ構造を操作(すなわち、制御)するように構成されたロジックを含む場合がある。例示的プロセッサ110は、シングルコア又はマルチコアの中央演算処理装置(CPU)、グラフィックス処理ユニット(GPU)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、及び/又は特定用途向け集積回路(ASIC)を含む場合がある。
オペレーティングシステム122は、その種々の部分が通常、メモリ120に常駐し、プロセッサ110により実行され、とりわけ、ホストシステムにおいて実行されるソフトウェアプロセス及び/又はアプリケーションを支援するための処理を実施することにより、ホストシステム100を機能的に構成する。オペレーティングシステム122は、ファイルシステム、ネットワーク、及び/又は本明細書に記載するようなDirectInputスタックとして構成された種々のプロトコルスタックを含む一連のソフトウェアレイヤとして構成される。適当なオペレーティングシステム122としては、とりわけ、ワシントン州レドモンドにあるマイクロソフト・コーポレイションから提供されるWindows(登録商標)シリーズのオペレーティングシステム、Linux(登録商標)オペレーティングシステム、及びカリフォルニア州クパチーノにあるアップル・インコーポレイテッドから提供されるMAC OS(登録商標)シリーズのオペレーティングシステム、及びUNIX(登録商標)シリーズのオペレーティングシステムが挙げられる。ソフトウェアプロセス/アプリケーションは、拡張USBプロトコルスタックセキュリティ手段302の種々のプロセス/アプリケーションを含む場合があり、したがって、本明細書に記載する種々の機能を実施するためにホストシステム100のプロセッサ110により実行される、種々の実行可能命令を含む場合がある。
当業者には、他のタイプのプロセッサ、及び種々の有形の一時的でないコンピュータ読取可能媒体のような他のタイプのメモリを使用して、本明細書に記載するシステムに関連するプログラム命令を記憶、及び実行することも可能であることは、明らかであろう。また、本明細書に記載した実施形態は、メモリに記憶されたソフトウェアプロセス/アプリケーションの形をとっているが、代替実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこれらの組み合わせとして実施されるこれらのプロセス/アプリケーションを含む。
図2は、従来のUSBプロトコルスタック232を有するUSBホストシステム200を示すブロック図である。ファイルシステムアプリケーション202には、オペレーティングシステム及び他のサプライヤにより提供される、ディレクトリ及びファイルブラウザ(例えば、マイクロソフト・コーポレイションから提供される「Explorer」、及びアップル・インコーポレイテッドから提供される「Finder」)が含まれる場合がある。アンチウイルスアプリケーション204には、シマンテック、マカフィその他のサプライヤから提供されるソフトウェアが含まれる場合がある。ネットワークアプリケーション206には、マイクロソフト・コーポレイションその他のサプライヤから提供されるウェブブラウザが含まれる場合がある。ファイアウォールアプリケーション208には、カスペルスキー、オンラインアーマーその他のサプライヤから提供されるソフトウェアが含まれる場合がある。DirectInputアプリケーション210には、マイクロソフトその他のサプライヤから提供されるワードプロセッサ及びスプレッドシートアプリケーションが含まれる場合がある。
ファイルシステムスタック212の例は、NTFS及びFAT32であり、ファイルシステムスタック212は、ホストシステム200のオペレーティングシステム122の一部を形成する場合があり、ファイルシステムアプリケーション202とマスストレージ機能ドライバ218との間の通信を可能にする場合がある。同様に、ネットワークスタック214は、オペレーティングシステムの一部を形成する場合があり、TCP/IPその他の種々のネットワークプロトコルをサポートし、ひいては、ネットワークアプリケーション206とネットワーク機能ドライバ220との間の通信を可能にする場合がある。DirectInputスタック216もまた、オペレーティングシステムの一部を形成する場合があり、直接ユーザ入力(例えば、キーボード打鍵又はマウスクリック)をサポートし、DirectInputアプリケーション210とヒューマン・インタフェース・デバイス(HID)クラス機能ドライバ222との間の通信を可能にする場合がある。
ドライバ218、220及び222は、USBコンポジットドライバ224と通信する。次いで、USBコンポジットドライバ224はUSBスタック232と通信し、USBスタック232は、コンポジットドライバ224とUSBホストコントローラ(ハードウェア)234との間における通信を有効化する。USBスタック232は、USBハブドライバ226、USBDインタフェースドライバ228、及びUSBホストコントローラドライバ230を含む。
図3は、本発明の少なくとも1つの実施形態にしたがってUSBセキュリティ手段を具現化する拡張USBプロトコルスタック302を含むUSBホストシステム300を示すブロック図である。明瞭かつ簡潔のために、先に説明した図3に示された機能ブロックは、先の参照符号により識別される。
拡張USBスタック302は、セキュリティ・コントロール・モジュール(SCM)304を含む。SCM304は、好ましくは、USBDインタフェースドライバ228とUSBホストコントローラドライバ230との間に配置され、ひいては、それらのドライバ間における通信を有効化(又は無効化)する。SCM304は、ランタイムデバイス識別モジュール(DIM)306、及びセキュリティ・コントロール・アプリケーション・インタフェース(SCAI)モジュール318のインタフェースとなる。DIM306は、静的分析機能310、ヒューリスティック分析機能312、及びアドミッション制御モジュール(ACM)308のインタフェースとなる。脅威通知モジュール314は、ACM308、及びユーザ通知インタフェースモジュール322のインタフェースとなる。デバイス識別データベース(DID)316は、DIM306及びSCAI318の両方のインタフェースとなる。ユーザ構成インタフェースモジュール320もまた、SCAI318のインタフェースとなる。
代替実施形態において、本明細書に記載するドライバ及び機能を含むソフトウェアプロセス、及び/又はモジュールは、USBホストシステム300の中で独立にスケジューリングされたプロセスとして実施される場合があるが、代替実施形態では、これらのモジュールは、単一プロセスの中の種々のコード断片として実施される場合がある。したがって、ホストシステム300の種々のモジュール間における通信は、例えば、モジュール間におけるメッセージの受け渡し、共有メモリ、又はリモート・プロシージャ・コール(RPC)の使用により実施される場合がある。モジュール間における情報の転送のためにオペレーティングシステム112により提供される適当なメッセージ受け渡し、共有メモリ、及び/又はRPCメカニズムは、インター・プロセス・コミュニケーション(IPC)メカニズムである。
SCM、SCAI、DIM及びACMの機能は、ホストシステム、ホストシステムのBIOS、及びUSBプロトコルスタックの種々の組み合わせにわたって分散される場合がある。例えば、図2に示したUSBホストシステムでは、新たなUSBデバイスがホストコントローラ234に接続されると、ホストシステム200が、その新たなデバイスを(通常は、USBデータラインを監視することにより)検出し、1パケット(又は複数パケット)の情報をその新たなUSBデバイスへ送り、そのデバイスから種々のパケットを受信する。このパケットの初期のやり取りは、USBデバイスの通常動作において行われるデータ転送を表すものではない。そうではなく、このパケットの初期のやり取りは、ホストシステムが、新たなUSBデバイスのための正しいドライバを選択できるようにするためのものである。この初期化中のある時点において、SCM及びSCAIは、権限の無いUSBデバイスを検出するための基準を適用し、疑わしい、又は権限の無いUSBデバイスが検出されたときに、ホストシステムがそれ以後の通信を防止することができるようにする場合がある。実際には、所望のセキュリティ手段を実施するために必要な機能及び基準は、図3に示したホストシステム、そのI/Oシステム、及びSCM/SCAIモジュールに、様々な形で分散される場合がある。
類似の機能分散は、DIM及びACMモジュール機能に関連して以下で説明するような実行時の疑わしい活動のために、ホストシステム、そのBIOS、並びに、SCM、DIM及びACMモジュールの間においても実施される場合がある。
次に、図3に示したセキュリティ手段(例えば、モジュール及び/又は機能)の動作について説明する。高レベルにおいて、SCM304は、SCAI318又はDIM306のいずれか一方(又は両方)から受信した入力に応答し、所与のUSBデバイス236と、USBホストシステム300の残りとの間における通信を有効化、又は無効化する機能を有する。より具体的には、あるUSBデバイス236が、ブラックリストに記載されたもの、すなわち疑わしいものであると認められる場合、以下で詳細に説明するように、SCM304は、SCAI318及び/又はDIM306と協働し、USBホストコントローラドライバ230と、そのUSBデバイスに関連するUSBDインタフェースドライバ228との間における通信を遮断する。逆に言えば、あるUSBデバイス236が、ホワイトリストに記載されたもの(問題ないもの)、すなわち疑わしくないものであると認められる場合、SCM304は、USBホストコントローラドライバ230と、そのUSBデバイスに関連するUSBDインタフェースドライバ228との間における通信を許可する。
新たなUSBデバイス236がUSBホストコントローラハードウェア234に最初に接続されたとき、そのデバイスとホストシステム300の残りとの間における何らかの通信が許可される前に、SCM304は、新たなUSBデバイスの存在をSCAI318及びランタイムDIM306に通知する。これに応答し、SCAI318は、そのデバイス、構成(インタフェース)及び文字列記述子、並びに場合によってはそのデバイスの機能のような他の情報を含む、新たなUSBデバイスに関連する情報を要求する場合がある。SCAI318は、そのような情報の中から、一致しない記述子、機能の異例な組み合わせ等の、疑わしいパターンを探索する。
次に、密接な関係がある種々の記述子の特定の態様について説明する。一般に、各記述子は、その記述子の長さを規定する単一バイトから始まる。デバイス記述子は、デバイスクラス、及びUSB仕様バージョン番号を含む場合がある。構成記述子は、インタフェース記述子、及び構成記述子中の総バイト数を含む場合がある。インタフェース記述子が構成記述子中に無い場合、インタフェース記述子は、代替の設定及びクラスを含む。文字列記述子は、例えばベンダ又は製造業者識別子(ID)のような製造業者、例えば製品IDのような製品、及び例えばシリアル番号のような他の情報文字列を含む場合がある。記述子は、少なくとも、ホストシステムがUSBデバイスのための適当なドライバを選択することが可能となるだけの十分な情報を提供する。
追加的に又は代替として、SCAI318は、新たなUSBデバイスに関する情報をDID316に記憶された情報と比較し、もしホストシステム300がインターネット接続を有しているときは、SCAI318は、ウェブリソース(例えばデータベース)に問合せ、その新たなUSBデバイスが安全なものとして識別されたものであるか、又は疑わしさのデフォルト条件を備えた疑わしいものとして識別されたものであるかを、判断する場合がある。DID316は、好ましくは、許可されたUSBデバイスのホワイトリスト、禁止されたUSBデバイスのブラックリスト、又は両方の組み合わせを管理するために使用される。SCAI318は、USBデバイス(例えば、製造業者ID、製品ID、及び/又は他の情報)に関する特定の情報を読み出し、その情報をホワイトリスト及び/又はブラックリストと比較して、そのデバイスに対し、ホストシステム300との通信を許可すべきか否かを判断する。
SCAI318と協働するSCM304の上記機能の一部は、ホスト300、及びホストのBIOS130によって実施される場合がある。当業者には理解されるように、新たなUSBデバイスの情報を、USBデバイスをホストとの通信から除外するリスト情報と比較することは、ホストのオペレーティングシステム122の一部とされる場合がある。
新たなUSBデバイスに対し、ホストシステム300との通信を許可すべきか否かを判断する際に考慮するさらに別の情報をSCAI318に提供するために、SCAI318は、アプリケーション・プログラミング・インタフェース(API)324をさらに含む場合があり、アンチウィルスアプリケーション、ファイアウォールアプリケーション又は他のアプリケーションは、API324を通して、新たなUSBデバイスを検査又はテストし、あるいは、そのデバイスに対し、ホストシステムとの通信(通信の継続)を許可すべきか否かを判断する際に使用されるさらに別の情報を提供する場合がある。したがって、例えば、アンチウィルスアプリケーションが、新たなUSBデバイス上に疑わしいウイルスを検出した場合、ウィルスが無効化されるまで、その情報は、SCAI318及びSCM304に通信を遮断させる場合がある。
さらに、SCAI318は、ユーザ構成インタフェース320を通じてユーザから情報を受信する場合がある。ユーザは、インタフェース320を通して、ユーザの環境又は知覚されるリスクレベルに応じて所望のセキュリティレベル(例えば、低、中、又は高)を選択し、若しくは変更し、DID316において管理されるホワイトリスト又はブラックリストへの追加のために事前に許可され若しくは許可されていないUSBデバイスを前もって識別し、又はユーザのセキュリティ設定を保存するといった、種々の動作を命じる場合がある。USBサムドライブ(図示せず)その他の記憶装置は、DID316のコピーを含むユーザのセキュリティ設定を記憶することと、そのような情報を埋め込みシステムに移植するための便利な手段を提供することとの両方に使用される場合がある。そのような情報をパスワードで保護された暗号化されたファイルに記憶することにより、サムドライブの紛失又は盗難によって、セキュリティが低下することはなくなるであろう。サムドライブは、記憶・輸送手段として機能する場合があるだけでなく、システムを動作させるためにそのシステムに物理的に取り付けなければならないドングルとして機能する場合がある。また、ユーザのセキュリティ設定は、安全なウェブサイト又はネットワーククラウドに記憶される場合があり、それによって、モバイルユーザのための容易な読み出しが可能となる場合がある。
上記のように、DID316の内容は、指定ウェブサイトとの間のホスト始動型の自動通信、権限を有するサービスプロバイダによるホストシステムへのリモートアクセス、及びユーザ始動型アクションを含む種々の技術のうちの任意のものにより、現場で更新される場合がある。
特定のUSBデバイス236が、ホストシステム300と問題なく通信できるようになった後、さらに別のセキュリティ手段が適用される場合がある。具体的には、特定のUSBデバイス236がホストシステム300と通信を開始した後、ランタイムデバイス識別モジュール(DIM)306は、そのような通信における疑わしい又は権限のない活動の有無を監視する場合がある。ランタイムDIM306は、静的分析機能310又はヒューリスティック分析機能312(あるいは両方)、並びにDID316からの情報に基づいて、疑わしい活動を探索する。静的分析機能の一例は、USBデバイスから発生するパケットに含まれるデータ、及び場合によってはコマンドにおける疑わしいパターンの有無を検査する、ディープ・パケット・インスペクションである。同様に、ホストシステム300から発せられ、USBデバイス236の1つを宛先とするパケットを検査し、そのパケットに含まれるデータがそのUSBデバイスにとって適当であるか否かを判断する場合がある。
静的分析機能の他の例は、USBマスストレージデバイスにも、適用可能である。ランタイムDIM306は、当業者に知られているハッシュ技術を使用して、USBマスストレージ上のある所定の記憶場所のハッシュを記憶する場合がある。USBマスストレージデバイスの動作中、ランタイムDIM306は、ハッシュにおける疑わしい変更の有無についてそのデバイスを監視し、適当な指示をACM308に出力する場合がある。
静的分析機能の他の例は、USBホストコントローラに接続されたHIDキーボードのようなUSB HIDデバイスに関して識別された疑わしい活動にも、適用可能である。例えば、ランタイムDIM306は、キーボードのWindows(登録商標)キーの押下を検出し、拒絶する場合があり、それによって、管理上のアクセスを獲得するための既知のプログラムを実行することがある種々のWindows(登録商標)−R(Run)試行(攻撃)を打破する場合がある。同様に、疑わしいものとして識別されたHIDマウスに関して、ランタイムDIM306は、プログラムを実行するメニューへのアクセスや、ホストシステム300への保護されていないアクセスの許可を含む、管理上のアクセスを獲得しようと試みる左又は右クリックを検出し、拒絶する場合がある。
ヒューリスティック分析の一例は、それ自体がキーボードとして識別されたUSBデバイスから発生した打鍵の速度を監視することである。もし打鍵の速度が人の最大タイプ速度を表す所定の限界を超える場合、そのUSBデバイスには、DIM306によって、疑わしいものとしてフラグが立てられ、適当な指示がACM308に出力される場合がある。その後、ACM308は、何の行為が原因であったのかを判断しようとする場合がある。この例では、過剰に高速な打鍵は、不正な活動(例えば、サービス拒否型の攻撃)を知らせるものであるかもしれないが、何かがキーボードの上に落ち、又はキーが固まり、ユーザがその問題に気付いていないことを知らせるものであるかもしれない。
観測された脅威の重大さに応じて、ACM308は、ユーザの介入なしに、疑わしいUSBデバイスからのそれ以後の通信を自動的に遮断するか、それ以後の通信を許可し、モジュール314を介して脅威通知を発行するか、それ以後の通信を許可し、その記録をとるか、又は他の動作を行う場合がある。次に、脅威通知モジュール314は、検出された脅威の人間が知覚可能な警告を、ユーザ通知インタフェース322を介して表示する場合がある。ホストシステム300が、PCであるか、又は取り付けられたビデオディスプレイ若しくはテレビ受像機を含む他のシステムである場合、人間が知覚可能な警告は、ビデオのような表示された警告の形を有する場合がある。ホストシステム300が取り付けられたビデオディスプレイを含まない埋め込みシステムである場合、人間が知覚可能な警告は、可聴警告、点滅光、あるいは、ユーザ等にとって通常見ることができるシステムのフロントパネル上の他のディスプレイの形を有する場合がある。ホストシステム300がインターネット接続又はPSTN接続を有する場合、電子メールの形をした警告、テキストメッセージ、又は記録されたお知らせ電話がさらに提供される場合がある。
本発明のさらに別の実施形態によれば、上記のセキュリティ手段の少なくとも一部は、ホストシステムのBIOS機能に関係して提供される場合がある。ホストシステムのオペレーティングシステムがアクティブになる前の時期における、USBデバイスから発生した不正な活動からの保護のために、ホストシステムのBIOS130は拡張され、限られた数の特別に規定された信頼性のあるUSBデバイスのみが当初認識され、動作を許可される場合がある。例えば、ホストシステムのBIOS130は、1つのキーボード及び1つのマウスのみを当初認識するように拡張され、キーボード及びマウスの各々は、最小数の記述子により識別されなければならない場合がある。いったんオペレーティングシステムがアクティブになった後は、ユーザは、ユーザ構成インタフェース320を通して情報を入力することにより、異なるキーボード又はマウスを識別することができ、その後、BIOSは、それらを認識しなければならない。
先に説明したセキュリティ手段のうちの所望のものは、ホストコントローラの拡張により提供される場合がある。例えば、ホストコントローラのハードウェア又はソフトウエア(あるいは両方)に変更を加え、所望のセキュリティ手段を実施することにより、当該セキュリティ手段を回避する不正な、又は悪意のある攻撃に対する耐性が向上されるとともに、速度に関する性能の向上も達成される場合がある。
上記の説明は、この発明の特定の実施形態に関するものである。しかしながら、記載した実施形態に対し、それらの利点の一部又は全部を維持しつつ、他の変更及び修正を施すことも可能であることは、明らかである。具体的には、本発明の実施形態は、種々のUSBホストシステムに関係して実施される場合があり、特定のオペレーティングシステムに依存するホストシステムに制限されることはない。また、本明細書に記載した手順、プロセス、及び/又はモジュールは、ハードウェアでも、ソフトウェアでも実施される場合があり、また、プログラム命令を有するコンピュータ読取可能媒体、ファームウェア、又はその組み合わせとして実施される場合もある。