(57)【特許請求の範囲】
【請求項１】
モバイルデバイス上で実行されるダイバーシティベースのソフトウェアの動的パッチングのための方法であって、
前記モバイルデバイスのトランシーバによって、モジュール変形形態を識別する1つまたは複数の識別子を含む通知を取得するステップであって、前記識別されたモジュール変形形態のうちの1つまたは複数が、前記モバイルデバイス上で実行される前記ソフトウェアのための前記モバイルデバイス上に記憶される、ステップと、
前記モバイルデバイスのプロセッサによって、前記通知を取得したことに応答して、モジュールについての利用可能なモジュール変形形態のリストから前記1つまたは複数の識別子によって識別されるモジュール変形形態を削除するステップであって、前記利用可能なモジュール変形形態のリストのうちの1つが、前記ソフトウェアのランタイム時に前記プロセッサによって前記モジュールとしてランダム選択によりアクティブ化される、ステップと、
前記モバイルデバイスの前記プロセッサによって、前記アクティブ化されたモジュール変形形態がランタイム時にエラーに遭遇したかどうかを判断するステップと、
前記モバイルデバイスのトランシーバによって、前記アクティブ化されたモジュール変形形態がランタイム時にエラーに遭遇したと判断したことに応答して、前記アクティブ化されたモジュール変形形態の識別子を含む報告をリモートサーバに送信するステップと
を含む方法。
【請求項２】
前記通知が、前記リモートサーバから前記モバイルデバイスによって受信される、請求項1に記載の方法。
【請求項３】
前記モジュール変形形態が、欠陥がある、古い、およびマルウェアによってエクスプロイトされるものとして識別される、のうちの1つである、請求項1に記載の方法。
【請求項４】
前記プロセッサによって、前記ソフトウェアのランタイム時に前記モジュールについての前記利用可能なモジュール変形形態のリストから第1の識別子を選択するステップと、
前記プロセッサによって、前記ソフトウェアのランタイム中に前記モジュールとして使用されるべき、前記選択された第1の識別子に関連付けられた利用可能なモジュール変形形態をアクティブ化するステップと
をさらに含む、請求項1に記載の方法。
【請求項５】
前記プロセッサによって、前記ソフトウェアのランタイム時に前記モジュールについての前記利用可能なモジュール変形形態のリストから前記第1の識別子を選択するステップが、
前記プロセッサによって、ランダム選択アルゴリズムを使用して、前記利用可能なモジュール変形形態のリストから前記第1の識別子を選択するステップ
を含む、請求項4に記載の方法。
【請求項６】
前記プロセッサによって、前記ソフトウェアのランタイム中に前記モジュールとして使用されるべき、前記選択された第1の識別子に関連付けられた前記利用可能なモジュール変形形態をアクティブ化するステップが、
前記プロセッサによって、前記ソフトウェアのランタイム時に前記利用可能なモジュール変形形態を生成するステップであって、前記モジュール変形形態が、前記取得された1つまたは複数の識別子によって識別される、ステップ、および
前記プロセッサによって、前記ソフトウェアのランタイム時に、以前に生成され、前記モバイルデバイス上に記憶された利用可能なモジュール変形形態をロードするステップであって、前記モジュール変形形態が、前記取得された1つまたは複数の識別子によって識別される、ステップ
のうちの1つを含む、請求項4に記載の方法。
【請求項７】
前記モジュールが、ランタイム時に前記ソフトウェアによって利用される複数のモジュールのうちの1つであり、前記方法が、
前記プロセッサによって、前記ソフトウェアのランタイム時に前記複数のモジュール中の他のモジュールに関連付けられた利用可能なモジュール変形形態のリストから識別子を選択するステップと、
前記プロセッサによって、前記ソフトウェアのランタイム中に前記他のモジュールとして使用されるべき、前記選択された識別子に関連付けられた前記複数のモジュール中の前記他のモジュールについての利用可能なモジュール変形形態をアクティブ化するステップと
をさらに含む、請求項4に記載の方法。
【請求項８】
前記通知が、前記ソフトウェアのランタイム中に前記モバイルデバイスによって受信される、請求項1に記載の方法。
【請求項９】
コンピューティングデバイスであって、
モジュール変形形態を識別する1つまたは複数の識別子を含む通知を取得するための手段であって、前記識別されたモジュール変形形態のうちの1つまたは複数が、前記コンピューティングデバイス上で実行されるソフトウェアのためのモバイルデバイス上に記憶される、手段と、
前記通知を取得したことに応答して、モジュールについての利用可能なモジュール変形形態のリストから前記1つまたは複数の識別子によって識別されるモジュール変形形態を削除するための手段であって、前記利用可能なモジュール変形形態のリストのうちの1つが、前記ソフトウェアのランタイム時にプロセッサによって前記モジュールとしてランダム選択によりアクティブ化される、手段と、
前記アクティブ化されたモジュール変形形態がランタイム時にエラーに遭遇したかどうかを判断するための手段と、
前記アクティブ化されたモジュール変形形態がランタイム時にエラーに遭遇したと判断したことに応答して、前記アクティブ化されたモジュール変形形態の識別子を含む報告をリモートサーバに送信するための手段と
を備えるコンピューティングデバイス。
【請求項１０】
前記通知が、前記リモートサーバから前記コンピューティングデバイスによって受信される、請求項9に記載のコンピューティングデバイス。
【請求項１１】
前記モジュール変形形態が、欠陥がある、古い、およびマルウェアによってエクスプロイトされるものとして識別される、のうちの1つである、請求項9に記載のコンピューティングデバイス。
【請求項１２】
前記ソフトウェアのランタイム時に前記モジュールについての前記利用可能なモジュール変形形態のリストから第1の識別子を選択するための手段と、
前記ソフトウェアのランタイム中に前記モジュールとして使用されるべき、前記選択された第1の識別子に関連付けられた利用可能なモジュール変形形態をアクティブ化するための手段と
をさらに備える、請求項9に記載のコンピューティングデバイス。
【請求項１３】
前記ソフトウェアのランタイム時に前記モジュールについての前記利用可能なモジュール変形形態のリストから前記第1の識別子を選択するための手段が、ランダム選択アルゴリズムを使用して、前記利用可能なモジュール変形形態のリストから前記第1の識別子を選択するための手段を備える、請求項12に記載のコンピューティングデバイス。
【請求項１４】
前記ソフトウェアのランタイム中に前記モジュールとして使用されるべき、前記選択された第1の識別子に関連付けられた前記利用可能なモジュール変形形態をアクティブ化するための手段が、
前記ソフトウェアのランタイム時に前記利用可能なモジュール変形形態を生成するための手段であって、前記モジュール変形形態が、前記取得された1つまたは複数の識別子によって識別される、手段、および
前記ソフトウェアのランタイム時に、以前に生成され、前記コンピューティングデバイス上に記憶された利用可能なモジュール変形形態をロードするための手段であって、前記モジュール変形形態が、前記取得された1つまたは複数の識別子によって識別される、手段
のうちの1つを備える、請求項12に記載のコンピューティングデバイス。
【請求項１５】
コンピューティングデバイスのプロセッサに請求項１から８のいずれか一項に記載の方法に従う動作を実施させるように構成されたプロセッサ実行可能命令を記憶したプロセッサ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の態様は、ダイバーシティベースのソフトウェアセキュリティのための動的パッチングに関する。
【背景技術】
【０００２】
今日の大半のマルウェアは、特定のソフトウェアにおける既知の脆弱性をエクスプロイトするルート「ファミリー」の変種である。たとえば、異なるマルウェア変種は、特定のオペレーティングシステムバージョン、ファームウェア、または実装形態内の欠陥、構造、特異性、またはバグをとらえることができる。しばしば、マルウェアは、「アプリ」ストアからダウンロードされるソフトウェアなどのリモートソースとのネットワーキング接続によって、および/またはデバイス間通信(たとえば、ショートメッセージサービス(SMS)テキストメッセージング、電子メールなど)を介して、コンピューティングデバイスに拡散する。モバイルデバイスは通常、モジュール式で本質的に多様であり、様々なチップ、ドライバ、および周辺装置をサポートするために個別ソフトウェア(たとえば、プラグアンドプレイ(plug-n-play))を利用するにもかかわらず、マルウェアは、モバイルデバイス業界において非常に蔓延している。感染したデバイスからマルウェアを削除するかまたは無効にするための従来のソフトウェアパッチは、市場に本格展開されるのに何カ月も(たとえば、15〜20カ月)または何年もかかる場合がある。たとえば、コード修正、ファームウェアアップグレード、および/またはモジュール更新は、エンドユーザデバイスにおいて受け取られる前に、様々な当事者によって制作され、試験され、承認され、出荷される必要がある。加えて、そのようなパッチングは高価であり、モバイルデバイスが、コードの冗長なまたは不要なコピーをダウンロードし、インストールすることによって、そのリソースおよび接続性に負担をかけることを必要とする場合がある。
【発明の概要】
【課題を解決するための手段】
【０００３】
様々な実施形態は、モバイルデバイス上で実行されるダイバーシティベースのソフトウェアの動的パッチングのための方法、システム、デバイス、および非一時的プロセッサ可読記憶媒体を提供する。一実施形態方法は、ソフトウェアのためのモジュールとして使用されるべきではないモジュール変形形態を示す通知を取得するステップと、通知を取得したことに応答して、モジュールについての利用可能なモジュール変形形態のリストからモジュール変形形態を削除するステップであって、利用可能なモジュール変形形態のリストのうちの1つが、ソフトウェアのランタイム時にモバイルデバイスプロセッサによってモジュールとしてアクティブ化される、ステップとを含み得る。様々な実施形態は、各々がダイバーシティを提供するための複数のモジュール変形形態を有する、ソフトウェアにおいて使用される任意の数の異なるダイバーシティベースのモジュールを用いて実装され得る。いくつかの実施形態では、通知は、リモートサーバからモバイルデバイスによって受信され得る。いくつかの実施形態では、通知は、ソフトウェアによってモジュールとして使用されることが可能なデータまたは実行可能コードを含まない場合がある。いくつかの実施形態では、モジュール変形形態は、欠陥がある、古い、またはマルウェアによってエクスプロイトされるものとして識別される場合がある。いくつかの実施形態では、通知は、ソフトウェアのランタイム中にモバイルデバイスによって受信され得る。
【０００４】
いくつかの実施形態では、方法は、ソフトウェアのランタイム時にモジュールについての利用可能なモジュール変形形態のリストから第1の識別子を選択するステップと、ソフトウェアのランタイム中にモジュールとして使用されるべき、選択された第1の識別子に関連付けられた利用可能なモジュール変形形態をアクティブ化するステップとをさらに含み得る。いくつかの実施形態では、ソフトウェアのランタイム時にモジュールについての利用可能なモジュール変形形態のリストから第1の識別子を選択するステップは、ランダム選択アルゴリズムを使用して、利用可能なモジュール変形形態のリストから第1の識別子を選択するステップを含み得る。いくつかの実施形態では、ソフトウェアのランタイム中にモジュールとして使用されるべき、選択された第1の識別子に関連付けられた利用可能なモジュール変形形態をアクティブ化するステップは、ソフトウェアのランタイム時に利用可能なモジュール変形形態を生成するステップ、または、ソフトウェアのランタイム時に、事前生成された利用可能なモジュール変形形態をロードするステップを含み得る。
【０００５】
いくつかの実施形態では、モジュールは、ランタイム時にソフトウェアによって利用される複数のモジュールのうちの1つであり得、一実施形態方法は、ソフトウェアのランタイム時に複数のモジュール中の他のモジュールに関連付けられた利用可能なモジュール変形形態のリストから識別子を選択するステップと、ソフトウェアのランタイム中に他のモジュールとして使用されるべき、選択された識別子に関連付けられた複数のモジュール中の他のモジュールについての利用可能なモジュール変形形態をアクティブ化するステップとをさらに含み得る。
【０００６】
さらなる実施形態は、上記で説明した方法の動作を実施するためのプロセッサ実行可能命令で構成されたモバイルコンピューティングデバイスを含む。さらなる実施形態は、モバイルコンピューティングデバイスに上記で説明した方法の動作を実施させるように構成されたプロセッサ実行可能命令が記憶されている、非一時的プロセッサ可読媒体を含む。さらなる実施形態は、上記で説明した方法の動作を実施するためのプロセッサ実行可能命令で構成された複数のモバイルコンピューティングデバイスを含む通信システムを含む。
【０００７】
本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、本発明の例示的な実施形態を示し、上記の一般的な説明および下記の詳細な説明とともに、本発明の特徴を説明するのに役立つ。
【図面の簡単な説明】
【０００８】
【図１】様々な実施形態において使用するのに好適な、サーバに関連付けられたソフトウェアを実行するように構成された複数のモバイルデバイスを含む通信システムの構成要素ブロック図である。
【図２Ａ】様々な実施形態において使用するのに好適な、インストールされたソフトウェアのランタイム時にモジュールを実装するために複数の考えられるモジュール変形形態のうちの1つを利用するように構成された例示的なモバイルデバイスを示す構成要素ブロック図である。
【図２Ｂ】モバイルデバイスがソフトウェアのランタイム時にモジュールの変形形態を利用するための一実施形態方法を示すプロセスフロー図である。
【図２Ｃ】モバイルデバイスが、モジュール変形形態が遭遇した問題を示す報告メッセージを送信するための一実施形態方法を示すプロセスフロー図である。
【図３Ａ】様々な実施形態において使用するのに好適な、障害を受けたモジュール変形形態についての受信された通知に基づいて、ソフトウェアのランタイム時にモジュールを実装するために複数の考えられるモジュール変形形態のうちの1つを利用するように構成された例示的なモバイルデバイスを示す構成要素ブロック図である。
【図３Ｂ】様々な実施形態において使用するのに好適な、障害を受けたモジュール変形形態についての受信された通知に基づいて、ソフトウェアのランタイム時にモジュールを実装するために複数の考えられるモジュール変形形態のうちの1つを利用するように構成された例示的なモバイルデバイスを示す構成要素ブロック図である。
【図４】モバイルデバイスが、ソフトウェアのランタイム時に実装され得るモジュールの考えられるモジュール変形形態の範囲を定めるための通知を受信するための一実施形態方法を示すプロセスフロー図である。
【図５】サーバコンピューティングデバイス(またはサーバ)が、加入者モバイルデバイスによって実行されるソフトウェアのモジュールについての障害を受けたモジュール変形形態に関する通知を送信するための一実施形態方法を示すプロセスフロー図である。
【図６】一実施形態において使用するのに好適なモバイルコンピューティングデバイスの構成要素ブロック図である。
【図７】一実施形態において使用するのに好適なサーバコンピューティングデバイスの構成要素ブロック図である。
【発明を実施するための形態】
【０００９】
添付の図面を参照しながら、様々な実施形態について詳細に説明する。可能な場合はいつでも、同じまたは同様の部分を指すために、図面全体を通して同じ参照番号が使用される。特定の例および実装形態に対してなされる言及は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
【００１０】
「例示的な」という語は、本明細書では、「例、事例、または例示として機能する」ことを意味するために使用される。「例示的な」として本明細書で説明するいかなる実装形態も、必ずしも他の実装形態よりも好ましいか、または有利であると解釈されるべきではない。
【００１１】
「モバイルコンピューティングデバイス」または「モバイルデバイス」という用語は、本明細書では、セルラー電話、スマートフォン(たとえば、iPhone(登録商標))、ウェブパッド、タブレットコンピュータ、インターネット対応セルラー電話、WiFi対応電子デバイス、携帯情報端末(PDA)、ラップトップコンピュータ、パーソナルコンピュータ、および、少なくともプロセッサを装備した同様の電子コンピューティングデバイスのうちの任意の1つまたはすべてを指すために使用される。様々な実施形態では、そのようなコンピューティングデバイスは、ワイドエリアネットワーク(WAN)またはローカルエリアネットワーク(LAN)接続(たとえば、LTE、3Gもしくは4Gワイヤレスワイドエリアネットワークトランシーバ、インターネットへのワイヤード接続、またはWiFi)を確立するためにネットワークトランシーバで構成され得る。
【００１２】
「サーバ」または「サーバコンピューティングデバイス」という用語は、マスタ交換サーバ、ウェブサーバ、メールサーバ、アプリケーションサーバ、ドキュメントサーバ、およびサーバ機能を実行するためのソフトウェアで構成されたパーソナルまたはモバイルコンピューティングデバイス(たとえば、「ライトサーバ」)などの、サーバとして機能することが可能な任意のコンピューティングデバイスを指すために使用される。サーバは、専用コンピューティングデバイスであってもよく、または(たとえば、コンピューティングデバイスをサーバとして動作させることができるアプリケーションを動作させる)サーバソフトウェアを実行するコンピューティングデバイスであってもよい。
【００１３】
「モジュール」という用語は、本明細書では、コンピューティングデバイス上で実行されるソフトウェアの任意のモジュール式構成要素、交換可能な構成要素、および/または個別構成要素を指すために使用される。モジュールは、ソフトウェアの実行中に使用するためにアクティブ化、生成、ロード、実装、および/または他の方法で構成され得る特定の情報、動作、論理、プロセッサ可読/プロセッサ実行可能命令、サブルーチン、アプリケーションプログラミングインターフェース、および/または機能に関連付けられ得る。たとえば、ソフトウェアモジュールは、アプリケーションの動作をサポートするためにアプリケーションによってアクセスされ得るソフトウェアライブラリ(たとえば、動的にリンクされたライブラリなど)、ルーチン、オブジェクト、および/またはデータセットに含まれ得る。モジュールは、コンピューティングデバイス上で実行される個々のアプリケーションによって使用され得る、および/または個々のアプリケーションを実行するために使用されるコンピューティングデバイスのソフトウェアプラットフォーム(たとえば、オペレーティングシステム)によって使用され得る。いくつかの実施形態では、共通(または「ユニバーサル」)モジュールは、コンピューティングデバイス上で実行される様々なソフトウェアによって使用され得る。
【００１４】
一般に、アプリケーションおよびアプリケーションが実行されるオペレーティングシステムなど、現代のコンピューティングデバイスのソフトウェアは、通常、高度なモジュール式およびオブジェクト指向であるように構築される。たとえば、AndroidおよびLinux(登録商標)などのオペレーティングシステムは、コンピューティングプラットフォームの機能的役割を実施するための多数の個別ソフトウェア構成要素またはモジュールを利用する。
【００１５】
モジュールを利用するソフトウェアのセキュリティおよび性能を改善するために、コンピューティングデバイスのモジュラリティを活用するためのソフトウェアダイバーシティ技法が使用され得る。コンピューティングデバイスは、モジュールの様々な変形形態を利用するように構成され得、また、コンピューティングデバイスは、異なる実装形態間で異なるモジュール変形形態を選択的にインストールし、それによって、特定の障害を受けたモジュールが、モバイルデバイスが「ハッキング」されることをもたらし得る可能性を低減し得るので、ソフトウェアダイバーシティはセキュリティを改善することができる。異なるモジュール変形形態は同じ機能を実行し、したがって、コンピューティングデバイスは、モジュール変形形態のいずれかを実装し、完全な操作性を維持し得る。たとえば、コンピューティングデバイスは、ソフトウェアによって使用するための、事前生成されたモジュール変形形態のグループのうちの1つを互換的にインストールし得る。別の例として、コンピューティングデバイスは、特定のソフトウェアモジュール内のコードの小さい部分を自動的に修正する(または自己修正する)ように構成され得る。Androidスマートフォンなどのコンピューティングデバイスのドライバ、周辺装置、およびサブシステムに利用される明確で精確なインターフェース(API)により、ソフトウェアモジュール変形形態のそのような互換性が可能であり得る。
【００１６】
「モジュール変形形態(Module Variation(s))」という用語は、本明細書では、コンピューティングデバイス上で実行されるソフトウェアによって使用されるモジュールの個別の多様な実装形態(またはバージョン)を指すために使用される。特定のモジュールのモジュール変形形態は、異なるようにフォーマットもしくは構築され得る、および/または互いに異なる情報を含み得る。たとえば、第1のモジュールの第1のモジュール変形形態は、一次の命令を利用し得、第1のモジュールの第2のモジュール変形形態は、二次の命令を利用し得る。別の例として、第1のモジュールの第1のモジュール変形形態は、第1のソースコードに基づいて生成され得、第1のモジュールの第2のモジュール変形形態は、第2のソースコードに基づいて生成され得る。同じ特定のモジュールのモジュール変形形態は、同じ機能または動作上の効果を達成するために、ソフトウェアによって同じように使用され得る。たとえば、アプリケーションは、第1の値を受け取るために第1のモジュールの第1のモジュール変形形態から関数を呼び出してもよく、同じ第1の値を受け取るために第1のモジュールの第2のモジュール変形形態からその関数を呼び出してもよい。別の例として、モバイルデバイスは、WiFiモジュールを実装するために第1のモジュール変形形態または第2のモジュール変形形態を利用し得る。
【００１７】
同様でありながら多様な形態のモジュールを含めることによって、ダイバーシティベースのソフトウェアの制御フローは、異なるデバイス上のソフトウェアの異なるインストール間で異なり得る。モジュール変形形態によるこの不一致は、ソフトウェアがエクスプロイト可能な脆弱性を含む可能性を低下させ、したがって、特定のモジュール変形形態を対象とするマルウェアが異なるデバイス上のソフトウェアにおける同じ脆弱性をエクスプロイトするのに成功することをより困難にすることができる。ソフトウェアダイバーシティは、マルウェアを実行し拡散することが可能な障害を受けたデバイスの数を減少させることができるので、様々な接続性(たとえば、SMSを介したハイジャック)を介した他のデバイスへのマルウェアの拡散を妨げることもできる。言い換えれば、意図的に一致しないソフトウェアにより、システム上の脅威(たとえば、マルウェア、ウイルス、プログラミングバグまたは欠陥など)は、ソフトウェアの全部のモジュール変形形態ではなく一部のモジュール変形形態のみに影響を及ぼす場合があり、したがって、不正なコードまたは予期しないプログラミング欠陥がソフトウェアを実行するコンピューティングデバイスのコミュニティに悪影響を及ぼし得る程度が低減され得る。したがって、ランタイム時に特定のモジュール変形形態をランダムに選択するアプリケーションは、そのソフトウェア脆弱性の点で予測不可能であり、それによって、ハッキングおよびエクスプロイテーションに対する保護のレイヤを提供し得る。
【００１８】
様々な実施形態は、もはや使用されるべきではない特定のモジュールをコンピューティングデバイスに知らせ、欠陥があるまたは脆弱性があるモジュールを事実上非アクティブ化することによって、新たに発見されたソフトウェア欠陥および攻撃に対応するためのソフトウェアモジュールに対する効率的でタイムリーな更新を可能にする、ソフトウェアダイバーシティの概念を活用する。様々な実施形態は、コンピューティングデバイスおよびシステム上で実装され、非一時的プロセッサ可読記憶媒体上で記憶され得る、コンピューティングデバイス上で実行されるダイバーシティベースのソフトウェアの動的パッチングのための方法を提供する。コンピューティングデバイス上で実行されるソフトウェアのモジュールのモジュール変形形態のランタイム選択は、ソフトウェアに関連付けられたリモートサーバ(たとえば、開発者または相手先商標製品製造業者(original equipment manufacturer)サーバなど)からまたはコンピューティングデバイス自体の上で実行されるアプリケーションもしくはサービス(たとえば、マルウェア防止ソフトウェアなど)からなど、信頼できる当事者から受信された通知に基づいてインテリジェントに制御され得る。いくつかの実施形態では、コンピューティングデバイスは、欠陥がある、古い、またはさもなければバグを含むことが知られているソフトウェアのモジュールのモジュール変形形態の識別子を示す、相手先商標製品製造業者(OEM)、事業者、信頼できるアプリケーション開発者、企業エンティティ(たとえば、消費者によって使用されているデバイスを所有する会社)、またはセキュリティプロバイダ(たとえば、ウイルス防止ソフトウェアサービスなど)からの通知(たとえば、メッセージ、信号など)を受信し得る。そのような通知は、モジュール変形形態識別子などの軽量通信であり得、実行可能コードまたはデータ、交換モジュールバイナリまたはソースコードの形態のパッチまたは更新されたソフトウェアをアップロードする必要がない。通知を受信したことに応答して、コンピューティングデバイスは、識別されたモジュール変形形態を後続のランタイム選択において使用するのを回避するためのモジュール変形形態選択機構を構成し得る。このようにして、コンピューティングデバイスは、障害を受けたモジュール変形形態を無視するソフトウェアダイバーシティ選択動作を使用することによって、ソフトウェアのランタイム時によりセキュアなモジュールを迅速に実装(たとえば、再ロードまたは再計算)し得る。いくつかの実施形態では、コンピューティングデバイスは、そのような通知に応答して、利用可能なモジュール変形形態のリストから識別子を選択解除し得る。障害を受けたモジュールは、メモリから削除される場合があるか、またはメモリに残され、単にランタイム時に選択されない場合がある。
【００１９】
いくつかの実施形態では、通知は、ソフトウェアのモジュールを実装するために使用され得る、障害を受けていないモジュール変形形態の識別子を含み得る。言い換えれば、選択されるべきではないモジュールを識別する代わりに、通知は、モジュールの識別子のリストを更新し得、そのリストからランタイム時にモジュールが選択され得る。たとえば、通知内の識別子を無視する代わりに、コンピューティングデバイスは、信頼できるリモートサーバによって現在有効であるとして報告されたモジュール変形形態のみを選択し、実装し得る。
【００２０】
ソフトウェアモジュールにおける障害は経時的に発生し、モジュール変形形態は受信された通知に基づいて範囲を定められ得るので、特定のモジュールについての考えられるモジュール変形形態が限定され、コンピューティングデバイス内のソフトウェアダイバーシティの利益を弱める場合がある。たとえば、通知において報告される障害により、コンピューティングデバイスは、ある特定のモジュールの当初の多数のモジュール変形形態のうちの少数から選択することしかできない場合がある。これに対処するために、いくつかの実施形態では、コンピューティングデバイスは、既知の欠陥/バグを含まない、メモリに記憶するための新しいソフトウェアモジュール変形形態を含む周期的なパッチまたはソフトウェア更新をリモートデバイス(たとえば、OEM/開発者サーバなど)から受信し得る。このようにして、ソフトウェアは進化することができ、ソフトウェアダイバーシティの利益は、追加の、障害を受けていないモジュール変形形態をコンピューティングデバイスに継続的に提供することによって維持され得、モジュールは、それらのモジュール変形形態から、そのモジュールを使用する任意のソフトウェアのランタイム時に選択され得る。
【００２１】
いくつかの実施形態では、モジュール変形形態の中からのランタイムモジュール選択は、モジュールまたはモジュールの部分(たとえば、ライブラリなど)をセキュアにアクティブ化する(たとえば、生成するまたはロードする/交換する)ことができる、小型で信頼できる動的ローダ(または選択論理)を介して、コンピューティングデバイスによって達成され得る。
【００２２】
いくつかの実施形態では、そこからソフトウェアのランタイム中に特定のモジュールが選択され得る様々なモジュール変形形態は、事前生成されるかまたは事前計算され得る。たとえば、コンピューティングデバイスは、ソフトウェアスイートまたはシステムを作るときにプログラマによって提供される特定のモジュールについての多くの異なる実装形態のうちの1つをアクティブ化し得る。そのような事前生成されたモジュール変形形態はコンピューティングデバイスにプリロードされ得、したがって、そのような技法はスケーラブルではない場合がある。
【００２３】
いくつかの実施形態では、コンピューティングデバイスは、ランタイム中にまたは周期的にモジュール変形形態を動的に生成するように構成され得る。たとえば、ソフトウェアのランタイム時に、選択されたモジュール変形形態に基づいて、コンピューティングデバイスは、特定のモジュールの新しい実装形態を作成するために、コードを自己修正するための既知の技法を利用し得る。
【００２４】
いくつかの実施形態では、コンピューティングデバイスは、ランダム選択ポリシーに基づいて、ランタイム時に使用するためのいくつかのモジュール変形形態から特定のモジュールを選択するように構成され得る。たとえば、コンピューティングデバイスは、WiFiモジュールのある特定の実装形態を選ぶためのランダム選択機構を使用し得る。アプリケーションが実行されるときに実装される特定のモジュールは予測不可能であり得るので、そのようなランダム選択機構は、マルウェア設計者にとって考慮するのが最も難しいものであり得る。いくつかの実施形態では、コンピューティングデバイスは、特定のモジュール変形形態がソフトウェアによって使用された回数、モジュール変形形態の複雑性、障害を受けたモジュール変形形態に対する特定のモジュールの類似性、ソフトウェアの他のモジュールのすでに選択されたモジュール変形形態に対する特定のモジュールの類似性、および各々を多かれ少なかれ欠陥があるまたはさもなければ障害を受けたものにする可能性があり得るモジュール変形形態の他の特性など、コンピューティングデバイスおよび/またはソフトウェアがアクセスしやすい他の情報に基づいてモジュール変形形態を選択し得る。
【００２５】
実施形態技法は、コンピューティングデバイスが、ソフトウェアの障害を受けたモジュールを克服するためのソフトウェアダウンロードまたは他のコストがかかる動作を要求および/または処理することを必要としない、パッチングを可能にする。代わりに、サーバは単に、欠陥があるモジュール変形形態の識別子をコンピューティングデバイスに通知する。次いで、モジュールを実装するソフトウェアが実行されると、コンピューティングデバイスは、識別された欠陥があるまたは障害を受けたモジュールを除く利用可能なモジュール変形形態から、ランタイム時に使用するための特定のモジュールを選択する。
【００２６】
いくつかの従来の技法は、アプリケーションがデバイスにインストールされるときに第1のモジュール変形形態をインストールし、残りを削除するなど、インストール時またはロード時にランダムに選択されたモジュールをインストールすることによって、ある形態のソフトウェアダイバーシティを実装する。これらの従来の技法とは異なり、実施形態技法は、ソフトウェアが実行されるたびに行われる特定のモジュールの選択の際に、安全であると識別されたまたは安全でないものとして識別されていない利用可能なモジュール変形形態から、ランタイム時に選択する。実施形態技法は、信頼できるソースからの通知に基づいて調整され得る識別子のリストを使用し得る。コンピューティングデバイスは、障害を受けた識別子の報告に基づいて、ソフトウェアの任意のモジュールについての考えられるモジュール変形形態のリストを更新するように構成され、対応するモジュール変形形態の障害を示す信号に応答して、ランタイム選択リストからモジュール変形形態識別子を削除し得る。このようにして、同じソフトウェアモジュール変形形態を実装するデバイスのコミュニティは、そのようなモジュールを使用するソフトウェアのランタイム時のアクティブ化の考慮対象から、いくつかのモジュール変形形態識別子を容易に削除し得る。
【００２７】
簡単にするために、ダイバーシティベースのソフトウェアセキュリティのための動的パッチングのための様々な実施形態技法について、モバイルデバイスに適用されるものとして以下で説明する場合がある。ただし、様々な実施形態技法は、ラップトップ、サーバ、ゲームコンソール、パーソナルコンピュータなど、モジュール式ソフトウェアを実行することが可能な任意のコンピューティングデバイスとともに使用され得ることを諒解されたい。
【００２８】
さらに、以下の説明は、ソフトウェアが複数のモジュールを利用し得、そのモジュールの各々が複数のモジュール変形形態を有することを示す。ただし、ソフトウェア(たとえば、アプリケーション)によっては、複数のモジュールを利用せず、代わりに、複数のモジュール変形形態を有し得る単一のモジュールを含む場合がある。したがって、実施形態は、複数のモジュールを利用するソフトウェアに限定されるものではない。
【００２９】
図1は、サーバ110に関連付けられたソフトウェアを実行するように構成された複数のモバイルデバイス102〜106を含む一実施形態の通信システム100を示す。モバイルデバイス102、104、106は、それぞれ、ワイヤードまたはワイヤレス接続103、105、107を介して、インターネット130などのワイドエリアネットワーク上で通信または信号を交換するように構成され得る。たとえば、モバイルデバイス102〜106は、ローカルエリアネットワークに関連付けられたセルラーネットワーク基地局(図示せず)および/またはWi-Fiルータ(図示せず)へのワイヤレス接続を介して、インターネット130上で通信し得る。そのような通信の例は、ショートメッセージサービス(SMS)/マルチメディアメッセージングサービス(MMS)テキストメッセージ、電子メールメッセージ、音声呼(たとえば、ボイスオーバーインターネットプロトコル(VOIP))などを含み得る。同様に、サーバ110は、ワイヤードまたはワイヤレス接続111を介して、インターネット130上でデータおよび/または様々な通信を交換するように構成され得る。特に、モバイルデバイス102〜106は、インターネット130を介してサーバ110と通信することが可能であり得る。たとえば、サーバ110は、アドホック情報をモバイルデバイス102〜106にプッシュし得る。別の例として、モバイルデバイス102〜106は、サーバ110からコード、ファイルソフトウェア、データ、情報などをダウンロードするように構成され得る。
【００３０】
1つのシナリオでは、サーバ110は、モバイルデバイス102〜106上で実行されるソフトウェアのモジュールのモジュール変形形態の識別子を含む通知を通信するように構成され得る。そのような通知は、ソフトウェアを実行するとき(すなわち、ランタイム時またはランタイム中)にモバイルデバイス102〜106によって実施され得る動的なモジュール選択動作を制御するために、受信側のモバイルデバイス102〜106によって使用され得る。たとえば、通知は、ソフトウェアの第1のモジュールのモジュール変形形態の識別された欠陥、弱点、または報告エクスプロイトにより、ソフトウェアを実行するときに使用されるべきではない、その変形形態の識別子を含み得る。
【００３１】
様々な実施形態では、モバイルデバイス102〜106は、サーバ110に関連付けられたソフトウェア(たとえば、オペレーティングシステム、ファームウェア、ミドルウェア、アプリケーション/アプリ/クライアントなど)のための更新サービス(または更新エンティティ)に登録され得る。特に、サーバ110は、モバイルデバイス102、104、106および各々にインストールされたソフトウェアに関連付けられた情報を記憶し、処理するように構成され得る。たとえば、サーバ110は、モバイルデバイス102〜106のいずれかの上に記憶されたソフトウェアのバージョン、通信能力(たとえば、セルラーネットワークデータプランなど)、ならびにモバイルデバイス102〜106上のそれぞれのソフトウェアインストールによってサポートされるモジュールを記述するデータを受信し、記憶するように構成され得る。別の例として、サーバ110は、モバイルデバイス102〜106上で実行されるソフトウェアが遭遇した故障、障害、エラー、および他の悪条件を記述する情報を記憶するように構成され得る。サーバ110は、ソフトウェア内の不適切に動作している(たとえば、違反している、バグが多い、壊れている、など)モジュールの発生を識別し、監視し、報告するために、モバイルデバイス102〜106に関するそのような情報を記憶し、処理し得る。
【００３２】
いくつかの実施形態では、サーバ110は、ワイヤードまたはワイヤレス接続121を介してインターネット130に接続されたサードパーティサーバ120から通信を受信し得る。そのような通信は、ウイルスまたは「トロイの木馬」マルウェアの定義などのマルウェア報告を含み得る。たとえば、サードパーティサーバ120は、様々なデバイスが遭遇するウイルスを監視し、商用のウイルス防止ソフトウェアによって使用される定義を送信するサービスまたはエンティティに関連付けられ得る。
【００３３】
図2Aは、インストールされたソフトウェアのランタイム時にソフトウェアモジュールを実装するために複数の考えられるモジュール変形形態のうちの1つを利用するように構成された例示的なモバイルデバイス200を示す。上記で説明したように、セキュリティを改善するために、モバイルデバイス200は、モバイルデバイス上に記憶され、モジュールを実装する任意のソフトウェアアプリケーションとともに使用するために利用可能な、様々なソフトウェアモジュールの複数の機能的に等価な変形形態を用いるダイバーシティ方式を使用し得る。様々な実施形態では、モバイルデバイス200のプロセッサは、インストールされ実行されているソフトウェア220(たとえば、アプリケーション、オペレーティングシステムルーチンなど)によって使用される特定のモジュール(「モジュールB」と呼ばれる)を実装するために使用されるべき、考えられるモジュール変形形態202〜204(図2Aでは、それぞれ「モジュールB変形形態1」、「モジュールB変形形態2」、および「モジュールB変形形態N」と呼ばれる)のグループ205のうちの1つを識別するためにランタイム選択論理210を実行し得る。いくつかの実施形態では、ランタイム選択論理210は、モバイルデバイス200のプロセッサ上で実行されるルーチンまたはプロセスであり得る。
【００３４】
図2Aに示すように、ソフトウェア220がランタイム段階に入る(たとえば、インストールされ、ロードされ、他の方法で実行のために準備された後に、モバイルデバイス200のプロセッサを介して実行を開始する)とき、ランタイム選択論理210を介したモバイルデバイス200は、ソフトウェア220のための様々なモジュールを生成し、アクセス可能にし得る。実行されているソフトウェア220は、ランタイム選択論理210によってランタイム時に選択および/またはアクティブ化されてもよく、選択および/またはアクティブ化されなくてもよい、第1のモジュール222(図2Aでは、「ロードされたモジュールA」と呼ばれる)を含み得る。言い換えれば、ソフトウェア220は、静的である(すなわち、多様化されていない)モジュールの一部分と、モジュール変形形態(すなわち、多様化されている)のセットからランタイム時に動的に選択されるモジュールの一部分とを利用するように構成され得る。
【００３５】
加えて、ランタイム選択論理210を介したモバイルデバイス200は、考えられるモジュール変形形態202〜204のグループ205を評価し、第2のモジュール224(図2Aでは、「ランタイムアクティブ化モジュールB」と呼ばれる)として使用されるべき1つを選択し得る。モジュール変形形態202〜204のうちの1つのそのようなランタイム選択は、ランダムであってもよい。たとえば、モジュール変形形態202〜204の各々は、ランタイム選択論理210を介したモバイルデバイス200によってランダムに選択される同じ可能性を有し得る。代替的に、モバイルデバイス200は、重み付け方式またはモバイルデバイス200によって記憶された他のあらかじめ定義された情報などに基づいてモジュール変形形態202〜204のうちの1つを選択するための様々な技法を利用し得る。たとえば、ランタイム選択は、モバイルデバイス200によるソフトウェア220の以前の実行におけるモジュール変形形態202〜204の各々の以前の使用の数に基づいてもよい。別の例として、選択は、モジュール変形形態202〜204のレーティング、優先度、および/または効率に基づいてもよい。次いで、ランタイム選択論理210を介したモバイルデバイス200は、モジュール変形形態202〜204のうちの1つの選択に基づいて第2のモジュール224をアクティブ化(たとえば、生成、挿入/ロード)し得る。
【００３６】
別の実施形態では、モジュール変形形態202〜204のうちの1つのランタイム選択は、すでに選択されたモジュールおよび/またはそのモジュール変形形態に基づいてもよい。たとえば、モバイルデバイス200は、ロードされた第1のモジュール222において使用される変形形態に基づいて、第2のモジュール変形形態203(図2Aでは、「モジュールB変形形態2」と呼ばれる)の代わりに、第1のモジュール変形形態202(図2Aでは、「モジュールB変形形態1」と呼ばれる)を選択してもよい。言い換えれば、ある特定のモジュールについてのモジュール変形形態を選択するときにモバイルデバイス200によって使用される重み係数は、他のモジュールのすでにロードされた変形形態の指示によって影響され得るか、またはさもなければそれを含み得る。
【００３７】
様々な実施形態では、グループ205は、モバイルデバイス200において、各々がモジュール変形形態202〜204のうちの1つについての識別子を示すノードまたはエントリを含むリンクリストまたはアレイなど、モジュール変形形態202〜204の識別子の記憶されたリストとして表され得る。様々な実施形態では、ランタイム選択論理210を使用するモバイルデバイス200は、第2のモジュール224を生成するために、選択されたモジュール変形形態を使用して、あらかじめ定義されたモジュールを動的に修正し得る。たとえば、ランタイム選択は、ある特定のアルゴリズム、コード、アプリケーションプログラミングインターフェース(API)、および/またはモジュールを構築する他の方法を使用して第2のモジュール224を修正する(または「自己修正する」)ための、モバイルデバイス200に対する特定の命令の選択であり得る。
【００３８】
第2のモジュール224に関してランタイム選択動作が実施された後、ランタイム選択論理210を使用するモバイルデバイス200は、第3のモジュール226(「決定されるべきモジュールC」と呼ばれる)についてなど、他のモジュールについての追加のランタイム選択動作の実施を継続し得る。たとえば、モバイルデバイス200は、第3のモジュール226についてのあらかじめ定義されたモジュールをロードするか、または、第2のモジュール224について実施された場合と同様の選択に基づいて、新しいもしくは修正されたモジュールを生成し得る。
【００３９】
図2Bは、モバイルデバイスがソフトウェアのランタイム時にモジュールの変形形態を利用するための実施形態方法250を示す。ソフトウェア(たとえば、アプリケーション、オペレーティングシステムなど)が実行のためにモバイルデバイスによってインストールされロードされると、モバイルデバイスは、実行されるソフトウェアによって使用される複数のモジュールについての利用可能なモジュール変形形態から動的に選ぶことができる。たとえば、モバイルデバイスは、第1のモジュールについて、同様に機能する第2のモジュール変形形態の代わりに、第1のモジュール変形形態を選択し得る。モバイルデバイスは、ソフトウェアが実行されるたびに、利用可能なモジュール変形形態が選択され、アクティブ化され得るように、方法250の動作を実施し得る。このようにして、モバイルデバイスは、実行されるソフトウェアを攻撃するためにマルウェアによって使用される制御経路(または制御フロー)を潜在的に削除するためのソフトウェアダイバーシティ方式を実装し得る。
【００４０】
ブロック252において、モバイルデバイスのプロセッサは、モバイルデバイスにインストールされたソフトウェアの複数のモジュールの各々についての複数のモジュール変形形態をランタイム時にアクティブ化するための機構を取得し得る。この機構は、論理、ルーチン、ソフトウェア、あらかじめ定義された変数、回路、ならびに/または、モバイルデバイスプロセッサが実行されるソフトウェアのランタイム時にモジュールをアクティブ化(たとえば、実行されるソフトウェア内に挿入またはロード)、生成、および/もしくは修正するのを可能にし得る他の機能であり得る。たとえば、この機構は、実行されるアプリケーションの動作命令に動的に挿入、ロード、および/またはリンクされ得るライブラリ、コード、または他の情報を手続き的に生成するためにモバイルデバイスが実行し得るアルゴリズムであり得る。さらに、この機構は、モバイルデバイスを含む様々なコンピューティングデバイスが同じモジュール変形形態を生成する(または複製する)ためにこの機構を利用することが可能であり得るように、標準化(または「ユニバーサル」)され得る。たとえば、第1のモバイルデバイスおよび第2のモバイルデバイスは両方とも、アプリケーションにおいて使用するための同じモジュール変形形態を生成するためにこの機構を利用するように構成され得る。いくつかの実施形態では、取得された機構は、コード、アルゴリズム、命令、論理、および/またはソフトウェアのモジュール内のコードを修正するための他の情報であり得る。たとえば、この機構は、あらかじめ定義されたモジュールの命令の制御フローを変更するためにモバイルデバイスによって実行される命令を含み得る。様々な実施形態では、この機構は、リモートサーバ(たとえば、アプリケーションサーバ)からのダウンロードなどを介してリモートソースからモバイルデバイスによって受信され得る。他の実施形態では、この機構は、モバイルデバイスの製造業者、ユーザ、および/または開発者によってモバイルデバイスにプリインストールされ得る。いくつかの実施形態では、この機構は、モジュールの変形形態を生成するために、あらかじめ定義されたコードを利用し得る。たとえば、モバイルデバイスは、ルーチンのシードとしてモジュール変形形態識別子を使用して異なる方法でモジュールを生成するルーチン(たとえば、コード修正アルゴリズム)を利用し得る。いくつかの実施形態では、この機構は、図2Aを参照しながら上記で説明したように、ランタイム選択論理であり得る。
【００４１】
上記で説明したように、所与の時に、ソフトウェアの任意のモジュールは、考えられるモジュール変形形態のあらかじめ定義されたセットに関連付けられ得る。たとえば、開発者は、ソフトウェアによって用いられると各々が同じ機能を実行することが可能な、プログラムの設定された数の変形形態またはプログラムの一部分の変形形態を書いた可能性がある。別の例として、モジュールのモジュール変形形態は、モバイルデバイス上に記憶された1つまたは多くの異なる命令セットに基づいて、モバイルデバイスによってソフトウェアのランタイム時に生成され得る。これらのモジュール変形形態の各々は、ソフトウェアを利用する様々なモバイルデバイスが標準化された方法で同じモジュール変形形態を参照し得るように、ユニバーサル識別子、コード、または他の記述子に関連付けられ得る。モジュール変形形態についてのそのような一様な識別情報は、ソフトウェアを実行する様々なモバイルデバイスと識別情報を共有し得るリモートソース(たとえば、ソフトウェアのサポートに関連付けられたサーバ)によって維持され得る。
【００４２】
任意選択のブロック254において、ソフトウェアの複数のモジュールの各々について、モバイルデバイスのプロセッサは、複数のモジュール変形形態のうちの利用可能なモジュール変形形態の識別子のリストを取得し得る。たとえば、リストは、ソフトウェアに関連付けられたサーバからのメッセージを介して、モバイルデバイスによって受信され得る。別の例として、モバイルデバイスは、ソフトウェアのインストール時に直ちに決定された、モバイルデバイスが利用することが可能なモジュール変形形態に基づいて、リストを生成し得る。別の例として、リストは、モバイルデバイスにプリロードされた識別子のリストであり得る。リストは単に、モジュールごとに複数のモジュール変形形態のうちのモジュール変形形態ごとの識別子を含み得る。ただし、以下で説明するようないくつかの実施形態では、リストは、モバイルデバイスがモジュールごとに利用可能なモジュール変形形態を更新し得るように構成可能であり得る。たとえば、リストは、キュー、リンクリスト、または、これらのモジュール変形形態が利用可能であるもしくはもはや利用可能ではないことを示す様々なモジュール変形形態識別子を、それぞれ追加もしくは削除することが可能な他のデータ構造であり得る。いくつかの実施形態では、リスト内の各項目は、変数、フラグ、または関連するモジュール変形形態の現在の利用可能性を表し得る他のデータに関連付けられ得る。たとえば、リスト中で表される各モジュール変形形態は、そのモジュール変形形態がモバイルデバイスによって使用するために選択され得るかどうかを示すビットに関連付けられ得る。
【００４３】
ブロック252〜254の動作がモバイルデバイスによって実施された後しばらくして、モバイルデバイスのプロセッサは、判断ブロック256において、ソフトウェアの実行を開始するかどうかを判断し得る。言い換えれば、モバイルデバイスは、ソフトウェアがそのランタイム段階を開始するように構成されたかどうかを判断し得る。インストールされたソフトウェアは、ソフトウェアがモバイルデバイスプロセッサによる実行のために準備された(たとえば、ロードされた)ことに応答して、そのランタイム段階に入り得る。モバイルデバイスは、受信されたユーザ入力(たとえば、ユーザがアプリケーションの実行に関連付けられた実行ファイルまたはアイコンをクリックすることなど)、別のデバイスからの信号を受信すること(たとえば、別のモバイルデバイスからの開始信号など)、および/または何らかの他のあらかじめ定義された動作条件の発生を検出すること(たとえば、あらかじめ関連付けられたジオフェンス内のロケーションを示すGPS座標など)などの様々な条件に応答して、ソフトウェアの実行を開始し得る。たとえば、モバイルデバイスは、ソフトウェアのグラフィカルアイコンと一致する、タッチスクリーン上のユーザ選択入力を検出したことに応答して、ソフトウェアの実行を開始すると判断し得る。別の例として、モバイルデバイスは、割込み、コマンド、またはソフトウェア(たとえば、ソフトウェアなど)がそのランタイム実行を開始すべきであることを示す他の信号を受信したことに応答して、ソフトウェアのランタイム段階を開始するかまたはアクティブ化するべきであると判断し得る。ソフトウェアが実行を開始していない(すなわち、判断ブロック256=「No」)と判断したことに応答して、モバイルデバイスは、判断ブロック256において、チェック/監視動作を実施し続けることができる。たとえば、モバイルデバイスは、ソフトウェアが依然としてロードされている間に、および/またはソフトウェアをロードさせ、最終的にはモバイルデバイスプロセッサ上で実行させるユーザ入力が受信されるまでに、ソフトウェアが実行を開始したかどうかを評価し続けることができる。
【００４４】
ソフトウェアが実行を開始した(すなわち、判断ブロック256=「Yes」)と判断したことに応答して、モバイルデバイスのプロセッサは、ブロック258において、ソフトウェアの1つまたは複数のモジュールのうちの次のモジュールを選択し得る。たとえば、ブロック258〜264の動作からなる動作ループの第1の反復の場合(すなわち、モバイルデバイスがそのランタイム段階に入るとき)、モバイルデバイスは、ソフトウェアによって使用するために動的に生成(またはロード)されるべきすべてのモジュールのリストにおいて第1のモジュールを選択し得る。ブロック260において、モバイルデバイスのプロセッサは、選択されたモジュールについての利用可能なモジュール変形形態の識別子の取得されたリストから識別子を選択し得る。たとえば、モバイルデバイスは、利用可能なモジュール変形形態の識別子のうちの1つをランダムに選択するランダム選択アルゴリズムを利用し得る。選択は、ソフトウェアの過去の実行においてモジュール変形形態がどのくらい頻繁に用いられたか、互いと比較したモジュール変形形態の複雑性など、上記で説明したような他の要因に基づき得る。
【００４５】
ブロック262において、モバイルデバイスのプロセッサは、実行されるソフトウェアとともに使用するための選択された識別子に関連付けられた利用可能なモジュール変形形態をアクティブ化し得る。たとえば、選択された識別子に対応する利用可能なモジュール変形形態が事前生成されると、モバイルデバイスは、ソフトウェアのランタイム時に利用可能なモジュール変形形態をロードし得る。別の例として、モバイルデバイスは、選択されたモジュール変形形態識別子に基づいてモジュールを生成するために、取得された機構(たとえば、ルーチンなど)を使用することなどによって、実行されるソフトウェアによって使用されるべき利用可能なモジュール変形形態を生成し得る。別の例として、モバイルデバイスは、モジュールを修正するか、または選択された識別子に関するモジュールを修正するための命令を使用してモジュール内に挿入するためのコードを生成し得る。ブロック262においてモバイルデバイスによって実施された動作に応答して、選択されたモジュール変形形態に関連付けられたモジュールはアクセス可能になり、他の方法でソフトウェアによって完全に利用されることが可能になり得る。様々な実施形態では、利用可能なモジュール変形形態を生成することは、利用可能なモジュール変形形態の命令に基づいて、モジュールのコード内の制御フローを再編成することを含み得る。たとえば、モバイルデバイスは、モジュールについて、動作(たとえば、ジャンプまたは「GOTO」文など)および/またはアセンブリ言語コードのブロック内の動作の順序を変更し得る。
【００４６】
判断ブロック264において、モバイルデバイスのプロセッサは、モバイルデバイスがランタイム時にモジュール変形形態を選択し、アクティブ化(たとえば、生成)しなければならない、ソフトウェアの別のモジュールがあるかどうかを判断し得る。ソフトウェアの別のモジュールがある(すなわち、判断ブロック264=「Yes」)と判断したことに応答して、モバイルデバイスは、次のモジュールおよびブロック258における選択動作を継続し得る。ただし、ソフトウェアの別のモジュールがない(すなわち、判断ブロック264=「No」)と判断したことに応答して、モバイルデバイスのプロセッサは、ブロック265においてソフトウェアを実行し得る。いくつかの実施形態では、モバイルデバイスのプロセッサは、ブロック265の動作が完了した後に後続のランタイム段階が開始したかどうかを判断するために、判断ブロック256における動作を継続し得る。
【００４７】
図2Cは、モバイルデバイスがソフトウェアを実行している間に遭遇した問題を報告するための実施形態方法280を示す。機能停止またはマルウェア検出などのそのような問題は、ソフトウェアのためのモジュールのソフトウェアダイバーシティがソフトウェアの将来の実行時にどのように調整され得るかを判断するために使用され得る。方法280の動作は、本明細書で説明する方法250、400、および/または500と組み合わせて実施され得る。
【００４８】
ソフトウェアがモバイルデバイスのプロセッサ上で実行を開始すると、または代替的には、ソフトウェアがプロセッサ上でもはやアクティブに実行しないように構成された後に、方法280が実施され得る。したがって、図2Bを参照しながら上記で説明したブロック265における動作を実施したことに応答して、モバイルデバイスは、判断ブロック266において、ソフトウェアのランタイム中にモジュールの問題に遭遇したかどうかを判断し得る。たとえば、モバイルデバイスは、ソフトウェアを実行するときに故障、クラッシュ、および/または予期しない動作を検出し得る。そのような検出された情報は、ソフトウェアのランタイム段階が完了した後にまたは代替的にはソフトウェアの実行中に評価され得るログファイルまたは他のデータに、モバイルデバイスによって記憶され得る。問題に遭遇した(すなわち、判断ブロック266=「Yes」)と判断したことに応答して、モバイルデバイスは、ブロック268において、現在使用中のアクティブ化されたモジュール変形形態識別子を示す報告メッセージを、開発者またはOEMサーバなどの、ソフトウェアに関連付けられたサーバに送信し得る。図5を参照しながら以下で説明するように、そのような報告メッセージは、モジュール変形形態の潜在的な障害を識別するために、サーバによって評価および使用され得る。問題に遭遇しなかった(すなわち、判断ブロック266=「No」)と判断したことまたはブロック268における動作が実施されたことに応答して、モバイルデバイスは方法280を終了し得る。
【００４９】
図3A〜図3Bは、障害を受けたモジュール変形形態についての受信された通知に基づいて、ランタイム時にソフトウェアモジュールを実装するために複数の考えられるモジュール変形形態のうちの1つを利用するように構成された例示的なモバイルデバイス200を示す。図3Bに示すシナリオは、図3Bでは、モバイルデバイス200のソフトウェアのモジュールとして使用するのにもはや好適ではない特定の変形形態を示す、モバイルデバイス200によって受信されたデータを反映するために、モバイルデバイス200がモジュール変形形態の選択を調整し得ることを除き、図2Aを参照しながら上記で説明したシナリオと同様である。たとえば、インターネットを介してサーバから大きいパッチを受信する代わりに、モバイルデバイス200は、モジュール変形形態識別子のみを示す簡単な通知を受信したことに応答して、アプリケーションにおいて使用するためにランタイム時に生成され得る考えられるモジュール変形形態の範囲を定めることができる。上記で説明したように、そのような通知は、モバイルデバイス200のソフトウェアに関連付けられたサーバなどのリモートソース、および/またはモバイルデバイス200上で実行される内部アプリケーションによって送信され得る。
【００５０】
図3Aに示し、図2Aを参照しながら上記で説明したように、モバイルデバイス200のプロセッサは、モバイルデバイス200によって実行され得るインストールされたソフトウェアによって使用される特定のモジュール(「モジュールB」と呼ばれる)を実装するために使用されるべき、考えられるモジュール変形形態202〜204のグループ205のうちの1つを識別するように構成され得るランタイム選択論理210を実行し得る。モジュール変形形態202〜204の各々は、ランタイム選択論理210を介したモバイルデバイス200による選択に利用可能であり得る。ただし、図2Aとは異なり、図3Aのモバイルデバイス200は、個々のモジュール変形形態202〜204の利用可能性を調整するために使用され得る通知302を受信し得る。通知302は、特定のモジュール(たとえば、「モジュールB」)を実装するために選択されるという資格から複数のモジュール変形形態202〜204のうちの1つまたは複数を削除するためにランタイム選択論理210を介したモバイルデバイス200によって使用され得る、モジュール変形形態202〜204の1つの識別子または複数の識別子を含み得る。たとえば、ランタイム選択論理210を使用するモバイルデバイス200は、利用可能なモジュール変形形態のリストから通知302内に示された識別子を削除し得る。
【００５１】
特に、通知302は、グループ205の第2のモジュール変形形態203が、もはやランタイム選択論理210を介したモバイルデバイス200による選択に利用可能ではない場合があることを示し得る。たとえば、通知302は、第2のモジュール変形形態203に関連付けられた識別子がセキュリティ違反に関連付けられている(すなわち、マルウェアによって障害を受けている、など)ことを示し得る。
【００５２】
図3Bに示すように、通知302に応答して、ランタイム選択論理210を介したモバイルデバイス200は、第2のモジュール変形形態203'(図3Bでは「モジュールB変形形態2」と呼ばれる)がもはや選択および/または実装形態に利用可能ではなくなるように、グループ205を調整し得る。インストールされたソフトウェア220がランタイム段階に入る(たとえば、ロードされ、他の方法で準備された後に、モバイルデバイス200のプロセッサを介して実行を開始する)と、ランタイム選択論理210を介したモバイルデバイス200は、第2のモジュール352(図3Aでは「ランタイムアクティブ化モジュールB」と呼ばれる)を実装するために、第1のモジュール変形形態202(図3Aでは「モジュールB変形形態1」と呼ばれる)または最後のモジュール変形形態204(図3Aでは「モジュールB変形形態N」と呼ばれる)のみを選択し得る。言い換えれば、ランタイム選択論理210を介したモバイルデバイス200による選択に基づいて、第2のモジュール352は、第2のモジュール変形形態203'を除くすべてに対応し得る。いくつかの実施形態では、モバイルデバイス200は、第2のモジュール変形形態203'に関連付けられた情報を削除しない場合があるが、代わりに第2のモジュール変形形態203'の無効または利用不可能な状況を示すフラグまたは変数を設定し得る。たとえば、事前生成されると、第2のモジュール変形形態203'は、通知302を受信した後、モバイルデバイス200上に記憶されたままになり得る。
【００５３】
図4は、モバイルデバイスが、ソフトウェアのランタイム時に実装され得るモジュールの考えられるモジュール変形形態の範囲を定めるための通知を受信するための実施形態方法400を示す。方法400は、方法400が、モジュール変形形態が障害を受けていることを示す通信(または通知)に応答して、モジュールのモジュール変形形態の利用可能性を調整するようにモバイルデバイスを構成し得ることを除き、上記で説明した方法250と同様である。モバイルデバイスを更新するように構成されたリモートサーバコンピューティングデバイスからの信号などの通知は、利用可能なモジュール変形形態から選択するときにモバイルデバイスが使用しない場合がある識別子の範囲を示し得る。たとえば、サーバからのメッセージまたは信号は、ある特定のモジュール変形形態識別子がウイルスまたは他のマルウェアにより障害を受けており、したがって、モバイルデバイスがランタイム時にソフトウェアのための関連するモジュールを生成しているときに考慮されるべきではないことを示し得る。そのような通知は、最も単純に、障害を受けたものとして識別されたモジュール変形形態の識別子のみを含み得る。通知は、そのソース、構造、または送信技法にかかわらず、モジュール変形形態自体および/または、ソースコードもしくはバイナリなどの、モジュール変形形態を生成するために必要なデータを含まない場合がある。このようにして、通知は、モバイルデバイスがそのソフトウェアダイバーシティ方式を調整するためにかなりのリソースを費やすことを必要とすることなしに、モジュールの動的パッチングをモバイルデバイスに提供する、安価で効率的な方法であり得る。
【００５４】
ブロック252〜265の動作について、図2Bを参照しながら上記で説明した。ブロック252〜254の動作を実施した後しばらくして、モバイルデバイスのプロセッサは、判断ブロック402において、障害を受けたモジュール変形形態の識別子を有する通知が取得されたかどうかを判断し得る。たとえば、モバイルデバイスは、マルウェアによる障害を受けたことが最近発見された、ソフトウェアのためのモジュールのモジュール変形形態の識別子を示すメッセージが、リモートサーバまたは別のモバイルデバイスからネットワーク接続を介して受信されたかどうかを判断するために受信回路を監視し得る。通知に含まれる識別子に関連付けられたモジュール変形形態は、欠陥がある(たとえば、既知のバグを含む、など)、古い(たとえば、開発者、製造業者によって設定された、あらかじめ定義された鮮度しきい値の外にある、など)、および/またはマルウェアによってエクスプロイトされたことが知られているなどの多くの理由により障害を受けたものとして識別され得る。
【００５５】
通知は、障害を受けたモジュール変形形態に関するモジュールの識別情報、通知の送信者の識別情報および/または認証情報、タイムスタンプ情報、バージョン情報、ならびに通知を検証するためにモバイルデバイスによって使用され得る他のデータなどの様々な情報を含み得る。ただし、通知は、ランタイム中にソフトウェアによってモジュールとして使用されることが可能な実行可能コードまたはデータを含まない場合がある。言い換えれば、通知は、実行可能コード、モジュール、またはコードの部分のための配信機構ではなく、代わりに、ソフトウェアによって使用されない場合があるモジュール変形形態のインジケータにすぎない場合がある。
【００５６】
いくつかの実施形態では、通知は、モバイルデバイス上で実行されるセキュリティアプリケーションによって生成された警告または他の報告などの、モバイルデバイスによってローカルに生成されたメッセージであり得る。たとえば、モバイルデバイスは、ソフトウェア内のセキュリティ違反を継続的に評価し、違反による影響を受けたモジュール変形形態を識別するための動作を実施するように構成され得る。障害を受けたモジュール変形形態の識別子の通知が取得されていない(すなわち、判断ブロック402=「No」)と判断したことに応答して、モバイルデバイスは、判断ブロック402における監視動作を継続し得る。
【００５７】
障害を受けたモジュール変形形態の識別子の通知が取得された(すなわち、判断ブロック402=「Yes」)と判断したことに応答して、モバイルデバイスのプロセッサは、ブロック404において、利用可能なモジュール変形形態の取得されたリストから取得された通知から、障害を受けたモジュール変形形態の識別子を削除し得る。たとえば、モバイルデバイスは、利用可能なモジュール変形形態識別子の記憶されたリストから、通知の識別子への参照を削除し得る。別の例として、モバイルデバイスは、ソフトウェアに関してモバイルデバイスによって生成され得るすべてのモジュール変形形態の識別子を含むデータベース内のエントリに対する無効なフラグを設定し得る。識別子を削除することによって、モバイルデバイスは、識別子に関連付けられたモジュール変形形態を選択し、アクティブ化することができなくなり、したがって、欠陥があるかまたはマルウェアによってエクスプロイトされる場合があるモジュール構成を考慮しないことによってセキュリティを改善することができる。ブロック404における動作を実施したことに応答して、モバイルデバイスは、判断ブロック402における監視動作を継続し得る。言い換えれば、モバイルデバイスは、ソフトウェアのランタイム段階の間の着信通知を無期限に監視し得る。
【００５８】
モバイルデバイスは着信通知を継続的に監視し、利用可能なモジュール変形形態のリストを調整し得るが、モバイルデバイスは、最終的に、ソフトウェアを実行する(すなわち、そのランタイム段階に入る)ように構成され得、その際に、モバイルデバイスは、その時点で利用可能な、どのモジュール変形形態からでも選択するように構成され得る。
【００５９】
判断ブロック402またはブロック404の動作が実施された後しばらくして、モバイルデバイスのプロセッサは、図2Bを参照しながら上記で説明したようにブロック256〜265の動作を実施し得る。
【００６０】
いくつかの実施形態では、ソフトウェアがモバイルデバイスプロセッサ上での実行を完了する(すなわち、ランタイム段階を出る)と、モバイルデバイスは、判断ブロック402における動作の実施を継続するように構成され得る。たとえば、アプリケーションが閉じられるか、終了するか、またはさもなければアクティブに動作するのをやめると、モバイルデバイスは、判断ブロック402における動作を継続し得る。いくつかの実施形態では、モバイルデバイスは、ソフトウェアのランタイム段階中にブロック402〜404の動作を継続し得る。加えて、いくつかの実施形態では、ソフトウェアを実行するランタイム段階中に、モバイルデバイスは、図2Cの判断ブロック266を参照しながら上記で説明したように、モジュールが問題に遭遇したかどうかを判断し、報告メッセージを送信するための動作を実施し得る。
【００６１】
いくつかの実施形態では、モジュールを使用するソフトウェアがモバイルデバイスのプロセッサ上ですでに実行されている間に、交換されるべき特定のモジュール変形形態についての通知が受信されると、モバイルデバイスは、新しいモジュール変形形態をロードするために、ソフトウェアの実行を中断するか、またはさもなければ一時停止するように構成され得る。そのような中断は、モバイルデバイスが、ソフトウェアによって使用されるすべてのモジュールを再ロードすることを必要とする場合もあり、必要としない場合もある。
【００６２】
図5は、サーバコンピューティングデバイス(またはサーバ)が、モバイルデバイスによって実行されるソフトウェアのモジュールの障害を受けたモジュール変形形態に関する通知を送信するための実施形態方法500を示す。上記で説明したように、特定のアプリケーションまたはオペレーティングシステムをサポートすることに特化した、アプリケーションサーバ、OEMサーバ、または開発者サーバなど、ソフトウェアに関連付けられたサーバは、ソフトウェアの問題を示し得る情報を継続的に受信し、処理するように構成され得る。ソフトウェアについてのクラウドソースのセキュリティ情報のためのクリアリングハウスとして働くとき、サーバは、ソフトウェアをすでにインストールし、サーバに登録した(またはサーバに知られている)モバイルデバイス(図5を参照すると「加入者モバイルデバイス」と呼ばれる)に通知を送信し得る。たとえば、サーバは、ソフトウェアとともに使用されるモジュールとしてもはや実装されない場合がある障害を受けたモジュール変形形態を加入者モバイルデバイスに通知する通知を送信し得る。したがって、サーバは、ソフトウェアダイバーシティ方式を利用するデバイスの安価な動的パッチングを可能にし得る。
【００６３】
任意選択のブロック502において、サーバは、加入者モバイルデバイスにインストールされたソフトウェアの複数のモジュールの各々についての複数のモジュール変形形態を生成するための情報を送信し得る。たとえば、サーバは、命令、コード、論理、ソフトウェア、および/または加入者モバイルデバイスがあらかじめ定義されたモジュールをインストールされたアプリケーションのランタイム中に修正するために使用し得る他の情報を送信し得る。別の例として、サーバは単に、ソフトウェアのランタイム時に互換的にアクティブ化され得るソフトウェアモジュールの複数の変形形態を送信し得る。いくつかの実施形態では、サーバは、モジュールのモジュール変形形態から選択するために加入者モバイルデバイスによって使用され得るルールまたはガイドラインを送信し得る。たとえば、サーバは、ファイル転送を、加入者モバイルデバイスにソフトウェアのランタイム時にモジュール変形形態からランダムに選択させることができる実行可能コード(たとえば、ランタイム選択論理)を含む加入者モバイルデバイスにプッシュし得る。
【００６４】
任意選択のブロック504において、サーバは、障害および/またはマルウェア出現の報告メッセージを受信し得る。報告メッセージ内の情報は、マルウェア定義(たとえば、ウイルス名、識別情報など)、ソフトウェアのバグ報告、ソフトウェアの影響を受けたまたは障害を受けたモジュールもしくはモジュール変形形態、ならびに送信源を識別する様々なデータ(たとえば、媒体アクセス制御(MAC)アドレスなどのモバイルデバイス識別子など)を含み得る。そのような報告メッセージは、ウイルス監視および/またはサイバーセキュリティサービス(たとえば、Norton、Symantec、McAfeeなど)のサーバなどのサードパーティコンピューティングデバイスからのもの、または代替的には加入者モバイルデバイスからのものであり得る。たとえば、サーバは、遭遇したエラーまたはマルウェアを示す機能停止報告、ならびに、障害を受けた可能性があるおよび/またはソフトウェアの機能停止に関するソフトウェアのモジュールのアイデンティティなどの、遭遇したエラーまたはマルウェアに関する任意の診断情報を加入者モバイルデバイスから受信し得る。そのような報告メッセージは定期的に生じないことがあり、その代わりに、ソフトウェアの機能停止または障害の発生に応答してサーバによって受信され得るので、任意選択のブロック504における動作は任意選択であり得る。ただし、サードパーティによって送信されるマルウェア定義などのいくつかの報告メッセージは、サーバによって定期的に受信(またはダウンロード)され得る。
【００６５】
ブロック506において、サーバは、加入者モバイルデバイスにインストールされたソフトウェアの複数のモジュールの各々についての複数のモジュール変形形態のセキュリティを評価し得る。特に、サーバは、ソフトウェアの様々なモジュール変形形態との任意の相関関係を識別するために、機能停止または障害(たとえば、バグ報告、マルウェア通知など)のいかなる受信された報告メッセージも評価し得る。いくつかの実施形態では、サーバは、マルウェアによって利用される技法(たとえば、制御経路、セキュリティホールなど)を識別し、そのような識別された技法をモジュール変形形態と比較して、モジュール変形形態のいずれかがマルウェアによる障害の危険性があるかどうかを判断するために、マルウェア定義を処理し得る。たとえば、サーバは、特定のウイルスが、ポート、動作ループ、プラグイン、プログラミング言語、認証論理などの、ソフトウェアのある特定の機能を利用することを識別し、ソフトウェアのモジュール変形形態を解析して、それらのモジュール変形形態がその特定の機能を含むかまたはさもなければ使用するように構築されているかどうかを判断し得る。いくつかの実施形態では、サーバは、エラーまたは機能停止がモジュール変形形態に関して生じたことを示す、加入者モバイルデバイスからのいくつかの受信された報告に基づいて、マルウェアが特定のモジュール変形形態に障害を与えた可能性を計算し得る(たとえば、報告メッセージがモジュール変形形態識別子を含む、報告メッセージが、同じモジュール変形形態を実装したことがサーバによって知られている加入者モバイルデバイスからのものである、など)。
【００６６】
判断ブロック508において、サーバは、ブロック506の評価に基づいて、ソフトウェアの複数のモジュールのいずれかについての複数のモジュール変形形態のいずれかが障害を受けた(または潜在的に障害を受けた)かどうかを判断し得る。ブロック506の評価に基づいて、モジュール変形形態は、欠陥がある(たとえば、既知のバグを含む、など)、古い(たとえば、開発者、製造業者によって設定された、あらかじめ定義された鮮度しきい値の外にある、など)、および/またはマルウェアによってエクスプロイトされたことが知られているなどの多くの理由により障害を受けたものとして識別され得る。たとえば、サーバは、モジュール変形形態と一致する識別子が機能しなくなったことを示す報告メッセージを加入者モバイルデバイスから受信することに基づいて、第1のモジュール変形形態が障害を受けたと判断し得る。別の例として、サーバは、既知のマルウェア実装形態が第2のモジュール変形形態の機能を利用する可能性の計算に基づいて、第2のモジュール変形形態が障害を受けたと判断し得る。ソフトウェアのモジュール変形形態が障害を受けていない(すなわち、判断ブロック508=「No」)と判断したことに応答して、サーバは、後続の報告メッセージを受信するための任意選択のブロック504における動作を継続し得る。
【００６７】
ソフトウェアのモジュール変形形態が障害を受けた(すなわち、判断ブロック508=「Yes」)と判断したことに応答して、サーバは、ブロック510において、ソフトウェアの複数のモジュールの障害を受けたモジュール変形形態の識別子を示す通知メッセージを加入者モバイルデバイスに送信し得る。図4A〜図4Bを参照しながら上記で説明したように、そのような通知は、障害を受けたモジュール変形形態の識別子および/または加入者モバイルデバイスに障害を受けたモジュール変形形態の使用を無効にさせ、利用不可能にさせ、またはさもなければ中止させることができる他の情報を含み得る。たとえば、通知は、受信側加入者モバイルデバイスに、「非アクティブ」または「利用不可能」に設定されるべきモジュール変形形態に関連付けられたフラグを設定させることができる、コードまたはコマンドを含み得る。このようにして、サーバは、実際のソフトウェアモジュール、コードベース、または他のリソース集約的な転送が存在する必要なしにそのソフトウェアダイバーシティを改善するパッチのような情報を、加入者モバイルデバイスに動的かつ効率的に配信し得る。
【００６８】
様々な実施形態では、サーバは、加えて、従来のソフトウェア更新、修正、および他の有用なデータを加入者モバイルデバイスに送信するように構成され得る。これを達成するために、任意選択のブロック512において、サーバは、ソフトウェアのすべてのモジュールのためのソフトウェア更新を取得し得る。たとえば、ソフトウェア開発者からのアップロード、または別のコンピューティングデバイスもしくはサーバからのファイル転送を介して、サーバは、ソフトウェアおよびその様々なモジュールのソースコードまたはコンパイルされた実行ファイルの新しいバージョンを受信し得る。モジュール変形形態に対する識別された障害からソフトウェアへの改善を保護するために、任意選択のブロック514において、サーバは、ソフトウェアのモジュールのすべての障害を受けていないモジュール変形形態のためのソフトウェア更新を含む更新メッセージを送信し得る。言い換えれば、サーバは、加入者モバイルデバイスが、ソフトウェアのランタイム時に使用するために決して選択され得ないモジュール変形形態を受信および処理するために不要なリソースを費やさなくてもよいように、障害を受けたモジュール変形形態の識別子を追跡し、後続のパッチから任意の関連する更新を削除し得る。サーバは、任意選択のブロック504における追加の報告メッセージを受信するための動作を継続し得る。
【００６９】
モバイルコンピューティングデバイスの様々な形態は、様々な実施形態を実装するために使用され得る。そのようなモバイルコンピューティングデバイスは、通常、例示的なスマートフォンタイプのモバイルコンピューティングデバイス600を示す図6に示された構成要素を含む。様々な実施形態では、モバイルコンピューティングデバイス600は、タッチスクリーンコントローラ604と内部メモリ602とに結合されたプロセッサ601を含み得る。プロセッサ601は、汎用または特定の処理タスクに指定された1つまたは複数のマルチコアICであり得る。内部メモリ602は、揮発性または不揮発性メモリであってもよく、また、セキュアおよび/もしくは暗号化メモリ、または非セキュアおよび/もしくは非暗号化メモリであっても、あるいはそれらの任意の組合せであってもよい。タッチスクリーンコントローラ604およびプロセッサ601は、抵抗感知タッチスクリーン、静電容量感知タッチスクリーン、赤外線感知タッチスクリーンなどのタッチスクリーンパネル612に結合される場合もある。モバイルコンピューティングデバイス600は、互いに結合され、かつ/またはプロセッサ601に結合された、送受信のための、1つまたは複数の無線信号トランシーバ608(たとえば、Peanut(登録商標)、Bluetooth(登録商標)、Zigbee(登録商標)、Wi-Fi、RF無線)、およびアンテナ610を有し得る。トランシーバ608およびアンテナ610は、様々なワイヤレス送信プロトコルスタックおよびインターフェースを実装するために、上述の回路とともに使用され得る。モバイルコンピューティングデバイス600は、セルラーネットワークを介した通信を可能にし、プロセッサに結合されたセルラーネットワークワイヤレスモデムチップ616を含み得る。モバイルコンピューティングデバイス600は、プロセッサ601に結合された周辺デバイス接続インターフェース618を含み得る。周辺デバイス接続インターフェース618は、1つのタイプの接続を受け入れるように単独で構成され得るか、または、USB、FireWire、Thunderbolt、またはPCIeなどの共通またはプロプライエタリの様々なタイプの物理接続および通信接続を受け入れるように複合的に構成され得る。周辺デバイス接続インターフェース618は、同様に構成された周辺デバイス接続ポート(図示せず)に結合される場合もある。モバイルコンピューティングデバイス600は、オーディオ出力を提供するためのスピーカー614も含み得る。モバイルコンピューティングデバイス600は、本明細書で説明する構成要素のすべてまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構築された筐体620も含み得る。モバイルコンピューティングデバイス600は、使い捨てバッテリーまたは充電式バッテリーなどの、プロセッサ601に結合された電源622を含み得る。充電式バッテリーは、モバイルコンピューティングデバイス600の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートに結合される場合もある。
【００７０】
様々な実施形態は、図7に示すサーバコンピューティングデバイス700などの、様々な市販のサーバデバイスのいずれにも実装され得る。そのようなサーバコンピューティングデバイス700は、通常、揮発性メモリ702と、ディスクドライブ703などの大容量不揮発性メモリとに結合されたプロセッサ701を含み得る。サーバコンピューティングデバイス700は、プロセッサ701に結合された、フロッピーディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ706も含み得る。サーバコンピューティングデバイス700は、他のシステムコンピュータおよびサーバに結合されたローカルエリアネットワークなどの、ネットワーク705とのデータ接続を確立するための、プロセッサ701に結合されたネットワークアクセスポート704も含み得る。
【００７１】
プロセッサ601および701は、上記で説明した様々な実施形態の機能を含む、様々な機能を実行するようにソフトウェア命令(アプリケーション)によって構成され得る、任意のプログラマブルマイクロプロセッサ、マイクロコンピュータ、または1つもしくは複数の多重プロセッサチップであり得る。様々なデバイスでは、1つのプロセッサをワイヤレス通信機能専用とし、1つのプロセッサを他のアプリケーションの実行専用とするなど、複数のプロセッサが設けられ得る。通常、ソフトウェアアプリケーションは、それらがアクセスされ、プロセッサ601および701にロードされる前に、内部メモリ602および702に記憶され得る。プロセッサ601および701は、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含み得る。多くのデバイスでは、内部メモリは、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合であり得る。本明細書では、メモリへの一般的な言及は、様々なデバイスに差し込まれる内部メモリまたはリムーバブルメモリと、プロセッサ601および701内のメモリとを含む、プロセッサ601および701によってアクセス可能なメモリを指す。
【００７２】
上記の方法の説明およびプロセスフロー図は、例示的な例として与えられるものにすぎず、様々な実施形態のステップが提示された順序で実施されなければならないことを要求または暗示するものではない。当業者によって諒解されるように、上記の実施形態におけるステップの順序は、任意の順序で実施され得る。「その後」、「次いで」、「次に」などの語は、ステップの順序を限定するものではなく、これらの語は単に、方法の説明を通じて読者を導くために使用される。さらに、たとえば、冠詞「a」、「an」または「the」を使用する、単数形での請求項の要素へのいかなる言及も、要素を単数形に限定するものとして解釈されるべきではない。
【００７３】
本明細書で開示する実施形態に関して説明する様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明した。そのような機能がハードウェアとして実装されるか、ソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課された設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装形態の決定は、本発明の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【００７４】
本明細書で開示する実施形態に関して説明する様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別ハードウェア構成要素、または本明細書で説明する機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサは、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装される場合もある。代替的に、いくつかのステップまたは方法は、所与の機能に固有の回路によって実施され得る。
【００７５】
いくつかの例示的な実施形態では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装され得る。ソフトウェアにおいて実装される場合、機能は、命令またはコードとして、非一時的プロセッサ可読媒体、コンピュータ可読媒体、もしくはサーバ可読媒体または非一時的プロセッサ可読記憶媒体に記憶され、またはその上で送信され得る。本明細書で開示する方法またはアルゴリズムのステップは、非一時的コンピュータ可読記憶媒体、非一時的サーバ可読記憶媒体、および/または非一時的プロセッサ可読記憶媒体上に存在し得る、プロセッサ実行可能ソフトウェアモジュールまたはプロセッサ実行可能ソフトウェア命令で具現化され得る。様々な実施形態では、そのような命令は、記憶されたプロセッサ実行可能命令または記憶されたプロセッサ実行可能ソフトウェア命令であり得る。有形の非一時的コンピュータ可読記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのような非一時的コンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る任意の他の媒体を含み得る。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)はレーザーを用いてデータを光学的に再生する。上記の組合せも、非一時的コンピュータ可読媒体の範囲内に含まれるべきである。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、有形の非一時的プロセッサ可読記憶媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の、1つまたは任意の組合せまたはセットとして存在し得る。
【００７６】
開示した実施形態の前述の説明は、いかなる当業者も本発明を作成または使用することができるように与えたものである。これらの実施形態に対する様々な修正は当業者には容易に明らかとなり、本明細書で定義した一般原理は、本発明の趣旨または範囲から逸脱することなく、他の実施形態に適用され得る。したがって、本発明は、本明細書に示す実施形態に限定されるものではなく、以下の特許請求の範囲、ならびに本明細書で開示する原理および新規の特徴と一致する最も広い範囲を与えられるべきである。
【符号の説明】
【００７７】
100  通信システム
102  モバイルデバイス
103  ワイヤードまたはワイヤレス接続
104  モバイルデバイス
105  ワイヤードまたはワイヤレス接続
106  モバイルデバイス
107  ワイヤードまたはワイヤレス接続
110  サーバ
111  ワイヤードまたはワイヤレス接続
120  サードパーティサーバ
121  ワイヤードまたはワイヤレス接続
130  インターネット
200  モバイルデバイス
202  モジュール変形形態、第1のモジュール変形形態
203  モジュール変形形態、第2のモジュール変形形態
203'  第2のモジュール変形形態
204  モジュール変形形態、最後のモジュール変形形態
205  グループ
210  ランタイム選択論理
220  ソフトウェア
222  第1のモジュール
224  第2のモジュール
226  第3のモジュール
250  実施形態方法
280  実施形態方法
302  通知
352  第2のモジュール
400  実施形態方法
500  方法
500  実施形態方法
600  モバイルコンピューティングデバイス
601  プロセッサ
602  内部メモリ
604  タッチスクリーンコントローラ
608  トランシーバ
610  アンテナ
612  タッチスクリーンパネル
614  スピーカー
616  セルラーネットワークワイヤレスモデムチップ
618  周辺デバイス接続インターフェース
620  筐体
622  電源
700  サーバコンピューティングデバイス
701  プロセッサ
702  揮発性メモリ、内部メモリ
703  ディスクドライブ
704  ネットワークアクセスポート
705  ネットワーク
706  フロッピーディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ
【図１】
0006513716.tif 000002
【図２Ａ】
0006513716.tif 000003
【図２Ｂ】
0006513716.tif 000004
【図２Ｃ】
0006513716.tif 000005
【図３Ａ】
0006513716.tif 000006
【図３Ｂ】
0006513716.tif 000007
【図４】
0006513716.tif 000008
【図５】
0006513716.tif 000009
【図６】
0006513716.tif 000010
【図７】
0006513716.tif 000011