(57)【特許請求の範囲】
【請求項１】
配備されたプログラムの脆弱性分析の方法であって、
前記配備されたプログラムから導出された分析対象バイナリプログラム（ＢＰＵＡ）を受け取るステップと、
前記配備されたプログラムの入出力（Ｉ／Ｏ）動作を分析するステップと、
前記ＢＰＵＡに対する２つ以上の調査技法の適用及び前記Ｉ／Ｏ動作の分析に基づいて前記配備されたプログラムに対する入力を発見するステップと、
前記入力のいずれが負の入力であるのかを判定するステップであって、前記負の入力は、前記配備されたプログラムの脆弱性を含む応答をトリガする前記入力の一部分を含む、ステップと、
前記負の入力及びトリガされた応答に基づいて、前記配備されたプログラムを変更して前記脆弱性を含む応答をトリガすることなしに前記負の入力の少なくともいくつかを処理するための前記配備されたプログラム用のパッチを開発するステップと、
前記パッチを前記配備されたプログラムに自動的にディスパッチするステップと、
をコンピュータが実行する方法。
【請求項２】
前記入力のいずれが正の入力であるのかを判定するステップであって、前記正の入力は、前記配備されたプログラムの脆弱性を含まない応答をトリガする前記入力の一部分を含む、ステップと、
前記負の入力のそれぞれ及び前記正の入力のそれぞれを、前記配備されたプログラム内においてトリガされる前記応答と関連付けるステップと、
前記負の入力のそれぞれ及び関連付けられた応答を負の試験ケースとして試験データベース内において保存するステップと、
前記正の入力のそれぞれ及び関連付けられた応答を正の試験ケースとして前記試験データベース内において保存するステップと、
を更に前記コンピュータが実行する請求項１に記載の方法。
【請求項３】
前記正の試験ケース及び負の試験ケースに基づいて全体フィットネス関数を生成するステップを更に前記コンピュータが実行し、前記パッチは、前記フィットネス関数及び遺伝的プログラミングに基づいた前記配備されたプログラムに対する変化過程を含む請求項２に記載の方法。
【請求項４】
前記パッチを前記配備されたプログラムに自動的にディスパッチする前に、前記正の試験ケース及び負の試験ケースを使用して前記パッチを試験するステップを更に前記コンピュータが実行する請求項２に記載の方法。
【請求項５】
１つ又は複数のファザーを使用して追加の入力を更に発見するステップと、
前記追加の入力のいずれが負の入力であるのかを判定するステップと、
を更に前記コンピュータが実行する請求項１に記載の方法。
【請求項６】
前記脆弱性は、メモリ破壊エラー、バッファオーバーフロー、ソフトウェアクラッシュ、及び演算エラーを含む請求項１に記載の方法。
【請求項７】
前記調査技法は、前記ＢＰＵＡのシンボリック実行及び未知のプログラム動作用のサイドチャネル入力生成プロセスを含み、且つ、
前記Ｉ／Ｏ動作は、前記配備されたプログラムとの間におけるユーザーのコンソールにおけるやり取り及び前記配備されたプログラムとの間において通信されてキャプチャされたネットワークトラフィックを含む請求項１に記載の方法。
【請求項８】
前記入力を発見するステップでは、
シンボリック実行プロセスにおいて発見された入力の第１の組を受け取るステップと、
サイドチャネル入力生成において発見された入力の第２の組を受け取るステップと、
入力−出力状態機械モデル（ステートフルモデル）生成プロセスから入力の第３の組を受け取るステップと、
前記入力の第１の組、前記入力の第２の組、及び前記入力の第３の組を比較し、前記入力のいずれが、前記入力の第１の組、前記入力の第２の組、及び前記入力の第３の組のすべてに含まれていないのかを判定するステップと、
前記入力の第２の組から除外されている前記入力の１つ又は複数について、除外されている入力のプレフィックスの組を生成し、且つ、前記サイドチャネル入力生成において、前記プレフィックスの組を１つ又は複数のその他の入力を発見するための基礎として使用するステップと、
前記入力の第１の組から除外されている前記入力の１つ又は複数について、前記除外されている入力を前記ステートフルモデルに組み込むステップと、
を前記コンピュータが実行する請求項１に記載の方法。
【請求項９】
その時点までに学習された前記ＢＰＵＡの前記Ｉ／Ｏ動作を抽象的レベルにおいて表す入力−出力状態機械モデル（ステートフルモデル）を開発するステップを更に前記コンピュータが実行し、前記ステートフルモデルは、遺伝的プログラミングに基づいた修復フレームワークを使用したパッチ開発の基礎である請求項１に記載の方法。
【請求項１０】
前記Ｉ／Ｏ動作を分析するステップ、前記入力を発見するステップ、前記判定するステップ、前記パッチを開発するステップ、及び前記ディスパッチするステップは、前記配備されたプログラムが稼働している間に前記コンピュータが実行する請求項１に記載の方法。
【請求項１１】
動作を実行するべく１つ又は複数のプロセッサによって実行可能であるプログラミングコードをその内部においてエンコードされた状態で有する１つ又は複数の一時的ではないコンピュータ可読ストレージ媒体であって、
前記動作は、
配備されたプログラムから導出された分析対象バイナリプログラム（ＢＰＵＡ）を受け取るステップと、
前記配備されたプログラムの入出力（Ｉ／Ｏ）動作を分析するステップと、
前記ＢＰＵＡに対する２つ以上の調査技法の適用及び前記Ｉ／Ｏ動作の分析に基づいて前記配備されたプログラムに対する入力を発見するステップと、
前記入力のいずれが負の入力であるのかを判定するステップであって、前記負の入力は、前記配備されたプログラムの脆弱性を含む応答をトリガする前記入力の一部分を含む、ステップと、
前記負の入力及びトリガされた応答に基づいて、前記配備されたプログラムを変更して前記脆弱性を含む応答をトリガすることなしに前記負の入力の少なくともいくつかを処理するための前記配備されたプログラム用のパッチを開発するステップと、
前記パッチを前記配備されたプログラムに自動的にディスパッチするステップと、
を有する、コンピュータ可読ストレージ媒体。
【請求項１２】
前記動作は、
入力のいずれが正の入力であるのかを判定するステップであって、前記正の入力は、前記配備されたプログラムの脆弱性を含まない応答をトリガする前記入力の一部分を含む、ステップと、
前記負の入力のそれぞれ及び前記正の入力のそれぞれを、前記配備されたプログラム内においてトリガされる前記応答と関連付けるステップと、
前記負の入力のそれぞれ及び関連付けられた応答を負の試験ケースとして試験データベース内において保存するステップと、
前記正の入力のそれぞれ及び関連付けられた応答を正の試験ケースとして前記試験データベース内において保存するステップと、
を更に有する請求項１１に記載の一時的ではないコンピュータ可読ストレージ媒体。
【請求項１３】
前記動作は、前記正の試験ケース及び負の試験ケースに基づいて全体フィットネス関数を生成するステップを更に有し、前記パッチは、前記フィットネス関数及び遺伝的プログラミングに基づいた前記配備されたプログラムに対する変化過程を含む請求項１２に記載の一時的ではないコンピュータ可読ストレージ媒体。
【請求項１４】
前記動作は、前記パッチを前記配備されたプログラムに自動的にディスパッチする前に、前記正の試験ケース及び負の試験ケースを使用して前記パッチを試験するステップを更に有する請求項１２に記載の一時的ではないコンピュータ可読ストレージ媒体。
【請求項１５】
前記動作は、
１つ又は複数のファザーを使用して追加の入力を更に発見するステップと、
前記追加の入力のいずれが負の入力であるのかを判定するステップと、
を更に有する請求項１１に記載の一時的ではないコンピュータ可読ストレージ媒体。
【請求項１６】
前記脆弱性は、メモリ破壊エラー、バッファオーバーフロー、ソフトウェアクラッシュ、及び演算エラーを含む請求項１１に記載の一時的ではないコンピュータ可読ストレージ媒体。
【請求項１７】
前記調査技法は、前記ＢＰＵＡのシンボリック実行及び未知のプログラム動作用のサイドチャネル入力生成プロセスを含み、且つ、
前記Ｉ／Ｏ動作は、前記配備されたプログラムとの間におけるユーザーのコンソールにおけるやり取り及び前記配備されたプログラムとの間において通信されてキャプチャされたネットワークトラフィックを含む請求項１１に記載の一時的ではないコンピュータ可読ストレージ媒体。
【請求項１８】
前記入力を発見するステップは、
シンボリック実行プロセスにおいて発見された入力の第１の組を受け取るステップと、
サイドチャネル入力生成において発見された入力の第２の組を受け取るステップと、
入力−出力状態機械モデル（ステートフルモデル）生成プロセスからの入力の第３の組を受け取るステップと、
前記入力の第１の組、前記入力の第２の組、及び前記入力の第３の組を比較し、前記入力のいずれが、前記入力の第１の組、前記入力の第２の組、及び前記入力の第３の組のすべてに含まれていないのかを判定するステップと、（明細書の対応記載を確認）
前記入力の第２の組から除外されている前記入力の１つ又は複数について、除外されている入力のプレフィックスの組を生成し、且つ、前記サイドチャネル入力生成において、前記プレフィックスの組を１つ又は複数のその他の入力を発見するための基礎として使用するステップと、
前記入力の第１の組から除外されている前記入力の１つ又は複数について、前記除外されている入力を前記ステートフルモデルに組み込むステップと、
を含む請求項１１に記載の一時的ではないコンピュータ可読ストレージ媒体。
【請求項１９】
前記動作は、その時点までに学習された前記ＢＰＵＡの前記Ｉ／Ｏ動作を抽象的レベルにおいて表す入力−出力状態機械モデル（ステートフルモデル）を開発するステップを更に有し、前記ステートフルモデルは、遺伝的プログラムに基づいた修復フレームワークを使用したパッチ開発の基礎である請求項１１に記載の一時的ではないコンピュータ可読ストレージ媒体。
【請求項２０】
前記Ｉ／Ｏ動作を分析するステップ、前記入力を発見するステップ、前記判定するステップ、前記パッチを開発するステップ、及び前記ディスパッチするステップは、前記配備されたプログラムが稼働している間に実行される請求項１１に記載の一時的はないコンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本特許出願は、２０１５年３月５日付けで出願された米国仮特許出願第６２／１２８，９３２号の利益及びその優先権を主張するものであり、この特許文献の内容は、引用により、そのすべてが本明細書に包含される。
【０００２】
本明細書において開示されている実施形態は、脆弱性分析のための自律型推論システムに関する。
【背景技術】
【０００３】
ソフトウェア開発における現在の慣行には、開発フェーズにおけるソフトウェアの試験及び検証が伴いうる。但し、多くのバグ又はコーナーケースは、満足できるほどに解決されない場合がある。開発フェーズにおける試験により、バグ又はコーナーケースのすべてが解決されない場合があり、その理由は、完全なカバレージ用の試験は、一般に難しく、且つ、経済的に実行可能なものをはるかに上回る時間及びリソースを所要しうるからである。
【０００４】
また、現在の慣行には、ソフトウェアにおけるソフトウェア脆弱性を検出するセキュリティを専門としたセキュリティコンサルタント及び会社が伴いうる。脆弱性が検出された後に、セキュリティコンサルタントは、それらの脆弱性をオリジナルのソフトウェア開発者に提出しうる。この結果、パッチを開発するべく、オリジナルのソフトウェア開発者が頼られることになる。但し、オリジナルのソフトウェア開発者が、もはや、存在していない場合があり、或いは、脆弱性のパッチ処理に伴うリソースの消費を回避する場合もある。パッチが開発される場合にも、ソフトウェアのユーザーの大部分におけるパッチの再配備は、大きな時間及びリソースの支出を必要とする場合があり、且つ、更新の適用において１つ又は複数のユーザーの勤勉性に依存している場合もある。
【０００５】
ソフトウェアの脆弱性を修復するための別の方式は、利用するべく署名を開発し、且つ、クライアントサイトにおいて配備されたウイルス除去及びマルウェア除去スキャナを介してこれらを阻止するというものである。但し、この方式が有効でありうるのは、既知の脅威の場合のみである。この結果、ウイルス除去スキャナは、ウイルス又はマルウェアが有効であることを許容する未知のソフトウェア脆弱性を修正しない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願第１４／６２０，１０６号明細書
【特許文献２】米国特許出願第１４／７９２，５０７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本明細書において特許請求されている主題は、後述のものなどの任意の欠点を解決するか又は環境においてのみ稼働する実施形態に限定されるものではない。むしろ、この背景の節は、本明細書において記述されているいくつかの実施形態が実施されうる１つの例示用の技術エリアを示すべく提供されるに過ぎない。
【課題を解決するための手段】
【０００８】
一実施形態の一態様によれば、配備されたプログラムの脆弱性分析の方法は、配備されたプログラムから導出された分析対象バイナリプログラム（Ｂｉｎａｒｙ  Ｐｒｏｇｒａｍ  Ｕｎｄｅｒ  Ａｎａｌｙｓｉｓ：ＢＰＵＡ）を入力するステップを含んでもよい。方法は、配備されたプログラムの入出力（Ｉ／Ｏ）動作を分析するステップを含んでもよい。方法は、ＢＰＵＡに対する２つ以上の調査技法の適用及びＩ／Ｏ動作の分析に基づいて配備されたプログラムに対する入力を発見するステップを含んでもよい。方法は、入力のいずれが負の入力であるのかを判定するステップを含んでもよい。負の入力は、配備されたプログラムの脆弱性を含む応答をトリガする入力の一部分を含んでもよい。負の入力及びトリガされた応答に基づいて、方法は、配備されたプログラムを変更して脆弱性を含む応答をトリガすることなしに負の入力の少なくともいくつかを処理するための配備されたプログラム用のパッチを開発するステップを含んでもよい。方法は、配備されたプログラムに対してパッチを自動的にディスパッチするステップを含んでもよい。
【０００９】
実施形態の目的及び利点は、少なくとも請求項において具体的に指摘されている要素、特徴、及び組合せにより、実現及び達成されることになる。
【００１０】
上述の概略的な説明及び以下の詳細な説明は、いずれも、特許請求されている本発明の例示及び説明を目的としており、且つ、その限定を目的としたものではないことを理解されたい。
【００１１】
そのいずれもが、本明細書において記述されている少なくとも１つの実施形態に従って構成されている添付図面を使用し、例示用の実施形態について更なる具体性及び詳細を伴って記述及び説明することとする。
【図面の簡単な説明】
【００１２】
【図１】１つ又は複数の実施形態が実装されうる例示用のシステムのブロックダイアグラムである。
【図２】図１のシステムにおいて実装されうる例示用の演算（計算）システムを示す。
【図３】図１及び図２のシステムにおいて実装されうる例示用の自律型推論システム（ＡＲＳ）モジュールを示す。
【図４】図３のＡＲＳモジュールの例示用の一実施形態を示す。
【図５】図４のＡＲＳモジュールにおいて実装されうる例示用の入力発見プロセスを示す。
【図６Ａ】配備されたプログラムの脆弱性を分析する方法のフローチャートを示す。
【図６Ｂ】配備されたプログラムの脆弱性を分析する方法のフローチャートを示す。
【発明を実施するための形態】
【００１３】
ソフトウェアの複雑性の増大に伴って、これらのソフトウェアを広範に試験するシステムの複雑性も増大している。現在のソフトウェア試験慣行は、リリース前にソフトウェアを試験すると共に、リリース後に、バグが見出されるのに伴ってバグを修正するステップを含みうる。増加するサイバー犯罪に起因し、リリース後におけるバグの修正は、問題であり、その理由は、これが、予め未知の脆弱性を利用した絶え間ない「０デイ」攻撃をもたらしうるからである。
【００１４】
従って、本明細書において開示されているいくつかの実施形態においては、自律型推論システム（Ａｕｔｏｎｏｍｏｕｓ  Ｒｅａｓｏｎｉｎｇ  Ｓｙｓｔｅｍ：ＡＲＳ）が配備されてもよい。ＡＲＳは、ＡＲＳが試験するべく実装されている配備されたプログラムから離隔した状態で配備されてもよい。ＡＲＳは、配備されたプログラムの脆弱性について常に監視してもよく、且つ、最小限の人間による介入を伴って又は伴うことなしに、配備されたプログラムを修正する。ＡＲＳは、配備されたシステムと共に稼働してもよく、且つ、配備されたプログラムのソフトウェアリリースサイクルにおいて通常の試験及び検証フローの外部において脆弱性を検出してもよい。ＡＲＳは、配備されたプログラムを構築した開発チームから遠く離れた状態で、クライアントサイトにおいて配備されるのに伴い、自律的に機能してもよい。更には、ＡＲＳは、自律的に稼働すると共に検出された脅威をパッチ処理してもよく、且つ、「人間の時間」ではなく、「機械の時間」において修正する。
【００１５】
いくつかの実施形態においては、ＡＲＳは、プログラム分析技法とＩ／Ｏ動作分析の両方を使用することにより、配備されたプログラムの脆弱性を継続的に試験してもよい。ＡＲＳは、クラッシュを結果的にもたらすソフトウェア脆弱性をトリガしうる入力について継続的にサーチしてもよい。ＡＲＳは、将来のクラッシュが、脆弱性をトリガした特定の入力において発生しえないように、配備されたプログラムを自動的に修正するパッチを開発してもよい。
【００１６】
ＡＲＳは、ソフトウェア脆弱性を見出すためのいくつかのタイプのソフトウェア分析を組み合わせてもよい。例えば、ＡＲＳは、稼働の最中に配備されたプログラムに適用されたコンソールにおけるやり取り及び／又はネットワークトラフィックから収集された入出力（Ｉ／Ｏ）動作を分析してもよい。ＡＲＳは、適宜、（クラッシュをトリガする入力及びクラッシュをトリガしない入力の両方について）情報を収集し、クラッシュをトリガする入力用のパッチを開発し、且つ、パッチを適用する。添付図面を参照し、この及びその他の実施形態について説明する。
【００１７】
図１は、いくつかの実施形態が実装されうる例示用のシステム１００のブロックダイアグラムである。システム１００は、演算（計算）システム１０２において実装されたローカルＡＲＳモジュール１１０及び／又はクラウドサーバー１０６において実装されたクラウドＡＲＳモジュール１１１を含んでもよい。ローカルＡＲＳモジュール１１０及びクラウドＡＲＳモジュール１１１は、ＡＲＳモジュール１１０／１１１と総称される。ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２の脆弱性分析のために構成されてもよい。脆弱性分析は、継続的に、実質的に継続的に、定期的に、又はなんらかのインターバルで、実行されてもよい。
【００１８】
一般に、ＡＲＳモジュール１１０／１１１によって実行される脆弱性分析は、配備されたプログラム１１２に対する入力の発見を含んでもよい。入力は、データの組又はストリング、データのタイプ、データのシーケンス、数値、シンボルなどのような特定のデータ、或いは、これらのなんらかの組合せを含んでもよい。入力に対する配備されたプログラム１１２の応答が特定されてもよい。いくつかの実施形態においては、応答は、調査技法から且つ／又は配備されたプログラム１１２の入出力（Ｉ／Ｏ）動作の分析から特定されてもよい。ＡＲＳモジュール１１０／１１１は、入力のいずれが、配備されたプログラム１１２の脆弱性を含む応答を結果的にもたらすのかを判定してもよい（負の入力）。次いで、ＡＲＳモジュール１１０／１１１は、負の入力がもはや脆弱性を含む応答を結果的にもたらさないように、配備されたプログラム１１２を変更するパッチを開発及び／又はディスパッチしてもよい。
【００１９】
配備されたプログラム１１２は、任意のソフトウェアプログラムを含んでもよい。図示の実施形態においては、配備されたプログラム１１２は、一般の人々への一般的な普及のために、その製造者によってリリースされたものであってもよい。例えば、ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２の製造者とＡＲＳモジュール１１０／１１１を監督している別のエンティティの間における調整を伴うことなしに、配備されたプログラム１１２のリリースの後に実装されてもよい。一般に、配備されたプログラムは、ＡＲＳモジュール１１０／１１１に関係付けられていなくてもよく、その理由は、配備されたプログラム１１２に関する事前の知識が、ＡＲＳモジュール１１０／１１１によって実行される脆弱性分析に関与しえないからである。
【００２０】
システム１００においては、演算システム１０２、クラウドサーバー１０６、及び外部演算（計算）システム１０４は、ネットワーク１０４を介して通信してもよい。以下、演算システム１０２、クラウドサーバー１０６、外部演算システム１０４、及びネットワーク１４０のそれぞれについて簡単に説明する。
【００２１】
ネットワーク１４０は、有線及び／又は無線のネットワークを含んでもよく、且つ、スター構成、トークンリング構成、又はその他の構成などの任意の適切な構成を有してもよい。更には、ネットワーク１４０は、ローカルエリアネットワーク（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ：ＬＡＮ）、ワイドエリアネットワーク（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ：ＷＡＮ）（例えば、インターネット）、及び／又は複数の装置がそれに跨って通信しうるその他の相互接続されたデータ経路を含んでもよい。いくつかの実施形態においては、ネットワーク１４０は、ピアツーピアネットワークを含んでもよい。又、ネットワーク１４０は、様々な異なる通信プロトコルにおけるデータの通信を可能にしうる電気通信ネットワークの一部分に結合されてもよく、或いは、これを含んでもよい。
【００２２】
いくつかの実施形態においては、ネットワーク１４０は、ショートメッセージサービス（Ｓｈｏｒｔ  Ｍｅｓｓａｇｉｎｇ  Ｓｅｒｖｉｃｅ：ＳＭＳ）、マルチメディアメッセージングサービス（Ｍｕｌｔｉｍｅｄｉａ  Ｍｅｓｓａｇｉｎｇ  Ｓｅｒｖｉｃｅ：ＭＭＳ）、ハイパーテキスト転送プロトコル（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ：ＨＴＴＰ）、直接的なデータ接続、無線アプリケーションプロトコル（Ｗｉｒｅｌｅｓｓ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ：ＷＡＰ）、電子メールなどを介したものを含むデータを送受信するためのＢＬＵＥＴＯＯＴＨ（登録商標）通信ネットワーク及び／又はセルラー通信ネットワークを含む。ネットワーク１４０は、規格に基づいたプロトコル又は別の適切なプロトコル（例えば、Ｗｉ−Ｆｉ（登録商標））を介した通信を可能にしてもよい。
【００２３】
外部演算システム１０４は、ハードウェアサーバー、パーソナルコンピュータ、モバイルコンピュータ、モバイル装置、及びこれらに類似したものなどの任意の演算装置を含んでもよい。外部演算システム１０４は、メモリ、１つ又は複数のプロセッサ、及びネットワーク１４０を介して通信するべく使用されるハードウェアを含んでもよい。
【００２４】
外部演算システム１０４は、演算システム１０２及び配備されたプログラム１１２とインターフェイスしてもよい。例えば、配備されたプログラム１１２は、外部演算システム１０４からネットワーク１４０を介して入力を受け取ってもよいと共に／又はネットワーク１４０を介して外部演算システム１０４に対して応答を提供してもよい。外部演算システム１０４及び演算システム１０２からの入力及び応答の通信は、ネットワークトラフィックの一例であってもよく、これらは、ＡＲＳモジュール１１０／１１１によって使用されてもよい。いくつかの実施形態においては、ユーザーは、外部演算システム１０４上のコンソールを動作させてもよい。コンソールの動作により、配備されたプログラム１１２に対して入力が提供されうる。
【００２５】
クラウドサーバー１０６は、メモリ、１つ又は複数のプロセッサ、及びネットワーク１４０を介して通信するための能力を有するハードウェアサーバーを含んでもよい。クラウドサーバー１０６は、クラウドＡＲＳモジュール１１１をその上に読み込まれた状態において有してもよい。クラウドＡＲＳモジュール１１１は、ローカルＡＲＳモジュール１１０に実質的に類似した方式で動作するように構成されてもよい。クラウドＡＲＳモジュール１１１は、配備されたプログラム１１２がその上に読み込まれる演算システム１０２に対してリモート方式により、読み込まれてもよい。クラウドＡＲＳモジュール１１１を実装した実施形態においては、演算システム１０２は、ローカルＡＲＳモジュール１１０を有していなくてもよい。その代わりに、クラウドＡＲＳモジュール１１１は、本開示の別の場所において記述されている脆弱性分析又はそのいくつかの部分を実行するべく、演算システム１０２及び／又は配備されたプログラム１１２に対してリモート方式でアクセスしてもよい。
【００２６】
演算システム１０２は、ハードウェアサーバー、パーソナルコンピュータ、モバイルコンピュータ、モバイル装置、及びこれらに類似したものなどの任意の演算装置を含んでもよい。演算システム１０２は、メモリ、１つ又は複数のプロセッサ、及びネットワーク１４０を介して通信するべく使用されるハードウェアを含んでもよい。演算システム１０２のいくつかの更なる詳細は、図２を参照して提供される。
【００２７】
演算システム１０２は、ローカルＡＲＳモジュール１１０及び配備されたプログラム１１２をその上に読み込まれた状態において有してもよい。ローカルＡＲＳモジュール１１０は、配備されたプログラム１１２の脆弱性分析を実行するべく、配備されたプログラム１１２とやり取りしてもよい。演算システム１０２上において配備されている間に、ユーザーは、コンソールなどのなんらかのハードウェアコンポーネントを使用することにより、配備されたプログラム１１２とやり取り（相互に作用）してもよい。例えば、ユーザーは、コンソールを介して入力を配備されたプログラム１１２に提供してもよく、且つ、コンソール又は演算システム１０２の別のハードウェアコンポーネントを介して応答を受け取ってもよい。ローカルＡＲＳモジュール１１０及び／又はクラウドＡＲＳモジュール１１１は、コンソールにおけるやり取りを使用し、配備されたプログラム１１２内の脆弱性を見出してもよい。
【００２８】
ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２の脆弱性分析のために構成されたコード及びルーチンを含んでもよい。脆弱性分析は、配備されたプログラム１１２における脆弱性を見出すと共にパッチ処理するステップを含んでもよい。いくつかの実施形態においては、ＡＲＳモジュール１１０／１１１は、例えば、フィールドプログラム可能なゲートアレイ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ：ＦＰＧＡ）又は用途固有の集積回路（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）を含むハードウェアを使用することにより、実装されてもよい。いくつかのその他の例においては、ＡＲＳモジュール１１０／１１１は、ハードウェアとソフトウェアの組合せを使用して実装されてもよい。
【００２９】
ソフトウェアにおける実装形態は、演算システム１０２及び／又はクラウドサーバー１０６のハードウェアに含まれうるものなどの１つ又は複数のトランジスタ又はトランジスタ素子の迅速な起動及び起動停止を含んでもよい。更には、ソフトウェアによって定義された命令が、トランジスタ素子内の情報に対して動作してもよい。ソフトウェア命令の実装形態は、少なくとも一時的に、電子経路を再構成してもよく、且つ、演算ハードウェアを変換してもよい。
【００３０】
図示の実施形態においては、ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２の脆弱性を分析するように構成されてもよい。脆弱性は、例えば、メモリ破壊エラー、バッファオーバーフロー、ソフトウェアクラッシュ、演算エラー（例えば、０による除算）を含んでもよいであろう。更には、ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２のＩ／Ｏ動作を分析するように構成されてもよい。Ｉ／Ｏ動作は、本開示の別の場所において記述されているコンソールにおけるやり取り及び／又はネットワークトラフィックに基づいたものであってもよい。いくつかの実施形態においては、配備されたプログラム１１２の脆弱性を分析するステップ及びＩ／Ｏ動作を分析するステップは、配備されたプログラム１１２が稼働中である間に実行されてもよい。
【００３１】
ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２の入出力（Ｉ／Ｏ）動作を分析してもよい。いくつかの実施形態においては、Ｉ／Ｏ動作は、配備されたプログラムとの間におけるユーザーのコンソールにおけるやり取り及び／又は配備されたプログラム１１２との間において通信されたネットワークトラフィックを含んでもよい。ネットワークトラフィックは、ＡＲＳモジュール１１０／１１１によってキャプチャされてもよい。配備されたプログラム１１２の脆弱性を見出すべく、ＡＲＳモジュール１１０／１１１は、入力及び入力を処理した結果得られる応答を発見及び／又は収集するように構成されてもよい。ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２に対する入力を発見してもよく、且つ、入力のいずれが、配備されたプログラム１１２の脆弱性を含む応答をトリガする（引き起こす）のか（負の入力）、並びに、入力のいずれが、配備されたプログラム１１２の脆弱性を含んでいない応答をトリガするのか（正の入力）、を判定してもよい。
【００３２】
入力は、複数の調査技法及び／又はＩ／Ｏ動作を使用することにより、発見されてもよい。いくつかの実施形態においては、複数の調査技法は、２つ以上の調査技法を含んでもよく、これらは、ＢＰＵＡのシンボリック実行プロセス、未知のプログラム動作用のサイドチャネル入力生成プロセス、及び配備されたプログラム１１２の状態機械を抽象的レベルにおいてキャプチャするように構成されたステートフルモデル生成プロセスを含んでもよい。
【００３３】
負の入力、正の入力、並びに、負の入力及び正の入力によってトリガされた応答に基づいて、ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２用のパッチを開発してもよい。パッチは、脆弱性を含む応答をトリガすることなしに負の入力の少なくともいくつかを処理するべく配備されたプログラム１１２を変更してもよい。ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２に対してパッチを自動的にディスパッチしてもよい。
【００３４】
いくつかの実施形態においては、入力及び応答は、試験ケースとして試験データベース内において保存されてもよい。試験ケースは、正の試験ケースと負の試験ケースを含んでもよい。正の試験ケースは、正の入力及び関連付けられた応答に基づいたものであってもよい。負の試験ケースは、負の入力及び関連付けられた応答に基づいたものであってもよい。ＡＲＳモジュール１１０／１１１は、試験ケースに基づいてパッチを試験及び開発してもよい。
【００３５】
本開示の範囲を逸脱することなしに、変更、追加、又は省略がシステム１００に対して実施されてもよい。例えば、本開示は、外部演算システム１０４のうちの１つ又は複数、１つ又は複数のクラウドサーバー１０６、１つ又は複数の配備されたプログラム１１２を有する１つ又は複数の演算システム１０２、又はこれらの任意の組合せを含みうるシステムに対して適用されてもよい。
【００３６】
更には、本明細書において記述されている実施形態における様々なコンポーネントの分離は、分離がすべての実施形態において発生することを示すべく意図されたものではない。記述されているコンポーネントは、本開示の利益を伴って、単一のコンポーネントとして１つに統合されてもよく、或いは、複数のコンポーネントに分離されてもよいものと理解されたい。
【００３７】
図２は、例示用の演算（計算）装置２００を示している。演算装置２００は、配備されたプログラム１１２の脆弱性分析のために構成されてもよい。演算装置２００は、１つ又は複数のプロセッサ２２４、メモリ２２２、ＡＲＳモジュール１１０／１１１を含むデータストレージ２０２を含んでもよく、且つ、配備されたプログラム１１２、通信ユニット２２６、及びコンソール２０１を含んでもよい。演算装置２００は、図１の演算システム１０２に対応したものであってもよい。更には、演算装置２００は、図１の外部演算システム１０４及び／又はクラウドサーバー１０６に実質的に類似したものであってもよい。
【００３８】
プロセッサ２２４は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な特殊目的又は汎用コンピュータ、演算エンティティ、又は処理装置を含んでもよく、且つ、任意の適用可能なコンピュータ可読ストレージ媒体上において保存された命令を実行するように構成されてもよい。例えば、プロセッサ２２４は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ：ＤＳＰ）、ＡＳＩＣ、ＦＰＧＡ、又はプログラム命令を解釈及び／又は実行すると共に／又はデータを処理するように構成された任意のその他のデジタル又はアナログ回路を含んでもよい。
【００３９】
図２には、単一のプロセッサとして示されているが、プロセッサ２２４は、個別に又は集合的に本開示において記述されている任意の数の動作を実行するように構成された任意の数のプロセッサを含んでもよいことを理解されたい。更には、プロセッサ２２４のうちの１つ又は複数は、１つ又は複数の異なる電子装置上において存在してもよい。いくつかの実施形態においては、プロセッサ２２４は、プログラム命令を解釈及び／又は実行してもよいと共に／又は、メモリ２２２、データストレージ２０２、又はメモリ２２２、並びに、データストレージ２０２内において保存されたデータを処理してもよい。いくつかの実施形態においては、プロセッサ２２４は、データストレージ２０２からプログラム命令をフェッチしてもよく、且つ、プログラム命令をメモリ２２２内に読み込んでもよい。プログラム命令がメモリ２２２内に読み込まれた後に、プロセッサ２２４は、プログラム命令を実行してもよい。
【００４０】
メモリ２２２及びデータストレージ２０２は、その上に保存された状態においてコンピュータ実行可能命令又はデータ構造を担持するか又は有するコンピュータ可読ストレージ媒体を含んでもよい。このようなコンピュータ可読ストレージ媒体は、プロセッサ２２４などの汎用又は特殊目的コンピュータによってアクセスされうる任意の利用可能な媒体を含んでもよい。限定ではなく、例として、このようなコンピュータ可読ストレージ媒体は、ランダムアクセスメモリ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：ＲＡＭ）、読出し専用メモリ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ：ＲＯＭ）、電気的に消去可能なプログラム可能な読出し専用メモリ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓｂｌｅ  Ｐｒｏｇｒａｍｍｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ：ＥＥＰＲＯＭ）、コンパクトディスク読出し専用メモリ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ：ＣＤ−ＲＯＭ）、又はその他の光学ディスクストレージ、磁気ディスクストレージ、又はその他の磁気ストレージ装置、フラッシュメモリ装置（例えば、半導体メモリ装置）、又はコンピュータ実装可能命令又はデータ構造の形態において望ましいプログラムコードを担持又は保存するように使用されてもよいと共に汎用又は特殊目的コンピュータによってアクセスされうる任意のその他のストレージ媒体を含む有体の又は一時的ではないコンピュータ可読ストレージ媒体を含んでもよい。又、上述のものの組合せも、コンピュータ可読ストレージ媒体の範囲に含まれうる。コンピュータ実行可能命令は、例えば、プロセッサ２２４に特定の動作又は動作のグループを実行させるように構成された命令及びデータを含んでもよい。
【００４１】
通信ユニット２２６は、通信を送受信するように構成された１つ又は複数のハードウェアを含んでもよい。いくつかの実施形態においては、通信ユニット２２６は、その他の通信ハードウェアに加えて、アンテナ、有線ポート、及び変調／復調ハードウェアのうちの１つ又は複数を含む。具体的には、通信ユニット２２６は、演算装置２００の外部から通信を受信し、且つ、通信をプロセッサ２２４に提示し、或いは、プロセッサ２２４からの通信を別の装置又はネットワーク（例えば、図１のネットワーク１４０）に送信するように、構成されてもよい。
【００４２】
コンソール２０１は、情報を演算装置２００に入力し、且つ、通信を表示するか又は演算装置２００のユーザーにその他の方法で通知するように構成された１つ又は複数のハードウェアを含んでもよい。いくつかの実施形態においては、コンソール２０１は、その他のハードウェア装置に加えて、スピーカ、マイクロフォン、ディスプレイ、キーボード、及びタッチスクリーンのうちの１つ又は複数を含んでもよい。これらの及びその他の実施形態においては、コンソール２０１は、演算装置２００のユーザーから入力を受け取るように構成されてもよい。
【００４３】
ＡＲＳモジュール１１０／１１１は、データストレージ２０２内において保存されたプログラム命令を含んでもよい。プロセッサ２２４は、ＡＲＳモジュール１１０／１１１をメモリ２２２内に読み込みと共にＡＲＳモジュール１１０／１１１を実行するように構成されてもよい。ＡＲＳモジュール１１０／１１１を実行する際に、プロセッサ２２４は、本開示の別の場所において記述されているソフトウェア脆弱性を見出すと共にパッチ処理するステップを含みうる脆弱性分析の動作を実行するように構成されてもよい。
【００４４】
同様に、配備されたプログラム１１２は、データストレージ２０２内において保存されたプログラム命令を含んでもよい。プロセッサ２２４は、配備されたプログラム１１２をメモリ２２２内に読み込むと共に配備されたプログラム１１２を実行するように構成されてもよい。ＡＲＳモジュール１１０／１１１を実行する際には、プロセッサ２２４は、配備されたプログラム１１２によって制御されるように、動作を実行するべく構成されてもよい。演算装置２００のいくつかの実施形態においては、配備されたプログラム１１２は、データストレージ２０２内において含まれていなくてもよい。これらの及びその他の実施形態においては、ＡＲＳモジュール１１０／１１１は、通信ユニット２２６、プロセッサ２２４、メモリ２２２、コンソール２０１、又はこれらのなんらかの組合せを使用することにより、配備されたプログラム１１２とインターフェイスするように構成されてもよい。
【００４５】
本開示に鑑み、本開示の範囲を逸脱することなしに、変更、追加、又は省略が演算装置２００に対して実施されうることを理解されたい。例えば、いくつかの実施形態においては、演算装置２００は、コンソール２０１を含まなくてもよい。いくつかの実施形態においては、演算装置２００の様々なコンポーネントは、物理的に別個であってもよいと共に／又は、任意の適切なメカニズムを介して通信自在に結合されてもよい。例えば、データストレージ２０２は、プロセッサ２２４、メモリ２２２、及びストレージ装置に通信自在に結合された通信ユニット２２６を含むサーバーとは別個のストレージ装置の一部分であってもよい。
【００４６】
図３は、図１及び図２のシステム１００内において実装されうるＡＲＳモジュール１１０／１１１の例示用のアーキテクチャ３００を示している。ＡＲＳモジュール１１０／１１１は、負の入力を発見すると共に、負の入力が脆弱性を含む応答を結果的にもたらさないように、配備されたプログラム１１２を変更するパッチを開発するように構成されてもよい。次いで、ＡＲＳモジュール１１０／１１１は、パッチをディスパッチしてもよく、このパッチは、配備されたプログラム１１２内において実装されてもよい。
【００４７】
図３の実施形態においては、図示のアーキテクチャ３００は、バイナリ分析モジュール３５０と、調整器３４０と、パッチモジュール３５２と、試験ケースデータベース（図３においては、「試験ケースＤＢ」）３５４と、を含んでもよい。バイナリ分析モジュール３５０は、入力を発見するように構成されてもよく、入力は、負の入力と正の入力を含んでもよい。パッチモジュール３５２は、パッチを開発、試験、及びディスパッチするように構成されてもよい。調整器３４０は、バイナリ分析モジュール３５０及び／又はパッチモジュール３５２を同期化するか又はその他の方法で制御しうる調整動作及び制御動作を実行するように構成されてもよい。
【００４８】
バイナリ分析モジュール３５０は、配備されたプログラム１１２のＩ／Ｏ動作を分析するように構成されてもよい。Ｉ／Ｏ動作は、配備されたプログラム１１２との間におけるコンソール２０１から受け取られたユーザーのコンソールにおけるやり取り及び／又は外部演算システム１０４と配備されたプログラム１１２の間において伝達されうるネットワークトラフィック３６０（図３においては、「トラフィック」）を含んでもよい。いくつかの実施形態においては、コンソールにおけるやり取りは、ネットワークトラフィック３６０に含まれてもよい。
【００４９】
Ｉ／Ｏ動作の分析は、入力及び関連付けられた応答の発見を含んでもよい。入力は、正の入力と負の入力を含んでもよい。更には、Ｉ／Ｏ動作は、入力のうちのより多くを発見するべくバイナリ分析モジュール３５０において実装された１つ又は複数の調査技法によって使用されてもよい。
【００５０】
バイナリ分析モジュール３５０は、分析対象のバイナリプログラム（ＢＰＵＡ）３１４を分析するように更に構成されてもよい。ＢＰＵＡ３１４は、配備されたプログラム１１２から導出されてもよい。ＢＰＵＡ３１４は、配備されたプログラム１１２のバイナリ表現を含んでもよい。バイナリ形態の配備されたプログラム１１２などのＢＰＵＡ３１４の使用を通じて、ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２が記述されているプログラミング言語とは無関係に、実装されてもよい。
【００５１】
ＢＰＵＡ３１４は、配備されたプログラム１１２のローカルコピーを含んでもよい。例えば、ＡＲＳモジュール１１０／１１１は、演算システム１０２上に読み込まれたローカルＡＲＳモジュール１１０を含んでもよい。又、配備されたプログラム１１２は、例えば、演算システム１０２上などにおいて、ローカルに、読み込まれてもよく、且つ、動作してもよい。ＡＲＳモジュール１１０／１１１がクラウドＡＲＳモジュール１１１を含む実施形態においては、ＡＲＳモジュール１１０／１１１は、配備されたプログラム１１２が演算システム１０２上において動作している最中に、クラウドサーバー１０６上において動作してもよい。
【００５２】
ＢＰＵＡ３１４は、バイナリ分析モジュール３５０によって受け取られてもよい。次いで、バイナリ分析モジュール３５０は、負の入力及び正の入力である配備されたプログラム１１２に対する入力を発見するべく、ＢＰＵＡ３１４を分析してもよい。ＡＲＳモジュール１１０／１１１は、入力の発見及びファジングを使用することにより、正しい及び正しくない動作を推定するように構成されてもよい。ファジングは、無効な、予測されていない、或いは、ランダムなデータを入力として提供するステップを含みうるランダム試験の１つのタイプである。
【００５３】
更には、ＡＲＳモジュール１１０／１１１は、応答に基づいて、入力／出力マップの集合体を構築してもよい。例えば、配備されたプログラム１１２をクラッシュさせる入力に応答して、ＡＲＳモジュール１１０／１１１は、負の試験ケースを構築してもよい。同様に、配備されたプログラム１１２をクラッシュさせない入力に応答して、ＡＲＳモジュール１１０／１１１は、正の試験ケースを構築してもよい。負の試験ケース及び正の試験ケースは、試験ケースデータベース３５４を介してパッチモジュール３５２に提供されてもよい。
【００５４】
負の入力及び負の入力の処理から結果的に得られる応答は、試験ケースデータベース３５４内において負の試験ケースとして保存されてもよい。正の入力及び正の入力の処理の結果として得られる応答は、試験ケースデータベース３５４内において正の試験ケースとして保存されてもよい。負の試験ケース及び正の試験ケースは、入力−出力試験の組を形成するべく、組み合わせられてもよい。
【００５５】
試験ケースデータベース３５４は、図２を参照して説明されたメモリ２２２などの任意の適切な電子ストレージ媒体を含んでもよい。試験ケースデータベース３５４及びその上において保存された情報（例えば、試験ケース）には、ＡＲＳモジュール１１０／１１１によるアクセスが可能であってもよい。図示の実施形態においては、試験ケースデータベース３５４は、演算システム１０２又はクラウドサーバー１０６に含まれている。いくつかの実施形態においては、試験ケースデータベース３５４は、ネットワーク１４０を介してアクセス可能なリモートデータベースを含んでもよい。
【００５６】
パッチモジュール３５２は、負の入力のうちの１つ又は複数用のパッチを開発するように構成されてもよい。パッチモジュール３５２は、試験ケースデータベース３５４内に保存されている試験ケースに基づいてパッチを開発してもよい。いくつかの実施形態においては、フィットネス関数が、正の試験ケース及び負の試験ケースに基づいて生成されてもよい。フィットネス関数は、配備されたプログラム１１２が、目的の実現に対してどれだけ近接しているのか（例えば、1つ又は複数の脆弱性によって応答しない）を要約する目的関数を含んでもよい。フィットネス関数に基づいて、パッチが開発されてもよい。例えば、パッチは、フィットネス関数及び遺伝的プログラミングに基づいた配備されたプログラム１１２に対する変化過程を含んでもよい。遺伝的プログラミングは、配備されたプログラム１１２を変更する生物学的進化に類似した進化的なタイプの方法を含んでもよい。
【００５７】
パッチモジュール３５２は、試験ケースデータベース内の負の試験ケース及び／又は正の試験ケースを使用することにより、開発されたパッチを試験してもよい。いくつかの実施形態においては、パッチモジュール３５２は、試験ケースに基づいて既存の機能を可能な最良の程度に維持しつつ配備されたプログラム１１２用のパッチを開発するべく、バイナリ分析モジュール３５０によって生成される試験ケースを使用してもよい。例えば、パッチモジュール３５２は、新しい負の入力が生成されないか又は正の入力が負の入力になるように、パッチが、配備されたプログラム１１２を変更しない尤度を保証又は低減してもよい。
【００５８】
パッチモジュール３５２は、配備されたプログラム１１２にパッチをディスパッチしてもよい。図示の実施形態においては、パッチは、パッチ処理済みのＢＰＵＡ３６４を含んでもよい。パッチ処理済みのＢＰＵＡ３６４は、配備されたプログラム１１２に組み込まれてもよい。新しいＢＰＵＡ（例えば、ＢＰＵＡ３１４）が、パッチ処理済みのＢＰＵＡ３６４が組み込まれた配備されたプログラム１１２から導出されてもよい。バイナリ分析モジュール３５０は、新しいＢＰＵＡ３１４の脆弱性分析を実行してもよい。パッチは、人間のやり取りを伴うことなしに、或いは、場合によっては、ユーザーの知識さえも伴うことなしに、配備されたプログラム１１２のローカルコピーに対してディスパッチされてもよい。
【００５９】
調整器３４０は、ハウスキーピング機能を実行するように構成されてもよい。例えば、調整器３４０は、アーキテクチャ３００のコンポーネント（例えば、後述する３４２、３０４、３０６、４００、３１０、３０２、３０８、３２６、３２０、４００、及び３２４）をチェックしてもよく、これには、心拍などの周期的な同期化信号が伴ってもよい。調整器３４０は、必要に応じて、コンポーネントを再起動してもよい。いくつかの実施形態においては、調整器３４０は、ＡＲＳモジュール１１０／１１１又はそのコンポーネントをスクリプトを介して調整してもよい。図示の実施形態においては、ＡＲＳモジュール１１０／１１１は、破線３０３を伴うボックス内において示されている。ＡＲＳモジュール１１０／１１１がクラウドＡＲＳモジュール１１１である実施形態においては、ＡＲＳモジュール１１０／１１１は、クラウドサーバー１０６上に読み込まれてもよく、且つ、配備されたプログラム１１２、ＢＰＵＡ３１４、及びパッチ処理済みのＢＰＵＡ３６４は、演算システム１０２に読み込まれると共に／又は伝達されてもよい。従って、これらの及びその他の実施形態においては、破線３０３は、クラウドサーバー１０６と演算システム１０２の間の物理的分離を表してもよい。
【００６０】
ＡＲＳモジュール１１０／１１１がローカルＡＲＳモジュール１１０を含む実施形態においては、クラウドサーバー１０６は、システム１００から省略されてもよい。ＢＰＵＡ、配備されたプログラム１１２、パッチ処理済みのＢＰＵＡ３６４は、演算システム１０２に読み込まれてもよい。従って、これらの及びその他の実施形態においては、破線３０３は、物理的分離を表さなくてもよい。
【００６１】
図４は、図３のＡＲＳモジュール１１０／１１１の例示用のアーキテクチャ３００の詳細図を示している。図４の実施形態は、バイナリ分析モジュール３５０、調整器３４０を伴うパッチモジュール３５２、及び試験ケースデータベース３５４の例を含む。バイナリ分析モジュール３５０は、ＢＰＵＡ３１４の入力空間を理解すると共に、配備されたプログラム１１２の脆弱性を結果的にもたらす入力を発見するべく、２つ以上の異なる調査技法を使用してもよい。更には、バイナリ分析モジュール３５０は、その時点までに学習されたＢＰＵＡ３１４のＩ／Ｏ動作を抽象的レベルにおいて表す入力−出力状態機械モデル（ステートフルモデル）を開発してもよい。ステートフルモデルは、新しい情報が推定又は発見されるのに伴って、継続的に更新されてもよい。バイナリ分析モジュール３５０は、入力が負の入力であるのか又は正の入力であるのかを判定し、且つ、正の試験ケース及び負の試験ケースを試験ケースデータベース３５４内において保存する。試験ケースに基づいて、フィットネス関数が生成され、これらのフィットネス関数は、パッチを開発するべく使用される。パッチモジュール３５２は、既存の機能を可能な最良の程度に維持しつつ配備されたプログラム１１２用のパッチを開発するために、ステートフルモデル及び／又はフィットネス関数を使用してもよい。
【００６２】
バイナリ分析モジュール３５０は、制御フローグラフ（Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｇｒａｐｈ：ＣＦＧ）／．ｄａｔａモジュール３０８（図４において、「ＣＦＧ／．ｄａｔａ」）、パケットキャプチャモジュール３０２、シンボリック実行エンジン３１０、有効入力生成器４００、状態機械生成器３０６、入力ファインダ３０４、ファザー３１２、及び脆弱性生成器３４２を含んでもよい。
【００６３】
入力空間は、少なくとも部分的に入力ファインダ３０４及びシンボリック実行エンジン３１０を使用することにより、調査されてもよい。入力ファインダ３４０は、サイドチャネル情報を使用してＢＰＵＡ３１４が受け入れる入力を発見する入力発見技法を実装してもよい。例えば、いくつかの実施形態においては、入力ファインダ３０４は、米国特許出願第１４／６２０，１０６号明細書に記述されているように実質的に動作してもよく、この特許文献の内容は、引用により、そのすべてが本明細書に包含される。これに加えて、又はこの代わりに、入力ファインダ３０４は、２０１５年６月６日付けで出願された米国特許出願第１４／７９２，５０７号明細書に記述されているように実質的に動作してもよく、この特許文献の内容は、引用により、そのすべてが本明細書に包含される。入力ファインダ３０４は、入力及び応答を状態機械生成器３０６及び／又は有効入力生成器４００に伝達してもよい。
【００６４】
シンボリック実行エンジン３１０は、シンボリック実行フレームワークを実装してもよい。シンボリック実行フレームワークは、入力を発見するべく、例えば、ホワイトボックスファジング又はスマートファジング技法及びテイント分析を使用してもよい。シンボリック実行エンジン３１０は、ＢＰＵＡ３１４、制御フローグラフ（ＣＦＧ）、．ｄａｔａフィールドの分析、或いは、これらのなんらかの組合せを受け取るように構成されてもよい。ＣＦＧ及び／又は．ｄａｔａフィールドの分析は、ＢＰＵＡ３１４に対する入力のいずれの部分をシンボリックとするのかを判定するべく使用されてもよい。シンボリック実行エンジン３１０は、ＢＰＵＡ３１４のシンボリック実行を実行してもよい。シンボリック実行を使用することにより、配備されたプログラム１１２を特定の経路に沿って駆動する経路制約及び入力を判定してもよい。更には、シンボリック実行エンジン３１０は、ＢＰＵＡ３１４のコンコリックモード（ｃｏｎｃｏｌｉｃ  ｍｏｄｅ）を実行してもよい。コンコリックモードにおいては、シンボリック実行エンジン３１０は、１つ又は複数の試験ケースを生成してもよい。
【００６５】
シンボリック実行エンジン３１０は、入力及び／又は応答を出力してもよい。例えば、ＢＰＵＡ３１４のシンボリック実行は、関連付けられた応答と共に負の入力及び正の入力を発見しうる。シンボリック実行エンジン３１０は、入力及び関連付けられた応答を有効入力生成器４００及び／又は状態機械生成器３０６に伝達するように構成されてもよい。状態機械生成器３０６は、入力及び応答に基づいてステートフルモデルを更新してもよい。有効入力生成器４００は、配備されたプログラムをより深い状態に駆動して脆弱性を結果的にもたらしうる更なる入力を調査するべく、入力及び関連付けられた応答を使用してもよい。状態機械生成器３０６及び有効入力生成器４００のいくつかの更なる詳細は、以下において提供される。
【００６６】
いくつかの実施形態においては、シンボリック実行は、テイント分析のために使用されてもよい。例えば、プログラム入力をシンボリック／コンコリックとマーキングし、且つ、配備されたプログラム１１２をコンコリックに実行することにより、入力データを潜在的なプログラム場所まで伝播させてもよい。ＡＲＳモジュール１１０／１１１は、潜在的なプログラム場所における変数／レジスタがシンボリックであるか又は非シンボリックであるのかをチェックしてもよく、これにより、変数／レジスタが汚染されているかどうかを判定してもよい。変数／レジスタがシンボリックであると共に汚染されている場合には、シンボリック実行エンジン３１０は、変数／レジスタのシンボリック表現の分析を通じて汚染源を発見してもよい。この情報により、発見的方法を適用し、配備されたプログラム１１２をファジングするようにファザー３１２を案内することにより、脆弱性をトリガしてもよい。
【００６７】
いくつかの実装形態においては、発見的方法又はその他のアドオンプラグインが、Ｓ２Ｅなどの選択的シンボリック実行エンジンの上部に構築されてもよい。選択的シンボリック実行エンジンは、経路調査を潜在的な脆弱性場所に向かって案内し、クラッシュをトリガし、且つ、負の入力を生成するべく、ファザー３１２をサポートしてもよく、且つ、目標とするサーチ方式を実行してもよい。
【００６８】
パケットキャプチャモジュール３０２は、ネットワークトラフィック３６０などのＩ／Ｏ動作から入力を発見するべく、パケットキャプチャ（ＰＣＡＰ）ファイルを解析してもよい。パケットキャプチャモジュール３０２は、ネットワークパケットをキャプチャすると共に／又はパケットキャプチャファイルを読み取るように構成されてもよい。ネットワークパケットのキャプチャ及び／又はパケットキャプチャファイルの読取りに基づいて、パケットキャプチャモジュール３０２は、パケット情報を生成してもよい。パケット情報は、状態機械生成器３０６に伝達されてもよい。状態機械生成器３０６は、パケット情報をステートフルモデルに内蔵してもよい。
【００６９】
いくつかの実施形態においては、パケットキャプチャモジュール３０２は、ＢＰＵＡ３１４のＩ／Ｏ動作について、提供されたＰＣＡＰファイルを分析してもよく、且つ、ＢＰＵＡ３１４の初期ステートフルモデルを構築してもよい。実装形態がネットワーク（例えば、図１の１４０）上におけるＢＰＵＡ３１４との間のリアルタイムのやり取りを含んでいる場合には、パケットキャプチャモジュール３０２は、パケットのリアルタイムキャプチャを実行すると共にリアルタイムのキャプチャから動作を推定するべく、ワイヤシャーク（ｗｉｒｅｃｈａｒｋ）などのフレームワークを起動してもよい。
【００７０】
ＣＦＧ／．ｄａｔａモジュール３０８は、ＢＰＵＡ３１４を受け取るように構成されてもよい。ＣＦＧ／．ｄａｔａモジュール３０８は、ＢＰＵＡ３１４内の．ｄａｔａフィールドを分析するように構成されてもよい。．ｄａｔａフィールドの分析に基づいて、ＣＦＧ／．ｄａｔａモジュール３０８は、ＣＦＧを生成するように構成されてもよい。ＣＦＧは、ＢＰＵＡ３１４のメモリ場所や変数などのような情報を含んでもよい。ＣＦＧ／．ｄａｔａモジュール３０８は、．ｄａｔａ分析及び／又はＣＦＧを状態機械生成器３０６及び／又はシンボリック実行エンジン３１０に伝達してもよい。
【００７１】
状態機械生成器３０６は、ＣＦＧ、．ｄａｔａフィールドの分析、入力ファインダ３０４からの入力及び応答、シンボリック実行エンジン３１０からの入力及び応答、及びパケット情報から、ステートフルモデルを生成するように構成されてもよい。例えば、状態機械生成器３０６は、配備されたプログラムの状態機械を抽象的レベルにおいてキャプチャするステートフルモデルを生成するように構成されてもよい。状態機械生成器３０６は、入力及び応答が発見されると共に／又はパッチが開発及びディスパッチされるのに伴って、ステートフルモデルを増分的な方式で生成するように構成されてもよい。
【００７２】
いくつかの実施形態においては、状態機械生成器３０６は、入力及び／又は入力に対する応答のうちの１つ又は複数を含んでもよく、或いは、これらを発見するべく使用されてもよい。入力及び応答は、有効入力生成器４００によってアクセス可能であってもよく、或いは、これに対して伝達されてもよい。
【００７３】
更には、いくつかの実施形態においては、状態機械生成器３０６は、ＢＰＵＡ３１４のプロトコルを表すステートフルモデルを生成してもよい。ステートフルモデルは、パケットキャプチャモジュール３０２によって生成された情報から、又はＰＣＡＰファイルの形態の提供されたネットワークトレースから、生成されてもよい。例えば、状態機械生成器３０６の引数は、ＲｅｖｅｒＸツールを含んでもよく、これについては、Ｊｏａｏ  Ａｎｔｕｎｅｓ，  Ｎ．Ｆ．（２０１１）．  ＲｅｖｅｒＸ：  Ｒｅｖｅｒｓｅ  Ｅｎｇｉｎｅｅｒｉｎｇ  ｏｆ  Ｐｒｏｔｏｃｏｌｓ．  Ｌｉｓｂｏｎ：  ＬＡＳＩＧＥ，  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｌｉｓｂｏａ，  Ｐｏｒｔｕｇａｌに記述されており、この内容は、引用により、そのすべてが本明細書に包含される。
【００７４】
状態機械生成器３０６は、入力及び出力メッセージの両方をキャプチャしうるステートフルモデルを推定してもよい。パケットは、実行の際に動的にキャプチャされてもよいことから、状態機械生成器３０６は、ステートフルモデルを継続的に改善してもよい。更には、ＣＦＧを活用することにより、ステートフルモデルの生成をサポートしてもよい。この結果、推定された状態機械とステートフルモデルのプログラム構造の両方を使用し、ファザー３１２を案内してもよい。
【００７５】
状態機械生成器３０６の機能は、入力ファインダ３０４、シンボリック実行エンジン３１０、状態機械生成器３０６、及びパケットキャプチャモジュール３０２によって発見された入力によってステートフルモデルを更新するステップを含んでもよい。いくつかの実施形態においては、状態機械生成器３０６は、入力ファインダ３０４、シンボリック実行エンジン３１０、状態機械生成器３０６、又はパケットキャプチャモジュール３０２によって発見された入力の間において選択してもよい。状態機械生成器３０６は、その時点まで構築済みであるステートフルモデルに更なる詳細を追加するべく入力を選択してもよい。そして、シンボリック実行エンジン３１０には、プログラム実行がホワイトボックスファジングを介して更に深い状態まで駆動されうるように、有効入力生成器４００により、発見された入力が提供されてもよい。
【００７６】
更に深いプログラム状態において、更なる負の入力及び脆弱性が発見されてもよい。更には、状態機械生成器３０６の機能は、入力ファインダ３０４が新しいプログラム状態に移行すると共に新しいプログラム状態において新しい入力を学習できるようにするべく、入力情報を入力ファインダ３０４に提供するステップを含んでもよい。
【００７７】
有効入力生成器４００は、入力及び関連づけられた応答を入力ファインダ３０４、シンボリック実行エンジン３１０、及び状態機械生成器３０６から受け取るように構成されてもよい。入力ファインダ３０４、シンボリック実行エンジン３１０、及び状態機械生成器３０６のそれぞれからの入力及び応答は、異なってもよい。例えば、入力ファインダ３０４によって発見された第１入力及び応答は、状態機械生成器３０６によって発見されたステートフルモデルに含まれていなくてもよく、且つ、この逆も又同様である。従って、有効入力生成器４００は、任意の差に基づいて、１つ又は複数のメッセージを入力ファインダ３０４、シンボリック実行エンジン３１０、及び状態機械生成器３０６に伝達してもよい。有効入力生成器４００のいくつかの更なる詳細は、図５を参照して提供される。
【００７８】
いくつかの実施形態においては、有効入力生成器４００によって伝達されるメッセージのうちの１つは、ファザー３１２に対するメッセージを含んでもよい。ファザー３１２は、正及び／又は負の入力のランダムな変化過程を生成するように構成されてもよい。特定の更なる入力は、入力のタイプに基づいたものであってもよい。例えば、正の入力が、１９１などの数値タイプの入力である場合には、ファザー３１２は、−１９１、０、１９１．０００、１９１×１０＾１０、及びこれらに類似したものなどの更なる入力を生成してもよい。更なる入力は、更なる入力がクラッシュ応答などの脆弱性を含む応答を結果的にもたらすかどうかを調査するべく、ＢＰＵＡ３１４に伝達されてもよく、且つ、その内部に導入されてもよい。
【００７９】
ファザー３１２は、部分的入力について使用されてもよい。例えば、入力がコマンド「ＧＥＴ」を含む場合に、ＡＲＳモジュール１１０／１１１は、コマンド「ＧＥＴ」を進行させるためのなんらかの引数を発見するべく、ファザー３１２を使用してもよい。従って、ファザー３１２には、「ＧＥＴ  ａａａａ」が付与されてもよく、且つ、「ＧＥＴ」部分をファジングしない状態において、「ａａａａ」部分をファジングするように、命令されてもよい。従って、ファザー３１２は、入力ストリングの脆弱な変化過程を発見するべく、使用されてもよい。ファザーを盲目的に使用するのではなく、有効入力生成器４００は、配備されたプログラム１１２をファジング調査が開始されうる適切な状態に駆動した状態にあってもよい。
【００８０】
脆弱性生成器３４２は、負の試験ケースを使用し、特定の解決策が特定の目的の実現にどれだけ近接しているのかを要約する目的関数を含む特定のフィットネス関数を生成するように構成されてもよい。特定のフィットネス関数は、特定の負の試験ケースに基づいたものであってもよく、この特定の負の試験ケースには、試験ケースデータベース３５４からアクセスされてもよい。特定のフィットネス関数は、パッチモジュール３５２の全体フィットネス関数生成器３２４に伝達されてもよい。
【００８１】
パッチモジュール３５２は、ディスパッチャ３２６、パッチテスタ３２０、ＧｅｎＰｒｏｇインスタンス３２２、及び全体フィットネス関数生成器３２４を含んでもよい。脆弱性生成器３４２は、全体フィットネス関数生成器３２４とインターフェイスしてもよい。全体フィットネス関数生成器３２４は、脆弱性生成器３４２の特定のフィットネス関数及び試験ケースデータベース３５４内に保存された１つ又は複数の正の試験ケースを使用し、全体フィットネス関数３８８（図４において、「全体ＦＦ」）を生成するように構成されてもよい。全体フィットネス関数３８８は、１つ又は複数のパッチを開発するべく、パッチ生成ツール（ＧｅｎＰｒｏｇ）と共に使用されてもよい。ＡＲＳモジュール１１０／１１１においては、特定のフィットネス関数は、特定の脆弱性に関係した１つ又は複数の正の試験ケース及び１つ又は複数の負の試験ケースを要約してもよい。
【００８２】
例えば、図示のアーキテクチャ３００においては、パッチモジュール３５２は、「ＧｅｎＰｒｏｇ」というオープンソースフレームワークを使用してパッチを生成してもよい。一般に、ＧｅｎＰｒｏｇは、配備されたプログラムの試験の組に基づいてパッチを生成する遺伝的プログラミングツールである。試験の組は、配備されたプログラムの正しい及び正しくない動作を提供する。但し、ＡＲＳモジュール１１０／１１１には、このような組は存在していない。その代わりに、ＡＲＳモジュール１１０／１１１は、上述の入力発見及びファジングを使用してパッチモジュール３５２によって使用される試験の組を開発することより、正しい且つ正しくない動作を推定するように構成されてもよい。
【００８３】
全体フィットネス関数３８８は、ＧｅｎＰｒｏｇインスタンス３２２用のガイダンスを提供する。ＧｅｎＰｒｏｇインスタンス３２２は、１つ又は複数の脆弱性の全体フィットネス関数３８８からパッチを開発してもよい。ＧｅｎＰｒｏｇは、配備されたプログラム１１２を新しいプログラムに「変化」させるために、遺伝的プログラミングを使用する。全体フィットネス関数３８８は、これらの変化過程のいずれが、その他のものよりも「よりフィットしている」のかを判定する。ＡＲＳ１１０／１１１の目標は、正の入力のすべてについて正しくポーリングすると共に負の入力のうちの１つ又は複数において脆弱性を含む応答を結果的にもたらさない配備されたプログラム１１２を得ることを含んでもよい。
【００８４】
図４の実施形態においては、複数のＧｅｎＰｒｏｇインスタンス３２２がパッチモジュール３５２内に含まれている。複数のＧｅｎＰｒｏｇインスタンス３２２は、並行して動作し、全体フィットネス関数３８８に基づいて複数のパッチを生成してもよい。いくつかの実施形態においては、１つのＧｅｎＰｒｏｇインスタンス３２２が、パッチモジュール３５２内に含まれてもよい。
【００８５】
ＧｅｎＰｒｏｇインスタンス３２２は、１つ又は複数のパッチをパッチテスタ３２０に伝達してもよい。パッチテスタ３２０は、１つ又は複数のパッチの正しさを試験するように構成されてもよい。例えば、パッチテスタ３２０は、障害耐性、ディスパッチされたプログラム１１２との間の互換性、タイムアウトなどを試験するように構成されてもよい。１つ又は複数のパッチが試験に合格するのに伴って、パッチテスタ３２０は、パッチをディスパッチャ３２６に伝達してもよい。
【００８６】
いくつかの実施形態においては、パッチテスタ３２０は、試験ケースデータベース３５４に記録された新しい試験ケースに照らして、生成されたパッチを継続的に評価してもよい。いくつかの入力に基づいて生成されたパッチは、後から観察される入力において障害が発生しうることから、新しい入力が正の入力である場合にも、新しいケースが利用可能となるのに伴って、パッチを更新するのが望ましいであろう。この結果、更新済みのパッチが生成されてもよい。更新済みのパッチは、以前のパッチよりも多くの機能を保持してもよく、且つ、従って、ディスパッチャ３２６を介してディスパッチされてもよい。ＧｅｎＰｒｏｇインスタンス３２２が１つ又は複数の試験において不合格となるのに応答して、パッチテスタ３２０は、全体フィットネス関数３８８及びＧｅｎＰｒｏｇインスタンス３２２を開発するために、更に多くの試験ケースが必要とされうるというメッセージを全体フィットネス関数生成器３２４に伝達してもよい。いくつかの実施形態においては、別の全体フィットネス関数３８８が生成されてもよい。
【００８７】
これに加えて、又はこの代わりに、パッチテスタ３２０は、１つ又は複数のパッチの品質を予測するための試験方式を実装してもよい。一般に、ＧｅｎＰｒｏｇにおける唯一の制約は、提供される試験の組である。ＡＲＳモジュール１１０／１１１においては、試験の組が試験ケースデータベース３５４によって置換されている。ＧｅｎＰｒｏｇインスタンス３２２を付与することにより、試験ケースデータベース３５４は、パッチ処理済みのプログラムにいまだ観察されていない入力において障害が発生するという結果をもたらしうる。従って、ＡＲＳモジュール１１０／１１１は、クロス検証又はホールドアウト技法を使用してもよく、この場合には、試験ケースデータベース３５４の試験ケースのサブセットが、パッチを生成するべく使用される。次いで、パッチは、観察されていない／使用されていない試験ケースを使用することにより、試験されてもよい。パッチがこれらの観察されていない試験ケースにおいて成功した場合には、それは、パッチが高度にローカライズされており、且つ、従って、その他の観察されていない入力における動作に対して影響を及ぼす可能性が低いことを通知しうる。パッチの品質スコアを判定するべく、コード比較技法を含むその他の技法が使用されてもよい。
【００８８】
ディスパッチャ３２６は、パッチ処理済みのＢＰＵＡ（図３において、３６４）をディスパッチ又は配備するように構成されてもよい。上述のように、ＡＲＳモジュール１１０／１１１は、パッチを開発し、且つ、パッチ処理済みのＢＰＵＡをディスパッチする。配備されたプログラム１１２及びＢＰＵＡ３１４は、ＢＰＵＡに基づいて更新されてもよい。更新されたＢＰＵＡは、ＢＰＵＡ３１４となる。従って、更新されたＢＰＵＡがシンボリックに実行され、更新されたＢＰＵＡのＣＦＧが生成され、更新されたＢＰＵＡの新しい脆弱性が発見され、以下同様である。従って、ＡＲＳモジュール１１０／１１１は、ＢＰＵＡ３１４のパッチ処理及び分析の反復を通じて、配備されたプログラム１１２を継続的に改善する。パッチは、人間を伴うやり取りを伴うことなしに、或いは、場合によっては、ユーザーの知識さえも伴うことなしに、配備されたプログラム１１２のローカルコピーに対してディスパッチされてもよい。
【００８９】
いくつかの用途においては、全体フィットネス関数生成器３２４を使用する際に、時間予算化（ｔｉｍｅ  ｂｕｄｇｅｔｉｎｇ）の課題が存在する場合がある。例えば、入力の発見は、時間を所要しうる。又、既に発見された脆弱性用のパッチの生成も、時間を所要しうる。相対的に多くの入力が発見される前に、パッチが生成された場合には、そのパッチは、新しい入力において障害が発生しうる。従って、パッチの生成を試みる前に、十分に多くの数の入力が発見される時点まで待つことが望ましいであろう。入力発見のための初期時間が確保されてもよく、且つ、入力発見用の初期時間が経過した後に、パッチが生成されてもよい。パッチ生成時間においては、入力及び脆弱性の発見が進行してもよく、且つ、新しいパッチが、試みられてもよいが、時間の欠如に起因して障害が発生する場合がある。いくつかの実施形態においては、発見的方法により、パッチ開発のために時間を予算化する方式を判定してもよく、その理由は、更なる入力が学習されるのに伴って後から再度獲得されうる機能の喪失という犠牲を払っても、パッチの即時開発が有利でありうるからであり、この結果、相対的に多くの機能を保持するパッチが開発される。
【００９０】
図５は、図１〜図４のＡＲＳモジュール１１０／１１１において実装されうる例示用の入力発見プロセス５５０を示している。いくつかの実施形態においては、入力発見プロセス５５０は、有効入力生成器４００によって少なくとも部分的に実装されてもよい。入力発見プロセス５５０は、未知のバイナリプログラム（例えば、図３のＢＰＵＡ３１４）を理解すると共にその脆弱性を見出す能力を増大させうる。
【００９１】
図５を参照して説明されているように、入力ファインダ３０４、シンボリック実行エンジン３１０、及び状態機械生成器３０６は、入力の組５１０Ａ〜５１０Ｃ（総合的に、入力の組５１０）を発見するか又はその他の方法で関係付けてもよい。入力の組５１０に含まれている入力のいくつかは、負の入力であってもよく、且つ、入力の組５１０に含まれている入力のいくつかは、正の入力であってもよい。複数の方法（例えば、入力ファインダ３０４、シンボリック実行エンジン３１０、及び状態機械生成器３０６）で入力の組５１０を発見するか又はその他の方法で関係付けることにより、ディスパッチされたプログラム（例えば、図１〜図４の配備されたプログラム１１２）の複数のタイプの脆弱性が見出されてもよく、且つ、脆弱性についてのパッチが開発されてもよい。例えば、入力ファインダ３０４のみの使用は、ディスパッチされたプログラムの限られた理解と、従って、限られた数の入力と、を結果的にもたらしうる。但し、入力ファインダ３０４及び状態機械生成器３０６を使用することにより、ディスパッチプログラムの更に完全な理解が得られることになり、且つ、脆弱性の多くのものが見出されると共にパッチ処理されうる。
【００９２】
更には、入力ファインダ３０４、シンボリック実行エンジン３１０、及び状態機械生成器３０６のうちの１つによって発見された入力の組５１０の入力は、導出された入力と呼称される更なる入力を発見するべく、入力ファインダ３０４、シンボリック実行エンジン３１０、及び状態機械生成器３０６のうちの別のものにおいて使用されてもよい。導出された入力は、後続の入力の組に含まれてもよい。
【００９３】
例えば、有効入力生成器４００は、シンボリック実行プロセスにおいてシンボリック実行エンジン３１０において発見された入力の第１の組５１０Ａを受け取ってもよい。更には、有効入力生成器４００は、未知のプログラム動作識別プロセス用のサイドチャネル入力生成において入力ファインダ３０４において発見された入力の第２の組５１０Ｂを受け取ってもよく、且つ、ステートフルモデル生成プロセスからの状態機械生成器３０６によって関係付けられた入力の第３の組５１０Ｃを受け取ってもよい。有効入力生成器４００は、入力の組５１０を比較し、入力のいずれが入力の組５１０のすべてに含まれていないのかを判定してもよい。次いで、有効入力生成器４００は、すべての入力の組５１０に含まれていない入力を状態機械生成器３０６、入力ファインダ３０４、又はシンボリック実行エンジン３１０に転送してもよく、そこで、導出された入力が発見されてもよい。
【００９４】
例えば、入力の第２の組５１０Ｂから除外されている入力のいずれかについて、プレフィックスの組５０２が生成されてもよい。入力のプレフィックスの組５０２は、入力ファインダ３０４に伝達されてもよい。入力ファインダ３０４は、サイドチャネル入力生成において、１つ又は複数の導出された入力を発見するための基礎としてプレフィックスの組５０２を使用してもよい。例えば、入力は、「ｃｏｍ  ｐａｒ  ａｒｇ１  ａｒｇ２」を含んでもよい。入力が入力ファインダ３０４によって見出されていない場合に、有効入力生成器４００は、｛”ｃｏｍ”，”ｃｏｍ  ｐａｒ”，”ｃｏｍ  ｐａｒ  ａｒｇ１”，”ｃｏｍ  ｐａｒ  ａｒｇ１  ａｒｇ２”｝を含みうるプレフィックスの組５０２を生成してもよい。プレフィックスの組５０２は、入力ファインダ３０４に伝達されてもよい。
【００９５】
入力ファインダ３０４は、入力タイプ５１２をシンボリック実行エンジン３１０に伝達してもよい。入力タイプ５１２のうちの１つ又は複数は、プレフィックスの組５０２に基づいたものであってもよい。
【００９６】
更には、入力の第１の組５１０Ａから除外されている入力のうちの１つ又は複数（省略された入力５０４）は、状態機械生成器３０６に伝達されてもよく、そこで、省略された入力５０４は、ステートフルモデルに内蔵されてもよい。状態機械生成器３０６は、１つ又は複数の入力５１１をシンボリック実行エンジン３１０に更に伝達してもよい。入力５１１のうちの１つ又は複数は、ステートフルモデルに基づいたものであってもよい。
【００９７】
更には、有効入力生成器４００は、入力の組５１０の入力のいずれをファザー入力５２０に含めるべきかを判定してもよい。有効入力生成器４００は、ファザー入力５２０をファザー３１２に伝達してもよい。次いで、図４を参照して説明されているように、ファザー３１２は、調査されうる更なる入力を生成してもよい。更なる入力及び更なる入力から結果的に得られる応答は、（例えば、正又は負の）試験ケースとして試験ケースデータベース３５４内において保存されてもよい。ファザー入力５２０は、上述のように部分的な入力であってもよい。又、有効入力生成器４００は、ＢＰＵＡ３１４と直接的にやり取りしてもよい。
【００９８】
図６Ａ及び図６Ｂは、本明細書において記述されている少なくとも１つの実施形態に従って構成された配備されたプログラムの脆弱性分析の方法６００のフローチャートを示している。方法６００は、図１及び図２を参照して説明した演算システム１０２及びＡＲＳモジュール１１０／１１１などのそのなんからのコンポーネントにより、実行されてもよい。いくつかの実施形態においては、演算システム１０２又は別の演算装置は、演算装置及び／又は演算システム１０２に方法６００を実行させるべく（図２のプロセッサ２２４のような）プロセッサによって実行可能であるプログラムコード又は命令をその上において保存された状態で有する一時的はない（例えば、図２のメモリ２２２などの）コンピュータ可読媒体を含んでもよく、或いは、これに対して通信自在に結合されてもよい。これに加えて、又はこの代わりに、演算システム１０２は、演算システム１０２又は別の演算装置に方法６００を実行させるべくコンピュータ命令を実行するように構成された上述のプロセッサ２２４を含んでもよい。別個のブロックとして示されているが、様々なブロックは、望ましい実装形態に応じて、更なるブロックに分割されてもよく、更に少ない数のブロックに組み合わせられてもよく、或いは、除去されてもよい。
【００９９】
図６Ａを参照すれば、方法６００は、ブロック６０２において始まっており、ここで、ＢＰＵＡが受け取られてもよい。ＢＰＵＡは、配備されたプログラムから導出されてもよい。ブロック６０４において、配備されたプログラムのＩ／Ｏ動作が分析されてもよい。Ｉ／Ｏ動作は、配備されたプログラムとの間におけるユーザーのコンソールにおけるやり取り及び配備されたプログラムとの間において通信されてキャプチャされたネットワークトラフィックを含んでもよい。ブロック６０６において、ステートフルモデルが開発されてもよい。ステートフルモデルは、その時点までに学習されたＢＰＵＡのＩ／Ｏ動作を抽象的なレベルにおいて表してもよい。ステートフルモデルは、遺伝的プログラミングに基づいた修復フレームワークを使用したパッチ開発の基礎であってもよい。
【０１００】
ブロック６０８において、配備されたプログラムに対する入力が発見されてもよい。入力は、ＢＰＵＡに対する２つ以上の調査技法の適用及びＩ／Ｏ動作の分析に基づいて発見されてもよい。いくつかの実施形態においては、入力は、シンボリック実行プロセスにおいて発見された入力の第１組、サイドチャネル入力生成において発見された入力の第２の組、及びステートフルモデル生成プロセスからの入力の第３の組を受け取ることにより、発見されてもよい。入力の第１の組、入力の第２の組、及び入力の第３の組を比較し、入力のいずれが入力の第１の組、入力の第２の組、及び入力の第３の組のすべてに含まれていないのかを判定してもよい。入力の第２の組から除外されている入力のうちの１つ又は複数について、方法６００は、除外されている入力のプレフィックスの組を生成するステップを含んでもよい。プレフィックスの組は、サイドチャネル入力生成において、１つ又は複数のその他の入力を発見するための基礎として使用されてもよい。入力の第１の組から除外されている入力のうちの１つ又は複数について、方法６００は、除外されている入力をステートフルモデルに内蔵するステップを含んでもよい。
【０１０１】
ブロック６１０において、１つ又は複数のファザーを使用することにより、追加の入力が発見されてもよい。ブロック６１２において、入力のいずれが負の入力であるのかが判定されてもよい。ブロック６１４において、追加の入力のいずれが負の入力であるのかが判定されてもよい。ブロック６１６において、入力のいずれが正の入力であるのかが判定されてもよい。いくつかの実施形態においては、脆弱性は、メモリ破壊エラー、バッファオーバーフロー、ソフトウェアクラッシュ、及び演算エラーを含んでもよい。
【０１０２】
いくつかの実施形態においては、調査技法は、ＢＰＵＡのシンボリック実行プロセス、未知のプログラム動作用のサイドチャネル入力生成プロセス、及び抽象的レベルにおいて配備されたプログラムの状態機械をキャプチャするように構成されたステートフルモデル生成プロセス、或いは、これらのなんらかの例を含んでもよい。状態機械は、その時点までに学習されたＢＰＵＡのＩ／Ｏ動作を抽象的レベルにおいて表してもよい。状態機械モデルは、遺伝的プログラミングに基づいた修復フレームワークを使用したパッチ開発の基礎である。
【０１０３】
ブロック６１８において、負の入力及び正の入力が、配備されたプログラム内においてトリガされた応答と関連付けられてもよい。応答は、負の入力の導入を通じて特定されてもよく、且つ、正の入力が調査技法に導入される。ブロック６２０において、負の入力の１つ又は複数及び関連付けられた応答が、負の試験ケースとして試験データベース内において保存されてもよい。ブロック６２２において、正の入力の１つ又は複数及び関連付けられた応答が、正の試験ケースとして試験データベース内において保存されてもよい。
【０１０４】
ブロック６２４において、フィットネス関数が生成されてもよい。フィットネス関数は、正の試験ケース及び負の試験ケースに基づいたものであってもよい。ブロック６２６において、配備されたプログラム用のパッチが開発されてもよい。パッチは、負の入力及びトリガされた応答に基づいて、配備されたプログラム用に開発されてもよい。パッチは、脆弱性を含む応答をトリガすることなしに負の入力の少なくともいくつかを処理するべく配備されたプログラムを変更するように構成されてもよい。パッチは、フィットネス関数及び遺伝的プログラミングに基づいた配備されたプログラムに対する変化過程を含んでもよい。ブロック６２８において、パッチが試験されてもよい。例えば、パッチは、正の試験ケース及び負の試験ケースを使用することにより、試験されてもよい。ブロック６３０において、配備されたプログラムに対してパッチを自動的にディスパッチするステップが発生している。いくつかの実施形態においては、パッチは、配備されたプログラムにパッチを自動的にディスパッチする前に、試験されてもよい。いくつかの実施形態においては、Ｉ／Ｏ動作の分析、入力の発見、入力の導入、判定、パッチの開発、及びディスパッチは、配備されたプログラムが稼働している間に実行されてもよい。
【０１０５】
当業者は、本明細書に開示されているこの及びその他の手順及び方法の場合に、プロセス及び方法において実行されている機能は、異なる順序で実装されうることを理解するであろう。更には、概説されたステップ及び動作は、例として提供されたものに過ぎず、且つ、ステップ及び動作のうちのいくつかは、開示された実施形態から逸脱することなしに、任意選択であってもよく、更に少ない数のステップ及び動作に組み合わせられてもよく、或いは、更なるステップ及び動作に拡張されてもよい。
【０１０６】
本明細書において記述されている実施形態は、更に詳しく後述する様々なコンピュータハードウェア又はソフトウェアモジュールを含む特殊目的又は汎用コンピュータの使用を含んでもよい。
【０１０７】
本明細書において記述されている実施形態は、その上に保存されたコンピュータ実行可能命令及びデータ構造を担持するか又は有するコンピュータ可読媒体を使用することにより、実装されてもよい。このようなコンピュータ可読媒体は、汎用又は特殊目的コンピュータによってアクセスされうる任意の利用可能な媒体であってもよい。限定を伴うことなしに、例として、このようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、又はその他の光ディスクストレージ、磁気ディスクストレージ、又はその他の磁気ストレージ装置、或いは、コンピュータ実行可能命令又はデータ構造の形態において望ましいプログラムコードを担持するか又は有してもよいと共に汎用又は特殊目的コンピュータによってアクセスされうる任意のその他の一時的ではないストレージ媒体を含む有体の又は一時的ではないコンピュータ可読ストレージ媒体を含んでもよい。又、上述のものの組合せがコンピュータ可読媒体の範囲に含まれてもよい。
【０１０８】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、特殊目的コンピュータ、又は特殊目的処理装置に特定の機能又は機能のグループを実行させる命令及びデータを有する。主題は、構造的特徴及び／又は方法の動作に固有の言語において記述されているが、添付の請求項において定義されている主題は、必ずしも、上述の特定の特徴又は動作に限定されるものではないことを理解されたい。むしろ、上述の特定の特徴及び動作は、請求項を実装する例示用の形態として開示されたものである。
【０１０９】
本明細書において使用されている「モジュール」、「コンポーネント」、及び／又は「エンジン」という用語は、演算システム上において稼働するソフトウェアオブジェクト又はルーチンを意味してもよい。本明細書において記述されている様々なコンポーネント、モジュール、エンジン、及びサービスは、演算システム上において（例えば、別個のスレッドとして）稼働するオブジェクト又はプロセスとして実装されてもよい。本明細書において記述されているシステム及び方法は、好ましくは、ソフトウェアにおいて実装されているが、ハードウェア又はソフトウェアとハードウェアの組合せにおける実装も、可能であり、且つ、想定される。この説明において、「演算エンティティ」とは、本明細書において予め定義されている任意の演算システムであるか、又は演算システム上において稼働する任意のモジュール又はモジュールの組合せであってもよい。
【０１１０】
本明細書と、特に、添付の請求項（例えば、添付の請求項の本文）において使用されている用語は、一般に、「開放型」の用語として解釈されたい（例えば、「含む（ｉｎｃｌｕｄｉｎｇ）」という用語は、「限定を伴うことなしに含む」として解釈されるべきであり、「有する」という用語は、「少なくとも有する」として解釈されるべきであり、「含む（ｉｎｃｌｕｄｅｓ）」という用語は、「限定を伴うことなしに含む」として解釈されるべきである）。
【０１１１】
更には、特定数の導入された請求項記述物が意図されている場合には、そのような意図が明示的に請求項において記述されることになり、且つ、そのような記述が存在していない場合には、そのような意図は存在していない。例えば、理解のための支援として、添付の請求項は、請求項記述物を導入するべく、「少なくとも１つの」及び「１つ又は複数の」という導入用のフレーズの使用を含む場合がある。但し、このようなフレーズの使用は、同一の請求項が「１つ又は複数の」又は「少なくとも１つの」という導入用のフェーズ並びに「ａ」又は「ａｎ」などの不定冠詞（例えば、「ａ」及び／又は「ａｎ」は、「少なくとも１つの」又は「１つ又は複数の」を意味するものと解釈されるべきである）を含む場合にも、不定冠詞「ａ」又は「ａｎ」による請求項記述物の導入が、そのような導入された請求項記述物を含む任意の特定の請求項を１つのみのそのような記述物を含む実施形態に限定することを意味するものと解釈されるべきではなく、これは、請求項記述物を導入するべく使用されている定冠詞の使用についても適用される。
【０１１２】
更には、特定数の導入された請求項記述物が明示的に記述されている場合にも、当業者は、そのような記述は、記述された数を少なくとも意味している（例えば、その他の修飾子を伴わない「２つの記述物」という簡潔な記述は、少なくとも２つの記述物又は２つ以上の記述物を意味している）と解釈されるべきであることを認識するであろう。更には、「Ａ、Ｂ、及びＣの少なくとも１つ、他」又は「Ａ、Ｂ、及びＣの１つ又は複数、他」に類似した表記法が使用されている例においては、このような構造は、一般に、Ａのみ、Ｂのみ、Ｃのみ、共にＡ及びＢ、共にＡ及びＣ、共にＢ及びＣ、或いは、共にＡ、Ｂ、及びＣなどを含むものと解釈されたい。例えば、「及び／又は」という用語の使用は、この方式によって解釈されるべく意図されている。
【０１１３】
更には、２つ以上の代替用語を提示する任意の選言的な言葉又はフレーズは、実施形態、請求項、又は図面の説明であるかどうかに拘わらず、これらの用語のうちの１つ、これらの用語のうちのいずれか、又はこれらの用語のうちの両方を含む可能性を想定しているものと理解されたい。例えば、「Ａ又はＢ」というフレーズは、「Ａ」又は「Ｂ」或いは「Ａ及びＢ」の可能性を含むものと理解されたい。
【０１１４】
本明細書において記述されているすべての例及び条件付き言語は、本発明と、当技術分野の発展に対して本発明者によって寄与される概念と、を理解する際の読者の支援のための教育的目的を意図したものであり、且つ、このような具体的に記述された例及び条件に対する限定を伴うものではないと解釈されたい。以上、本発明の実施形態について詳細に説明したが、本発明の精神及び範囲を逸脱することなしに、様々な変更、置換、及び変形がこれらに対して実施されうることを理解されたい。
【図１】
0006686529.tif 000002
【図２】
0006686529.tif 000003
【図３】
0006686529.tif 000004
【図４】
0006686529.tif 000005
【図５】
0006686529.tif 000006
【図６Ａ】
0006686529.tif 000007
【図６Ｂ】
0006686529.tif 000008