(58)【調査した分野】(Int.Cl.,DB名)
前記保留動作が、前記受諾された契約にある前記動作のセットのうちの1つの動作と一致しないと判断したことに応答して、前記保留動作が、事前承認された動作リストに含まれるかどうか判断するステップと、
前記保留動作が、前記事前承認された動作リストに含まれると判断したことに応答して、前記アプリケーションが前記保留動作を実施することを可能にするステップと、
前記保留動作が、前記事前承認された動作リストに含まれないと判断したことに応答して、前記アプリケーションが実行するのを防止するステップと
をさらに含む動作を実施するためのプロセッサ実行可能命令で前記プロセッサが構成される、請求項9に記載のワイヤレスコンピューティングデバイス。
前記保留動作が、前記受諾された契約にある前記動作のセットのうちの1つの動作と一致しないと判断したことに応答して、前記保留動作が、事前承認された動作リストに含まれるかどうか判断するための手段と、
前記保留動作が、前記事前承認された動作リストに含まれると判断したことに応答して、前記アプリケーションが前記保留動作を実施することを可能にするための手段と、
前記保留動作が、前記事前承認された動作リストに含まれないと判断したことに応答して、前記アプリケーションが実行するのを防止するための手段とをさらに備える、請求項14に記載のワイヤレスコンピューティングデバイス。
【発明を実施するための形態】
【0015】
様々な態様を、添付図面を参照して詳細に説明する。可能な限り、同じ参照番号は、同じまたは同様の部分を指すために図面全体を通して使用されることになる。特定の例および実装形態へと行われる言及は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
【0016】
いくつかの異なるセルラー通信およびモバイル通信のサービスおよび規格が利用可能であるか、または将来考えられ、それらのすべてが様々な態様を実装し、様々な態様から恩恵を受けることができる。そのようなサービスおよび規格には、たとえば、第3世代パートナーシッププロジェクト(3GPP)、ロングタームエボリューション(LTE)システム、第3世代ワイヤレスモバイル通信技術(3G)、第4世代ワイヤレスモバイル通信技術(4G)、モバイル通信用グローバルシステム(GSM(登録商標))、ユニバーサルモバイルテレコミュニケーションシステム(UMTS)、3GSM(登録商標)、汎用パケット無線サービス(GPRS)、符号分割多元接続(CDMA)システム(たとえば、cdmaOne)、GSM(登録商標)エボリューション用発展型データレート(EDGE:enhanced data rates for GSM(登録商標) evolution)、高度モバイルフォンシステム(AMPS:advanced mobile phone system)、デジタルAMPS(IS-136/TDMA)、エボリューションデータ最適化(EV-DO)、デジタル発展型コードレステレコミュニケーション(DECT:digital enhanced cordless telecommunications)、マイクロ波アクセス用ワールドワイドインターオペラビリティ(WiMAX:Worldwide Interoperability for Microwave Access)、ワイヤレスローカルエリアネットワーク(WLAN)、Wi-Fi保護アクセスIおよびII(WPA、WPA2:Wi-Fi Protected Access I & II)、ならびに統合デジタル発展型ネットワーク(iden:integrated digital enhanced network)が含まれる。これらの技術の各々は、たとえば、音声、データ、シグナリング、および/またはコンテンツメッセージの送信および受信を伴う。個々の電気通信の規格または技術に関係する用語および/または技術的詳細に対するいかなる参照も例示目的にすぎず、請求項の文言に具体的に記載されない限り、特許請求の範囲を特定の通信システムまたは通信技術に限定するものではないことを理解されたい。
【0017】
本明細書において使用される「コンピューティングデバイス」という用語は、携帯電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤー、携帯情報端末(PDA)、ラップトップコンピュータ、タブレットコンピュータ、スマートブック、ウルトラブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応携帯電話、ワイヤレスゲームコントローラ、ならびに、メモリおよびプログラム可能プロセッサを含む同様の個人用電子デバイスのうちの、任意の1つまたはすべてを指す。様々な態様は、限られたリソースを有するスマートフォンなどのモバイルコンピューティングデバイスに対して特に有用であるが、これらの態様は一般に、プロセッサを含みアプリケーションプログラムを実行する、任意の電子デバイスにおいて有用である。
【0018】
「悪意のある挙動」という用語は、本明細書では、長い処理時間、短いバッテリ寿命、個人データの喪失、悪意のある経済活動(たとえば、無許可のプレミアムSMSメッセージを送ること)、スパイ活動またはボットネット活動などのためにコンピューティングデバイスを乗っ取ることまたは電話を利用することに関する動作などの、多種多様な望ましくないコンピューティングデバイスの動作および特性を指すために使用される。
【0019】
「悪意のある構成」という用語は、本明細書では、悪意のある挙動を表すか、または実施するコンピューティングデバイス、アプリケーション、プロセスなどの構成を指すために使用される。
【0020】
不十分に設計されたソフトウェアアプリケーション、マルウェア、ウイルス、断片化されたメモリ、バックグラウンドプロセス、および他の悪意のある挙動を含む、コンピューティングデバイスの性能および電力利用レベルの経時的な劣化に寄与する場合がある様々な要因が存在する。しかしながら、現代のコンピューティングデバイスの複雑さに起因して、そのような問題の原因を正確かつ効率的に識別すること、および/または識別された問題に十分な措置を提供することは、ユーザ、オペレーティングシステム、および/またはアプリケーションプログラム(たとえば、アンチウイルスソフトウェアなど)にとってますます困難になっている。
【0021】
現在、コンピューティングデバイス上で悪意のある挙動を検出するための様々なソリューションが存在する。多くのソリューションは、従来、サーバ上に構築された悪意のあるコード/マルウェアの署名データベースに依拠している。これらのソリューションは、ファイルの名前、関数呼出しの名前、特定のコードセグメントの構造、および、さらにコードの各バイトの署名などの、コードの識別情報(すなわち、署名)に基づいて、コードが悪意があるかどうかを検出するために署名データベースを参照することを必要とする。しかしながら、これらのソリューションは、コードが実行されるまで検出不可能な場合がある、悪意のある挙動を検出するには不十分であり、署名を偽造する新しい技法の結果としてますます効果がなくなる。対照的に、下記に記載される様々な態様は、コンピューティングデバイスが、いかなる特定の識別情報または署名にもかかわらず、正常動作の間に(すなわち、リアルタイムで)悪意のある挙動を検出し、そのような悪意のある挙動が将来起きないように防止することを可能にする。
【0022】
加えて、いくつかのソリューションは、プリエンプティブな走査を開始することによって、または事前承認された動作の静的リストを使うことによって、コード、ファイル、スクリプトなどの中の悪意のある挙動のサインを、それらが実行される前に探す。たとえば、ソリューションは、良性であることが事前に確認されているいくつかのあらかじめ定義された特色(たとえば、特定のチェックサム)をアプリケーションが有することを要求し得る。ただし、アプリケーションは、これらのあらかじめ定義された特性を有していなければならないので、現在のソリューションは、新規または事前に遭遇していないプログラム中の動作が脅威を与えるかどうか判断することができない場合があり、したがって、動作の実行を不必要に防止する場合がある。
【0023】
従来の手法とは対照的に、以下で説明する様々な態様は、アプリケーションが、実施する予定の動作のリストを提案することを可能にし、コンピューティングデバイスは、それらの動作が、実行されたとき、悪意のある挙動を引き起こさないことを確認することができ、アプリケーションがそれらの事前承認された動作を実施するだけであることを保証することができる。したがって、アプリケーションの動作が、許可された動作のあらかじめ定義された静的リストに収まることを要求するのではなく、様々な態様は、コンピューティングデバイスにおける悪意のある挙動を防止する、比較的柔軟な手法を提供する。
【0024】
他のソリューションは、挙動モデルを使用して、コンピューティングデバイス上の悪意のあるプロセス/プログラムと良性のプロセス/プログラムとの間を差別化する。ただし、これらのソリューションは現時点で、個々のアプリケーションプログラムまたはプロセスの現在/進行中の挙動を評価することに制限されており、したがって、プログラムまたはプロセスがすでに始まった後でのみ、問題を解決することにも制限されている。ただし、これらの戦略の有効性は、高度なセキュリティ特権(本明細書では、「ルートアクセス」または「スーパーユーザアクセス」と呼ばれることがある)を受けている悪意のあるアプリケーションによって損なわれる場合があり、というのは、悪意のあるアプリケーションは、そのルートアクセスを、そのような悪意のある挙動を検出するように構成された機構を妨げ、一時停止し、または終了さえもするための命令を実行するのに活用することができ、そうすることによって、コンピューティングデバイスを攻撃および/または性能劣化に対して脆弱にさせておくからである。
【0025】
概して、様々な態様は、デバイス上で実行中であるとともにルートアクセスを求めるアプリケーションが、ルートアクセスを受け取った後、悪意のある挙動を引き起こさないことを保証するためにデバイスによって実装されるコンピューティングデバイスおよび方法を提供することによって、この潜在的脆弱性に対処する。様々な態様において、アプリケーションにルートアクセスを与える前に、コンピューティングデバイスプロセッサは、アプリケーションがルートアクセスを有する間にアプリケーションが実行する予定の動作を識別し、識別された動作を実行すると悪意のある挙動が引き起こされるかどうかを、動作の実行をシミュレートまたは算出することによって判断し、それらの動作を実行しても悪意のある挙動をもたらさないと判断した後、それらの動作を事前承認するが、他の動作は事前承認しないことを要求し得る。さらに、アプリケーションにルートアクセスを与えた後、プロセッサは、アプリケーションが、事前承認された動作を、それらの動作が実行されることを許可する前に、アプリケーションの保留動作を事前承認された動作と突き合わせて迅速にチェックすることによって実施することを許可するだけでよい。したがって、様々な態様は、コンピューティングデバイスの性能もセキュリティ完全性も損なうことなく、アプリケーションがルートアクセスを受け取ることを保証することができる。
【0026】
一態様において、コンピューティングデバイスは、アプリケーションの動作中にコンピューティングデバイスの挙動ベクトル(すなわち、コンピューティングデバイスの現在の構成/状態を記述する数字ベクトル)を絶えず更新する挙動分析器ユニットを含み得る。さらなる態様において、コンピューティングデバイスは、以下でさらに説明するように、アプリケーションがルートコマンドを悪意のある目的で使うのを防止するために、挙動分析器ユニットと一緒に、またはその一部として作用する契約交渉器ユニットおよび契約強制器ユニットも含み得る。
【0027】
一態様において、ルートアクセスを受け取ろうと試みる、コンピューティングデバイス上で実行しているアプリケーションは、契約交渉器ユニットにルートアクセス動作の「契約」を最初に提供または提案するよう要求され得る。そのような契約は、ルートアクセスを有することを必要とする、アプリケーションが実施する予定の、提案されるアクション、プロセス、システム呼出し、関数呼出しなどのリストを含み得る。契約交渉器ユニットは、提案された契約にある動作を実行すると、悪意のある挙動をコンピューティングデバイス上で発生させることになるのか、または発生させる可能性があるかどうか判断することができる。この判断は、提案されたアクションのうちのいずれかがコンピューティングデバイスの現在の挙動ベクトルを悪意のある構成に入れるかどうか判断することによって遂行することができる。契約交渉器ユニットは、提案されたルートアクセス動作が、悪意のある挙動を引き起こすことも悪意のある挙動につながることもないと判断したとき、提案された契約を「受諾」してよい。契約交渉器ユニットが、提案された契約を受諾すると、契約交渉器ユニットは、アプリケーションが、契約において列挙されたルートアクセス動作を実施することを可能にしてよく、契約強制器ユニットに、アプリケーションの動作を承認された契約と突き合わせて監視し始めるようシグナリングすればよい。
【0028】
一態様において、アプリケーション向けの受諾された契約を受信した後、契約強制器ユニットは、アプリケーションの保留アクション/動作が、受諾された契約に含まれることを確認すればよい。契約強制器ユニットは、各動作が実施される前にアプリケーションのアクションの各々を、受諾された契約と突き合わせてチェックすればよく、そうすることによって、アプリケーションが、ルート/スーパーユーザとして動作している間は無認可動作を実施することができないことを保証する。契約強制器ユニットが、契約に含まれない動作をアプリケーションが実施しようとしていることを認識すると、契約強制器ユニットは、たとえばアプリケーションを阻止し、またはアプリケーションを終了させることによって、アプリケーションが実行するのを防止すればよい。一態様において、アプリケーションが阻止されると、アプリケーションが契約を再交渉することを可能にするために、より多くの時間が認められ得る。契約強制器ユニットによるこのチェックは、単純なテーブルルックアップまたはメモリ中のリストとの比較と二者択一(許可または阻止)とを伴うので、このチェック動作は、非常に迅速に、最小限のオーバーヘッドで遂行することができ、したがって、コンピューティングデバイスの性能に対する衝撃を最小限にして、ルートアクセス保護が実装されるのを可能にする。
【0029】
一態様において、アプリケーションは、追加ルートアクセス動作など、事前に受諾された契約に対する1つまたは複数の修正を契約交渉器ユニットに提案することによって、事前に受諾された契約を修正しようと試みることができる。たとえば、アプリケーションは、その選択された分岐中でルートアクセス動作を実施するための許可を契約交渉器ユニットに求める前に、ランタイム中に条件付き分岐中のある経路が選択されるまで待てばよい。これが起こると、契約器交渉器ユニットは、修正された契約にある動作を実行しても、コンピューティングデバイスの挙動ベクトルが悪意のある構成/状態に入らないと判断した場合、提案された修正契約を分析し、修正された契約を受諾することができる。契約交渉器ユニットは、修正契約を契約強制器ユニットに送ればよく、強制器ユニットは、修正契約を強制し始めてよく、事前に承認された契約を事実上置き換える。
【0030】
様々な態様は、
図1に示す例示的な通信システム100などの様々な通信システム内で実装され得る。典型的なセル電話ネットワーク104は、ネットワーク運用センター108に結合された複数のセル基地局106を含み、ネットワーク運用センター108は、電話陸上通信線(たとえば、図示されていないPOTSネットワーク)およびインターネット110などを介して、コンピューティングデバイス102(たとえば、携帯電話、ラップトップ、タブレットなど)と他のネットワーク宛先との間の音声通話およびデータを接続するように動作する。コンピューティングデバイス102と電話ネットワーク104との間の通信は、4G、3G、CDMA、TDMA、LTE、および/または他のセル電話通信技術などの双方向ワイヤレス通信リンク112を介して遂行され得る。電話ネットワーク104はまた、インターネット110への接続を提供する、ネットワーク運用センター108に結合されるかまたはネットワーク運用センター108内の、1つまたは複数のサーバ114を含んでもよい。
【0031】
通信システム100は、電話ネットワーク104およびインターネット110に接続されたネットワークサーバ116をさらに含み得る。ネットワークサーバ116と電話ネットワーク104との間の接続は、インターネット110を介するか、または(破線の矢印で示されたように)プライベートネットワークを介する場合がある。ネットワークサーバ116はまた、クラウドサービスプロバイダネットワーク118のネットワークインフラストラクチャ内のサーバとして実装され得る。ネットワークサーバ116とコンピューティングデバイス102との間の通信は、電話ネットワーク104、インターネット110、プライベートネットワーク(図示せず)、またはそれらの任意の組合せを介して遂行することができる。
【0032】
コンピューティングデバイス102は、挙動、状態、分類、モデリング、成功率、および/または統計の情報をコンピューティングデバイス102内に収集し、収集された情報を分析のために(たとえば、電話ネットワーク104を介して)ネットワークサーバ116に送ることができる。一態様では、コンピューティングデバイス102は、悪意のある挙動に遭遇した後、それらの現在の構成情報(たとえば、それらの現在の状態を記述するそれらの挙動ベクトル)を送ることができる。コンピューティングデバイス102はまた、ネットワークサーバ116にそれらの構成履歴を送ることができる。構成履歴は、悪意のある挙動の発見につながるように起きた構成変更の履歴、および場合によってはそれらの構成変更を引き起こした命令を含む場合がある。
【0033】
一態様では、ネットワークサーバ116は、クラウドサービス/ネットワーク118から大量の情報を受信し、コンピューティングデバイスの劣化に経時的に寄与する可能性がある特徴、データポイント、および/または要因のすべてまたは大半を含む、完全またはロバストなデータ/挙動モデル(たとえば、大規模分類器モデル)を生成するように構成され得る。ネットワークサーバ116は、以下で説明するように、大規模分類器モデルを、貧弱な(lean)分類器モデルを生成する際に使用するためにコンピューティングデバイス102に送ることもできる。
【0034】
図2は、特定のコンピューティングデバイスの挙動、ソフトウェアアプリケーション、またはプロセスが、悪意があるか、不審であるか、それとも良性であるかを判断するように構成された、一態様のコンピューティングデバイス102における例示的な論理構成要素および情報フローを示す。
図2に示された例では、コンピューティングデバイス102は、挙動観察器ユニット202と、挙動分析器ユニット204と、外部コンテキスト情報ユニット206と、分類器ユニット208と、作動器ユニット210とを含む場合がある。一態様では、分類器ユニット208は、挙動分析器ユニット204の一部として実装される場合がある。一態様では、挙動分析器ユニット204は、1つまたは複数の分類器ユニット208を生成するように構成される場合があり、1つまたは複数の分類器ユニット208の各々は、1つまたは複数の分類器を含む場合がある。
【0035】
ユニット202〜210の各々は、ソフトウェア、ハードウェア、またはそれらの任意の組合せに実装される場合がある。様々な態様では、ユニット202〜210は、オペレーティングシステムの部分内(たとえば、カーネル内、カーネル空間内、ユーザ空間内など)、個別のプログラムもしくはアプリケーション内、専用のハードウェアバッファもしくはプロセッサ内、またはそれらの任意の組合せに実装される場合がある。一態様では、ユニット202〜210のうちの1つまたは複数は、コンピューティングデバイス102の1つまたは複数のプロセッサ上で実行するソフトウェア命令として実装される場合がある。
【0036】
挙動観察器ユニット202は、コンピューティングデバイスの様々なレベル/ユニットでアプリケーションプログラミングインターフェース(API)を計装するかもしくは連携させ、計装されたAPIを介して様々なレベル/ユニットでコンピューティングデバイスの動作およびイベント(たとえば、システムイベント、状態変化など)を監視/観察し、観察された動作/イベントに関する情報を収集し、収集された情報を知的にフィルタ処理し、フィルタ処理された情報に基づいて1つもしくは複数の観察値を生成し、生成された観察値をメモリ内(たとえば、ログファイル内など)に記憶し、かつ/または、生成された観察値を挙動分析器ユニット204に(たとえば、メモリ書込み、関数呼出しなどを介して)送るように構成される場合がある。
【0037】
挙動観察器ユニット202は、アプリケーションフレームワークまたはランタイムライブラリ、システム呼出しAPI、ファイルシステム、およびネットワーキングサブシステムの動作、(センサデバイスを含む)デバイスの状態変化、ならびに他の同様のイベントにおけるライブラリAPI呼出しに関する情報を収集することによって、コンピューティングデバイスの動作およびイベントを監視/観察することができる。挙動観察器ユニット202はまた、ファイルシステム活動を監視することができ、ファイルシステム活動には、ファイル名、ファイルアクセスのカテゴリ(個人情報または通常のデータファイル)を探索すること、ファイル(たとえば、exe、zipなどのタイプ)を作成または削除すること、ファイル読取り/書込み/シーク動作、ファイルパーミッションを変更することなどが含まれ得る。
【0038】
挙動観察器ユニット202はまた、データネットワーク活動を監視することができ、データネットワーク活動には、接続のタイプ、プロトコル、ポート番号、デバイスが接続されるサーバ/クライアント、接続数、通信の容量または周波数などが含まれ得る。挙動観察器ユニット202は、電話ネットワーク活動を監視することができ、監視は、送出され、受信され、または妨害された通話またはメッセージ(たとえば、SMSなど)のタイプおよび数(たとえば、かけられた割増し料金の通話の数)を監視することを含む場合がある。
【0039】
挙動観察器ユニット202はまた、システムリソースの使用状況を監視することができ、監視は、フォークの数、メモリアクセス動作、開かれたファイルの数などを監視することを含む場合がある。挙動観察器ユニット202は、コンピューティングデバイスの状態を監視することができ、監視は、ディスプレイがオンかオフか、デバイスがロックされているかアンロックされているか、バッテリの残量、カメラの状態などの様々な要因を監視することを含む場合がある。挙動観察器ユニット202はまた、たとえば、重要なサービス(ブラウザ、契約プロバイダなど)に対する意図、プロセス間通信(IPC)の程度、ポップアップウィンドウなどを監視することによって、プロセス間通信を監視することができる。
【0040】
挙動観察器ユニット202はまた、1つまたは複数のハードウェア構成要素のドライバの統計データおよび/またはステータスを監視/観察することができ、ハードウェア構成要素には、カメラ、センサ、電子ディスプレイ、WiFi通信構成要素、データコントローラ、メモリコントローラ、システムコントローラ、アクセスポート、タイマ、周辺デバイス、ワイヤレス通信構成要素、外部メモリチップ、電圧レギュレータ、発振器、フェーズロックループ、周辺ブリッジ、ならびに、プロセッサ、およびコンピューティングデバイス上で動作するクライアントをサポートするために使用される他の同様の構成要素が含まれ得る。
【0041】
挙動観察器ユニット202はまた、コンピューティングデバイスおよび/またはコンピューティングデバイスのサブシステムの状態またはステータスを示す、1つまたは複数のハードウェアカウンタを監視/観察することができる。ハードウェアカウンタは、コンピューティングデバイス中で発生するハードウェア関連の活動またはイベントのカウントまたは状態を記憶するように構成されたプロセッサ/コアの専用レジスタを含み得る。
【0042】
挙動観察器ユニット202はまた、ソフトウェアアプリケーションのアクションまたは動作、アプリケーションダウンロードサーバ(たとえば、Apple(登録商標)のApp Storeサーバ)からのソフトウェアダウンロード、ソフトウェアアプリケーションによって使用されるコンピューティングデバイス情報、呼情報、テキストメッセージング情報(たとえば、SendSMS、BlockSMS、ReadSMSなど)、メディアメッセージング情報(たとえば、ReceiveMMS)、ユーザアカウント情報、位置情報、カメラ情報、加速度計情報、ブラウザ情報、ブラウザベース通信のコンテンツ、音声ベース通信のコンテンツ、短距離無線通信(たとえば、Bluetooth(登録商標)、WiFiなど)、テキストベース通信のコンテンツ、記録されたオーディオファイルのコンテンツ、電話帳または連絡先情報、連絡先リストなどを監視/観察することができる。
【0043】
挙動観察器ユニット202は、ボイスメールを含む通信(VoiceMailComm)、デバイス識別子を含む通信(DeviceIDComm)、ユーザアカウント情報を含む通信(UserAccountComm)、カレンダ情報を含む通信(CalendarComm)、位置情報を含む通信(LocationComm)、記録されたオーディオ情報を含む通信(RecordAudioComm)、加速度計情報を含む通信(AccelerometerComm)などを含む、コンピューティングデバイスの伝送または通信を監視/観察することができる。
【0044】
挙動観察器ユニット202は、コンパス情報、コンピューティングデバイス設定、バッテリ寿命、ジャイロスコープ情報、圧力センサ、磁気センサ、スクリーン活動などの使用、およびそれらに対する更新/変更を監視/観察することができる。挙動観察器ユニット202は、ソフトウェアアプリケーションとの間で通信される通知(AppNotifications)、アプリケーション更新などを監視/観察することができる。挙動観察器ユニット202は、第2のソフトウェアアプリケーションのダウンロードおよび/またはインストールを要求している第1のソフトウェアアプリケーションに関する条件またはイベントを監視/観察することができる。挙動観察器ユニット202は、パスワードのエントリなどのユーザ認証に関する条件またはイベントを監視/観察することができる。
【0045】
挙動観察器ユニット202はまた、アプリケーションレベル、無線レベル、およびセンサレベルを含むコンピューティングデバイスの複数のレベルで、条件またはイベントを監視/観察することができる。アプリケーションレベルの観察には、顔認識ソフトウェアを介してユーザを観察すること、ソーシャルストリームを観察すること、ユーザによって入力された注釈を観察すること、PassBook/Google Wallet/Paypalの使用に関するイベントを観察することなどが含まれ得る。アプリケーションレベルの観察には、仮想プライベートネットワーク(VPN)の使用に関するイベント、および同期、音声探索、音声制御(たとえば、1語を発することによる電話のロック/アンロック)、言語翻訳機、計算用のデータのオフローディング、ビデオストリーミング、ユーザ活動のないカメラの使用、ユーザ活動のないマイクロフォンの使用などに関するイベントを観察することも含まれ得る。
【0046】
無線レベルの観察には、無線通信リンクを確立するか、または情報を送信する前のコンピューティングデバイスとのユーザ対話、二重/多重のSIMカード、インターネットラジオ、モバイル電話テザリング、計算用のデータのオフローディング、デバイス状態通信、ゲームコントローラまたはホームコントローラとしての使用、車両通信、コンピューティングデバイス同期などのうちのいずれかまたは複数の存在、実在、または量を判断することが含まれ得る。無線レベルの観察には、測位、ピアツーピア(p2p)通信、同期、車両対車両通信、および/または機械対機械(m2m)通信のための、無線(WiFi、WiMax、Bluetooth(登録商標)など)の使用を監視することも含まれ得る。無線レベルの観察には、ネットワークトラフィックの使用、統計データ、またはプロファイルを監視することがさらに含まれ得る。
【0047】
センサレベルの観察には、コンピューティングデバイスの使用環境および/または外部環境を判断するために、磁気センサまたは他のセンサを監視することが含まれ得る。たとえば、コンピューティングデバイスプロセッサは、電話が(たとえば、ホルスタ内の磁石を検知するように構成された磁石センサを介して)ホルスタ内にあるか、または(たとえば、カメラもしくは光センサによって検出される光の量を介して)ユーザのポケット内にあるかを判断するように構成される場合がある。たとえば、コンピューティングデバイスがホルスタに入れられている間に発生する、ユーザによるアクティブな使用(たとえば、写真またはビデオを撮ること、メッセージを送ること、音声通話を行うこと、音を録音することなど)に関する活動および機能は、(たとえば、ユーザを追跡またはスパイするために)デバイス上で実行されている不正なプロセスのサインである可能性があるので、コンピューティングデバイスがホルスタ内にあることを検出することは、悪意のある挙動を認識することに関係する場合がある。
【0048】
使用環境または外部環境に関するセンサレベルの観察の他の例には、近距離場通信(NFC)を検出すること、クレジットカードスキャナ、バーコードスキャナ、またはモバイルタグリーダから情報を収集すること、USB充電源の存在を検出すること、キーボードまたは補助デバイスがコンピューティングデバイスに結合されていることを検出すること、コンピューティングデバイスが(たとえば、USBなどを介して)コンピューティングデバイスに結合されていることを検出すること、LED、フラッシュ、フラッシュライト、または光源が修正されているか、または(たとえば、緊急シグナリングアプリケーションなどを悪意をもって無効にして)無効にされていることを判断すること、スピーカーまたはマイクロフォンがスイッチオンまたは電源オンにされていることを検出すること、充電イベントまたは電力イベントを検出すること、コンピューティングデバイスがゲームコントローラとして使用されていることを検出することなどが含まれ得る。センサレベルの観察には、医療もしくはヘルスケアのセンサから、またはユーザの体をスキャンすることから情報を収集すること、USB/オーディオジャックに差し込まれた外部センサから情報を収集すること、(たとえば、振動インターフェースなどを介して)触知センサまたは触覚センサから情報を収集すること、コンピューティングデバイスの熱状態に関する情報を収集することなども含まれ得る。
【0049】
監視される要因の数を管理可能レベルまで削減するために、一態様では、挙動観察器ユニット202は、コンピューティングデバイスの劣化に寄与する可能性があるすべての要因の小さいサブセットである、挙動または要因の初期セットを監視/観察することによって、粗い観察を実施することができる。一態様では、挙動観察器ユニット202は、ネットワークサーバ116および/またはクラウドサービスもしくはネットワーク118内の構成要素から、挙動および/または要因の初期セットを受信することができる。一態様では、挙動/要因の初期セットは、ネットワークサーバ116またはクラウドサービス/ネットワーク118から受信されたデータ/挙動モデル内で指定される場合がある。一態様では、挙動/要因の初期セットは、縮小された特徴モデル(RFM)内で指定される場合がある。
【0050】
別の態様では、挙動観察器ユニット202は、挙動分析器ユニット204および/または分類器ユニット208によって生成された貧弱な分類器モデル中で指定された挙動/特徴を観察することができる。貧弱な分類器モデルは、
図1を参照して上述したように、ネットワークサーバ(たとえば、ネットワークサーバ116)から受信された大規模分類器モデルに含まれる特徴のサブセットを含むことができ、貧弱な分類器モデルは、特定のコンピューティングデバイス挙動が、良性であるか、それとも悪意のある/性能劣化性であるかを分類器ユニット208が最終的に判断することを可能にする可能性が最も高いと判断された大規模分類器モデルからの情報を含むことができる。
【0051】
挙動分析器ユニット204および/または分類器ユニット208は、挙動観察器ユニット202から観察値を受信し、受信された情報(すなわち、観察値)を外部コンテキスト情報ユニット206から受信されたコンテキスト情報と比較し、経時的なデバイスの劣化に寄与する(もしくは寄与する可能性がある)か、または場合によってはデバイスに問題を引き起こす可能性がある(たとえば、悪意のある挙動)、受信された観察値に関連するサブシステム、プロセス、および/またはアプリケーションを識別することができる。
【0052】
一態様では、挙動分析器ユニット204および/または分類器ユニット208は、経時的なデバイスの劣化に寄与する(もしくは寄与する可能性がある)か、または場合によってはデバイスに問題を引き起こす可能性がある、挙動、プロセス、またはプログラムを識別するために、情報の限定されたセット(すなわち、粗い観察値)を利用するための知能を含む場合がある。たとえば、挙動分析器ユニット204は、様々なユニット(たとえば、挙動観察器ユニット202、外部コンテキスト情報ユニット206など)から収集された(たとえば、観察値の形態の)情報を分析し、コンピューティングデバイスの正常動作の挙動を学習し、比較の結果に基づいて1つまたは複数の挙動ベクトルを生成するように構成される場合がある。挙動分析器ユニット204は、さらなる分析のために、生成された挙動ベクトルを分類器ユニット208に送ることができる。
【0053】
分類器ユニット208は、挙動ベクトルを受信し、それらを1つまたは複数の挙動モデル(たとえば、生成された貧弱な分類器モデル)と比較して、特定のコンピューティングデバイスの挙動、ソフトウェアアプリケーション、またはプロセスが悪意があるか、良性であるか、それとも不審であるか判断することができる。
【0054】
挙動、ソフトウェアアプリケーション、またはプロセスが悪意があると分類器ユニット208が判断すると、分類器ユニット208は作動器ユニット210に通知することができ、作動器ユニット210は、悪意があるか、もしくは性能を劣化させると判断されたコンピューティングデバイスの挙動を修正するために様々なアクションもしくは動作を実施し、かつ/または識別された問題を治癒、回復、隔離、もしくは場合によっては修復する動作を実施することができる。
【0055】
図3は、アプリケーションがコンピューティングデバイスにおいて悪意のある挙動を引き起こさないことを保証するとともに、アプリケーションがルートアクセスを受け取ることを可能にするように構成された態様コンピューティングデバイスにおける例示的な論理構成要素および情報フローを示す。
【0056】
一態様において、コンピューティングデバイス102は、
図2を参照して上述したユニット202〜210を含み得る。コンピューティングデバイス102は、契約交渉器ユニット302、契約強制器ユニット304、および1つまたは複数のアプリケーション306も含み得る。一態様(図示せず)において、契約交渉器ユニット302および/または契約強制器ユニット304は、挙動分析器ユニット204の一部として実装することができる。
【0057】
一態様において、アプリケーション306は、オペレーティングシステム(図示せず)上で、または独立型プロセスとして、コンピューティングデバイス102のプロセッサ上で実行することができる。アプリケーション306の実行中、アプリケーション306は、ルート/スーパーユーザアクセスを必要とする1つまたは複数の特権的動作を実施する必要があり得る。たとえば、アプリケーション306は、様々なシステム呼出し、ルートコマンドなどを実施する必要があり得る。上述したように、ルートアクセスを受け取った後、悪意のあるアプリケーション306は、悪意のある挙動を検出し、終了するための、コンピューティングデバイス102の能力を減衰させ、または不能にすることが可能な場合がある。したがって、悪意のあるルートアクセス動作を防止しながら、アプリケーションが良性あるいは正当な動作を実施することを可能にするために、契約交渉器ユニット302は、アプリケーションが「提案された契約」においてルート/スーパーユーザとして実施する予定のルートアクセス動作のリストを分析し、契約にある良性動作を承認することによって、アプリケーション306が、悪意のある挙動を引き起こさないルートアクセス動作を実施するのを認可することができる。
【0058】
アプリケーション306は、提案された契約を生成することができ、この契約は、ルートアクセスを必要とし/伴い、またはルートアクセスを有している間に実施される、アプリケーションが実施する予定API、動作、関数呼出し、システム呼出しなどを概説し得る。提案された契約は、ルートアクセスを必要とするタスク、API、動作、関数呼出し、システム呼出しなどだけに制限されてよく、したがって、契約は通常、アプリケーション動作のうちのわずかな比率に制限される。一態様において、提案された契約は1つまたは複数の動作を含むことができ、各アプリケーションは、そのアプリケーションに固有の動作または機能を反映する、一意の提案された契約を生成することができる。たとえば、数日または数週間という、予期される実行時間を有する、サーバ上で動作し得るアプリケーションは、アプリケーションがルートアクセスを有している間に実施されるべき数千の動作を含み得る、比較的複雑な提案された契約を生成することができる。一方、スマートフォン上で動作するように構成されたアプリケーションは、その動作のうちの非常にわずかな比率を実施するためにルートアクセスを必要とする場合があり、したがって、数十の動作を含む、単純な提案された契約を生成し得る。一態様において、提案された契約は、アプリケーション306の、動作のフルセットのサブセット(すなわち、動作のサブセット)を含むだけでよく、提案された契約は、限定的時間内に、またはその動作の予測可能な進行に沿って、アプリケーション306が実施することを期待する動作を含むだけでよい。やはり、提案された契約は、
図9を参照して以下で説明する、事前に受諾された契約に対する修正であってよい。
【0059】
提案された契約は、提案された契約に含まれる動作に関連付けられたパラメータ、引数、または他のデータも含み得る。たとえば、提案された契約は、関数呼出し(たとえば、「open()」)ならびにその関数呼出しとともに使われるパラメータ(たとえば、「open(file.txt)」)を含み得る。別の態様では、アプリケーション306は、アプリケーション306がそれらの動作を実施する順序で、提案された契約に動作を投入することができる。提案された契約の組立については、
図4Aおよび
図4Bに示す態様提案契約の例において以下でさらに説明する。
【0060】
提案された契約を受信したことに応答して、契約交渉器ユニット302は、コンピューティングデバイス102の現在の構成が与えられると、提案された契約にある動作を実行した結果として発生することになるか、または発生する可能性がある、コンピューティングデバイス102の今後の構成を識別するために、提案された契約に含まれる動作の実行をシミュレートし、または動作を算出することができる。一態様において、契約交渉器ユニット302は、コンピューティングデバイス102の現在の構成/状態を特徴付ける1つまたは複数の挙動ベクトルを挙動分析器ユニット204に対して要求することができ、1つまたは複数の挙動ベクトルに対する、提案された契約にある動作を実施することの影響をシミュレートすることができる。契約交渉器ユニット302は、個々に、または挙動分析器ユニット204および/または分類器ユニット208の一部としてのいずれかで、上述したように、アプリケーション306が、提案された契約にある動作を実施することを許可することが、動作の実行中の任意の時点において、悪意のある挙動を引き起こすことになるか、または引き起こす可能性があるかどうか判断するために、得られた挙動ベクトルをチェック/分類することができる。
【0061】
契約強制器ユニット304は、悪意のある挙動を引き起こさないと契約交渉器ユニット302が判断した、提案された契約(すなわち、「受諾された契約」)を受信することができ、強制器ユニット304は、アプリケーション306が実施しようとしている動作を監視して、それらの動作が、受諾された契約に確実に含まれるように構成することができる。言い換えると、契約強制器ユニット304は、アプリケーション306が、受諾された契約にある動作のみを実施するという誓約を守ることを保証し得る。一態様において、契約強制器ユニット304は、そのような強制動作を、挙動分析器ユニット204から受信された情報に少なくとも部分的に基づいて実施することができる。一態様において、強制器ユニット304は、受諾された契約にある動作を、受諾された契約において動作が列挙される順序(すなわち、動作順序)でアプリケーション306が実施することを保証し得る。
【0062】
作動器ユニット210は、提案された契約にある動作を実施すると、悪意のある挙動を引き起こす(または引き起こし得る)という(すなわち、提案された契約が拒否されたという)信号を契約交渉器ユニットから受信したことに応答して、アプリケーション306が実行するのを防止するように構成することができる。たとえば、アプリケーション306は、アプリケーションを阻止または終了することによって、実行するのを防止され得る。作動器ユニット210はまた、アプリケーション306が、受諾された契約に含まれない動作を実施しようと試みたという、および/またはアプリケーション306が、受諾された契約にある動作順序通りでなく実施しようと試みたという信号を契約強制器ユニット304から受信したことに応答して、アプリケーション306を阻止または終了することができる。
【0063】
図4Aおよび
図4Bは、それぞれ、一態様による、アプリケーション402、412によって提案された、例示的な提案された契約406、418を示す。上述したように、アプリケーションまたはプロセスは、いくつかの動作を実施するためのルートアクセスを望み、または必要とする場合があるが、アプリケーションの未チェックのルート活動は、マルウェアシステムがアプリケーションを検出し、終了し得る前は、マルウェア検出/防止システムを不能にすることが可能である場合がある。コンピューティングデバイスの完全性を依然として維持したまま、アプリケーションにルートアクセスを提供するために、契約交渉器ユニットは、アプリケーションが生成した契約を最初に受信し、受諾しなければならないが、その例について、
図4Aおよび
図4Bを参照して以下に示す。
【0064】
図4Aに示すように、アプリケーション402(「Benign_App.c」)は、アプリケーションがルート/スーパーユーザとして実施する予定の様々な動作を含み得る。たとえば、アプリケーション402は、ファイルを開き(すなわち、オープン動作404a)、ファイルの一部を読み取り(すなわち、読取り動作404b)、ファイルを閉じる(すなわち、クローズ動作404c)ためのシステム呼出しを実施するのにルートアクセスを必要とし得る。
【0065】
一態様において、アプリケーション402は、ルートアクセスを有する間にアプリケーション402が実施する予定の動作404a〜404cについてのエントリを含む契約406を準備することができる。契約406は動作404a〜404cについてのエントリ、ならびに動作が動作中に使用し得るパラメータを含み得る。契約406中に示されるように、オープン動作404aは、ファイル操作パラメータ「FD1」、ソースパラメータ「filename.txt」、および修正子パラメータ「READONLY」を含み得る。契約406は、動作404a〜404cを、アプリケーションが実施する予定の順序で列挙することもできる。したがって、図示するように、オープン動作404aについてのエントリは、読取り動作404bおよびクローズ動作404cについてのエントリの前に列挙されてよい。
【0066】
提案された契約406を生成した後、アプリケーション402は提案された契約406を契約交渉器ユニットに送ればよく、交渉器ユニットは、
図3を参照して上述したように動作404a〜404cの実行をシミュレートすることができ、動作404a〜404cを実施しても悪意のある挙動を引き起こさないと判断した後、提案された契約406を受諾してよい。契約交渉器ユニットは次いで、受諾された契約406を契約強制器ユニットに送ればよく、強制器ユニットは、アプリケーション402が動作404a〜404cを実施するだけであることを確実にし得る。
【0067】
図4Bに示す別の例では、別のアプリケーション412(すなわち、「Malicious_App.c」)は、上述したように、いくつかの良性動作404a〜404cについてのエントリを含む契約418を生成することができるが、アプリケーション412がやはり実施する予定であり得る他の動作416(たとえば、悪意のあるおよび/または良性動作)は、契約418から省いてよい。契約交渉器ユニットが、契約418の中の動作の実行をシミュレートした後、契約418を受諾すると仮定すると、交渉器ユニットは、アプリケーション412にルートアクセスを与えることができ、契約418を強制のために契約強制器ユニットに渡すことができる。
【0068】
契約418の強制中、契約強制器ユニットは、
図3を参照して上述したように、アプリケーション412が実施しようとしている動作が契約418に含まれるかどうか迅速に判断することができる。したがって、アプリケーション412が動作416を実施しようと試みる直前に、契約強制器ユニットは、受諾された契約418に動作416が含まれるかどうか判断し、かつ/またはアプリケーション412が、受諾された契約に含まれない動作を実行するのを、たとえば、アプリケーション412が契約の中にないどの動作を実行する機会もないうちにアプリケーションを阻止するか、もしくはアプリケーション412を終了させることによって防止することができる。
【0069】
図5は、ルートアクセスを有する間にアプリケーションが悪意のある挙動を引き起こすのを防止するために、アプリケーションから受信された契約を受諾し、強制するための、コンピューティングデバイスのプロセッサ上で動作する1つまたは複数の構成要素によって実装することができる態様方法500を示す。
【0070】
上述したように、ルートアクセスを有するアプリケーションは、悪意のある挙動を検出し、停止する努力を妨害する可能性がある。このシナリオを避けるために、コンピューティングデバイスプロセッサ上で実行する契約交渉器ユニットおよび契約強制器ユニットは、アプリケーションがルートアクセスを受け取るのを承認してよく、本明細書にさらに記載するように、アプリケーションの動作を監督して、アプリケーションが悪意のある挙動を引き起こそうと試みないと保証すればよい。したがって、以下で説明する契約システムを使うことの利益を活用することによって、様々な態様は、アプリケーションの動作の各々の影響を即座に調べることによって、悪意のある挙動を検出する従来の方法よりも効率的に、コンピューティングデバイスのセキュリティおよび完全性を保証することができる。
【0071】
ブロック502において、プロセッサ上で実行する契約交渉器ユニットは、ルートアクセスを取得しようと試みるアプリケーションから、提案された契約を受信することができる。
図3を参照して上述したように、提案された契約は、アプリケーションがルートアクセスを有する間に実施する予定の動作、API、関数呼出しなどのリストまたはセットを含み得る。一態様において、契約交渉器ユニットは、アプリケーションがルートアクセスを取得しようと試みる直前に、提案された契約を受信することができ、アプリケーションは、特権的なルートコマンドを実行する必要があるまで、正常に動作し得る。
【0072】
提案された契約を受信したことに応答して、契約交渉器ユニットを実行するプロセッサは、判断ブロック504において、提案された契約にある動作のセットを実行すると、悪意のある挙動をもたらすと判断してよい。判断ブロック504の動作については、
図6および
図9を参照して以下でさらに説明する。
【0073】
契約交渉器ユニットを実行するプロセッサが、提案された契約にある動作のセットを実行すると悪意のある挙動をもたらすと判断すると(すなわち、判断ブロック504=「Yes」)、プロセッサ上で実行する作動器ユニットは、ブロック512において、たとえばアプリケーションを阻止または終了することによって、アプリケーションが実行するのを防止してよい。一態様において、作動器ユニットおよび/または契約交渉器ユニットを実行するプロセッサは、アプリケーションがルートユーザとしていかなる動作を実施するのも防止することによって、アプリケーションがルートアクセスを受け取るのを阻止することができる。そのような態様において、アプリケーションは、ルート/スーパーユーザアクセスを必要としない他の動作を実施し続けることができる。さらなる態様において、阻止された後、アプリケーションは、たとえば、ルートレベル特権を獲得しようと試みて別の契約を提案するために、上述した動作を繰り返すことによって、契約交渉器ユニットとのさらなる交渉に関与することができる。代替態様において、作動器は、「ゼロトレランス」ポリシーを強制することができ、アプリケーションを阻止するよりもむしろ終了すればよく、そうすることによって、さらなる契約交渉の可能性を排除する。
【0074】
契約交渉器ユニットを実行するプロセッサが、提案された契約にある動作のセットを実行しても悪意のある挙動をもたらさないと判断すると(すなわち、判断ブロック504=「No」)、契約強制器ユニットを実行するプロセッサは、ブロック506において、提案された契約を受諾してよく、受諾は、アプリケーションがルートアクセスを受け取ることを可能にすること(たとえば、必要なルートアクセス許可を与え、かつ/またはコンピューティングデバイス上の他の構成要素もしくはプロセスに、アプリケーションがルート/スーパーユーザとして実施することを許可すると通知すること)を伴い得る。契約交渉器ユニットを実行するプロセッサは、受諾された契約を契約強制器ユニットに送ってもよく、それに応答して、契約強制器ユニットを実行するプロセッサは、ブロック508において、および
図7を参照して以下でさらに説明するように、受諾された契約を強制し始めてよい。
【0075】
ブロック508において、受諾された契約を強制するか、またはブロック512においてアプリケーションを阻止/終了した後、契約交渉器ユニットを実行するプロセッサは、ブロック502において、別の提案された契約をアプリケーションから受信し得る。
【0076】
図6は、アプリケーションから受信された、提案された契約を受諾するかどうか判断するための、コンピューティングデバイスプロセッサ上で実装することができる態様方法600を示す。方法600の動作は、
図5を参照して上述された方法500の動作の一態様を実施する。
【0077】
契約交渉器ユニットを実行するプロセッサは、
図5を参照して上述したように、ブロック502において、アプリケーションから、提案された契約を受信し得る。ブロック604において、契約交渉器ユニットを実行するプロセッサは、コンピューティングデバイスの現在の構成を判断することもできる。一態様において、コンピューティングデバイスの現在の構成を判断するために、契約交渉器を実行するプロセッサは、コンピューティングデバイスの現在の構成/状態を記述する1つまたは複数の挙動ベクトルを、たとえば挙動分析器ユニットから取得すればよい。
【0078】
契約交渉器ユニットを実行するプロセッサは、ブロック606において、提案された契約に含まれる動作を、コンピューティングデバイスの現在の構成に対してそれらの動作を実施することの影響をシミュレートまたは算出することによって、コンピューティングデバイスの現在の構成に適用してもよい。一態様において、契約交渉器ユニットを実行するプロセッサは(上述したように、別個に、または挙動分析器ユニットおよび/もしくは分類器ユニットの一部としてのいずれかで)は、提案された契約にある動作を順序通りに実施すると、動作の実行中のいずれかの時点において、コンピューティングデバイスが悪意のある構成に入ることになるかどうか判断することができる。たとえば、契約交渉器ユニットおよび/または挙動分析器ユニットを実行するプロセッサは、提案された契約にある動作を実行したことに応答して、コンピューティングデバイスの現在の構成を表す1つまたは複数の挙動ベクトルがどのように変化するかを記録することができる。別の態様では、契約交渉器ユニットを実行するプロセッサは、提案された契約にある各動作の実行を、提案された契約において動作が列挙される順序でシミュレートすることができる。
【0079】
契約交渉器ユニットを実行するプロセッサは、判断ブロック608において、コンピューティングデバイスの現在の構成に動作のセットを適用すると、悪意のある挙動をもたらすかどうか判断することもできる。一態様において、提案された契約にある各動作の実行をシミュレートした後、契約交渉器ユニットを実行するプロセッサは、
図2を参照して上述したように、コンピューティングデバイスの予測される今後の構成を表す1つまたは複数の挙動ベクトルを、良性または悪意があるものとして分類することができ、そうすることによって、契約交渉器ユニットが、提案された契約に含まれる動作を実施したことから生じる、どの悪意のある挙動も決定的に識別することを可能にする。
【0080】
契約交渉器ユニットを実行するプロセッサが、コンピューティングデバイスの現在の構成に動作のセットを適用しても悪意のある挙動をもたらさないと判断すると(すなわち、判断ブロック608=「No」)、交渉器ユニットを実行するプロセッサは、
図5を参照して上述したように、ブロック506において、提案されたアプリケーションを受諾してよい。契約強制器ユニットを実行するプロセッサは次いで、
図5を参照して上述したように、ブロック508において、受諾されたアプリケーションを強制し始めてよい。また、契約交渉器ユニットを実行するプロセッサが、別の提案された契約をアプリケーションから受信すると、契約交渉器ユニットを実行するプロセッサは、ブロック502において始まる、上述した動作を繰り返してよい。
【0081】
契約交渉器ユニットを実行するプロセッサが、コンピューティングデバイスの現在の構成に動作のセットを適用すると悪意のある挙動をもたらすと判断すると(すなわち、判断ブロック608=「Yes」)、交渉器ユニットを実行するプロセッサは、ブロック610において、提案された契約を拒否してよく、そうすることによって、アプリケーションがルートアクセスを受け取るのを拒絶する。一態様において、契約交渉器ユニットを実行するプロセッサは、提案された契約にある少なくとも1つの動作が悪意のある挙動をもたらすと判断したことに応答して、契約を拒否してよい。契約交渉器ユニットを実行するプロセッサは、上述したようにブロック512において、たとえばアプリケーションを阻止または終了することによって、作動器ユニットを実行するプロセッサに、アプリケーションが実行するのを防止するようシグナリングすることができる。一態様において、交渉器ユニットを実行するプロセッサが、別の提案された契約をアプリケーションから受信すると、契約交渉器ユニットを実行するプロセッサは、ブロック502において始まる、上述した動作を繰り返してよい。
【0082】
図7は、ルートアクセスをもつアプリケーションが、受諾された契約を尊重することを保証するために、事前に受諾された契約を強制するための、コンピューティングデバイス上のプロセッサによって実装することができる態様方法700を示す。方法700の動作は、
図5を参照して上述した方法500の動作の態様を実装し、動作は、契約交渉器ユニットを実行するプロセッサが、方法500のブロック506において契約を受諾した後に始まり得る。
【0083】
上述したように、契約交渉器ユニットを実行するプロセッサは、アプリケーションがルートアクセスを受け取った後で実施することができる動作の有限リスト(すなわち、契約)を承認することによって、有害または望まれない動作をルート/スーパーユーザとして実施するアプリケーションを防ぐことができる。契約交渉器ユニットを実行するプロセッサは、この評価を、アプリケーションが特権的動作を実施し始める前に実施するので、契約強制器ユニットを実行するプロセッサは、アプリケーションがルートアクセスを受け取った後に実施する各動作の影響を即座にチェックしなければならない代わりに、アプリケーションが実施する予定の動作のアイデンティティをチェックすることによって、アプリケーションが良性動作を実施することを保証することができる。したがって、実行することを許容される動作が、悪意のある挙動を引き起こさないことを保証するために事前スクリーニングされているので、契約の使用は、潜在的な悪意のある挙動を避けるための、比較的軽量の機構であり得る。
【0084】
ブロック702において、契約強制器ユニットを実行するプロセッサは、強制されるべき、アプリケーション向けの受諾された契約を受信し得る。上述したように、受諾された契約は、アプリケーションがルート/スーパーユーザとして実施する予定の動作の、事前スクリーニングされたリストを含み得る。受諾された契約を受信したことに応答して、契約強制器ユニットを実行するプロセッサは、ブロック706において、たとえばアプリケーションが実施しようとしているAPI呼出し、命令、または他の動作のキューを検査することによって、アプリケーションが次に実施する保留動作を識別することができる。
【0085】
ブロック708において、契約強制器ユニットを実行するプロセッサは、契約交渉器ユニットによる実行のために動作が事前承認されていることを保証するために、保留動作を、受諾された契約に含まれる動作のセットと比較すればよい。これを遂行するために、契約強制器ユニットを実行するプロセッサは、受諾された契約を使って、単純なテーブルルックアップ動作を実施することができる。比較の出力結果に基づいて、契約強制器ユニットを実行するプロセッサは、受諾された契約に含まれる動作のみが実行を許可されるので、判断ブロック710において、保留動作が、受諾された契約に含まれる動作のセットのうちの1つの動作と一致するかどうか判断することができる。一態様において、契約強制器ユニットを実行するプロセッサは、上記判断を、アプリケーションが保留動作を実行しようと試みる直前に行ってよい。
【0086】
契約強制器ユニットを実行するプロセッサが、保留動作が、受諾された契約にある動作のセットのうちの1つの動作と一致すると判断すると(すなわち、判断ブロック710=「Yes」)、強制器ユニットを実行するプロセッサは、任意選択で、任意選択の判断ブロック712において、保留動作が、予期される順序で実施されるかどうか判断することができる。そのような態様において、契約強制器ユニットを実行するプロセッサは、保留動作が、受諾された動作に含まれることを要求するのに加え、保留動作が、受諾された契約において列挙される順序で実施されることを要求し得る。実施の順序を強制することによって、契約強制器ユニットを実行するプロセッサは、受諾された契約にある動作が順不同に実施されるときに発生し得る潜在的な悪意のある挙動から、コンピューティングデバイスをより良好に保護することができる。たとえば、契約交渉器ユニットを実行するプロセッサは、提案された契約にある動作の実行を、動作が列挙された順序でシミュレートした後、悪意のある挙動を検出していない場合があるが、アプリケーションは、提案された契約にある動作順序通りでなく繰り返すか、または実行して、望まれないか、または有害な影響を引き起こす場合がある(たとえば、動作を繰り返して、バッテリ寿命を消耗させ、かつ/またはコンピューティングデバイス上の他のプロセスを遅くする)。
【0087】
保留動作が、受諾された契約にある動作のセットのうちの1つの動作と一致しないと判断したことに応答して(すなわち、判断ブロック710=「No」)、または保留動作が、予期される順序で実施されないと判断したことに応答して(すなわち、任意選択の判断ブロック712=「No」)、強制器ユニットを実行するプロセッサは、任意選択で、任意選択の判断ブロック714において、保留動作が、事前承認された動作リストに含まれるかどうか判断してよい。そのような事前承認された動作リストは、アプリケーションが契約に違反することなくどの時点でも実施することができる良性動作であることがわかっている動作を含み得る。言い換えると、契約強制器ユニットを実行するプロセッサは、安全な動作の「ホワイトリスト」を実装することができ、そうすることによって、ホワイトリスト中の1つまたは複数のアプリケーションを、提案された契約から省いたとしても、アプリケーションが実行し続けることを許可する。別の態様では、契約強制器ユニットを実行するプロセッサは、受諾された契約からのいかなる逸脱に対してもアプリケーションが終了される「ゼロトレランス」手法を代わりに実装してよい。
【0088】
契約強制器ユニットを実行するプロセッサが、保留動作が、事前承認された動作リストに含まれないと判断すると(すなわち、任意選択の判断ブロック714=「No」)、作動器ユニットを実行するプロセッサは、
図5を参照して上述したように、ブロック512において、たとえばアプリケーションを阻止または終了することによって、アプリケーションが実行するのを防止してよい。プロセスは、契約交渉器を実行するプロセッサが、別の提案された契約をアプリケーションから受信すると、
図5を参照して上述したブロック502において始まって繰り返してよい。
【0089】
保留動作が、予期される順序で実施されると判断したことに応答して(すなわち、任意選択の判断ブロック712=「Yes」)、または保留動作が、事前承認された動作リストに含まれると判断したことに応答して(すなわち、任意選択の判断ブロック714=「Yes」)、契約強制器ユニットを実行するプロセッサは、ブロック716において、アプリケーションが保留動作を実施することを可能にしてよい。ブロック716の動作を実施する際、契約強制器ユニットを実行するプロセッサは、さらなるアクションはとらなくてよく、代わりに、アプリケーションが正常に実施し続けることを許可すればよい。
【0090】
契約強制器ユニットを実行するプロセッサは、判断ブロック718において、受諾された契約を強制し続けるかどうか判断することもできる。一態様において、契約強制器ユニットを実行するプロセッサは、様々な状況において、受諾された契約を強制し続ける必要がない場合がある。たとえば、契約強制器ユニットを実行するプロセッサは、アプリケーションがルートアクセスをもたなくなるまで、またはアプリケーションが終了するまで、上述したように、アプリケーションの保留動作を、受諾された契約に含まれるものと突き合わせてクロスチェックし続ければよい。したがって、契約強制器ユニットを実行するプロセッサが、受諾された契約を強制し続けると判断すると(すなわち、判断ブロック718=「Yes」)、強制器ユニットを実行するプロセッサは、ブロック706において、アプリケーションが次に実施する保留動作を識別することによって始まる上記動作を繰り返せばよい。契約強制器ユニットを実行するプロセッサが、受諾された契約を強制し続けないと判断すると(すなわち、判断ブロック718=「No」)、プロセスは、契約交渉器を実行するプロセッサが別の提案された契約をアプリケーションから受信したとき、
図5を参照して上述した方法500のブロック502において始まって繰り返されてよい。
【0091】
図8Aおよび
図8Bは、一態様による、アプリケーションによって生成された例示的な契約808、814を示す。しばしば、アプリケーションは、アプリケーションが、絶対的確信をもって呼び出す動作を起動時に知ることを不可能にし得る多くの条件付き分岐(たとえば、if/elseステートメント)を含み得る。アプリケーションは、各条件付き分岐に従う契約を作成することができるが、そのような契約は、極めて長く、複雑な場合があり、提案された契約にある動作の実行をシミュレートするとき、契約交渉器ユニットが、各条件付き分岐に従うためにかなりの計算リソースを費やすことを要求する場合がある。したがって、(かなりの量の時間、バッテリ電力、および/または処理リソースを必要とし得る)長い契約をもつ各条件付き分岐を予想しなければならないことを避けるために、さらなる態様は、アプリケーションが、初期/事前に受諾された契約を、ランタイム中に選択された特定の条件付き分岐における動作を含むように修正することを可能にする、以下で説明する機構を実装する。
【0092】
図8Aに示すように、アプリケーション802(すなわち、「Conditional_App.c」)は、
図4Aおよび
図4Bを参照して上述したように、アプリケーションがルート/スーパーユーザとして実施する予定の様々な動作を含み得る。たとえば、アプリケーション802は、ファイルを開き(すなわち、オープン動作804a)、ファイルの一部を読み取り(すなわち、読取り動作804b)、ファイルを閉じる(すなわち、クローズ動作804c)ためのシステム呼出しを実施するのにルートアクセスを必要とし得る。
【0093】
さらに、アプリケーション802は分岐動作806のセットを含むことができ、アプリケーション802は、ランタイム中のどこか後の時点までに実行される、分岐動作806のセット中の特定の動作を判断することができない場合がある。たとえば、
図8Aに示すように、アプリケーション802は、判断動作「if(buf[0]=='A')」の出力結果に依存して、「ioctl(...)」動作または「sendto(...)」動作のいずれかを実施することができる。分岐動作806のセット中の動作がランタイム中に実行される不確実性により、アプリケーション802は、アプリケーション802がスーパー/ルートユーザとして実行したいか、または実行する必要があり得るすべての動作を含むわけではない初期契約808を生成してよい。たとえば、初期契約808は、オープン動作804a、読取り動作804b、およびクローズ動作804c、ならびに動作804a〜804cの各々に関連付けられたパラメータおよびデータを含むだけでよく、というのは、アプリケーション802は、それらの動作を起動時に実施することを知っているからである。
【0094】
初期契約808を生成した後、アプリケーション802は、初期契約808を契約交渉器ユニットに渡せばよく、交渉器ユニットを実行するプロセッサは、
図6を参照して上述したように、初期契約808を受諾するか、それとも拒否するか判断することができる。契約交渉器ユニットを実行するプロセッサが初期契約808を受諾すると、契約強制器ユニットを実行するプロセッサは、
図7を参照して記載したように、初期契約808を強制することができる。
【0095】
図8Bに示すように、初期契約808が受諾されているとともに現時点で強制されていると仮定すると、アプリケーション802を実行するプロセッサは、アプリケーション802が実施する予定の、分岐動作806のセット中の1つまたは複数の動作(たとえば、プログラムのelse分岐中の送付動作812)を決定済みである場合がある。実行される予定の1つまたは複数の分岐動作のアイデンティティを解決したことに応答して、アプリケーション802を実行するプロセッサは、初期契約808中の動作ならびに実行される予定の1つまたは複数の分岐動作を含む修正された契約814を生成することができる。したがって、
図8Bに示す修正された契約814は、初期契約808に含まれる動作804a〜804cについてのエントリ、ならびに送付動作812についてのエントリ816を含み得る。一態様において、修正された契約814は、修正された契約814中に含まれる動作についての、更新された実行順序を含み得る。たとえば、送付動作812についてのエントリ816は、読取り動作804bについてのエントリとクローズ動作804cについてのエントリとの間に置くことができ、というのは、アプリケーション802は、それらの2つの動作804b、804cの間に送付動作812を実行する予定であるからである。アプリケーション802を実行するプロセッサは次いで、修正された契約814を契約交渉器ユニットに送ってよい。
【0096】
修正された契約814を受信した後、契約交渉器ユニットを実行するプロセッサは、
図9を参照して以下でさらに説明するように、修正された契約814にある動作を実行すると、悪意のある挙動を引き起こすかどうか(すなわち、修正された契約を受諾するかどうか)判断することができる。契約交渉器ユニットを実行するプロセッサが、修正された契約814を受諾すると、契約交渉器を実行するプロセッサは、その契約を、強制するために契約強制器ユニットに送ることができる。契約強制器ユニットを実行するプロセッサは、初期契約808を強制するのを停止し、修正された契約814を強制し始めてよい。一態様において、契約強制器ユニットは、
図7を参照して上述したように、修正された契約814を強制すればよい。
【0097】
図9は、事前に受諾された契約を修正するかどうか判断するための、コンピューティングデバイスプロセッサ上で実装することができる態様方法900を示す。方法900の動作は、
図5を参照して上述した方法500の動作の態様を実装し、プロセスは、契約交渉器ユニットが、方法500のブロック506において契約を受諾した後に始まり得る。
【0098】
図8Aおよび
図8Bを参照して上述したように、アプリケーションは、すべての実行シナリオを占める単一の、極めて大規模であり複雑な契約を生成するよりもむしろ、事前に受諾された契約を、アプリケーションがルート/スーパーユーザとして実施したい可能性がある追加動作を含むように絶えず修正してよい。このより簡単なプロセスを容易にするために、契約交渉器ユニットを実行するプロセッサは、本明細書に記載するように、事前に受諾された契約に対する修正が、悪意のある挙動を引き起こすかどうか判断することができる。
【0099】
判断ブロック902において、契約交渉器ユニットを実行するプロセッサは、事前に受諾された契約と置き換えるための修正された契約を、アプリケーションから受信したかどうか判断することができる。いくつかのアプリケーションが条件付き分岐をもたない(たとえば、単純なアプリケーション)場合があるので、すべてのアプリケーションが、その契約を修正しようと試み得るわけではない。契約交渉器ユニットを実行するプロセッサが、修正された契約を受信していないと判断すると(すなわち、判断ブロック902=「No」)、交渉器ユニットを実行するプロセッサは、修正された契約を受信したと認識するまで、判断ブロック902における動作を繰り返してよい。
【0100】
契約交渉器ユニットを実行するプロセッサが、修正された契約を受信したと判断すると(すなわち、判断ブロック902=「Yes」)、交渉器ユニットを実行するプロセッサは、
図6を参照して上述したように、ブロック604において、コンピューティングデバイスの現在の構成を判断することができる。言い換えると、契約交渉器ユニットを実行するプロセッサは、交渉器ユニットを実行するプロセッサがアプリケーションの元の契約を受諾したときなど、より早い時点におけるデバイスの構成を使うよりもむしろ、コンピューティングデバイスの現在の構成を取得し、使用すればよい。
【0101】
ブロック904において、契約交渉器ユニットを実行するプロセッサは、事前に受諾された契約における、アプリケーションが実施した最後の動作を判断することができる。一態様において、契約に含まれる動作は、アプリケーションがそれらの動作を実施する順序で列挙されてよい。したがって、アプリケーションが、修正された契約を承認のために契約交渉器ユニットに提出すると、アプリケーションが実施した最後の動作の後、修正された契約にある追加動作が発生し得る。したがって、契約交渉器ユニットを実行するプロセッサは、ブロック906および908を参照して以下でさらに説明するように、修正された契約にある動作が悪意のある挙動を引き起こすかどうかを交渉器ユニットが判断することを可能にするために、修正された契約における「開始点」を判断する必要があり得る。ブロック904の動作を実施する際、契約交渉器ユニットを実行するプロセッサは、契約強制器ユニットを実行するプロセッサがその強制動作の一部として維持することができる、アプリケーションが実施した最後の動作のポインタまたは何らかの他の指示を参照することができる。
【0102】
ブロック906において、契約交渉器ユニットを実行するプロセッサは、ブロック904において判断された最後に実施された動作から始まる、修正された契約に含まれる動作の修正されたセットを、コンピューティングデバイスの現在の構成に適用してよい。一態様において、契約交渉器ユニットを実行するプロセッサは、
図6を参照して記載した方法600の606において上述したように、修正された契約にある動作の実行をシミュレートし、それらの動作を実行すると、コンピューティングデバイスの現在の構成を表す1つまたは複数の挙動ベクトルにどのように影響するかを監視することができる。別の態様では、契約交渉器ユニットを実行するプロセッサは、事前に受諾された契約の最後に実施された動作の後に始動するので、交渉器ユニットを実行するプロセッサは、最後に実施された動作の後に列挙される、修正された契約にある動作の実行をシミュレートするだけであり得る。
【0103】
契約交渉器ユニットを実行するプロセッサは次いで、判断ブロック908において、コンピューティングデバイスの現在の構成に動作の修正されたセットを適用すると、悪意のある挙動をもたらすかどうか判断することができる。
図6を参照して記載した方法600の判断ブロック608に関連して上述したように、修正された契約にある各動作の実行をシミュレートした後、契約交渉器ユニットを実行するプロセッサは、コンピューティングデバイスの予測される今後の構成を表す1つまたは複数の挙動ベクトルを、良性または悪意のあるものと分類することができ、そうすることによって、契約交渉器ユニットが、動作の修正されたセットを実行すると、それらの実行中のいずれかの時点において、悪意のある挙動を引き起こすかどうか判断することを可能にする。
【0104】
契約交渉器ユニットを実行するプロセッサが、動作の修正されたセットをコンピューティングデバイスの現在の構成に適用すると、悪意のある挙動をもたらすと判断すると(すなわち、判断ブロック908=「Yes」)、交渉器ユニットを実行するプロセッサは、ブロック910において、修正された契約を拒否してよく、そうすることによって、アプリケーションが、やはり事前に受諾された契約に含まれない動作を実行するのを防止する。一態様において、アプリケーションを実行するプロセッサは、事前に受諾された契約にある動作を実行し続けてよく、契約強制器ユニットは、事前に受諾された契約を強制し続けてよい。
【0105】
任意選択の態様において、作動器ユニットを実行するプロセッサは、修正された契約の、契約交渉器ユニットの拒否に応答して、任意選択のブロック914において、たとえばアプリケーションを終了または阻止することによって、アプリケーションが実行するのを防止することができる。そのような態様において、契約交渉器ユニットを実行するプロセッサは、修正された契約を受諾するかどうか判断している間を含めて、承認プロセス中に任意の悪意のある挙動が検出されたときはいつでも、アプリケーションがルートコマンドを実行するのを阻止することができ、またはアプリケーションを終了させることができる。別の態様では、契約交渉器ユニットを実行するプロセッサは、別の修正された契約をアプリケーションから受信したかどうか判断することによって判断ブロック902において始まる上記動作を繰り返すことができる。
【0106】
契約交渉器ユニットを実行するプロセッサが、動作の修正されたセットをコンピューティングデバイスの現在の構成に適用しても悪意のある挙動をもたらさないと判断すると(すなわち、判断ブロック908=「No」)、交渉器ユニットを実行するプロセッサは、ブロック912において、修正された契約を受諾してよい。契約交渉器ユニットを実行するプロセッサは、ブロック916において、事前に受諾された契約を更新する/受諾された修正契約で置き換えることもできる。言い換えると、契約交渉器ユニットを実行するプロセッサは、契約強制器ユニットを実行するプロセッサに、事前に受諾された契約を強制するのを停止するよう、および受諾された修正契約を強制し始めるようシグナリングしてよい。別の態様では、契約強制器ユニットを実行するプロセッサは、強制器ユニットを実行するプロセッサが事前に受諾された契約を強制するのを停止した時点から、受諾された修正契約を強制し始めることができる(すなわち、強制器ユニットは、順序付けられた動作リストの中の場所を失うことなく、修正された契約の強制に、シームレスに遷移することができる)。契約強制器ユニットを実行するプロセッサは次いで、
図5を参照して上述した方法500のブロック508において、受諾された修正契約を強制し始めることができる。
【0107】
様々な態様は、様々なコンピューティングデバイスのいずれにも実装することができ、その一例が
図10に示される。コンピューティングデバイス1000は、タッチスクリーンコントローラ1004および内部メモリ1006に結合されたプロセッサ1002を含む場合がある。プロセッサ1002は、汎用または特定の処理タスクに指定された1つもしくは複数のマルチコア集積回路であってもよい。内部メモリ1006は揮発性もしくは不揮発性メモリであってもよく、また、安全保護および/もしくは暗号化メモリであっても、または非安全保護および/もしくは非暗号化メモリであっても、あるいはそれらの任意の組合せであってもよい。タッチスクリーンコントローラ1004およびプロセッサ1002は、抵抗感知タッチスクリーン、容量感知タッチスクリーン、赤外線感知タッチスクリーンなどの、タッチスクリーンパネル1012に結合される場合もある。加えて、コンピューティングデバイス1000のディスプレイは、タッチスクリーン機能を有する必要はない。
【0108】
コンピューティングデバイス1000は、互いに結合され、かつ/またはプロセッサ1002に結合された、通信を送信および受信するための1つまたは複数の無線信号トランシーバ1008(たとえば、Peanut、Bluetooth(登録商標)、Zigbee、Wi-Fi、RF無線など)と、アンテナ1010とを有する場合がある。トランシーバ1008およびアンテナ1010は、様々なワイヤレス送信のプロトコルスタックおよびインターフェースを実装するために、上述の回路とともに使用される場合がある。コンピューティングデバイス1000は、セルラーネットワークを介する通信を可能にし、プロセッサに結合されたセルラーネットワークワイヤレスモデムチップ1016を含む場合がある。
【0109】
コンピューティングデバイス1000は、プロセッサ1002に結合された周辺デバイス接続インターフェース1018を含む場合がある。周辺デバイス接続インターフェース1018は、1つのタイプの接続を受け入れるように単独で構成される場合があるか、または、USB、FireWire、Thunderbolt、もしくはPCIeなどの様々なタイプの物理接続および通信接続を共通もしくはプロプライエタリに受け入れるように、構成される場合がある。周辺デバイス接続インターフェース1018は、単独で構成された周辺デバイス接続ポート(図示せず)に結合される場合もある。
【0110】
コンピューティングデバイス1000は、オーディオ出力を提供するためのスピーカー1014を含む場合もある。コンピューティングデバイス1000は、本明細書で説明された構成要素のすべてまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構築された筐体1020を含む場合もある。コンピューティングデバイス1000は、使い捨てまたは充電可能なバッテリなどの、プロセッサ1002に結合された電源1022を含む場合もある。充電可能なバッテリは、コンピューティングデバイス1000の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートに結合される場合もある。コンピューティングデバイス1000は、ユーザ入力を受け取るための物理ボタン1024を含む場合もある。コンピューティングデバイス1000は、コンピューティングデバイス1000をオンオフするための電源ボタン1026を含む場合もある。
【0111】
上述された様々な態様はまた、
図11に示されたラップトップコンピュータ1100などの様々なモバイルコンピューティングデバイス内に実装される場合がある。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとして働くタッチパッドのタッチ面1117を含み、したがって、タッチスクリーンディスプレイを装備した上述のコンピューティングデバイス上で実装されるものと同様のドラッグジェスチャ、スクロールジェスチャ、およびフリックジェスチャを受信することができる。ラップトップコンピュータ1100は通常、揮発性メモリ1112、およびフラッシュメモリのディスクドライブ1113などの大容量不揮発性メモリに結合されたプロセッサ1111を含む。加えて、コンピュータ1100は、プロセッサ1111に結合されたワイヤレスデータリンクおよび/または携帯電話トランシーバ1116に接続され得る、電磁放射を送受信するための1つまたは複数のアンテナ1108を有する場合がある。コンピュータ1100は、プロセッサ1111に結合されたフロッピーディスクドライブ1114およびコンパクトディスク(CD)ドライブ1115を含む場合もある。ノートブック構成では、コンピュータの筐体は、すべてがプロセッサ1111に結合された、タッチパッド1117、キーボード1118、およびディスプレイ1119を含む。コンピューティングデバイスの他の構成には、よく知られているように、(たとえば、USB入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールが含まれ得るし、それらは様々な態様と連携して使用される場合もある。
【0112】
様々な態様の動作を遂行するためにプログラマブルプロセッサ上で実行されるコンピュータプログラムコードすなわち「プログラムコード」は、C、C++、C#、Smalltalk、Java(登録商標)、JavaScript(登録商標)、Visual Basic、Structured Query Language(たとえば、Transact-SQL)、Perlなどの高水準プログラミング言語で、または様々な他のプログラミング言語で書かれ得る。本出願で使用されるように、コンピュータ可読記憶媒体に記憶されるプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能である(オブジェクトコードなどの)機械語コードを指す場合がある。
【0113】
多くのコンピューティングデバイスのオペレーティングシステムのカーネルは、(非特権コードが動作する場合)ユーザ空間へと編成され、(特権コードが動作する場合)カーネル空間へと編成される。この分離は、カーネル空間の一部であるコードがGPL許諾される必要がある一方で、ユーザ空間内で動作するコードがGPL許諾されなくてもよい、Android(登録商標)および他の一般公有使用許諾(GPL)環境において特に重要である。本明細書で説明された様々なソフトウェア構成要素/ユニットは、明示的に別段の記述がない限り、カーネル空間またはユーザ空間のいずれかに実装され得ることを理解されたい。
【0114】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な態様のステップが提示された順序で実施されなければならないことを要求または意味するものではない。当業者によって諒解されるように、上記の態様におけるステップの順序は、いかなる順序で実施されてもよい。「したがって」、「次いで」、「次に」、などのような単語は、ステップの順序を限定することを意図しておらず、これらの単語は、単に、方法の説明を通じて読者を導くために使用される。さらに、たとえば冠詞「a」、「an」、または「the」を用いる、請求項要素に対する単数での任意の参照は、要素を単数に限定すると解釈されるべきではない。
【0115】
本出願で使用されるように、「構成要素」、「モジュール」、「システム」、「エンジン」、「生成器」、「ユニット」、「マネージャ」などの用語は、限定はしないが、特定の動作または機能を実施するように構成された、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアなどのコンピュータ関連のエンティティを含むものとする。たとえば、構成要素は、限定はしないが、プロセッサ上で動作しているプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、および/またはコンピュータであり得る。例として、コンピューティングデバイス上で稼働しているアプリケーションとコンピューティングデバイスの両方は、構成要素と呼ばれる場合がある。1つまたは複数の構成要素は、プロセスおよび/もしくは実行スレッドの中に存在する場合があり、1つの構成要素は、1つのプロセッサもしくはコアに局在する場合があり、かつ/または2つ以上のプロセッサもしくはコアの間に分散する場合がある。加えて、これらの構成要素は、様々な命令および/またはデータ構造を記憶している様々な非一時的コンピュータ可読媒体から実行することができる。構成要素は、ローカルプロセスおよび/またはリモートプロセス、関数呼出しまたはプロシージャ呼出し、電子信号、データパケット、メモリ読出し/書込み、ならびに他の知られているネットワーク、コンピュータ、プロセッサ、および/またはプロセス関連の通信方法によって通信することができる。
【0116】
本明細書で開示された態様に関して記載された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装される場合がある。ハードウェアおよびソフトウェアのこの互換性を明確に説明するために、上記では、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、それらの機能性に関して概略的に説明した。そのような機能がハードウェアとして実装されるか、それともソフトウェアといて実装されるかは、特定の応用分野およびシステム全体に対して課される設計制約に依存する。当業者は、説明された機能を各々の特定の応用分野について様々な方式で実装し得るが、そのような実装判断は、本開示の範囲からの逸脱を引き起こすと解釈されるべきではない。
【0117】
本明細書に開示された態様に関して記載された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェア構成要素、または、本明細書に記載された機能を実施するように設計されたそれらの任意の組合せで、実装または実施され得る。汎用プロセッサはマルチプロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサは、コンピューティングデバイスの組合せ、たとえば、DSPとマルチプロセッサとの組合せ、複数のマルチプロセッサ、DSPコアと連携する1つもしくは複数のマルチプロセッサ、または任意の他のそのような構成として実装される場合もある。代替として、いくつかのステップまたは方法は、所与の機能に特有の回路によって実施される場合がある。
【0118】
1つまたは複数の例示的な態様では、説明される機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、非一時的コンピュータ可読媒体上または非一時的プロセッサ可読媒体上の1つまたは複数の命令またはコードとして記憶されてもよい。本明細書で開示する方法またはアルゴリズムのステップは、非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体上に常駐する場合があるプロセッサ実行可能ソフトウェアモジュール内で具現化されてもよい。非一時的なコンピュータ可読またはプロセッサ可読の記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得る任意の記憶媒体であり得る。限定ではなく例として、そのような非一時的なコンピュータ可読またはプロセッサ可読の媒体は、RAM、ROM、EEPROM、FLASHメモリ、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用され得るし、コンピュータによってアクセスされ得る任意の他の媒体を含む場合がある。本明細書で使用する場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク(登録商標)、光ディスク、デジタル多用途ディスク(DVD)、フロッピーディスク、およびブルーレイディスクを含み、ディスク(disk)は、通常、磁気的にデータを再生するが、ディスク(disc)は、レーザーで光学的にデータを再生する。上記の組合せも、非一時的コンピュータ可読媒体およびプロセッサ可読媒体の範囲内に含まれる。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、非一時的プロセッサ可読媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の、1つまたは任意の組合せ、またはそのセットとして存在し得る。
【0119】
開示された態様の上記の説明は、任意の当業者が本発明を作成または使用することができるように提供される。これらの態様に対する様々な修正は、当業者には容易に明らかであり、本明細書で定義された一般的な原理は、本発明の要旨または範囲から逸脱することなく、他の態様に適用される場合がある。したがって、本発明は、本明細書に示された態様に限定されるものではなく、以下の特許請求の範囲、ならびに、本明細書で開示された原理および新規の特徴と一致する最も広い範囲を与えられるべきである。
様々な態様は、デバイス上で実行中であるとともにルートアクセスを求めるアプリケーションが、ルートアクセスを受け取った後の間、悪意のある挙動を引き起こさないことを保証するためにデバイスによって実装されるコンピューティングデバイスおよび方法を提供する。アプリケーションにルートアクセスを与える前に、コンピューティングデバイスは、アプリケーションがルートアクセスを有する間に実行する予定の動作を識別し、動作の実行をシミュレートすることによって、動作を実行すると悪意のある挙動を引き起こすかどうか判断し、それらの動作を実行しても悪意のある挙動をもたらさないと判断した後、それらの動作を事前承認することができる。さらに、アプリケーションにルートアクセスを与えた後、コンピューティングデバイスは、アプリケーションがそれらの動作を実施することを許可する前に、アプリケーションの保留動作を事前承認された動作と突き合わせて迅速にチェックすることによって、アプリケーションが、事前承認された動作を実施することを許可するだけでよい。したがって、様々な態様は、コンピューティングデバイスの性能もセキュリティ完全性も損なうことなく、アプリケーションがルートアクセスを受け取ることを保証することができる。