(57)【要約】      （修正有）【課題】アプリケーション・プログラムのための脆弱性を評価するためのテストシステムを提供する。【解決手段】テストシステムは、コンパイラがソースコードに基づいて生成した中間結果を受け取る。中間結果は、ソースコードの潜在的に脆弱なラインを指示する脆弱性インジケータを含む。システムは、中間結果から生成された第１の実行可能コードに対してグレーボックス・ファジングを遂行して、シード入力のセットを生成する。システムは、到達可能であるがグレーボックス・ファジングによって調査されていないソースコードのラインに関する脆弱性インジケータに基づいて、シード入力の各々について脆弱性スコアを計算する。システムは、シード入力のセットのうち最高の脆弱性スコアを有する１つを選択し、選択されたシード入力を優先権として使用して、中間結果から生成された第２の実行可能コードに対して遂行されるコンコリック実行を遂行する。【選択図】図７
2020205047.tif 000002
【特許請求の範囲】
【請求項１】
プログラムコードの脆弱性を評価するためのコンピュータで実装される方法であって、
コンパイラによってソースコードに基づいて生成された中間結果を受け取るステップであって、前記中間結果が、前記ソースコードの潜在的に脆弱な１または複数のラインを指示する１または複数の脆弱性インジケータを含むステップと、
前記中間結果から生成された第１の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第１のセットを生成するステップと、
到達可能であるが前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの前記ラインに関する前記脆弱性インジケータに基づいて、前記第１のセットの前記シード入力の各々について脆弱性スコアを計算するステップと、
前記第１のセットにおける前記シード入力のうち最高の脆弱性スコアを有する１つを選択するステップと、
前記選択されたシード入力を優先権として使用して、前記中間結果から生成された第２の実行可能コードに対して遂行されるコンコリック実行を遂行するステップとを含む方法。
【請求項２】
前記コンコリック実行がシード入力の第２のセットを生成し、シード入力の前記第２のセットにより、前記コンコリック実行のプログラムフロー制御が、前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの１または複数の分岐を調査する請求項１に記載の方法。
【請求項３】
次の繰り返しの間に前記グレーボックス・ファジング処理によって前記第２のセットの前記１または複数のシード入力が利用されるように、シード入力の前記第１のセットに対してシード入力の前記第２のセットを付加するステップを含む請求項２に記載の方法。
【請求項４】
前記第１のセットのシード入力の各々について脆弱性スコアを計算するステップが、
前記シード入力に対応する前記グレーボックス・ファジング処理によって調査されたプログラム制御フローを識別するステップと、
該プログラム制御フローによって到達可能であるが前記グレーボックス・ファジング処理によって調査されていない複数の脆弱性インジケータに基づいて、前記シード入力に関する前記脆弱性スコアを計算するステップと、
を含む請求項１に記載の方法。
【請求項５】
前記第１のセットの前記シード入力のうち最高の脆弱性スコアを有する１つを選択するステップが、シード入力の前記第１のセットに対する前記コンコリック実行に優先権を与えるように、前記第１のセットの前記シード入力をそれぞれの脆弱性スコアに基づいて並べるステップを含む、請求項１に記載の方法。
【請求項６】
前記中間結果からコードの複数の基本ブロックを識別するステップと、
前記基本ブロックの各々について、該基本ブロックの内部の複数の脆弱性インジケータを判定するステップと、
前記基本ブロックに関連した複数の脆弱性インジケータに対して各基本ブロックのブロック識別子（ＩＤ）をマッピングするマッピング表を生成するステップであって、前記マッピング表が脆弱性スコアを計算するために利用されるステップと、
を含む請求項１に記載の方法。
【請求項７】
前記第１のセットの前記シード入力の各々について脆弱性スコアを計算するステップが、
前記シード入力に対応する前記中間結果のプログラム制御フローに基づいて、プログラム制御フローグラフ（ＣＦＧ）を構築するステップと、
前記シード入力の前記脆弱性スコアを表すために、前記プログラムＣＦＧによって到達可能であるが調査されていないすべての基本ブロックの脆弱性インジケータの数を合計するステップであって、前記マッピング表におけるルックアップ演算を遂行して、前記基本ブロックに関連した複数の脆弱性インジケータを判定することを含むステップと、
を含む請求項６に記載の方法。
【請求項８】
前記脆弱性インジケータのうち前記少なくとも１つが、前記コンパイラによって挿入された、例外のスローおよびキャッチ（スロー／キャッチ）のブロックを含み、ソースコードの関連するラインが実行中に安全規則に違反したとき、オペレーティングシステムによって、例外がスローされキャッチされる請求項１に記載の方法。
【請求項９】
命令を記憶した非一時的マシン可読媒体であって、前記命令がプロセッサによって実行されたとき、該プロセッサが、
コンパイラによってソースコードに基づいて生成された中間結果を受け取るステップであって、前記中間結果が、前記ソースコードの潜在的に脆弱な１または複数のラインを指示する１または複数の脆弱性インジケータを含むステップと、
前記中間結果から生成された第１の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第１のセットを生成するステップと、
到達可能であるが前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの前記ラインに関する前記脆弱性インジケータに基づいて、前記第１のセットの前記シード入力の各々について脆弱性スコアを計算するステップと、
前記第１のセットにおける前記シード入力のうち最高の脆弱性スコアを有する１つを選択するステップと、
前記選択されたシード入力を優先権として使用して、前記中間結果から生成された第２の実行可能コードに対して遂行されるコンコリック実行を遂行するステップと、
を含む動作を遂行する非一時的マシン可読媒体。
【請求項１０】
前記コンコリック実行がシード入力の第２のセットを生成し、シード入力の前記第２のセットにより、前記コンコリック実行のプログラムフロー制御が、前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの１または複数の分岐を調査する請求項９に記載の非一時的マシン可読媒体。
【請求項１１】
前記動作が、次の繰り返しの間に前記グレーボックス・ファジング処理によって前記第２のセットの前記１または複数のシード入力が利用されるように、シード入力の前記第１のセットに対してシード入力の前記第２のセットを付加するステップを含む請求項１０に記載の非一時的マシン可読媒体。
【請求項１２】
前記第１のセットの前記シード入力の各々について脆弱性スコアを計算するステップが、
前記シード入力に対応する前記グレーボックス・ファジング処理によって調査されたプログラム制御フローを識別するステップと、
前記プログラム制御フローによって到達可能であるが前記グレーボックス・ファジング処理によって調査されていない複数の脆弱性インジケータに基づいて、前記シード入力に関する前記脆弱性スコアを計算するステップと、
を含む請求項９に記載の非一時的マシン可読媒体。
【請求項１３】
前記第１のセットの前記シード入力のうち最高の脆弱性スコアを有する１つを選択するステップが、シード入力の前記第１のセットに対する前記コンコリック実行に優先権を与えるように、前記第１のセットの前記シード入力をそれぞれの脆弱性スコアに基づいて並べるステップを含む請求項９に記載の非一時的マシン可読媒体。
【請求項１４】
前記動作が、
前記中間結果からコードの複数の基本ブロックを識別するステップと、
前記基本ブロックの各々について、該基本ブロックの内部の複数の脆弱性インジケータを判定するステップと、
前記基本ブロックに関連した複数の脆弱性インジケータに対して各基本ブロックのブロック識別子（ＩＤ）をマッピングするマッピング表を生成するステップであって、前記マッピング表が脆弱性スコアを計算するために利用されるステップと、
を含む請求項９に記載の非一時的マシン可読媒体。
【請求項１５】
前記第１のセットの前記シード入力の各々について脆弱性スコアを計算するステップが、
前記シード入力に対応する前記中間結果のプログラム制御フローに基づいて、プログラム制御フローグラフ（ＣＦＧ）を構築するステップと、
前記シード入力の前記脆弱性スコアを表すために、前記プログラムＣＦＧによって到達可能であるが調査されていないすべての基本ブロックの脆弱性インジケータの数を合計するステップであって、前記マッピング表におけるルックアップ演算を遂行して、前記基本ブロックに関連した複数の脆弱性インジケータを判定することを含むステップと、
を含む請求項１４に記載の非一時的マシン可読媒体。
【請求項１６】
前記脆弱性インジケータのうち前記少なくとも１つが、前記コンパイラによって挿入された、例外のスローおよびキャッチ（スロー／キャッチ）のブロックを含み、ソースコードの関連するラインが実行中に安全規則に違反したとき、オペレーティングシステムによって、例外がスローされキャッチされる請求項９に記載の非一時的マシン可読媒体。
【請求項１７】
プロセッサと、命令を記憶するために該プロセッサに結合されたメモリとを備えるデータ処理システムであって、前記命令が前記プロセッサによって実行されたとき、該プロセッサが、
コンパイラによってソースコードに基づいて生成された中間結果を受け取るステップであって、前記中間結果が、前記ソースコードの潜在的に脆弱な１または複数のラインを指示する１または複数の脆弱性インジケータを含むステップと、
前記中間結果から生成された第１の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第１のセットを生成するステップと、
到達可能であるが前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの前記ラインに関する前記脆弱性インジケータに基づいて、前記第１のセットの前記シード入力の各々について脆弱性スコアを計算するステップと、
前記第１のセットにおける前記シード入力のうち最高の脆弱性スコアを有する１つを選択するステップと、
前記選択されたシード入力を優先権として使用して、前記中間結果から生成された第２の実行可能コードに対して遂行されるコンコリック実行を遂行するステップと、
を含む動作を遂行するデータ処理システム。
【請求項１８】
前記コンコリック実行がシード入力の第２のセットを生成し、シード入力の前記第２のセットにより、前記コンコリック実行のプログラムフロー制御が、前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの１または複数の分岐を調査する請求項１７に記載のシステム。
【請求項１９】
前記動作が、次の繰り返しの間に前記グレーボックス・ファジング処理によって前記第２のセットの前記１または複数のシード入力が利用されるように、シード入力の前記第１のセットに対してシード入力の前記第２のセットを付加するステップを含む請求項１８に記載のシステム。
【請求項２０】
前記第１のセットの前記シード入力の各々について脆弱性スコアを計算するステップが、
前記シード入力に対応する前記グレーボックス・ファジング処理によって調査されたプログラム制御フローを識別するステップと、
前記プログラム制御フローによって到達可能であるが前記グレーボックス・ファジング処理によって調査されていない複数の脆弱性インジケータに基づいて、前記シード入力に関する前記脆弱性スコアを計算するステップと、
を含む請求項１７に記載のシステム。
【請求項２１】
前記第１のセットの前記シード入力のうち最高の脆弱性スコアを有する１つを選択するステップが、シード入力の前記第１のセットに対する前記コンコリック実行に優先権を与えるように、前記第１のセットの前記シード入力をそれぞれの脆弱性スコアに基づいて並べるステップを含む請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に、安全なマルチパーティ・コンピューティングに関する。より具体的には、本発明の実施形態は、アプリケーション・プログラムのための脆弱性により起動されるテストシステムに関する。
【背景技術】
【０００２】
ハイブリッド・ファジーテストは、手法のいずれか１つに対するコード・カバレッジを単独で改善するためにファジーテスト（すなわちファジング）とコンコリック実行の両方を導入するが、コード・カバレッジ中心の設計は、いかなる脆弱性も含有していないコード空間をやみくもに探索する可能性があるので、脆弱性検知において非効率的である。また、カバレッジ中心のハイブリッド・テストは、コードのチャンクに到達した後に、コードのチャンクの内部に隠れた欠陥を検査するのではなく、素早く次へ進む。しばしば、カバレッジ中心のハイブリッド・ファジーテストは、既に脆弱性の周辺のコードパスが調査済であるという事実にもかかわらず、セキュリティホールとなる脆弱性を逃す可能性がある。
【０００３】
現在のカバレッジ中心のハイブリッド・テスト方法は、Ｄｒｉｌｌｅｒ（選択的なシンボリック実行によってファジングを増補すること）と、ＱＳＹＭ（ハイブリッド・ファジングに適合された実用的なコンコリック実行エンジン）と、ハイブリッド・ファジングに関する確率的パス優先順位とを含む。これらのカバレッジ中心のハイブリッド・ファジング方法のすべてが上記の問題を抱えている。
【発明の概要】
【０００４】
本発明の実施形態が、限定ではなく例として示され、添付図面では類似の参照は類似の要素を示す。
【図面の簡単な説明】
【０００５】
【図１】一実施形態に係るホストシステムを示すブロック図である。
【図２】一実施形態に係る、脆弱性で起動されるハイブリッド・ファジーテスト方法の流れ図の一例を示すブロック図である。
【図３】一実施形態に係る、潜在脆弱性に関してコンパイラによって注入されたコードを示すブロック図である。
【図４】一実施形態に係る、アプリケーション・プログラムに関する制御フローグラフおよび対応するマッピング・タプルの一例である。
【図５】一実施形態に係る、到達可能な脆弱性を有する基本ブロック・マッピングの一例である。
【図６】一実施形態に係る、シナリオに関する脆弱性スコア計算の一例である。
【図７】一実施形態に係る方法を示す流れ図である。
【図８】一実施形態に係るデータ処理システムを示すブロック図である。
【発明を実施するための形態】
【０００６】
本発明の様々な実施形態および態様が、以下で論じられる詳細を参照しながら説明され、添付図面は様々な実施形態を示す。以下の説明および図面は本発明の実例であり、本発明を限定するものと解釈されるべきではない。本発明の様々な実施形態の完全な理解を提供するために、多くの具体的な詳細が説明される。しかしながら、特定の事例では、本発明の実施形態の簡潔な議論を提供するために、周知の詳細または従来の詳細は説明されない。
【０００７】
本明細書における「一実施形態」または「実施形態」に対する参照は、実施形態に関連して説明された特定の特徴、構造または特性が、本発明の少なくとも１つの実施形態に含まれ得ることを意味する。様々な位置において「一実施形態では」という慣用句が出現することは、必ずしもすべてが本明細書における同一の実施形態を指すわけではない。
【０００８】
本開示の実施形態は、プログラムコードの脆弱性を評価するための方法およびシステムを開示するものである。一実施形態によれば、システムは、コンパイラがソースコードに基づいて生成した中間結果を受け取り、中間結果は、ソースコードの潜在的に脆弱な１または複数のラインを指示する１または複数の脆弱性インジケータを含む。このシステムは、中間結果から生成された第１の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第１のセットを生成する。このシステムは、到達可能であるがグレーボックス・ファジング処理によって調査されていないソースコード領域に関する脆弱性インジケータの数に基づいて、第１のセットのシード入力の各々について脆弱性スコアを計算する。このシステムは、第１のセットにおけるシード入力のうち最高の脆弱性スコアを有する１つを選択する。このシステムは、選択されたシード入力を優先権として使用して、中間結果から生成された第２の実行可能コードに対して遂行されるコンコリック実行を遂行する。
【０００９】
図１は、一実施形態に係るデータ処理システムを示すブロック図である。図１を参照して、データ処理システム（たとえばホスト）１００は、ウェブ・サーバまたはクラウド・サーバ、アプリケーション・サーバ、バックエンド・サーバ、またはそれらの組合せなど、サーバまたはサーバのクラスタを含む任意の種類のコンピュータシステムでよい。別の実施形態では、システム１００は、パソコン（たとえばデスクトップ・コンピュータ、ノートパソコン、およびタブレット型コンピュータ）、「シン」クライアント、携帯情報端末（ＰＤＡ）、ウェブで使用可能な設備、スマートウォッチ、または携帯電話（たとえばスマートフォン）などの任意のタイプのデバイスでよい。システム１００は、クライアントがシステム１００によって提供されるリソースまたはサービスにアクセスすることを可能にするインターフェースを含むことができる。サービスの例は、ソフトウェア・プログラムのアプリケーション・ソースコードに関する、バグ／脆弱性分析、ファジーテスト、コリック実行、および優先権を与えられたハイブリッド・ファジーテスト・サービスを含むことができる。サービスは、脆弱性で起動される優先順位づけモジュール１１０を使用して遂行され得る。システム１００は、プライベート・クラウド、パブリック・クラウド、またはハイブリッド・クラウドであり得るクラウドに対するｓｏｆｔｗａｒｅ−ａｓ−ａ−ｓｅｒｖｉｃｅ（ＳａａＳ）システムもしくはｐｌａｔｆｏｒｍ−ａｓ−ａ−ｓｅｒｖｉｃｅ（ＰａａＳ）システムの一部分として構成され得る。インターフェースは、ウェブ・インターフェース、アプリケーション・プログラミング・インターフェース（ＡＰＩ）、および／またはコマンドライン・インターフェース（ＣＬＩ）を含み得る。
【００１０】
脆弱性で起動される優先順位づけモジュール１１０は、脆弱性／サニタイザ・モジュール１０１、基本ブロック（ＢＢ）マッピング・モジュール１０５、制御フローグラフ・モジュール１０３、コーディネータ・モジュール１０７、ファジング・モジュール１０９、およびコンコリック実行モジュール１１１を含み得る。脆弱性／サニタイザ・モジュール１０１は、ソフトウェア・プログラムのソースコードの中の潜在脆弱性を識別するツールであり得る。これらの脆弱性は、メモリ破損、データ不整合、スレッドに関連するバグ／脆弱性などを含み得る。一実施形態では、モジュール１０１は、コンパイラＣｌａｎｇのＵｎｄｅｆｉｎｅｄ  Ｂｅｈａｖｉｏｒ  Ｓａｎｉｔｉｚｅｒなどコンパイラのフロントエンドまたはバックエンドによって脆弱性のラベリングを遂行する。別の実施形態では、モジュール１０１は、潜在脆弱性を含有しているコード領域を分析して脆弱性ラベルの数を識別することができるスタンドアロンのアナライザである。別の実施形態では、ソースコードはコード分析の中間結果としての中間表現（ＩＲ）に変換され得る。
【００１１】
制御フローグラフ（ＣＦＧ）モジュール１０３は、ソフトウェア・プログラムについて、１つの基本ブロック（ＢＢ）から別の基本ブロックまで種々のパスまたは制御フローのグラフを識別してマッピングすることができる。ここで、基本ブロックすなわちＢＢは、コードの１または複数のラインあるいはソフトウェア・プログラムの内部のコードのブロックを含有しているコードの単位を指す。グラフ・マッピングは、ＢＢを相互に接続する１または複数の分岐を記述する１または複数のタプルとして記憶されたツリーグラフであり得る。モジュール１０３は、所与のソフトウェア・アプリケーション・プログラムに対して、ソフトウェア・プログラムの内部の関数／プロシージャの各々について１または複数の手続き内（ｉｎｔｒａｐｒｏｃｅｄｕｒａｌ）ＣＦＧを構築し、発信者−着信者の関係によって手続き間（ｉｎｔｒａｐｒｏｃｅｄｕｒａｌ）（または関数レベル）ＣＦＧを関数に橋渡しして、ソフトウェア・プログラムの手続き間ＣＦＧを構築する。モジュール１０３は、関数の間接呼び出し（ポインタを介するものなど）を解明するために、ポインタが関数呼び出しを指し示す場合にはアプリケーション・プログラムの内部のポインタに対してＡｎｄｅｒｓｅｎのポインタ分析を遂行して、任意の呼び出しの関数を拡張することができる。Ａｎｄｅｒｓｅｎのポインタ分析は、どのポインタまたはヒープ参照がどの変数を指し示すかを分析する静的コード分析である。ポインタ分析は、たとえば変数のアドレシング、ポインタの参照解除、１つの変数から別の変数へのポインタのコピー、およびポインタによる割り当てといった４つのインストラクション・タイプに関する分析を含むことができる。別の実施形態では、モジュール１０３は、たとえばｍａｌｌｏｃまたは新規のメモリ操作に関連したコードといった動的メモリ割り当てを伴うコードに対してＡｎｄｅｒｓｅｎのポインタ分析を適用することもできる。
【００１２】
基本ブロック（ＢＢ）マッピング・モジュール１０５は、ソフトウェア・プログラムの内部の各ＢＢを、ＢＢに関連した複数の潜在脆弱性にマッピングすることができる。マッピングは、ＢＢの１または複数のタプル、およびＢＢによって到達可能な、同タプルの潜在脆弱性の関連するカウントとして記憶され得る。コーディネータ・モジュール１０７は１または複数のグレーボックス・ファジングおよび／またはコンコリック実行を調整することができる。ファジング・モジュール１０９は、ソフトウェア・アプリケーション・プログラムが１または複数のシード入力を生成するためのファジング（たとえばブラックボックス・ファジング、グレーボックス・ファジングまたはホワイトボックス・ファジング）を遂行することができる。コンコリック実行モジュール１１１は、１または複数のシード入力に基づいて、ソフトウェア・アプリケーション・プログラムに対するコンコリック実行を遂行することができる。グレーボックス・ファジングはカバレッジ誘導ファジングを指し、したがって、グレーボックス・ファジングは、アプリケーション・プログラムの新規の制御パスを調査するシード入力のランダム化生成を優先し得ることに留意されたい。ランダム化生成の例は、シード入力のスワップバイト、反転ビットなど、シード入力の変更を含む。ＢＢによって到達可能な脆弱性は、ＢＢの制御フローの内部の潜在脆弱性／バグを指すことに留意されたい。
【００１３】
一実施形態では、脆弱性で起動される優先順位づけモジュール１１０は、クライアントから、分析のために、アプリケーション・プログラムのソースコードを受け取ってよい。このソースコードは、ソースコード１５１の一部分としてメモリ１５０内に記憶され得る。ソースコードの中間表現（ＩＲ）（たとえば中間結果）はコンパイラによって（ＩＲコード１５３の一部分として）生成され得る。次いで、ＣＦＧモジュール１０３およびＢＢマッピング・モジュール１０５は、ＩＲを分析し、ＩＲコードからＢＢマッピングおよびＣＦＧを生成して、ＣＦＧ／ＢＢマップ１５５の一部分として脆弱性分析のために記憶する。
【００１４】
図２は、一実施形態に係る脆弱性で起動されるハイブリッド・ファジーテスト方法の流れ図の一例を示すブロック図である。流れ図２００は、ソフトウェア・プログラムに対する、コンコリック実行を伴う優先されたハイブリッド・ファジングの動作を示す。流れ図２００を遂行し得る処理ロジックは、ソフトウェア、ハードウェア、またはこれらの組合せを含み得る。一実施形態では、流れ図は図１のシステム１００によって遂行される。図２を参照して、処理ロジックはターゲットプログラム２０１を受け取る。ターゲットプログラム２０１は、任意のプログラム可能言語（Ｃ、Ｃ＋＋、ｊａｖａ、ｐｙｔｈｏｎ、ｏｂｊｅｃｔｉｖｅ−Ｃ、ＪａｖａＳｃｒｉｐｔなど）のソースコードであり得る。動作１において、サニタイザ・モジュールを有するコンパイラは、ターゲットプログラムのソースコードから、サニタイザ・ラベルを有する中間表現２０３（たとえばＩＲコード）を生成する。サニタイザ・モジュールは、ソースコードの中の１または複数の潜在脆弱性を表す、コンパイラによって注入された１または複数のサニタイザ・コードに対応する１または複数のサニタイザ・ラベル（たとえばサニタイザ／脆弱性ラベル）を生成する。中間表現（ＩＲ）は、コンパイラまたは仮想マシンによってソースコードを表すために内部で使用されるデータ構造またはコードを指すことに留意されたい。
【００１５】
図２を参照して、ＩＲコード２０３が一旦生成されると、動作２において、ＩＲコード２０３における各ＢＢの内部の脆弱性ラベルの数をカウントするために、ＩＲコード２０３に対して静的解析が遂行される。処理ロジックは、ＢＢ識別子（ＩＤ）を有する各ＢＢにさらにラベルを付けて、ＢＢの内部の（またはＢＢが到達可能な）脆弱性ラベルの数に対するＢＢ  ＩＤのマッピングを生成することができる。ＢＢは、エントリ以外は分岐入力がなく、イグジット以外は分岐出力がない、ソース・ライン・シーケンスを指すことに留意されたい。基本ブロックは、制御フローグラフ（ＣＦＧ）における、頂点またはノードを形成することができる。ＣＦＧは、アプリケーション・プログラムが実行中に通過する可能性があるすべてのパスの、グラフ表記法を使用した表現を指す。
【００１６】
図２を参照して、動作３において、ＩＲ  ２０３は２つの実行ファイル２０９〜２１１へとコンパイルされ得、第１の実行ファイル２０９はグレーボックス・ファジングのために使用され、第２の実行ファイル２１１はコンコリック実行のために使用される。ここには２つの実行ファイルしか示されていないが、３つ以上の実行ファイルが生成され得、そのため、複数のファジングおよび／またはコンコリック実行が同時に実行され得る。一実施形態では、ＢＢペアリング情報２０７が生成され得る。ＢＢペアリング情報２０７は、優先度分析のためのターゲットプログラムのＣＦＧを表すことができる。ＢＢペアリング情報は、親子関係のＩＤによってＢＢをＢＢのエッジ（または分岐）にマッピングする１または複数のマッピング・タプルを含むことができる。エッジはマッピングされるＢＢの子ＢＢの分岐に対応する。
【００１７】
図２を参照して、一実施形態では、シード入力の第１のセットを生成するために、第１のコンパイルされた実行ファイルに対してファジングが繰り返し遂行される。ファジングまたはファジーテストは、コンピュータ・プログラムに対するシード入力として無効データ、予想外のデータ、またはランダム・データを生成する自動のソフトウェア・アプリケーション・プログラムのテスト技術を指す。一実施形態では、ファジングは、プログラムに対して投げかけられた除外項目（たとえばわな／試み）を監視することができる。ファザーは、ブラックボックス・ファザー、グレーボックス・ファザー、またはホワイトボックス・ファザーであり得る。ブラックボックス・ファザーはアプリケーション・プログラムをブラックボックスとして扱い、プログラムの内部構造に気づかない。ホワイトボックス・ファザーは、プログラムの内部構造にアクセスし、アクセスに基づいてプログラムにおける種々のパスを系統的に調査することができるが、分析のために長い時間がかかるため、実行時間が高コストである。グレーボックス・ファザーは、プログラムの構造に関する情報を集めるために計測を利用することができる。たとえば、グレーボックス・ファザーはシード入力に関する基本ブロック遷移／分岐をトレースするためのトレーサを利用することができ、したがって調査されているソースコードの中に新規の分岐があるかどうかを指示することができる。計測は、性能のレベルを監視するかもしくは測定するため、誤差を診断するため、および／またはアプリケーション・プログラムのトレース情報にアクセスするための能力を指すことに留意されたい。
【００１８】
一実施形態では、ファジングはシード入力をランダムに生成する。別の実施形態では、ファジングは、既存のシード入力を変化させるシード入力を生成する。ファジングのためのユーザ設定は、シード入力をランダムに生成するべきか、それとも既存のシード入力を変更して追加のシード入力を生成するべきかを選択し得る。
【００１９】
ファジングの繰り返しが一旦完了してシード入力の第１のセットが生成されると、動作４において、コーディネータは、シード入力の第１のセットの各々について脆弱性スコアを計算する。脆弱性スコアは、到達可能であるがシード入力用のファザーによって調査されていない分岐の脆弱性ラベルのカウントであり得る。一実施形態では、シード入力に関する脆弱性スコアは順を追ってソートされ、より大きい脆弱性スコアを有するシード入力に、コンコリック実行に対する入力として優先権が与えられる。ここで、第２のコンパイルされた実行ファイルによってコンコリック実行が実行され得る。別の実施形態では、複数のコンコリック実行が同時に実行され得る。コンコリック実行またはコンコリック・テストは、特定の実行パスに沿ってプログラム変数をシンボリック変数として扱う技術である、計測を通じてのシンボリック実行によるテストを指すことに留意されたい。ここで、シード入力の第１のセットに関して、到達可能であるが未調査のパスに対してコンコリック実行を実行し得ることに留意されたい。１または複数のコンコリック実行に基づいて、シード入力の第２のセットが、脆弱性で起動される（または優先権を与えられる）やり方で判定され得る。ここで、到達可能であるが調査されていない潜在脆弱性のカウントが大きいシード入力に優先権が与えられる。
【００２０】
図２を参照して、動作５において、シード入力の第２のセットがシード入力の第１のセットと組み合わされ、コーディネータは、シード入力の（第１のセットおよび第２のセットと重複しない）第３のセットを生成するために、第２の繰り返しにおいて遂行されるファジングを調整する。次いで、出力は、シード入力の第４のセットを生成するために、１または複数のコンコリック実行に対する入力として供給される。繰り返しは、予定時間が経過するまで、あるいは脆弱性の割合および／またはカウントに到達するまで、繰り返され得る。一実施形態では、コーディネータはすべてのシード入力の経過を追う。別の実施形態では、新規の脆弱性および／または分岐を明らかにすることなく、固有の分岐および／または脆弱性を調査するシード入力のみ維持するシード入力は、コーディネータによって棄却される。
【００２１】
図３は、一実施形態に係る潜在脆弱性に関してコンパイラによって注入されたコードを示すブロック図である。図３を参照して、ｃ＝ａ＋ｂという演算の出力をプリントするｃ＋＋ソースコード３０１が示されている。サニタイザを伴うコンパイラは、ソースコード３０３のコードのライン“ｉｎｔ  ｃ  ＝  ａ＋ｂ；”に対するＩＲコード３０３を生成することができる。ここで、ＩＲコード３０３は、たとえばコード“ｉｎｔ  ｃ  ＝  ａ＋ｂ”に関する潜在脆弱性である整数オーバーフロー・エラーを見つけるためのハンドラである。数値演算の結果が結果型の範囲で表現できないとき、整数オーバーフロー・エラーが生じ得る。これは、演算ａ＋ｂの結果が［ＩＮＴ＿ＭＩＮ，  ＩＮＴ＿ＭＡＸ］の範囲を超えたとき生じ得る。
【００２２】
図４は、一実施形態に係るアプリケーション・プログラムに関する制御フローグラフ（ＣＦＧ）および対応するマッピング・タプルの一例を示すものである。図４を参照して、ＣＦＧ  ４００は、ＩＤ（Ａ１）、ＩＤ（Ｂ１）およびＩＤ（Ｂ２）といったＩＤを有する３つの基本ブロックと、ＩＤ（Ａ１−＞Ｂ１）を有するＡ１からＢ１への分岐およびのＩＤ（Ａ１−＞Ｂ２）を有するＡ１からＢ２への分岐の２つの分岐とを含むことができる。ＣＦＧ  ４００に基づいて、ペアリング情報またはマッピング・タプルは、｛＜ＩＤ（Ａ１）：  ＩＤ（Ａ１−＞Ｂ１）＞，  ＜ＩＤ（Ａ１）：  ＩＤ（Ａ１−＞Ｂ２）＞｝と生成され得る。
【００２３】
図５は、一実施形態に係る到達可能な脆弱性を有する基本ブロックの一例である。図５を参照して、ＣＦＧ  ５００は、ＢＢによって前方に到達され得る複数の脆弱性ラベルを示す。ここで、ＩＲの潜在脆弱性コード・ブロックを生成するためにＣｌａｎｇ用の未定義動作サニタイザ（ＵＢＳａｎ）が使用される。図５を参照して、ＢＢ  ５０１は８つの子ＢＢを含み、たとえばＢＢ  ５０２〜ＢＢ  ５０４といった３つのＢＢがＵＢＳａｎ（または潜在脆弱性）を含有している。したがって、ＢＢ  ５０１は、ＢＢ  ５０１によって到達可能な潜在脆弱性の数について３つのカウントを有する。そこで、ＢＢ  ５０１から脆弱性ラベリング数へのＢＢマッピングは＜ＩＤ（ＢＢ）：ｎｕｍｂｅｒ＞となり得、たとえば＜５０１：３＞である。ＢＢマッピングは、コーディネータ・モジュールによって、ＢＢに対応するシード入力に対するコンコリック実行に優先権を与えるために使用され得る。
【００２４】
図６は、一実施形態に係るシナリオに関する脆弱性スコア計算の一例である。図６の計算は、図１のコーディネータ・モジュール１０７などのコーディネータ・モジュールによって遂行され得る。図６を参照して、一実施形態では、コーディネータは、脆弱性で起動されるハイブリッド・グレーボックス・ファジングおよびコンコリック実行の第１の繰り返しを開始していてよい。このシナリオでは、ファジング繰り返しは、ＣＦＧ  ６００を有するアプリケーション・プログラムの実行ファイルによって遂行されていてよく、シード入力６０１〜６０２を生成していてよい。ここで、シード入力６０１はＢＢ  Ｄ１に到達するパスに対応し得、シード入力６０２はＢＢ  Ｃ５に到達するパスに対応し得る。シード入力生成は、バイトを交換することまたはビットをフリッピングすることによって、ランダム化されていてよく、または変化させられていてよい。次に、脆弱性／バグ・カバレッジを最大化するために、コンコリック実行向けに、より大きいスコアを有するシードに優先権を与えるように、シード入力６０１および６０２の各々について脆弱性スコアが計算される。
【００２５】
図６を参照して、ＣＦＧ  ６００は、（以前に説明されたように）アプリケーション・プログラムに対する制御フローグラフを表すことができる。より具体的には、ＣＦＧ  ６００はツリー階層構造の中に１または複数のＢＢを含み、各ＢＢは、各ＢＢが到達可能な複数の脆弱性またはバグを指示する。たとえば、ＢＢ  Ａ１（Ａ１：２４によって表される）は、主ノードＡ１が２４の到達可能な潜在脆弱性を有することを指示し得る。
【００２６】
一実施形態では、脆弱性スコア計算は、シード入力のＢＢに対応する、到達可能であるが未調査のＢＢの数に基づいて計算される。たとえばシード入力すなわちパス６０１はＡ１からＤ１までのパスに対応する。ここで、パス６０１の調査済のＢＢはＡ１、Ｂ１、Ｃ１、およびＤ１を含む。パス６０１に対する未調査のＢＢはＤ２、Ｃ２、Ｃ３、およびＣ４を含む。未調査のＢＢに基づき、一実施形態では、脆弱性スコアは、到達可能であるが未調査の潜在バグの総数の、到達可能であるが未調査のＢＢの数のカウントに対する平均をとることによって計算され得、たとえばパス６０１のスコア＝１／４（４＋５＋３＋４）＝４となる。別の実施形態では、脆弱性スコアは、重み付けされた平均値算出のための解明する試行カウンタに基づいて計算することができる。
【００２７】
Ａ１からＣ５までのパスに対応するシード入力すなわちパス６０２については、パス６０２に関する調査済のＢＢはＡ１、Ｂ２、およびＣ５を含む。パス６０２に関する未調査のＢＢはＣ６を含む。未調査のＢＢに基づいて、脆弱性スコアは、到達可能であるが未調査の潜在バグの総数の、到達可能であるが未調査のＢＢの数のカウントに対する平均をとることによって計算され得、たとえばパス６０２のスコア＝３（ＢＢ  Ｃ６の到達可能な脆弱性／バグ）となる。コーディネータは、パス６０１〜６０２の計算された脆弱性スコアに基づいて、コンコリック実行のためのシード入力として、たとえば４のスコアを有するパス６０１である最高の脆弱性スコアを有するシード入力を選択することになる。ここで、コンコリック実行は、シード入力としてシード入力６０１を受け取ることになる。次いで、コンコリック実行は、シード入力６０１を再生し、分岐条件を調査するためのコンコリック実行を遂行して、パス６０１の、直接到達可能であるが未調査のＢＢ用のシード入力を判定し、たとえばＤ２、Ｃ２、Ｃ３、およびＣ４のＢＢに到達し得るシード入力を判定する。パス６０１に対するコンコリック実行が遂行された後、コーディネータは、最高の脆弱性スコアを有する次のシード入力（たとえばシード入力６０２）を判定することになる。コンコリック実行は、次いで、シード入力６０２が次の最高の脆弱性スコア３を有するので、シード入力６０２を使用して遂行されることになる。次いで、パス６０２に対応する直接到達可能であるが未調査の任意のパスに対するシード入力を判定するために、コンコリック実行が遂行され、たとえば、コンコリック実行はＢＢ  Ｃ６に到達することができるシード入力を判定する。コンコリック実行が使用可能なファジング・シード入力を求めて遂行された後に、一実施形態では、コンコリック実行で生成されたシード入力が、再実行のためにファザーにフィード・バックされる。次いで、ファザーは、シード入力の各々がバグ・カバレッジを改善するかどうかということに依拠して、シード入力を保持するかまたは棄却することができる。別の実施形態では、明らかになった分岐のために、解明する試行カウンタが増加され得る。そのため、はるかに大きい解明する試行値を有する分岐は、調査されているので、優先度を下げられることになる。一実施形態では、コーディネータは、生成されたシード入力を監視して、ファジングと、優先権を与えられたコンコリック実行との、別の繰り返しを開始してよい。別の実施形態では、ファジングと、優先権を与えられたコンコリック実行とが、予定時間まで、または繰り返しが生じるまで繰り返され得る。別の実施形態では、ファジングと、優先権を与えられたコンコリック実行とは、バグ・カバレッジの所定の割合が達成されるまで繰り返され得る。
【００２８】
脆弱性スコアは、より未検証のバグに達することができるシード入力に優先権を与えるために使用されるが、長期的にはいかなる解明困難な分岐条件にも捕らえられるべきではないことに留意されたい。
【００２９】
図７は一実施形態に係る方法を示す流れ図である。処理７００を遂行し得る処理ロジックは、ソフトウェア、ハードウェア、またはこれらの組合せを含み得る。たとえば、処理７００は図１のデータ処理システム１００によって遂行され得る。図７を参照して、ブロック７０１において、処理ロジックは、コンパイラによってソースコードに基づいて生成された中間結果（たとえばコンパイラによって注入された脆弱性コードを有する中間表現）を受け取り、中間結果は、ソースコードの潜在的に脆弱な１または複数のラインを指示する１または複数の脆弱性インジケータを含む。ブロック７０２において、処理ロジックは、中間結果から生成された第１の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第１のセットを生成する。ブロック７０３において、処理ロジックは、到達可能であるがグレーボックス・ファジング処理によって調査されていないソースコードのラインに関する脆弱性インジケータに基づいて、第１のセットのシード入力の各々について脆弱性スコアを計算する。ブロック７０４において、処理ロジックは、第１のセットにおけるシード入力のうち最高の脆弱性スコアを有する１つを選択する。ブロック７０５において、処理ロジックは、選択されたシード入力を優先権として使用して、中間結果から生成された第２の実行可能コードに対して遂行されるコンコリック実行を遂行する。
【００３０】
一実施形態では、コンコリック実行がシード入力の第２のセットを生成し、シード入力の第２のセットにより、コンコリック実行のプログラムフロー制御が、グレーボックス・ファジング処理によって調査されていないソースコードの１または複数の分岐を調査する。別の実施形態では、処理ロジックは、次の繰り返しの間にグレーボックス・ファジング処理によって第２のセットの１または複数のシード入力が利用されるように、シード入力の第１のセットに対してシード入力の第２のセットをさらに付加する。
【００３１】
一実施形態では、第１のセットのシード入力の各々について脆弱性スコアを計算するステップは、シード入力に対応するグレーボックス・ファジング処理によって調査されたプログラム制御フローを識別するステップと、プログラム制御フローによって到達可能であるがグレーボックス・ファジング処理によって調査されていない複数の脆弱性インジケータに基づいて、シード入力に関する脆弱性スコアを計算するステップとを含む。一実施形態では、第１のセットのシード入力のうち最高の脆弱性スコアを有する１つを選択するステップは、シード入力の第１のセットに対するコンコリック実行に優先権を与えるように、第１のセットのシード入力をそれぞれの脆弱性スコアに基づいて並べるステップを含む。
【００３２】
一実施形態では、処理ロジックは、中間結果からコードの複数の基本ブロックをさらに識別する。処理ロジックは、基本ブロックの各々について、基本ブロックの内部の複数の脆弱性インジケータをさらに判定して、各基本ブロックのブロック識別子（ＩＤ）を基本ブロックに関連した複数の脆弱性インジケータにマッピングするマッピング表を生成し、マッピング表は脆弱性スコアを計算するために利用される。別の実施形態では、第１のセットのシード入力の各々について脆弱性スコアを計算するステップは、シード入力に対応する中間結果のプログラム制御フローに基づいてプログラム制御フローグラフ（ＣＦＧ）を構築するステップと、シード入力の脆弱性スコアを表すために、プログラムＣＦＧによって到達可能であるが調査されていないすべての基本ブロックの脆弱性インジケータの数を合計するステップであって、マッピング表におけるルックアップ演算を遂行して、基本ブロックに関連した複数の脆弱性インジケータを判定するステップを含む、合計するステップとを含む。一実施形態では、脆弱性インジケータのうち少なくとも１つは、コンパイラによって挿入された、例外のスローおよびキャッチ（スロー／キャッチ）のブロックを含み、ソースコードの関連するラインが実行中に安全規則に違反したとき、オペレーティングシステムによって、例外がスローされ、キャッチされる。
【００３３】
上記で示されて説明されたコンポーネントのうちいくつかまたはすべてが、ソフトウェア、ハードウェア、またはこれらの組合せで実施され得ることに留意されたい。たとえば、そのようなコンポーネントは持続的記憶デバイスにインストールして記憶されたソフトウェアとして実施され得、本出願の全体にわたって説明された処理または演算を実行するために、プロセッサ（図示せず）によってメモリにロードされ、かつ実行され得る。あるいは、そのようなコンポーネントは、集積回路（たとえば特定用途向けＩＣすなわちＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）、またはフィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）などの専用ハードウェアの中にプログラムされた、または組み込まれた、アプリケーションから、対応するドライバおよび／またはオペレーティングシステムを介してアクセス可能な実行可能コードとして実施され得る。その上、そのようなコンポーネントは、ソフトウェア・コンポーネントによって１または複数の特定の命令を介してアクセス可能な命令セットの一部分として、プロセッサまたはプロセッサコアにおける特定のハードウェア・ロジックとして実施され得る。
【００３４】
図８は、本発明の一実施形態とともに使用され得るデータ処理システムの一例を示すブロック図である。たとえば、システム１５００は、上記で説明された処理または方法のうち任意のものを遂行する、上記で説明されたデータ処理システムのうち任意のものを表し得、たとえば上記で説明されたようなシステム１０１など、たとえば上記で説明されたクライアント・デバイスまたはサーバなどでよい。
【００３５】
システム１５００は多くの様々な構成要素を含むことができる。これらの構成要素は、集積回路（ＩＣ）、ＩＣの一部分、個別の電子デバイス、またはコンピュータシステムのマザーボードもしくはアドイン・カードなどの回路基板に適合された他のモジュール、またはコンピュータシステムのシャーシの内部に別様に組み込まれた構成要素として実施され得る。
【００３６】
システム１５００は、コンピュータシステムの多くの構成要素の高レベルの概観を示すように意図されていることにも留意されたい。しかしながら、特定の実装形態には追加の構成要素が存在し得、その上、他の実装形態では、示された構成要素の種々の配置が生じ得ることを理解されたい。システム１５００は、デスクトップ・コンピュータ、ノートパソコン、タブレット型コンピュータ、サーバ、携帯電話、メディアプレーヤ、携帯情報端末（ＰＤＡ）、スマートウォッチ、パーソナル・コミュニケータ、ゲーム機、ネットワークのルータまたはハブ、無線アクセスポイント（ＡＰ）またはリピータ、セットトップ・ボックス、またはこれらの組合せを表し得る。さらに、単一のマシンまたはシステムしか示されていないが、「マシン」または「システム」という用語は、本明細書で論じられた技法のうち任意の１または複数を遂行する１組（または複数の組）の命令を個々にまたは連帯的に実行するマシンまたはシステムの任意の収集を含むと解釈されるものとする。
【００３７】
一実施形態では、システム１５００は、バスまたは相互接続１５１０を介して、プロセッサ１５０１、メモリ１５０３、およびデバイス１５０５〜１５０８を備える。プロセッサ１５０１は、単一のプロセッサコアまたは複数のプロセッサコアを含む、単一のプロセッサまたは複数のプロセッサを表し得る。プロセッサ１５０１は、マイクロプロセッサ、中央処理装置（ＣＰＵ）等の１または複数の汎用プロセッサを表し得る。より具体的には、プロセッサ１５０１は、複数命令セット・コンピューティング（ＣＩＳＣ）マイクロプロセッサ、縮小命令セット・コンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＭ）マイクロプロセッサ、他の命令セットを実施するプロセッサ、または命令セットの組合せを実施するプロセッサでよい。プロセッサ１５０１は、特定用途向け集積回路（ＡＳＩＣ）、セルラー式プロセッサまたはベースバンド・プロセッサ、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、ネットワーク・プロセッサ、グラフィックス・プロセッサ、通信用プロセッサ、暗号プロセッサ、コプロセッサ、組み込み型プロセッサ、または命令を処理することができる何らかの他のタイプの論理などの１または複数の専用プロセッサでもよい。
【００３８】
超低電圧プロセッサなど低電力のマルチコア・プロセッサ・ソケットであり得るプロセッサ１５０１は、システムの様々な構成要素と通信するための主処理ユニットおよび中央ハブとして働き得る。そのようなプロセッサはシステム・オン・チップ（ＳｏＣ）として実施され得る。プロセッサ１５０１は、本明細書で論じた動作およびステップを遂行するための命令を実行するように構成されている。システム１５００がさらに含み得るグラフィックス・インターフェースは、表示コントローラ、グラフィックス・プロセッサ、および／または表示デバイスを含み得る任意選択のグラフィックス・サブシステム１５０４と通信する。
【００３９】
プロセッサ１５０１はメモリ１５０３と通信してよく、メモリ１５０３は、一実施形態では、所与の量のシステムメモリを与えるために複数のメモリ・デバイスによって実施され得る。メモリ１５０３は、ランダムアクセスメモリ（ＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）または他のタイプの記憶デバイスなど、１または複数の揮発性記憶（すなわちメモリ）デバイスを含み得る。メモリ１５０３は、プロセッサ１５０１または何らかの他のデバイスによって実行される命令のシーケンスを含む情報を記憶し得る。たとえば、種々のオペレーティングシステム、デバイス・ドライバ、ファームウェア（たとえば入出力基本システムすなわちＢＩＯＳ）の実行可能コードおよび／またはデータ、および／またはアプリケーションがメモリ１５０３にロードされ、プロセッサ１５０１によって実行され得る。オペレーティングシステムは、たとえばマイクロソフト（登録商標）のウィンドウズ（登録商標）オペレーティングシステム、アップルのマックＯＳ（登録商標）／ｉＯＳ（登録商標）、グーグル（登録商標）のアンドロイド（登録商標）、Ｌｉｎｕｘ（登録商標）、Ｕｎｉｘ（登録商標）など任意の種類のオペレーティングシステム、またはＶｘＷｏｒｋｓなど他のリアルタイム・オペレーティングシステムもしくは組み込み型オペレーティングシステムであり得る。
【００４０】
システム１５００がさらに含み得るデバイス１５０５〜１５０８などのＩＯデバイスは、ネットワーク・インターフェース・デバイス１５０５、任意選択の入力デバイス１５０６、および他の任意選択のＩＯデバイス１５０７を含む。ネットワーク・インターフェース・デバイス１５０５は、無線トランシーバおよび／またはネットワーク・インターフェース・カード（ＮＩＣ）を含み得る。無線トランシーバは、Ｗｉ−Ｆｉトランシーバ、赤外線トランシーバ、ブルートゥース・トランシーバ、ＷｉＭａｘトランシーバ、無線セルラー電話トランシーバ、衛星トランシーバ（たとえば全地球測位システム（ＧＰＳ）トランシーバ）、もしくは他の無線周波数（ＲＦ）トランシーバ、またはこれらの組合せでよい。ＮＩＣはイーサネットカードでよい。
【００４１】
入力デバイス１５０６は、マウス、タッチパッド、タッチセンシティブ・スクリーン（表示デバイス１５０４に組み込まれ得る）、スタイラスなどのポインタデバイス、および／またはキーボード（たとえば物理的キーボードまたはタッチセンシティブ・スクリーンの一部分として表示されたバーチャル・キーボード）を含み得る。たとえば、入力デバイス１５０６はタッチスクリーンに結合されたタッチスクリーン・コントローラを含み得る。タッチスクリーンおよびタッチスクリーン・コントローラは、たとえば、それだけではないが、容量技術、抵抗技術、赤外線技術、表面弾性波技術、ならびに他の近接センサ配列またはタッチスクリーンに対する１または複数の接触点を判定するための他の要素を含む複数のタッチ感知技術のうち任意のものを使用して、接触と、動きまたは動きの中断とを検知する。
【００４２】
ＩＯデバイス１５０７はオーディオ・デバイスを含み得る。オーディオ・デバイスは、音声認識、音声応答、デジタル記録、および／または電話の機能など、音声対応の機能を促進するためのスピーカおよび／またはマイクロフォンを含み得る。他のＩＯデバイス１５０７は、ユニバーサル・シリアル・バス（ＵＳＢ）ポート、パラレルポート、シリアルポート、プリンタ、ネットワーク・インターフェース、バスブリッジ（たとえばＰＣＩ−ＰＣＩブリッジ）、センサ（たとえば加速度計、ジャイロスコープ、磁力計、光センサ、コンパス、近接センサなどの運動センサ）またはこれらの組合せをさらに含み得る。デバイス１５０７がさらに含み得る画像処理サブシステム（たとえばカメラ）は、写真およびビデオクリップの記録などのカメラ機能を促進するために利用される電荷結合デバイス（ＣＣＤ）または相補型金属酸化膜半導体（ＣＭＯＳ）光センサなどの光センサを含み得る。特定のセンサがセンサ・ハブ（図示せず）を介して相互接続１５１０に結合されてよく、一方、キーボードまたは熱センサなど他のデバイスは、システム１５００の特定の構成または設計に依拠して、組み込みコントローラ（図示せず）によって制御され得る。
【００４３】
データ、アプリケーション、１または複数のオペレーティングシステムなどの情報の持続的記憶を提供するために、プロセッサ１５０１には大容量記憶装置（図示せず）も結合され得る。様々な実施形態において、より薄くより軽いシステム設計を可能にするばかりでなくシステム応答性も改善するために、この大容量記憶装置はソリッドステート・デバイス（ＳＳＤ）によって実施されてよい。しかしながら、他の実施形態では、大容量記憶装置は、停電中にコンテキスト状態および他のそのような情報の不揮発性記憶装置を有効にするために、主として、ＳＳＤキャッシュとして働く少量のＳＳＤ記憶装置を伴うハードディスク・ドライブ（ＨＤＤ）を使用して実施されてよく、その結果、システム・アクティビティの再起動において高速のパワーアップが可能になる。また、フラッシュメモリが、たとえばシリアル周辺インターフェース（ＳＰＩ）を介してプロセッサ１５０１に結合されてよい。このフラッシュメモリは、基本入出力ソフトウェア（ＢＩＯＳ）ならびにシステムの他のファームウェアを含むシステム・ソフトウェアの不揮発性記憶装置をもたらし得る。
【００４４】
記憶デバイス１５０８が含み得るコンピュータ・アクセス可能な記憶媒体１５０９（マシン可読記憶媒体またはコンピュータ可読媒体としても知られている）には、本明細書で説明された技法または機能のうち任意の１または複数を具現する１または複数の命令のセットまたはソフトウェア（たとえばモジュール、ユニット、および／またはロジック１５２８）が記憶されている。処理モジュール／ユニット／ロジック１５２８は、たとえば脆弱性で起動される優先順位づけモジュール１１０または図１のシステム１００など、上記で説明された構成要素のうち任意のものを表し得る。処理モジュール／ユニット／ロジック１５２８は、データ処理システム１５００による実行中には、メモリ１５０３の内部および／またはプロセッサ１５０１の内部に、余すところなく、または少なくとも部分的に存在してもよく、メモリ１５０３およびプロセッサ１５０１はマシンアクセス可能な記憶媒体も構成する。処理モジュール／ユニット／ロジック１５２８は、ネットワーク・インターフェース・デバイス１５０５によってネットワークを通じてさらに送信／受信されてよい。
【００４５】
コンピュータ可読記憶媒体１５０９は、上記で説明されたいくつかのソフトウェア機能を持続的に記憶するためにも使用され得る。例示的実施形態では、コンピュータ可読記憶媒体１５０９は単一の媒体であるように示されているが、「コンピュータ可読記憶媒体」という用語は、命令の１または複数のセットを記憶する単一の媒体または複数の媒体（たとえば集中型もしくは分散型のデータベース、および／または関連するキャッシュおよびサーバ）を含むように解釈されるべきである。「コンピュータ可読記憶媒体」という用語は、マシンによる実行のための命令のセットを記憶することまたは符号化することが可能であって本発明の技法のうち任意の１または複数をマシンに遂行させる任意の媒体を含むようにも解釈されるべきである。したがって、「コンピュータ可読記憶媒体」という用語は、それだけではないが、ソリッドステート・メモリならびに光媒体および磁気媒体、または何らかの他の非一時的マシン可読媒体を含むように解釈されるべきである。
【００４６】
処理モジュール／ユニット／ロジック１５２８、構成要素および本明細書で説明された他の機能は、個別のハードウェア構成要素として実施され得、またはＡＳＩＣ、ＦＰＧＡ、ＤＳＰまたは類似のデバイスなどハードウェア構成要素の機能の中に組み込まれ得る。加えて、処理モジュール／ユニット／ロジック１５２８は、ハードウェアデバイスの内部のファームウェアまたは機能回路として実施され得る。さらに、処理モジュール／ユニット／ロジック１５２８は、ハードウェアデバイスとソフトウェア・コンポーネントの任意の組合せで実施され得る。
【００４７】
システム１５００は、データ処理システムの様々な構成要素を用いて示されているが、何らかの特定のアーキテクチャまたは構成要素を相互に連結するやり方を表すことは意図されておらず、そのため、詳細は、本発明の実施形態に密接な関係はないことに留意されたい。ネットワークコンピュータ、ハンドヘルドコンピュータ、携帯電話、サーバ、および／または構成要素がより少ないかもしくは恐らくより多い他のデータ処理システムも、本発明の実施形態とともに使用され得ることも理解されたい。
【００４８】
先の詳細な説明のいくつかの部分は、コンピュータ記憶装置の内部のデータ・ビットにおける動作のアルゴリズムおよび記号表現の観点から提示されている。これらのアルゴリズム的な説明および表現は、データ処理技術の当業者が、著作物の要旨を他の当業者に最も効果的に伝えるために使用するやり方である。ここで、アルゴリズムは、一般に、所望の結果に達する動作の自己矛盾がないシーケンスと考えられる。動作は、物理量の物理的操作を必要とするものである。
【００４９】
しかしながら、これらおよび類似の用語のすべてが、適切な物理量に関連づけられるべきであり、これらの量に与えられた好都合なラベルでしかないことを念頭に置かれたい。特に別記しない限り、上記の議論から明らかなように、説明の全体にわたって、以下の特許請求の範囲において説明されるものなどの用語を利用する議論は、コンピュータシステムのレジスタおよびメモリの内部の物理的（電子的）量として表されたデータを操作して、コンピュータシステムのメモリもしくはレジスタ、または他のそのような情報の記憶デバイス、伝送デバイスもしくは表示デバイスの内部の物理量として同様に表される他のデータへと変換するコンピュータシステム（または類似の電子計算デバイス）の作用および処理を指すことが理解される。
【００５０】
図に示された技術は、１または複数の電子デバイス上に記憶されて実行されるコードおよびデータを使用して実施され得る。そのような電子デバイスは、非一時的コンピュータ可読記憶媒体（たとえば磁気ディスク、光ディスク、ランダムアクセスメモリ、読み取り専用メモリ、フラッシュメモリ・デバイス、相変化メモリ）および一時的なコンピュータ可読伝送媒体（たとえば搬送波、赤外線信号、デジタル信号など、電気、光、音響、または他の形態の伝搬される信号）などのコンピュータ可読媒体を使用して、コードおよびデータを記憶したり、（内部で、および／またはネットワーク上の他の電子デバイスと）通信したりする。
【００５１】
先の図に表された処理または方法は、ハードウェア（たとえば回路、専用ロジックなど）、ファームウェア、（たとえば非一時的コンピュータ可読媒体上に具現された）ソフトウェア、またはこれらの組合せを含む処理ロジックによって遂行され得る。上記では、処理または方法がいくつかの順次動作の観点から説明されているが、説明された動作のうちいくつかは異なる順序で遂行され得ることを理解されたい。その上に、いくつかの動作は、順次ではなく並行して遂行され得る。
【００５２】
前述の明細書では、本発明の実施形態が特定の例示的実施形態を参照しながら説明されている。以下の特許請求の範囲で説明されるような本発明のより広範な精神および範囲から逸脱することなく、様々な修正形態が作製され得ることが明白であろう。したがって、本明細書および図面は、限定的意味ではなく例示的意味に見なされるべきである。
【図１】
2020205047.tif 000003
【図２】
2020205047.tif 000004
【図３】
2020205047.tif 000005
【図４】
2020205047.tif 000006
【図５】
2020205047.tif 000007
【図６】
2020205047.tif 000008
【図７】
2020205047.tif 000009
【図８】
2020205047.tif 000010