(57)【要約】【課題】カーネルモードコンポーネントに関連づけられたドライバがブートフェーズ中に他のドライバよりも前に初期化されることを確実にする技術を提供する。【解決手段】ライブラリコンポーネントはブートフェーズ中に処理され、ライブラリコンポーネントの代替であり得るプリブートコンポーネントはプリブートフェーズ中に処理される。これらのコンポーネントは、ドライバが初期化される最初のドライバとなることを確実にすることにより、他のドライバが初期化される前に、そのドライバがカーネルモードコンポーネントを起動できるようにする。ライブラリコンポーネントはまた、別のドライバがカーネルモードコンポーネントドライバよりも前に初期化されるかどうかを判定してもよく、カーネルモードコンポーネントドライバが最初に初期化されることを確実にしてもよく、カーネルモードコンポーネントに警告してもよい。【選択図】図１
2017033561.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスであって、
プロセッサと、
前記コンピューティングデバイスのブートフェーズ中に前記プロセッサによって動作可能な複数のコンポーネントであって、
前記コンピューティングデバイスのオペレーティングシステムによるドライバの初期化の前に処理され、処理されるときに、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが前記オペレーティングシステムによって初期化される前記ドライバの最初となることを確実にするライブラリコンポーネントと、
初期化されるときに、前記コンピューティングデバイスに他のドライバを初期化することよりも前に前記カーネルモードコンポーネントを起動させる前記ドライバコンポーネントと
を含む、複数のコンポーネントと
を含むことを特徴とするコンピューティングデバイス。
【請求項２】
前記ライブラリコンポーネントは前記ドライバコンポーネントの依存ダイナミックリンクライブラリ（ＤＬＬ）であることを特徴とする請求項１に記載のコンピューティングデバイス。
【請求項３】
前記ライブラリコンポーネントは、前記ライブラリコンポーネントが１または複数の他のライブラリコンポーネントよりも前に処理されるようにする名称に関連づけられていることを特徴とする請求項１に記載のコンピューティングデバイス。
【請求項４】
前記ドライバコンポーネントは、完全性マネージャまたは前記カーネルモードコンポーネントのドライバであり、前記ライブラリコンポーネントは、前記ドライバコンポーネントが初期化される前に前記完全性マネージャまたは前記カーネルモードコンポーネントを復号することを特徴とする請求項１に記載のコンピューティングデバイス。
【請求項５】
前記ドライバコンポーネントは、前記カーネルモードコンポーネントに関連づけられた完全性マネージャのドライバであることを特徴とする請求項１に記載のコンピューティングデバイス。
【請求項６】
前記ドライバコンポーネントは、初期化されるときに、前記完全性マネージャを起動し、前記完全性マネージャは、前記カーネルモードコンポーネントのドライバが前記ドライバコンポーネントの初期化の後に前記オペレーティングシステムによって初期化される前記ドライバの内の次のドライバであることを確実にすることを特徴とする請求項５に記載のコンピューティングデバイス。
【請求項７】
前記カーネルモードコンポーネントの前記ドライバは、初期化されるときに、前記カーネルモードコンポーネントを起動し、前記完全性マネージャおよび前記カーネルモードコンポーネントは両方とも前記オペレーティングシステムが前記他のドライバを初期化する前に起動されることを特徴とする請求項６に記載のコンピューティングデバイス。
【請求項８】
前記ライブラリコンポーネントは、前記ドライバコンポーネントが１または複数の他のライブラリコンポーネントの処理することの前に初期化されるようにすることを特徴とする請求項１に記載のコンピューティングデバイス。
【請求項９】
前記ドライバコンポーネントは少なくとも、前記コンピューティングデバイスのリブートなしに更新され得るアンロード可能部分と、前記コンピューティングデバイスのリブートなしに更新され得ない非アンロード可能部分とを含むことを特徴とする請求項１に記載のコンピューティングデバイス。
【請求項１０】
コンピュータにより実施される方法であって、
コンピューティングデバイスのブートフェーズ中に、前記コンピューティングデバイスのオペレーティングシステムによるドライバの初期化の前に、前記ドライバの少なくとも１つがカーネルモードコンポーネントに関連づけられたドライバコンポーネントよりも前に前記オペレーティングシステムによって初期化されるかどうかを判定するステップと、
前記ドライバの少なくとも１つが前記ドライバコンポーネントよりも前に初期化されると判定することに応答して、
前記ドライバコンポーネントを前記オペレーティングシステムによって初期化される最初のドライバとして配置するように前記ドライバの初期化順序を変更するステップと、
前記初期化順序が変更されたことを前記カーネルモードコンポーネントに警告するステップと
を含むことを特徴とする方法。
【請求項１１】
前記ブートフェーズに先立つランタイム中に、前記カーネルモードコンポーネントにより、前記ドライバコンポーネントを前記オペレーティングシステムによって初期化される前記最初のドライバとして配置するように前記ドライバの前記初期化順序を更新するステップをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記更新するステップの後かつ前記ブートフェーズに先立ち、セキュリティエクスプロイトは前記ドライバの前記少なくとも１つが前記ドライバコンポーネントよりも前に初期化されるように前記初期化順序を変更することを特徴とする請求項１１に記載の方法。
【請求項１３】
前記ランタイム中に、前記カーネルモードコンポーネントにより、別のドライバを前記初期化順序における前記最初のドライバとして配置するよう求める要求を遮断するステップと、これに応答して、他のドライバを前記初期化順序において前記ドライバコンポーネントの後に配置するステップとをさらに含むことを特徴とする請求項１１に記載の方法。
【請求項１４】
前記変更するステップは、前記ブートフェーズに続くランタイムにおいて実行され、カーネルモードコンポーネントは前記警告を受信することに応答してセキュリティイベントを生成することを特徴とする請求項１０に記載の方法。
【請求項１５】
前記判定するステップ、前記変更するステップおよび前記警告するステップは、前記カーネルモードコンポーネントに関連づけられた完全性マネージャによって実行されることを特徴とする請求項１０に記載の方法。
【請求項１６】
前記完全性マネージャのドライバは、前記完全性マネージャの前記ドライバに関連づけられたライブラリコンポーネントによって前記初期化順序において最初に配置されることを特徴とする請求項１５に記載の方法。
【請求項１７】
コンピュータにより実施される方法であって、
コンピューティングデバイスのブートフェーズ中に、カーネルモードコンポーネントに関連づけられたコンポーネントにより、前記コンピューティングデバイスのオペレーティングシステムによって前記オペレーティングシステムによるドライバの初期化の前に削除されるべき情報をリトリーブするステップと、
前記コンポーネントにより、前記情報を前記カーネルモードコンポーネントに提供するステップと
を含むことを特徴とする方法。
【請求項１８】
前記情報は、前記コンピューティングデバイスのブートローダに関連づけられたブート情報であることを特徴とする請求項１７に記載の方法。
【請求項１９】
前記リトリーブするステップは、前記ブートローダのローダパラメータブロックから前記ブート情報をリトリーブするステップを含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記ブート情報は、前記ドライバのリスト、前記ドライバの初期化順序、基本入力／出力システム（ＢＩＯＳ）情報、メモリレイアウト、ｔｒｕｓｔｅｄ  ｐｌａｔｆｏｒｍ  ｍｏｄｕｌｅ（ＴＰＭ）情報または乱数発生器シードの内の少なくとも１つを含むことを特徴とする請求項１８に記載の方法。
【請求項２１】
前記情報は、前記コンピューティングデバイスのブートローダによってロードされるブートドライバのリストを含むことを特徴とする請求項１７に記載の方法。
【請求項２２】
前記提供するステップは、前記ブートドライバの前記リストおよびＡ）前記ブートドライバのコピーまたはＢ）ブートドライバ情報を前記カーネルモードコンポーネントに提供するステップを含むことを特徴とする請求項２１に記載の方法。
【請求項２３】
前記コンポーネントは、前記カーネルモードコンポーネントに関連づけられた完全性マネージャのＤＬＬであり、前記提供するステップは、前記情報を前記完全性マネージャに提供するステップであって、それが次に前記情報を前記カーネルモードコンポーネントに提供する、提供するステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２４】
前記ＤＬＬは、前記完全性マネージャの初期化に先立ち前記情報を格納するバッファを含むことを特徴とする請求項２３に記載の方法。
【請求項２５】
コンピューティングデバイスのプロセッサによって前記コンピューティングデバイスのプリブートフェーズ中に動作可能な複数のコンポーネントを格納したコンピュータ記憶デバイスであって、前記コンポーネントは、
カーネルモードコンポーネントに関連づけられたプリブートコンポーネントを処理するプリブート環境と、
処理されるときに、前記カーネルモードコンポーネントに関連づけられたドライバコンポーネントがブートフェーズ中にオペレーティングシステムによって初期化される最初のドライバとなることを確実にする前記プリブートコンポーネントと
を含むことを特徴とするコンピュータ記憶デバイス。
【請求項２６】
前記プリブート環境は、前記プリブートコンポーネントでの前記プリブート環境の構成を可能にするインターフェースと関連づけられていることを特徴とする請求項２５に記載のコンピュータ記憶デバイス。
【請求項２７】
前記インターフェースは、セキュリティエクスプロイトでの前記プリブート環境の構成を防止するセキュリティメカニズムと関連づけられていることを特徴とする請求項２６に記載のコンピュータ記憶デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、ブートフェーズにおける早期ロードを通じた完全性保証に関する。
【背景技術】
【０００２】
日常生活のさらに大きい部分を占めるインターネット利用に伴い、システムリソース、データおよび個人情報を盗んだり、破壊したりするセキュリティエクスプロイトは、増加しつつある問題である。政府および企業は、これらのセキュリティエクスプロイトに関連する侵入および窃盗を防止することにかなりの資源を投じている。セキュリティエクスプロイトは、コンピュータウィルス、ワーム、トロイの木馬、スパイウェア、キーストロークロガー、アドウェアおよびルートキットなどの多数の形態で現れる。これらのエクスプロイトは、スピアフィッシュ電子メール、クリック可能リンク、文書、実行可能ファイルまたはアーカイブなどの、いくつかのメカニズムにおいて、またはいくつかのメカニズムを通じてもたらされる。セキュリティエクスプロイトによって突きつけられる脅威のいくつかは、サイバーテロリズムまたは産業スパイ活動と言われるほど深刻である。
【０００３】
セキュリティソフトウェアを脆弱化する（compromise）ため、またはセキュリティソフトウェアの存在にもかかわらずコンピューティングデバイスの支配を獲得するために、セキュリティエクスプロイトは、コンピューティングデバイスのブートフェーズにおいて早期に起動するようにしばしば設計されている。セキュリティエクスプロイトは、オペレーティングシステムによってブートフェーズ中に用いられるドライバ初期化順序を修正して、そのセキュリティエクスプロイトに関連づけられたドライバをオペレーティングシステムによって初期化されるドライバのリストにおける最初に配置することによって、これを実現し得る。セキュリティエクスプロイトドライバは、初期化されるときにセキュリティエクスプロイトを起動することができる。
【０００４】
また、セキュリティソフトウェアは、オペレーティングシステムカーネルによるドライバのロードを監視することができ、それがセキュリティソフトウェアにドライバがロードされる時点を通知することができる。しかしながら、一部のオペレーティングシステムにおいて、「ブートドライバ」と称される一部のドライバは、ブートローダによってロードされることが可能であり、それらのオペレーティングシステムはセキュリティソフトウェアにブートドライバのロードについて通知することができない。したがって、ブートフェーズ中にブートローダによってロードされるブートドライバを装うセキュリティエクスプロイトは、セキュリティソフトウェアによる検出を免れ得る。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願第１３／４９２６７２号明細書
【図面の簡単な説明】
【０００６】
詳細な説明は、添付図面を参照しながら示される。図において、参照番号の一番左の数字は、その参照番号が最初に現れる図を識別する。異なる図における同一の参照番号の使用は、同様または同一の項目または特徴を示す。
【０００７】
【図１】コンピューティングデバイスの例示的なブートフェーズを示す図である。ここにおいて、ドライバが初期化される前に、カーネルモードコンポーネントに関連づけられたライブラリコンポーネントが処理され、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする。
【図２】コンピューティングデバイスの例示的なプリブートフェーズおよびブートフェーズを示す図である。ここにおいて、カーネルモードコンポーネントに関連づけられたプリブートコンポーネントがプリブートフェーズにおいて処理され、プリブートコンポーネントは、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする。
【図３】例示的な環境を示す図である。ここにおいて、カーネルモードコンポーネントは、コンピューティングデバイスのランタイム中に、カーネルモードコンポーネントのドライバがブートフェーズにおいて初期化される最初のドライバとなることを確実にするか、プリブート環境を構成するか、またはブートフェーズアクティビティに基づいてセキュリティイベントを生成し、そのイベントをリモートセキュリティサービスに提供する。
【図４】カーネルモードコンポーネントとカーネルモードコンポーネントに関連づけられた完全性マネージャとで構成されたコンピューティングデバイスのコンポーネントレベルビューを示す図である。
【図５】ドライバの初期化の前に、カーネルモードコンポーネントに関連づけられたライブラリコンポーネントをブートフェーズ中に処理し、ライブラリコンポーネントは、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする、例示的プロセスを示す図である。
【図６】少なくとも１つのドライバがカーネルモードコンポーネントに関連づけられたドライバコンポーネントよりも前に初期化されると判定し、これに応答して、ドライバコンポーネントが最初に初期化されるように初期化順序を変更し、初期化順序が変更されたことをカーネルモードコンポーネントに警告する、例示的プロセスを示す図である。
【図７】ブートフェーズ中に、カーネルモードコンポーネントに関連づけられたコンポーネントにより、オペレーティングシステムによるドライバの初期化の前にオペレーティングシステムによって削除されるべき情報をリトリーブし、この情報をカーネルモードコンポーネントに提供する、例示的プロセスを示す図である。
【図８】カーネルモードコンポーネントに関連づけられたプリブートコンポーネントをプリブートフェーズ中に処理して、プリブートコンポーネントは、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする、例示的プロセスを示す図である。
【発明を実施するための形態】
【０００８】
本開示は、部分的に、ライブラリコンポーネントおよびプリブートコンポーネントを利用して、カーネルモードコンポーネントに関連づけられたドライバがブートフェーズ中に他のドライバよりも前に初期化されることを確実にする技術について説明する。ライブラリコンポーネントはブートフェーズ中に処理され、ライブラリコンポーネントの代替であり得るプリブートコンポーネントはプリブートフェーズ中に処理される。これらのコンポーネントは、そのドライバが初期化される最初のドライバとなることを確実にすることにより、他のドライバが初期化される前に、そのドライバがカーネルモードコンポーネントを起動できるようにする。
【０００９】
様々な実施形態において、ライブラリコンポーネントは、カーネルモードコンポーネントに関連づけられた完全性マネージャのドライバの依存ダイナミックリンクライブラリ（ＤＬＬ）とすることができる。完全性マネージャは、ブートフェーズ中およびランタイムの両方において、カーネルモードコンポーネントの完全性を保証することを担うコンポーネントとすることができる。ライブラリコンポーネントは、オペレーティングシステムによっていかなるドライバが初期化される前にも、他のドライバの他の依存ＤＬＬと共に処理される。ライブラリコンポーネントおよび他の依存ＤＬＬは、ＡＳＣＩＩまたはＵｎｉｃｏｄｅ文字で構成され得るそれらの名称のアルファベット順で処理されてもよい。ライブラリコンポーネントは、処理されるときに、カーネルモードコンポーネントに関連づけられた、完全性マネージャドライバなどのドライバコンポーネントがオペレーティングシステムによって初期化される最初のドライバとなることを確実にする。これは、オペレーティングシステムによって利用される初期化順序をドライバについてチェックすることと、ドライバコンポーネントが初期化順序において最初に配置されていない場合、ドライバコンポーネントが最初に処理されることを確実にするために、ドライバコンポーネントをその初期化順序における最初に配置するように初期化順序を更新することとを伴ってもよい。いくつかの実施形態において、ドライバコンポーネントが最初に初期化されることを確実にすることに加え、ライブラリコンポーネントは、ドライバコンポーネントに、他のＤＬＬが処理される前に初期化されるようにさせる。ライブラリコンポーネントはまた、処理されるときに、完全性マネージャまたはカーネルモードコンポーネントの片方または両方の実行可能ファイルを復号してもよい。
【００１０】
オペレーティングシステムは次いで、ドライバコンポーネントから始まる初期化順序に指定された順序で、ドライバを初期化してもよい。完全性マネージャドライバコンポーネント（本明細書では「ドライバコンポーネント」とも称される）は、初期化されるときに、完全性マネージャを起動してもよく、この完全性マネージャは、初期化順序における次のドライバがカーネルモードコンポーネントドライバとなることを確実にしてもよい。オペレーティングシステムは次いで、カーネルモードコンポーネントドライバを初期化して、カーネルモードコンポーネントドライバにカーネルモードコンポーネントを起動させてもよい。
【００１１】
プリブートコンポーネントが使用されるいくつかの実施形態において、基本入出力システム（ＢＩＯＳ）などのプリブート環境は、プリブート環境がプリブートコンポーネントなどのコンポーネントを提供されることを可能にする、インターフェースを有していてもよい。そのインターフェースが次に１または複数のセキュリティ手段を利用してもよい。
【００１２】
上記に説明されたように、完全性マネージャが完全性マネージャドライバによって起動されるときに、完全性マネージャは、カーネルモードコンポーネントドライバが初期化順序における次のドライバであるかどうかを判定してもよい。カーネルモードコンポーネントドライバが次のドライバではない場合、完全性マネージャは、カーネルモードコンポーネントドライバを完全性マネージャドライバの後の最初のドライバとして配置するように初期化順序を変更し、カーネルモードコンポーネントが起動されたら、カーネルモードコンポーネントに、カーネルモードコンポーネントドライバが最初ではなかったこと、および完全性マネージャによって初期化順序における最初に配置されなければならなかったことを警告する。カーネルモードコンポーネントは、この警告を受信すると、構成を更新してもよいし、追加の監視を実行してもよいし、回復措置（healing action）を講じてもよいし、またはリモートセキュリティサービスに通知してもよい。前回のランタイム中に、カーネルモードコンポーネントは、それのドライバを初期化順序における最初に配置しておいてもよく、他のアプリケーションまたはプロセスからのそれらのドライバが最初に配置されるよう求める要求を遮断および変更しておいてもよい。カーネルモードコンポーネントドライバが最初でなかった場合は、セキュリティエクスプロイトなどの悪意のあるアクティビティが原因である可能性がある。
【００１３】
様々な実施形態において、ライブラリコンポーネントはまた、ドライバの初期化の前にオペレーティングシステムによって削除されるべき情報をリトリーブしてもよい。このような情報はブート情報とすることができる。例えば、このブート情報はブートローダに関連づけられたブート情報であってよく、ブートローダのローダパラメータブロックからリトリーブされてもよい。情報の例は、ドライバのリスト、ドライバの初期化順序、ＢＩＯＳ情報、メモリレイアウト、ｔｒｕｓｔｅｄ  ｐｌａｔｆｏｒｍ  ｍｏｄｕｌｅ（ＴＰＭ）情報または乱数発生器シードを含み得る。これに代えてまたはこれに加えて、この情報は、ブートドライバのリストおよびブートドライバのコピーを含み得る。ライブラリコンポーネントは、リトリーブされた情報をライブラリコンポーネントのバッファに格納してもよい。完全性マネージャが起動されたら、それはこの情報をライブラリコンポーネントからリトリーブしてもよく、カーネルモードコンポーネントが起動されたら、この情報をカーネルモードコンポーネントに提供してもよい。
【００１４】
例示的ブートフェーズ
図１はコンピューティングデバイスの例示的なブートフェーズを示す。ここにおいて、ドライバが初期化される前に、カーネルモードコンポーネントに関連づけられたライブラリコンポーネントが処理され、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする。図１は、ハードウェアコンポーネントおよびソフトウェアコンポーネントの両方ならびにプロセスまたは動作を示す。プロセスまたは動作は、図１にそれらの発生順に番号が付けられて示されている。
【００１５】
図示されたように、コンピューティングデバイス１０２は、電源の切入（power cycle）またはリブートの後にブートフェーズ１０４を開始し得る。完全性マネージャの完全性マネージャドライバ１０６およびカーネルモードコンポーネントのカーネルモードコンポーネントドライバ１０８は両方ともブートフェーズ１０４の早期に初期化されて、コンピューティングデバイス１０２のオペレーティングシステムによって他のドライバ１１０が初期化される前に、完全性マネージャおよびカーネルモードコンポーネントを起動されるようにさせる。オペレーティングシステムは、初期化順序１１２によって指定された順序でドライバを初期化し得る。完全性マネージャドライバ１０６が初期化順序１１２において最初となることを確実にするために、完全性マネージャドライバ１０６は、オペレーティングシステムによっていかなるドライバが初期化されるよりも前に、他のドライバの他の依存ＤＬＬ１１６と共に処理される、依存ＤＬＬなどのライブラリコンポーネント１１４に関連づけられてもよい。
【００１６】
示されたように、ブートフェーズ１０４の第１の部分の間に、ＤＬＬが処理されてもよい１１８。この処理すること１１８は、ライブラリコンポーネント１１４を処理することを含み、それが次に完全性マネージャドライバ１０６が初期化順序１１２において最初となることを確実にし１２０、オペレーティングシステムによって削除されるべき情報をリトリーブする１２２。この情報は次いで、ライブラリコンポーネント１１４のバッファ１２４に格納される。次に、ブートフェーズ１０４の第２の部分の間に、オペレーティングシステムは、ライブラリコンポーネント１１４によってリトリーブされた１２２ブート情報を削除する１２６。その後、ブートフェーズ１０４の第３の部分の間に、オペレーティングシステムは初期化順序１１２に従ってドライバを初期化する１２８。
【００１７】
様々な実施形態において、コンピューティングデバイス１０２は、サーバもしくはサーバファーム、分散された複数のサーバファーム、メインフレーム、ワークステーション、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、タブレットコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、メディアセンタ、組込みシステムまたは他の任意の種類のデバイスとすることができる。コンピューティングデバイス１０２は、複数のコンピューティングデバイス上に実施されるとき、図１に示されたコンポーネントおよびプロセスを複数のコンピューティングデバイスに分散させてもよい。いくつかの実施において、コンピューティングデバイス１０２は、１または複数のコンピューティングデバイス上に実施された１または複数の仮想マシンを表す。コンピューティングデバイス１０２として機能することが可能な例示的コンピューティングデバイスが図４に示され、その図を参照しながら以下に説明される。
【００１８】
ブートフェーズ１０４は、電源の切入またはリブートに続く、コンピューティングデバイス１０２のブートプロセスの一部とすることができる。ブートフェーズ１０４はプリブートフェーズに続いてもよく、いくつかの動作を伴ってもよく、ここにおいて、コンピューティングデバイス１０２のオペレーティングシステムのブートローダおよびカーネルが、ドライバなどのコンピューティングデバイスコンポーネントをロードおよび初期化する。ブートフェーズ１０４の第１の部分において、オペレーティングシステムは、ライブラリコンポーネント１１４および他の依存ＤＬＬ１１６などの、ドライバの依存ＤＬＬを処理してもよい１１８。この処理すること１１８は、ドライバおよびそれらのＤＬＬをコンピューティングデバイス１０２のメモリにロードすることの後に続いてもよい。依存ＤＬＬを処理すること１１８の後、オペレーティングシステムはブート情報を削除する１２６。オペレーティングシステムは次いでドライバを初期化すること１２８へ進む。ブートフェーズ１０４はまた、図示および説明されたものに加えて、他の段階または動作を伴ってもよい。ブートフェーズ１０４に続いて、コンピューティングデバイス１０２はランタイムフェーズに入ってもよく、ここにおいて、オペレーティングシステムならびに様々なコンポーネントおよびアプリケーションは既に起動しており、アクティブプロセスとして実行中である。
【００１９】
上記に説明されたように、ライブラリコンポーネント１１４は完全性マネージャドライバ１０６の依存ＤＬＬとすることができる。依存ＤＬＬ１１４および依存ＤＬＬ１１６はそれら自身が実行可能ファイルであり、オペレーティングシステムは、ドライバを初期化する前にドライバの依存ＤＬＬを処理して、依存ＤＬＬを呼び出すドライバがクラッシュするのを防いでもよい。ドライバが初期化順序１１２に従って初期化される一方で、それらの関連づけられた依存ＤＬＬは別の順序で処理されてもよい。例えば、依存ＤＬＬは、ＡＳＣＩＩ文字列であり得る、それらの関連づけられた名称のアルファベット順で処理されてもよい。このような実施形態において、ライブラリコンポーネント１１４は、それに他の依存ＤＬＬ１１６よりも前に処理されるようにさせる名称を有してもよい。
【００２０】
様々な実施形態において、ライブラリコンポーネント１１４が処理される１１８とき、それは、完全性マネージャドライバ１０６が初期化順序１１２において最初となることを確実にすること１２０、ブート情報などの削除されるべき情報をリトリーブすること１２２、およびそのブート情報をライブラリコンポーネント１１４のバッファに格納することを含む、いくつかの動作を実行してもよい。完全性マネージャドライバ１０６が初期化順序１１２において最初となることを確実にする１２０ために、ライブラリコンポーネント１１４は、完全性マネージャドライバ１０６を最初に配置するように初期化順序１１２を変更してもよい。いくつかの実施形態において、初期化順序１１２を変更することに加えてまたは代えて、ライブラリコンポーネント１１４がオペレーティングシステムに完全性マネージャドライバ１０６を初期化させて、完全性マネージャドライバ１０６が完全性マネージャを起動してもよく、それが次に、カーネルモードコンポーネントを他の依存ＤＬＬが処理される前にすっかり起動してもよい。
【００２１】
この情報をリトリーブすること１２２は、ブートローダに関連づけられてブートローダのローダパラメータブロックからリトリーブされたブート情報をリトリーブすること１２２を含んでもよい。ライブラリコンポーネント１１４によってリトリーブされる１２２情報の例は、ドライバのリスト、ドライバの初期化順序、ＢＩＯＳ情報、メモリレイアウト、ＴＰＭ情報または乱数発生器シードを含み得る。これに代えてまたはこれに加えて、この情報は、ブートドライバのリストおよびブートドライバのコピーを含み得る。
【００２２】
依存ＤＬＬを処理すること１１８およびブート情報を削除すること１２６の後に、オペレーティングシステムは初期化順序１１２に基づきドライバを初期化する。初期化順序１１２はいかなる種類の構造、ファイルであってもよく、またはデータベースでさえあってよく、ドライバは、オペレーティングシステムの実行可能コンポーネントまたはオペレーティングシステムもしくはアプリケーションのコンポーネントをアクティブプロセスとして起動しうるコンピューティングデバイスアプリケーションの実行可能コンポーネントであってもよい。ライブラリコンポーネント１１４のアクティビティゆえに、完全性マネージャドライバ１０６は初期化順序１１２における最初のドライバとなることができ、したがって他のドライバよりも前に初期化され得る。
【００２３】
オペレーティングシステムが完全性マネージャドライバ１０６を初期化するとき、完全性マネージャドライバ１０６は他のドライバが初期化される前に完全性マネージャを起動する。上記に説明されたように、完全性マネージャは、ブートフェーズ１０４およびランタイムの両方において、カーネルモードコンポーネントの完全性を保証することを担うコンポーネントとすることができる。完全性マネージャは単一のコンポーネントであっても、または同一のタイトル／ジョブ／挙動を有するコンポーネントの組合せであってもよい。完全性マネージャは次いで、カーネルモードコンポーネントドライバ１０８が初期化順序において完全性マネージャドライバ１０６の後の次のドライバであるかどうかを判定してもよい。カーネルモードコンポーネントドライバ１０８が次のドライバでない場合、完全性マネージャは、カーネルモードコンポーネントドライバ１０８を次のドライバとして配置するように初期化順序１１２を変更する。また、完全性マネージャが初期化順序１１２を変更する必要がある場合、完全性マネージャは警告を生成し、カーネルモードコンポーネントが起動したら、その警告をカーネルモードコンポーネントに提供する。図３に関して本明細書で説明されるカーネルモードコンポーネントのランタイムアクティビティゆえに、カーネルモードコンポーネントドライバ１０８は、他のドライバ１１０よりも前である、次となるべきであり、完全性マネージャは初期化順序１１２を変更する必要がないはずである。それが初期化順序を変更する必要がある場合、これは悪意のあるアクティビティを示唆し得る。さらに、起動後に、完全性マネージャは、ライブラリコンポーネント１１４のバッファ１２４に格納された情報をリトリーブしてもよい。
【００２４】
様々な実施において、完全性マネージャドライバ１０６は複数のサブコンポーネントを含んでもよい。例えば、完全性マネージャドライバ１０６は、コンピューティングデバイス１０２のリブートを必要とすることなくアンロードされ、更新され得るアンロード可能部分と非アンロード可能部分（non-unloadable part）とを含んでいてもよい。完全性マネージャドライバ１０６の非アンロード可能部分に対する更新は、コンピューティングデバイスのリブートを必要とし得る。また、完全性マネージャドライバ１０６は、アンロード可能部分および非アンロード可能部分よりも前に、最初にロードされる第３の部分を含んでいてもよい。この第３の部分は、上記に説明されたように、ライブラリコンポーネント１１４によって初期化順序１１２における最初に配置されるコンポーネントとすることができる。第３の部分は次いで、完全性マネージャドライバ１０６のアンロード可能部分および非アンロード可能部分が他のドライバよりも前に初期化されることを確実にしてもよい。
【００２５】
いくつかの実施形態において、オペレーティングシステムは次いで、カーネルモードコンポーネントドライバ１０８を初期化する。カーネルモードコンポーネントドライバ１０８が初期化されるとき、カーネルモードコンポーネントドライバ１０８は、他のドライバ１１０が初期化される前にカーネルモードコンポーネントを起動する。カーネルモードコンポーネントは、コンピューティングデバイス１０２のアクティビティを監視し、アクティビティがセキュリティエクスプロイトのインストールまたは動作を示唆しているかどうかを判定してもよく、この判定に基づき、いくつかの措置を講じる。カーネルモードコンポーネントは、完全性マネージャから通信チャネルを介して警告および情報を受信し、アクティブなプロセスとして動作してもよい。
【００２６】
様々な実施形態において、完全性マネージャドライバ１０６およびカーネルモードコンポーネントドライバ１０８が初期化され、完全性マネージャおよびカーネルモードコンポーネントが起動された後、オペレーティングシステムは、初期化順序１１２に基づき他のドライバ１１０を初期化する。
【００２７】
例示的なプリブートフェーズおよびブートフェーズ
図２はコンピューティングデバイスの例示的なプリブートフェーズおよびブートフェーズを示す。ここにおいて、カーネルモードコンポーネントに関連づけられたプリブートコンポーネントがプリブートフェーズにおいて処理され、プリブートコンポーネントは、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする。図２は、ハードウェアコンポーネントおよびソフトウェアコンポーネントの両方ならびにプロセスまたは動作を示す。プロセスまたは動作は、図２にそれらの発生順に番号が付けられて示されている。
【００２８】
図示されたように、コンピューティングデバイス２０２は、電源の切入またはリブートの後にブートフェーズ２０４を開始し得る。完全性マネージャの完全性マネージャドライバ２０６およびカーネルモードコンポーネントのカーネルモードコンポーネントドライバ２０８は両方ともブートフェーズ２０４の早期に初期化されて、コンピューティングデバイス２０２のオペレーティングシステムによって他のドライバ２１０が初期化される前に、完全性マネージャおよびカーネルモードコンポーネントが起動されるようにさせる。オペレーティングシステムは、初期化順序２１２に指定された順序でドライバを初期化し得る。完全性マネージャドライバ２０６が初期化順序２１２において最初となることを確実にするために、完全性マネージャドライバ２０６は、プリブート環境２１６によって実行されるプリブートコンポーネント２１４に関連づけられてもよい。
【００２９】
示されたように、プリブートフェーズ２１８の間に、プリブート環境２１６がプリブートコンポーネント２１４を処理してもよく２２０、プリブートコンポーネント２１４は、処理される２２０ときに、完全性マネージャドライバ２０６が初期化順序２１２における最初のドライバとなることを確実にする２２２。次に、ブートフェーズ２０４の間に、オペレーティングシステムは初期化順序２１２に従ってドライバを初期化する２２４。
【００３０】
様々な実施形態において、コンピューティングデバイス２０２は、サーバもしくはサーバファーム、分散された複数のサーバファーム、メインフレーム、ワークステーション、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、タブレットコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、メディアセンタ、組込みシステムまたは他の任意の種類のデバイスとすることができる。コンピューティングデバイス２０２は、複数のコンピューティングデバイス上に実施されるとき、図２に示されたコンポーネントおよびプロセスを複数のコンピューティングデバイスに分散させてもよい。いくつかの実施において、コンピューティングデバイス２０２は、１または複数のコンピューティングデバイス上に実施された１または複数の仮想マシンを表す。コンピューティングデバイス２０２として機能することが可能な例示的コンピューティングデバイスが図４に示され、その図を参照しながら以下に説明される。
【００３１】
プリブートフェーズ２１８およびブートフェーズ２０４は、電源の切入またはリブートに続く、コンピューティングデバイス２０２のブートプロセスの一部とすることができる。プリブートフェーズ２１８は、ＢＩＯＳ、拡張可能なファームウェアインターフェース（ＥＦＩ）または他の種類のプリブート環境２１６であってよいプリブート環境２１６のいくつかの動作を伴ってもよい。プリブート環境２１６は、コンピューティングデバイス２０２のハードウェアコンポーネントを初期化およびテストしてもよく、コンピューティングデバイス２０２のオペレーティングシステムを選択およびロードしてもよい。インターフェースを通じて、プリブート環境２１６はまた、プリブートフェーズ２１８の間に処理される２２０、プリブートコンポーネント２１４などの他のコンポーネントでプログラムされてもよい。いくつかの実施形態において、このインターフェースは１または複数のセキュリティ手段を利用してもよい。例えば、このインターフェースは、コンポーネントに提供された署名または鍵を要求してもよい。署名または鍵が提供されていない場合、プリブート環境２１６はプリブートコンポーネント２１４を処理しないことになる。
【００３２】
様々な実施形態において、プリブートコンポーネント２１４が処理される２２０とき、それは、完全性マネージャドライバ２０６が初期化順序２１２において最初となることを確実にしてもよい２２２。完全性マネージャドライバ２０６が初期化順序２１２において最初となることを確実にする２２２ために、プリブートコンポーネント２１４は、完全性マネージャドライバ２０６を最初に配置するように初期化順序２１２を変更してもよい。
【００３３】
ブートフェーズ２０４は、プリブートフェーズ２１８の後に続いてもよく、いくつかの動作を伴ってもよく、そこにおいて、コンピューティングデバイス２０２のオペレーティングシステムのブートローダおよびカーネルがドライバなどのコンピューティングデバイスコンポーネントをロードおよび初期化する。図１に関して上記に説明されたように、ブートフェーズ２０４はドライバの依存ＤＬＬを最初に処理してもよい。この処理することは、ドライバおよびそれらのＤＬＬをコンピューティングデバイス２０２のメモリにロードすることの後に続いてもよい。依存ＤＬＬを処理することの後に、オペレーティングシステムはブート情報を削除する。オペレーティングシステムは次いでドライバを初期化すること２２４へ進む。ブートフェーズ２０４はまた、図示および説明されたものに加えて、他の段階または動作を伴ってもよい。ブートフェーズ２０４に続いて、コンピューティングデバイス２０２はランタイムフェーズに入ってもよく、ここにおいて、オペレーティングシステムならびに様々なコンポーネントおよびアプリケーションは既に起動しており、アクティブプロセスとして実行中である。
【００３４】
完全性マネージャドライバ２０６は、完全性マネージャドライバ２０６が依存ＤＬＬとしてのライブラリコンポーネント１１４を持たなくともよいことを除き、上記に説明された完全性マネージャドライバ１０６と同様であり得る。カーネルモードコンポーネントドライバ２０８、他のドライバ２１０および初期化順序２１２は、それぞれカーネルモードコンポーネントドライバ１０８、他のドライバ１１０および初期化順序１１２と同一または同様であり得る。また、オペレーティングシステムによるドライバの初期化すること２２４は、オペレーティングシステムによるドライバの初期化すること１２８と同一または同様であり得る。
【００３５】
例示的環境
図３は例示的な環境を示す。ここにおいて、カーネルモードコンポーネントは、コンピューティングデバイスのランタイム中に、カーネルモードコンポーネントのドライバがブートフェーズにおいて初期化される最初のドライバとなることを確実にするか、プリブート環境を構成するか、またはブートフェーズアクティビティに基づいてセキュリティイベントを生成し、そのイベントをリモートセキュリティサービスに提供する。図３に示すように、コンピューティングデバイス３０２は、ネットワーク３０６を介してリモートセキュリティサービス３０４に接続されている。リモートセキュリティサービス３０４は、コンピューティングデバイス３０２上でアクティブであるカーネルモードコンポーネント３０８および完全性マネージャ３１０を通じて、コンピューティングデバイス３０２にセキュリティサービスを提供する。カーネルモードコンポーネント３０８および完全性マネージャ３１０は通信チャネル３１２を通じて互いに通信を行って、完全性マネージャ３１０は、カーネルモードコンポーネント３０８の完全性を確実にし、カーネルモードコンポーネント３０８の完全性が脆弱化された際のリモートセキュリティサービス３０４との通信のために、通信モジュール３１４を含む。さらに示されるように、コンピューティングデバイス３０２は、ブートフェーズにおいて初期化順序３１８を利用する、ならびにカーネルモードコンポーネント３０８およびアプリケーションまたはプロセス３２０が初期化順序３１８を更新できるようにする、オペレーティングシステム３１６を含んでもよい。また、いくつかの実施形態において、コンピューティングデバイス３０２はプリブート環境３２２を有してもよく、それがオペレーティングシステム３１６のプリブート環境インターフェース３２４によって更新されてもよい。
【００３６】
様々な実施形態において、コンピューティングデバイス３０２は、サーバもしくはサーバファーム、分散された複数のサーバファーム、メインフレーム、ワークステーション、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、タブレットコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、メディアセンタ、組込みシステムまたは他の任意の種類のデバイスとすることができる。コンピューティングデバイス３０２は、複数のコンピューティングデバイス上に実施されるとき、図３に示されたコンポーネントおよびプロセスを複数のコンピューティングデバイスに分散させてもよい。いくつかの実施において、コンピューティングデバイス３０２は、１または複数のコンピューティングデバイス上に実施された１または複数の仮想マシンを表す。コンピューティングデバイス３０２として機能することが可能な例示的コンピューティングデバイスが図４に示され、その図を参照しながら以下に説明される。
【００３７】
さらなる実施形態において、リモートセキュリティサービス３０４を実施するデバイスはそれぞれ、サーバもしくはサーバファーム、分散された複数のサーバファーム、メインフレーム、ワークステーション、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、タブレットコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、メディアセンタ、組込みシステムまたは他の任意の種類のデバイスとしてもよいし、またはそれらを含んでもよい。一つの実施において、リモートセキュリティサービス３０４を実施するデバイスは、通信して動作する、ノードのクラウドコンピューティングネットワークなどの複数のコンピューティングデバイスを表す。いくつかの実施において、リモートセキュリティサービス３０４を実施する１または複数のデバイスは、１または複数のコンピューティングデバイス上に実施された１または複数の仮想マシンを表す。
【００３８】
いくつかの実施形態において、リモートセキュリティサービス３０４は、個別のユーザおよびクライアントエンティティに対する、カーネルモードコンポーネント３０８および完全性マネージャ３１０の保守および構成、脅威モデリングならびに／または修復（remediation）などの情報セキュリティサービスのプロバイダとすることができる。リモートセキュリティサービス３０４は、カーネルモードコンポーネント３０８から、または完全性マネージャ３１０からそれの通信モジュール３１４を介して、警告およびセキュリティイベントを受信してもよい。これに応答して、リモートセキュリティサービス３０４は、カーネルモードコンポーネント３０８もしくは完全性マネージャ３１０の一方もしくは両方の構成を更新してもよく、カーネルモードコンポーネント３０８もしくは完全性マネージャ３１０に命令を提供してもよく、または回復措置もしくは修復措置を講じてもよい。
【００３９】
様々な実施形態において、ネットワーク３０６は、有線ネットワーク、無線ネットワークならびに有線ネットワークおよび無線ネットワークの組合せなどの、１または複数のいかなるネットワークを含んでもよい。さらに、ネットワーク３０６は、複数の異なるタイプの公衆ネットワークまたはプライベートネットワーク（例えば、ケーブルネットワーク、インターネット、無線ネットワークなど）のいずれか１つまたは組合せを含んでもよい。いくつかの例において、コンピューティングデバイスは、セキュアプロトコル（例えば、ｈｔｔｐｓ）および／または伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）などの他の任意のプロトコルもしくはプロトコルのセットを使用して、ネットワーク３０６を介して通信を行う。
【００４０】
完全性マネージャ３１０は、上記に説明されたように、コンピューティングデバイス３０２のブートフェーズ中に、カーネルモードコンポーネント３０８の完全性を確実にしてもよく、ブートフェーズ中にリトリーブされた情報または生成された警告のランタイム中のルート（conduit）として機能してもよい。例えば、完全性マネージャ３１０は、完全性マネージャ３１０が初期化順序３１８を変更するときに警告を生成してもよく、その警告を通信チャネル３１２を介してカーネルモードコンポーネント３０８に提供してもよい。代替方法として、例えば、カーネルモードコンポーネント３０８が脆弱化されている可能性があることを示唆する１または複数の条件が満たされていると、完全性マネージャ３１０が判定した場合、完全性マネージャ３１０は、この情報または警告を通信モジュール３１４を介してリモートセキュリティサービス３０４に提供してもよい。通信モジュール３１４は、コンピューティングデバイス３０２の、有線または無線通信送受信機（例えば、ＷｉＦｉ送受信機）などの１または複数の送受信機とインターフェースをとって、この警告または情報を通信してもよい。
【００４１】
上記に説明されたように、カーネルモードコンポーネント３０８は、コンピューティングデバイス３０２上のアクティビティを監視および記録してもよく、このアクティビティを分析してもよく、警告およびイベントを生成して、それらの警告およびイベントをリモートセキュリティサービス３０４に提供してもよい。カーネルモードコンポーネント３０８は、カーネルモードコンポーネント３０８の再構成を受信し、ライブ状態で（while live）適用して、リモートセキュリティサービス３０４によってインストールされ、構成可能とされてもよい。例示的なカーネルモードコンポーネント３０８は、２０１２年６月８日出願の特許文献１、名称「Ｋｅｒｎｅｌ−Ｌｅｖｅｌ  Ｓｅｃｕｒｉｔｙ  Ａｇｅｎｔ」にさらに詳しく説明されている。
【００４２】
様々な実施形態において、通信チャネル３１２を介して完全性マネージャ３１０から受信された情報は、オペレーティングシステム３１６のブートローダのローダパラメータブロックからのブート情報などのブート情報を含んでもよい。このようなブート情報は、ブートドライバのリスト、ブートドライバのコピーおよびブートドライバ情報（メモリにおけるサイズ、署名など）を含んでもよい。完全性マネージャ３１０からブートドライバのリスト、ブートドライバのコピーおよび／またはブートドライバ情報を受信することにより、カーネルモードコンポーネント３０８は、コンピューティングデバイス３０２上のメモリにロードされたドライバの全体像を有することができる。オペレーティングシステム３１６は、メモリにロードされた他のドライバについてカーネルモードコンポーネント３０８に通知してもよい。ただし、ブートドライバは、オペレーティングシステムカーネル初期化よりも前に、ブートローダによってメモリにロードされており、したがって、オペレーティングシステム３１６はブートドライバについてカーネルモードコンポーネント３０８に通知することはできない。受信された情報は、カーネルモードコンポーネント３０８によって（例えば、データストアのモデルもしくは他の種類のデータストアに）格納されても、分析で利用されても、またはカーネルモードコンポーネント３０８によってリモートセキュリティサービス３０４に提供されてもよい。
【００４３】
同様に、完全性マネージャ３１０から受信された警告−またはそれらの警告に基づきカーネルモードコンポーネント３０８によって生成されたイベント−もまた、カーネルモードコンポーネント３０８によって格納されても、分析で利用されても、またはカーネルモードコンポーネント３０８によってリモートセキュリティサービス３０４に提供されてもよい。警告はまた、カーネルモードコンポーネント３０８が１または複数の回復措置または修復措置を実行するという結果をもたらしてもよい。
【００４４】
いくつかの実施形態において、カーネルモードコンポーネント３０８はまた、それ自身を初期化順序３１８における最初に配置してもよく、初期化順序３１８を更新することを求める（（例えば、悪意のあるカーネルドライバの場合）ＯＳカーネルそれ自身からの要求を含む）他のアプリケーションまたはプロセス３２０からの要求を遮断することにより、それ自身を初期化順序３１８における最初として維持してもよい。オペレーティングシステム３１６は、カーネルモードコンポーネント３０８および他のアプリケーションまたはプロセス３２０が、例えば、それらのドライバを初期化順序３１８において最初に配置させるよう要求することにより、初期化順序３１８にアクセスし、更新を行えるようにしてもよい。カーネルモードコンポーネント３０８は、それのドライバを初期化順序３１８において最初に配置して、厳密にこれを行ってもよい。それ以降、カーネルモードコンポーネント３０８は、他のアプリケーションまたはプロセス３２０からのそれらのドライバを最初に配置させることを求める要求を遮断してよい。カーネルモードコンポーネント３０８は、遮断されたそれらの要求を更新して、これらの要求が初期化順序３１８においてドライバをカーネルモードコンポーネントドライバの後に配置させることを求めるようにしてもよい。
【００４５】
また、さらなる実施形態において、コンピューティングデバイス３０２は、本明細書でより詳細に説明されたプリブート環境２１６と同一または同様であり得るプリブート環境３２２を有していてもよい。プリブート環境３２２を更新するために、オペレーティングシステム３１６はプリブート環境インターフェース３２４を提供してもよい。プリブート環境インターフェース３２４は、プリブート環境３２２のためのコンポーネントを受信してもよく、それらのコンポーネントをプリブート環境３２２に提供してもよい。いくつかの実施形態において、プリブート環境インターフェース３２４は、例えば、いかなるコンポーネントにも鍵または署名が提供されることを要求して、１または複数のセキュリティメカニズムを実施してもよい。
【００４６】
例示的システム
図４は、カーネルモードコンポーネントとカーネルモードコンポーネントに関連づけられた完全性マネージャとで構成されたコンピューティングデバイスのコンポーネントレベルビューを示す。図示されたように、コンピューティングデバイス４００は、ブートローダ４０６およびカーネル４０８を含むオペレーティングシステム４０４、カーネルモードコンポーネント４１０、完全性マネージャ４１２、アプリケーションおよびデータ４１４ならびにドライバ４１６を格納しているメモリ４０２を含む。また、コンピューティングデバイス４００は、プロセッサ４１８、取外し可能記憶装置４２０および取外し不能記憶装置４２２、入力デバイス４２４、出力デバイス４２６ならびに他のコンピューティングデバイス４３０と通信を行うための通信接続４２８を含む。
【００４７】
様々な実施形態において、メモリ４０２は揮発性（ＲＡＭなど）、不揮発性（ＲＯＭ、フラッシュメモリなど）または両者の何らかの組合せである。オペレーティングシステム４０４は、それのブートローダ４０６およびカーネル４０８を有し、いかなる種類のオペレーティングシステムであってもよい。オペレーティングシステム４０４、ブートローダ４０６およびカーネル４０８は、オペレーティングシステム、ブートローダまたはカーネルによって実行されるような、上記に説明された動作のいずれかまたは全部を実行するように構成されている。カーネルモードコンポーネント４１０および完全性マネージャ４１２は、それらの各々のドライバと共に、図１〜図３に関して上記に詳細に説明されている。アプリケーションおよびデータ４１４ならびにドライバ４１６は、図１〜図３に関して上記に詳細に説明されたアプリケーション、データまたはドライバなどのいかなる種類のアプリケーションおよびデータ、またはドライバであってもよい。
【００４８】
いくつかの実施形態において、プロセッサ４１８は、中央処理装置（ＣＰＵ）、グラフィック処理装置（ＧＰＵ）もしくはＣＰＵとＧＰＵとの両方、または当技術分野で周知の他の処理装置もしくはコンポーネントである。
【００４９】
コンピューティングデバイス４００はまた、例えば、磁気ディスク、光ディスクまたはテープなどの追加のデータ記憶デバイス（取外し可能および／または取外し不能）を含む。このような追加の記憶装置は、図４に取外し可能記憶装置４２０および取外し不能記憶装置４２２によって示されている。有形のコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータなどの情報の格納のための任意の方法または技術において実施された、揮発性および不揮発性、取外し可能および取外し不能媒体を含み得る。メモリ４０２、取外し可能記憶装置４２０および取外し不能記憶装置４２２はすべて、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）もしくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または所望の情報を格納するために使用され得る、およびコンピューティングデバイス４００によってアクセスされ得る他のいかなる媒体も含むが、これらに限定されない。このような有形のいかなるコンピュータ可読媒体もコンピューティングデバイス４００の一部となり得る。
【００５０】
コンピューティングデバイス４００はまた、キーボード、マウス、タッチ感応ディスプレイ（touch-sensitive display）、音声入力デバイスなどの入力デバイス４２４と、ディスプレイ、スピーカ、プリンタなどの出力デバイス４２６とを有する。これらのデバイスは当技術分野においてよく知られているため、ここで詳しく検討される必要はない。
【００５１】
コンピューティングデバイス４００はまた、コンピューティングデバイス４００が、リモートセキュリティサービス３０４のデバイスなどの他のコンピューティングデバイス４３０と通信を行えるようにする通信接続４２８を含む。
【００５２】
例示的プロセス
図５〜図８は、例示的プロセス５００、６００、７００および８００を示す。これらのプロセスは論理フローグラフとして図示されており、その各動作は、ハードウェア、ソフトウェアまたはそれらの組合せにおいて実施され得る一連の動作を表す。ソフトウェアの文脈において、これらの動作は、１または複数のプロセッサによって実行されたとき列挙された動作を実行する、１または複数のコンピュータ可読記憶媒体上に格納されたコンピュータ実行可能命令を表す。一般に、コンピュータ実行可能命令は、特定の機能を実行するか、または特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。動作が説明されている順序は限定として解釈されることを意図されておらず、説明された任意の数の動作は、これらのプロセスを実施するために任意の順序でおよび／または並行して組み合わされ得る。
【００５３】
図５は、ドライバの初期化の前に、カーネルモードコンポーネントに関連づけられたライブラリコンポーネントをブートフェーズ中に処理し、ライブラリコンポーネントは、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする、例示的プロセスを示す。プロセス５００は、５０２においてコンピューティングデバイスのブートフェーズを開始することを含み、ここにおいて、オペレーティングシステムのブートローダおよびカーネルは、電源の切入または他の種類のリブートに続いてロードタスクおよび初期化タスクを実行する。５０４〜５１０に示された動作はブートフェーズ中に発生する。
【００５４】
５０４において、コンピューティングデバイスは、カーネルモードコンポーネントに関連づけられたライブラリコンポーネントを処理する。このライブラリコンポーネントはドライバコンポーネントの依存ＤＬＬであってもよく、ドライバの他の依存ＤＬＬと共に処理されてもよい。いくつかの実施形態において、ライブラリコンポーネントおよび他のＤＬＬが処理される順序は、ＤＬＬの名称（例えば、ＡＳＣＩＩ文字列）に基づいていてもよい。５０４ａにおいて、ライブラリコンポーネントは、処理されるときに、ドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする。この確実にすることは、カーネルモードコンポーネントに関連づけられた完全性マネージャのドライバをドライバの初期化順序において最初に配置することを伴ってもよい。５０４ｂにおいて、ライブラリコンポーネントはまた、完全性マネージャおよびカーネルモードコンポーネントの実行可能ファイルを復号して、それらがそれらの関連づけられたドライバによって起動され得るようにする。
【００５５】
５０６において、コンピューティングデバイスは、初期化順序における最初のドライバを初期化する。ライブラリコンポーネントが完全性マネージャのドライバを最初に配置したために、完全性マネージャドライバは、コンピューティングデバイスのオペレーティングシステムによって他のドライバよりも前に初期化される。５０６ａにおいて、完全性マネージャドライバは完全性マネージャを起動し、５０６ｂにおいて、完全性マネージャは、カーネルモードコンポーネントのドライバが完全性マネージャドライバの後の初期化順序において次のドライバとなることを確実にする。
【００５６】
５０８において、コンピューティングデバイスのオペレーティングシステムは、初期化順序に従ってカーネルモードコンポーネントドライバを初期化する。５０８ａにおいて、カーネルモードコンポーネントドライバはカーネルモードコンポーネントを起動する。
【００５７】
５１０において、コンピューティングデバイスのオペレーティングシステムは、他のドライバを初期化する。ライブラリコンポーネントのアクティビティゆえに、カーネルモードコンポーネントが起動される前に初期化されたドライバは、完全性マネージャドライバおよびカーネルモードコンポーネントドライバのみである。いくつかの実施形態において、ライブラリコンポーネントは、カーネルモードコンポーネントが他のＤＬＬが処理される前に起動されるようにさせることさえ可能である。
【００５８】
図６は、少なくとも１つのドライバがカーネルモードコンポーネントに関連づけられたドライバコンポーネントよりも前に初期化されると判定し、これに応答して、ドライバコンポーネントが最初に初期化されるように初期化順序を変更し、初期化順序が変更されたことをカーネルモードコンポーネントに警告する、例示的プロセスを示す。プロセス６００は、６０２において、コンピューティングデバイスのランタイム中に、カーネルモードコンポーネントにより、ブートフェーズ中のドライバの初期化においてオペレーティングシステムによって利用される初期化順序を更新することを含む。カーネルモードコンポーネントは、カーネルモードコンポーネントのドライバを初期化順序において最初に配置する。また、６０２ａにおいて、カーネルモードコンポーネントは、他のアプリケーションまたはプロセスからの、それらのドライバを初期化順序において最初に配置するよう求める要求を遮断し、それらのドライバをカーネルモードコンポーネントドライバの後に配置する。
【００５９】
６０４において、セキュリティエクスプロイトは、カーネルモードコンポーネントドライバの前となる、初期化順序における最初に別のドライバを配置する。セキュリティエクスプロイトは、これをカーネルモードコンポーネントによる検出なしに行う。
【００６０】
６０６において、コンピューティングデバイスはリブートし、ブートフェーズを開始する。６０８〜６１６に示された動作はブートフェーズ中に発生する。
【００６１】
６０８において、コンピューティングデバイスは、カーネルモードコンポーネントに関連づけられたライブラリコンポーネントを処理し、このライブラリコンポーネントは、カーネルモードコンポーネントに関連づけられた完全性マネージャのドライバを初期化順序において最初に配置する。ライブラリコンポーネントは完全性マネージャドライバの依存ＤＬＬとすることができる。
【００６２】
６１０において、コンピューティングデバイスは初期化順序に従って動作して、他のドライバよりも前に完全性マネージャドライバを初期化し、完全性マネージャドライバは完全性マネージャを起動し、それは、カーネルモードコンポーネントドライバが完全性マネージャドライバの後の初期化順序における最初ではないと判定する。むしろ、セキュリティエクスプロイトによって最初に配置されたドライバが、完全性マネージャドライバの後の次のドライバとなっているであろう。
【００６３】
６１２において、カーネルモードコンポーネントドライバが初期化順序において次ではないと判定することに応答して、完全性マネージャは、カーネルモードコンポーネントドライバを初期化順序において完全性マネージャの後の次のドライバとして配置するよう、初期化順序を変更する。
【００６４】
６１４において、完全性マネージャは、カーネルモードコンポーネントドライバが完全性マネージャドライバの後の最初ではなかったとカーネルモードコンポーネントに警告し、６１６において、カーネルモードコンポーネントはセキュリティイベントを生成する。カーネルモードコンポーネントは次いで、セキュリティエクスプロイトによる将来のアクティビティを分析または防止するために、そのイベントをリモートセキュリティサービスに提供してもよいし、または別の方法で自身を更新もしくは再構成してもよい。
【００６５】
図７は、ブートフェーズ中に、カーネルモードコンポーネントに関連づけられたコンポーネントにより、オペレーティングシステムによるドライバの初期化の前にオペレーティングシステムによって削除されるべき情報をリトリーブし、この情報をカーネルモードコンポーネントに提供する、例示的プロセスを示す。プロセス７００は、７０２において、コンピューティングデバイスのブートフェーズを開始することを含み、ここにおいて、オペレーティングシステムのブートローダおよびカーネルは、電源の切入または他の種類のリブートに続いてロードタスクおよび初期化タスクを実行する。７０４および７０６に示された動作はブートフェーズ中に発生し、７０８に示された動作はブートフェーズ中またはランタイムに発生し得る。
【００６６】
７０４において、コンピューティングデバイスは、カーネルモードコンポーネントに関連づけられたライブラリコンポーネントを処理してもよく、ライブラリコンポーネントは、オペレーティングシステムによるドライバの初期化の前にコンピューティングデバイスのオペレーティングシステムによって削除されるべき、ブート情報などの情報をリトリーブしてもよい。７０４ａにおいて、ブート情報は、オペレーティングシステムのブートローダのローダパラメータブロックからリトリーブされてもよい。ブート情報は、ドライバのリスト、ドライバの初期化順序、基本入力／出力システム（ＢＩＯＳ）情報、メモリレイアウト、ｔｒｕｓｔｅｄ  ｐｌａｔｆｏｒｍ  ｍｏｄｕｌｅ（ＴＰＭ）情報または乱数発生器シードの内の少なくとも１つを含んでよい。さらにまたはこれに代えて、ブート情報は、コンピューティングデバイスのブートローダによってロードされたブートドライバのリストを含んでもよい。
【００６７】
７０６において、ライブラリコンポーネントは、この情報をライブラリコンポーネントのバッファに格納してもよい。
【００６８】
７０８において、ライブラリコンポーネントは、この情報をカーネルモードコンポーネントに提供してもよい。７０８ａにおいて、この提供することは、リストならびにＡ）ブートドライバのコピーおよび／またはＢ）ブートドライバ情報をカーネルモードコンポーネントに提供することを含んでもよい。いくつかの実施形態においては、７０８ｂにおいて、この提供することがこの情報を完全性マネージャに提供することを含んでもよく、それが次に、この情報をカーネルモードコンポーネントに提供する。
【００６９】
図８は、カーネルモードコンポーネントに関連づけられたプリブートコンポーネントをプリブートフェーズ中に処理して、プリブートコンポーネントは、カーネルモードコンポーネントに関連づけられたドライバコンポーネントが他のドライバよりも前に初期化されることを確実にする、例示的プロセスを示す。プロセス８００は、８０２において、コンピューティングデバイスのプリブートフェーズを開始することを含む。プリブートフェーズは、ＢＩＯＳなどのプリブート環境によって講じられる措置を伴ってもよい。プリブート環境は、プリブートコンポーネントでのプリブート環境の構成を可能にするインターフェースに関連づけられてもよい。このインターフェースは、セキュリティエクスプロイトでのプリブート環境の構成を防止するセキュリティメカニズムに関連づけられてもよい。
【００７０】
８０４において、プリブート環境は、カーネルモードコンポーネントに関連づけられたプリブートコンポーネントを処理してもよい。８０４ａにおいて、プリブートコンポーネントは、処理されるときに、カーネルモードコンポーネントに関連づけられたドライバがブートフェーズ中にオペレーティングシステムによって初期化される最初のドライバとなることを確実にする。
【００７１】
８０６において、コンピューティングデバイスはブートフェーズを実行し、それは、８０６ａにおいて、初期化順序に基づきドライバを初期化することを含む。プリブートコンポーネントのアクティビティに基づき、カーネルモードコンポーネントに関連づけられたドライバがその初期化順序において最初となる。
【００７２】
結論
本主題は構造的特徴および／または方法的行為（methodological act）に特有の文言で説明されているが、添付された特許請求の範囲に定義される主題は、説明された特定の特徴または行為に必ずしも限定されないことを理解されたい。むしろ、この特定の特徴および行為は、特許請求の範囲を実施する例示的形態として開示される。
【図１】
2017033561.tif 000003
【図２】
2017033561.tif 000004
【図３】
2017033561.tif 000005
【図４】
2017033561.tif 000006
【図５】
2017033561.tif 000007
【図６】
2017033561.tif 000008
【図７】
2017033561.tif 000009
【図８】
2017033561.tif 000010