(57)【要約】【課題】ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための方法及びシステムを提供すること。【解決手段】コンピュータにより実行される例示的な方法は、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取るステップと、BPUAにおいてシード入力を具体値実行するステップと、シード入力の具体値実行から生じたトレースを収集するステップと、シード入力の具体値実行が新たな分岐を発見したかどうかを判定するステップと、シード入力の具体値実行が新たな分岐を発見したという判定に応じて、新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、ビットマップは、BPUAにおける発見された分岐のレコードを保持するためにグレーボックスファザーにより使用される、ステップと、シード入力をグレーボックスファザーに提供するステップと、を含み得る。【選択図】図３
2019220141.tif 000002
【特許請求の範囲】
【請求項１】
ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための、コンピュータにより実行される方法であって、
グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取るステップと、
前記BPUAにおいて前記シード入力を具体値実行するステップと、
前記シード入力の前記具体値実行から生じたトレースを収集するステップと、
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定するステップと、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、ステップと、
前記シード入力を前記グレーボックスファザーに提供するステップと、
を含む、方法。
【請求項２】
前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行するステップと、
前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集するステップであって、制約は、前記シード入力を変形するために使用される、ステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記パスは、前記トレースに基づく、請求項２に記載の方法。
【請求項４】
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
キューから入力を取得するステップと、
前記入力に関連付けられた制約を否定するステップと、
前記の否定された制約が充足可能であるかどうかを判定するステップと、
前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成するステップと、
前記モデルを使用して、新たな入力を生成するステップと、
をさらに含む、請求項２に記載の方法。
【請求項５】
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、請求項４に記載の方法。
【請求項６】
前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄するステップ
をさらに含む、請求項１に記載の方法。
【請求項７】
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく、請求項１に記載の方法。
【請求項８】
前記シード入力は、任意の入力である、請求項１に記載の方法。
【請求項９】
命令で符号化された１つ以上の非一時的なマシン読み取り可能な媒体を含むコンピュータプログラム製品であって、前記命令が、１つ以上のプロセッサにより実行されたときに、前記命令は、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のためのプロセスを実行させ、前記プロセスは、
記号実行エンジンにより、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取ることと、
前記記号実行エンジンにより、前記BPUAにおいて前記シード入力を具体値実行することと、
前記記号実行エンジンにより、前記シード入力の前記具体値実行から生じたトレースを収集することと、
前記記号実行エンジンにより、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することと、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記記号実行エンジンにより、前記新たな分岐が発見されたことを示すようにビットマップを更新することであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、更新することと、
前記記号実行エンジンにより、前記シード入力をキューに配置することと、
前記記号実行エンジンにより、前記シード入力を前記グレーボックスファザーに提供することと、
を含む、コンピュータプログラム製品。
【請求項１０】
前記プロセスは、
前記記号実行エンジンにより、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行することと、
前記記号実行エンジンにより、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集することであって、制約は、前記シード入力を変形するために使用される、収集することと、
をさらに含む、請求項９に記載のコンピュータプログラム製品。
【請求項１１】
前記パスは、前記トレースに基づく、請求項１０に記載のコンピュータプログラム製品。
【請求項１２】
前記プロセスは、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記記号実行エンジンにより、前記キューから入力を取得することと、
前記記号実行エンジンにより、前記入力に関連付けられた制約を否定することと、
前記記号実行エンジンにより、前記の否定された制約が充足可能であるかどうかを判定することと、
前記の否定された制約が充足可能であるという判定に応じて、前記記号実行エンジンにより、前記の否定された制約を解決するモデルを生成することと、
前記記号実行エンジンにより、前記モデルを使用して、新たな入力を生成することと、
をさらに含む、請求項１０に記載のコンピュータプログラム製品。
【請求項１３】
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、請求項１２に記載のコンピュータプログラム製品。
【請求項１４】
前記プロセスは、
前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄すること
をさらに含む、請求項９に記載のコンピュータプログラム製品。
【請求項１５】
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく、請求項９に記載のコンピュータプログラム製品。
【請求項１６】
ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行を行うシステムであって、
命令を記憶するよう構成されている１つ以上の非一時的なマシン読み取り可能な媒体と、
前記１つ以上の非一時的なマシン読み取り可能な媒体に記憶されている前記命令を実行するよう構成されている１つ以上のプロセッサであって、前記命令の実行は、前記１つ以上のプロセッサに、
グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取る動作と、
前記BPUAにおいて前記シード入力を具体値実行する動作と、
前記シード入力の前記具体値実行から生じたトレースを収集する動作と、
前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行する動作と、
前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集する動作と、
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定する動作と、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記新たな分岐が発見されたことを示すようにビットマップを更新する動作であって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、動作と、
前記シード入力をキューに配置する動作と、
前記シード入力を前記グレーボックスファザーに提供する動作と、
を実行させる、１つ以上のプロセッサと、
を有する、システム。
【請求項１７】
前記パスは、前記トレースに基づく、請求項１６に記載のシステム。
【請求項１８】
前記命令の実行は、前記１つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記キューから入力を取得する動作と、
前記入力に関連付けられた制約を否定する動作と、
前記の否定された制約が充足可能であるかどうかを判定する動作と、
前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成する動作と、
前記モデルを使用して、新たな入力を生成する動作と、
を実行させる、請求項１６に記載のシステム。
【請求項１９】
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、請求項１８に記載のシステム。
【請求項２０】
前記命令の実行は、前記１つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄する動作を実行させる、請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、ソフトウェアのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行に関する。
【背景技術】
【０００２】
自動化されたテスト方法が、バイナリプログラムをテストするために一般に使用される。例えば、バイナリプログラムは、バイナリプログラムにおける可能性のある脆弱性を発見するために、自動化されたテスト方法を使用してテストされ得る。いくつかの自動化されたテスト方法は、ランダム入力を生成してバイナリプログラムをテストする。そのような自動化されたテスト方法の一例がファズテストである。ファズテストは、分岐網羅によりガイドされ、一般に、バイナリプログラムの各分岐を実行させるためのランダム入力を使用して、バイナリプログラムをテストすることを含む。ファズテストは、バイナリプログラムの迅速なテストを提供する。しかしながら、バイナリプログラムのファズテストは、バイナリプログラムの分岐が網羅又はテストされないことをもたらし得る。そのような自動化されたテスト方法の別の例は記号実行である。記号実行は、パス網羅によりガイドされ、一般に、バイナリプログラムを解析して、どのような入力がバイナリプログラムの各パスを実行させるかを判定することを含む。残念ながら、記号実行は、ファズテストよりもかなりのオーダー分遅い。加えて、記号実行は、パス爆発に影響されやすいものであり得る。パス爆発は、テストされているバイナリプログラムが記号的に探索すべき非常に多くのパスを含むときに生じ得る。パス爆発は、バイナリプログラムの不完全なテストをもたらし得る。
【０００３】
本開示において特許請求される主題は、あらゆる欠点を解決する実施形態又は上記のような環境においてのみ動作する実施形態に限定されるものではない。そうではなく、この背景技術の記載は、本開示に記載のいくつかの実施形態が実施され得る１つの例示的な技術領域を示すために提供されているに過ぎない。
【発明の概要】
【０００４】
いくつかの例に従うと、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための、コンピュータにより実行される方法が記載される。コンピュータにより実行される例示的な方法は、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA：binary  program  under  analysis）のシード入力を受け取るステップを含み得る。この方法はまた、BPUAにおいてシード入力を具体値実行するステップと、シード入力の具体値実行から生じたトレースを収集するステップと、を含み得る。この方法は、シード入力の具体値実行が新たな分岐を発見したかどうかを判定するステップをさらに含み得る。この方法は、シード入力の具体値実行が新たな分岐を発見したという判定に応じて、新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、ビットマップは、BPUAにおける発見された分岐のレコードを保持するためにグレーボックスファザーにより使用される、ステップと、シード入力をグレーボックスファザーに提供するステップと、を含み得る。
【０００５】
実施形態の目的及び利点が、少なくとも請求項において特に示される要素、特徴、及び組み合わせにより、実現及び達成される。
【０００６】
前述の総括的な説明及び以下の詳細な説明の両方ともが、例として与えられ、説明的なものであり、特許請求される本開示を限定するものではない。
【図面の簡単な説明】
【０００７】
例示的な実施形態が、本開示の少なくともいくつかの実施形態に従った添付の図面を使用して、より具体的且つ詳細に記載及び説明される。
【図１】ハイブリッドファズテストにおける分岐網羅によりガイドされる記号実行が実現され得る例示的な環境のブロック図。
【図２】Ａ乃至Ｄは、分岐網羅によりガイドされる記号実行のための方法を概念的に示す図。
【図３】分岐網羅によりガイドされる記号実行のための例示的なプロセスを示すフロー図。
【図４】注目する入力を変形し、記号実行のための新たな入力を生成するための例示的なプロセスを示すフロー図。
【図５】本開示において様々に説明される技術のうちの任意の技術を実行するために使用され得る例示的なコンピューティングシステムの選択されたコンポーネントを示すブロック図。
【発明を実施するための形態】
【０００８】
ハイブリッドファズテストは、ソフトウェア、特に、プログラムバイナリにおける脆弱性を発見するための技術である。ハイブリッドファザーは、記号実行及び網羅によりガイドされるグレーボックスファザーの組み合わせを含む。概して、グレーボックスファザーは、多数の（例えば数千又は数十万の）ランダムに生成された入力を使用して、テスト対象ソフトウェアを繰り返し実行する。グレーボックスファザーは、「注目する」入力を選択するために、上記の入力を使用してソフトウェアをテストすることから生じる、ソフトウェアの分岐網羅に関する情報を記録する。例えば、２つの入力が、ソフトウェアにおける同じ分岐を網羅する場合、これらの２つの入力のうちの一方のみが保持され（保たれ）、他方のテストは破棄される。さらに、入力が、ソフトウェアにおける異なる分岐を網羅する場合、この入力は、注目する入力として識別され（例えば、マークされ）、解析のためにキューされる。グレーボックスファザーは、キューされた注目する入力を変化させ、変化させられた入力を使用してソフトウェアをテストして、ソフトウェアがクラッシュする（例えば、実行を止める）又は望まない若しくは予期しない挙動を示すかを判定する。グレーボックスファザーが、ソフトウェアをテストするための注目する入力を識別できないとき、グレーボックスファザーは、ソフトウェアをテストすることに「行き詰り得る」。このポイントにおいて、記号実行が、探索されていない分岐を発見するために呼び出され得る。例えば、記号実行エンジンは、入力を使用してソフトウェアをテストして、制約（例えばパス条件）を収集することができる。入力は、任意の入力又はグレーボックスファザーにより提供される入力であってよい。ソフトウェアにおける新たな分岐条件を発見する入力は、変形のためにキューされる。記号実行エンジンは、ソフトウェアにおける分岐条件を系統的に否定して（negate）、分岐条件に沿ったソフトウェアの実行を駆動することができる新たな入力を決定することができる。これらの新たな入力は、ソフトウェアの引き続きのテストにおける使用のために、グレーボックスファザーに提供されることもあるし、別の形でグレーボックスファザーに利用可能にされることもある。グレーボックスファザーは、提供された入力を変化させ続け（例えば、新たなランダム入力を生成し続け）、変化させられた入力を使用してソフトウェアをテストすることができる。ハイブリッドファザーのいくつかの追加の詳細は、参照によりその全体が本明細書に組み込まれる米国特許出願第１５／１９８０６４号において見出すことができる。加えて、いくつかの他の例示的なグレーボックスファザーは、American  Fuzzy  Lop及びlibfuzzer並びにその変形を含む。American  Fuzzy  Lopのいくつかの追加の詳細は、http://lcamtuf.coredump.cx/afl/において見出すことができる。libfuzzerのいくつかの追加の詳細は、https://llvm.org/docs/LibFuzzer.htmlにおいて見出すことができる。
【０００９】
ハイブリッドファザーにおける１つの課題は、グレーボックスファザーと記号実行との効果的な統合である。記号実行は、プログラム解析及び制約解決を用いて、異なるプログラムパスを動かす入力を合成するホワイトボックスファジング技術である。そのようなものとして、記号実行は、テスト対象ソフトウェアにおけるパスを探索するための系統的探索に起因してパス網羅によりガイドされる（例えば、記号実行の目的は、ソフトウェアにおけるパスを発見することにより、予期しない挙動をトリガすることである）。対照的に、グレーボックスファザーは、ソフトウェアにおける分岐の探索に起因して分岐網羅によりガイドされる（例えば、グレーボックスファザーの目的は、ソフトウェアにおける分岐を発見することにより、予期しない挙動をトリガすることである）。したがって、例えば、記号実行は、入力が新たなパスを発見するという点で、入力が、注目する入力であると判定し、それに応じて、入力をグレーボックスファザーに提供し得る。残念なことに、記号実行は、入力を、注目する入力とみなすが、この注目する入力は、グレーボックスファザーが新たな分岐を発見する（例えば、グレーボックスファザーにとって新しい分岐を発見する）ことをもたらさないことがある。そのようなものとして、分岐網羅の観点で、記号実行は、グレーボックスファザーにより実行されるテストを単に繰り返し得る。分岐の繰り返しの発見は、計算リソースを浪費するという点で、非効率的である。これは、記号実行が、計算コストが高いプロセスであるという事実により、一層悪化する。
【００１０】
このために、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行を提供するための技術が開示される。分岐網羅記号実行は、ハイブリッドファザーの記号実行コンポーネントとグレーボックスファザーとの間で情報を共有することにより実現され得る。本開示のいくつかの実施形態に従うと、グレーボックスファザーは、各テスト対象ソフトウェアについてのビットマップを生成する。ソフトウェアのハイブリッドファズテスト中、グレーボックスファザーは、ビットマップを使用して、ソフトウェアにおいて発見された分岐のレコードを保持する。このビットマップは、ハイブリッドファジングの一部としてソフトウェアの記号実行を行う記号実行エンジンと共有される。例えば、記号実行エンジンは、ビットマップにおける情報を使用して、入力が、ソフトウェアにおける新たな分岐を発見したかどうかを判定し、そのような入力を、注目する入力として識別することができる。ビットマップの使用は、記号実行エンジンが、新たな分岐を発見しなかった入力を、当該入力がソフトウェアにおいて新たなパスを発見しているかもしれないとしても、破棄することを可能にする。したがって、記号実行は、分岐網羅によりガイドされ、記号実行エンジンは、ビットマップに基づいて、以前には発見されていなかった、ソフトウェアにおける分岐を発見した注目する入力を、グレーボックスファザーに提供することができる。記号実行エンジンはまた、記号実行中のそのような分岐の発見をビットマップに記録する。これは、グレーボックスファザーが、記号実行エンジンにより以前に発見された、ソフトウェアにおける分岐を再度発見するのを回避することを可能にする。したがって、ビットマップにおける分岐網羅情報の共有は、ハイブリッドファザーの記号実行コンポーネントとグレーボックスファザーとの間の向上した統合をもたらす。
【００１１】
開示される技術は、ハイブリッドファジングの効率を著しく向上させる（例えば、計算リソースを低減させる、スピードを増大させる等）。例えば、プログラムにおいて新たな分岐を発見しなかった入力は、破棄され、テスト対象ソフトウェアにおける同じ分岐を繰り返し発見するためには使用され得ない。さらに、本開示に記載の実施形態は、それに応じて、ハイブリッドファジングの有効性を向上させることができる。例えば、グレーボックスファザー及び記号実行エンジンの両方は、他方の成果を複製することなく、テスト中分岐網羅を達成することに向けて機能する。さらに、パス網羅ではなく分岐網羅によりガイドされることにより、記号実行は、パスの数が、例えばループ及び再帰の場合に、分岐ごとに指数関数的に増加するパス爆発問題を緩和することができる。これらの利点及び他の利点並びに代替実施形態が、本開示に鑑みると明らかになるであろう。
【００１２】
図１は、本開示の少なくともいくつかの実施形態に従った、ハイブリッドファズテストにおける分岐網羅によりガイドされる記号実行が実現され得る例示的な環境１００のブロック図である。図示されているように、環境１００は、解析対象バイナリプログラム（BPUA）１０１のハイブリッドファズテストを実行するよう構成され得るハイブリッドファズテストエンジン１０２を含み得る。BPUA１０１は、脆弱性を発見するためにテストされる且つ／又はBPUA１０１の動作についてテストされる任意のソフトウェアプログラムを含み得る。
【００１３】
本開示に記載のハイブリッドファズテストエンジン１０２及びその１つ以上のコンポーネント又はモジュールは、（例えば、１つ以上の動作を実行する又は１つ以上の動作の実行を制御する）プロセッサ、（例えば、１つ以上の動作を実行する又は１つ以上の動作の実行を制御する）マイクロプロセッサ、フィールドプログラマブルゲートアレイ（FPGA）、又は特定用途向け集積回路（ASIC）を含むハードウェアを使用して実装され得る。いくつかの他の例において、ハイブリッドファズテストエンジン１０２は、ハードウェアとソフトウェアとの組み合わせを使用して実装され得る。ソフトウェアによる実装は、（例えば、図５に示されている）コンピューティングシステムのハードウェアに含まれ得るような１つ以上のトランジスタ又はトランジスタ素子の迅速なアクティブ化及び非アクティブ化を含み得る。さらに、ソフトウェア定義命令は、トランジスタ素子内の情報に作用し得る。ソフトウェア命令の実施は、少なくとも一時的に電子的経路を再構成してコンピューティングハードウェアを変換し得る。
【００１４】
図１に示されているように、ハイブリッドファズテストエンジン１０２は、グレーボックスファザー１０４及び記号実行エンジン１０６を含み得、さらに、記号実行エンジン１０６は、エグゼキュータ１０８、優先順位キュー１１０、及び制約ソルバ１１２を含み得る。グレーボックスファザー１０４は、ランダム入力又は変化させられた入力を使用して、BPUA１０１を繰り返し実行するよう構成され得る。簡潔にまとめると、グレーボックスファザー１０４は、分岐網羅によりガイドされ得る。したがって、例えば、一実施形態に従うと、グレーボックスファザー１０４は、BPUA101の分岐網羅を計測して、注目する入力を選択する。入力に関連して使用されている場合、用語「注目する」は、入力が、さらに、例えば、BPUA１０１等のソフトウェアをテストするための追加の入力を決定するために解析され得ることを示し得る。例えば、注目する入力は、BPUA１０１における新たな分岐を発見し得る。注目する入力は、解析のためにキューされ得る。グレーボックスファザー１０４は、２つの入力がBPUA１０１における同じ分岐を網羅する場合、１つの入力のみが保持されるように、構成され得る。すなわち、複数の入力がBPUA１０１における同じ分岐を網羅するとグレーボックスファザー１０４が判定した場合、グレーボックスファザー１０４は、複数の入力のうちの１つの入力を保持し、保持される入力と同じ分岐を網羅する、複数の入力のうちの残りの入力を破棄することができる。グレーボックスファザー１０４は、例えばキューにおける注目する入力を変化させることができる。グレーボックスファザー１０４は、次いで、注目する入力の変化版を使用して、BPUA１０１を実行することができる。注目する入力の変化版を使用する、BPUA１０１の実行は、BPUA１０１のクラッシュ及び／又はBPUA１０１により望まない挙動が示されることをもたらし得る。
【００１５】
いくつかの実装において、グレーボックスファザー１０４は、ビットマップ１１４を実現及び使用することができる。ビットマップ１１４は、BPUA１０１に関連付けられ得、BPUA１０１のハイブリッドファズテスト中に発見された、BPUA１０１における分岐（例えば、分岐条件）を示す情報（データ）を含み得る。例えば、BPUA１０１をテストするのを開始するときに、グレーボックスファザー１０４は、ランダムに生成された識別子（ID）を用いて、BPUA１０１において各基本ブロックをインストルメントすることができる。基本ブロックは、入口に入るとき及び出口において出るときを除いて分岐を有しない直線的コードシーケンスである。分岐条件は、新たな基本ブロックを生成（開始）する。したがって、例えば、分岐条件を含まないプログラムは、単一の基本ブロックである。したがって、基本ブロックは、制御フローグラフにおいて頂点又はノードを形成し得る。いくつかの実施形態において、各基本ブロックに割り当てられるランダムに生成されるIDは、一意なIDとすることができる。グレーボックスファザー１０４が、新たな分岐（例えば、以前には網羅されていなかった分岐）を発見したとき、グレーボックスファザー１０４は、ビットマップ１１４において、新たに発見された分岐のレコードを保持することができる。いくつかの実施形態において、ビットマップ１１４は、ベクトルとして実現され得、ここで、ベクトルにおける各ビットは、BPUA１０１における分岐に対応する。分岐のコンテキストにおいて、１つの基本ブロック（例えば第１の基本ブロック）から別の基本ブロック（例えば第２の基本ブロック）への遷移は、分岐とみなされ得る。そのようなものとして、用語「分岐」及び用語「遷移」は、文脈が別途示さない限り、本開示において同義に使用され得る。
【００１６】
そのような実施形態において、グレーボックスファザー１０４は、新たに発見された遷移（例えば分岐）に対応する、ビットマップ１１４におけるビットを識別し、遷移が発見されたことを示すように対応するビットの値を（例えば「１」から「０」に）設定することができる。例えば、新たに発見された遷移が、基本ブロックＡから基本ブロックＢであると仮定する。この場合、基本ブロックＡから基本ブロックＢへの遷移に対応する、ビットマップ１１４における位置は、基本ブロックＡ及び基本ブロックＢに割り当てられた識別子を、例えば、ビット単位のXOR演算を用いて、ハッシュすることにより、決定され得る。グレーボックスファザー１０４は、次いで、ビットマップ１１４を使用して、入力が、注目する入力であるかどうかを判定することができる。例えば、グレーボックスファザー１０４は、ビットマップ１１４における発見された遷移のレコードに基づいて、入力が、新たな分岐を発見したかどうか（例えば、新たな遷移を発見し、したがって、新たな分岐網羅を提供するかどうか）を判定することができる。命令により発見された遷移が以前には発見されていなかったことをビットマップ１１４が示す場合、グレーボックスファザー１０４は、ビットマップ１１４において、遷移が発見されたことを示し、入力を、注目する入力として識別することができる。
【００１７】
いくつかの例において、グレーボックスファザー１０４は、注目する入力を発見することができないことがある。これらの例のうちの１つは、検討されている入力が、探索されたパス（例えば、発見された分岐）に属するときである。したがって、テストの初期期間中、複数の注目する入力が存在し得る。なぜならば、探索されたパスの数が少ないからである。しかしながら、BPUA１０１のより多くのパスが探索されるにつれ、注目する入力を発見するのがより難しくなり得る。
【００１８】
これらの例及び他の例において、記号実行エンジン１０６が呼び出され得る。記号実行エンジン１０６は、例えば、グレーボックスファザー１０４をBPUA１０１の別の区画（compartment）に移行させるために使用され得る。BPUA１０１に関連付けられているときの用語「区画」は、入力空間のサブセットを含み得る。概して、同じ区画における入力は、BPUA１０１が類似する挙動を示すことをもたらし得る。グレーボックスファザー１０４は、同じ区画における入力を発見することができる。しかしながら、グレーボックスファザー１０４が、記号実行エンジン１０６からの支援なく別の区画に移るのは難しいことがあり得る。
【００１９】
しかしながら、BPUA１０１がループ及び／又は再帰を含む場合、いくつかの既存の記号実行エンジンは、多数のパスが通る分岐にはまり込んだ結果、妥当な時間内に、BPUA１０１における新たな分岐を発見できないことがある。これは、「パス爆発問題」としばしば呼ばれる。なぜならば、探索すべき非常に多くのパスが存在するからである。結果として、記号実行は、新たな分岐ではなく新たなパスを発見する新たな入力を生成し得る。したがって、これらの入力は、グレーボックスファザー１０４により、「注目しない」とみなされ得る。これらの場合、記号実行エンジンは、グレーボックスファザーをどのようにも支援せず、悪い入力をシードとして提供することにより、グレーボックスファザーの生産性を低減させることさえある。これらの既存の記号実行エンジンは、グレーボックスファザー１０４又は既存の記号実行エンジンにより以前に発見された分岐及び入力の大局的視点を有しない。したがって、既存の記号実行エンジンは、BPUA１０１のパスに沿って結合を効率的に否定することができない。
【００２０】
既存の記号実行エンジンは、注目する入力を実行し、制約（例えば、入力に関する変形及び分岐条件）を収集する。そのような記号実行エンジンは、分岐条件を系統的に否定して、否定された分岐に沿ってBPUA１０１における実行を駆動することができる新たな入力を決定する。新たな入力は、グレーボックスファザー１０４に伝達又は提供され得る。グレーボックスファザー１０４は、そのような記号実行エンジンにより提供された新たな入力を変化させ、変化させられた入力を使用してBPUA１０１を実行して、BPUA１０１の網羅を増大させる（例えば、BPUA１０１における新たな分岐を発見する）ことができる。
【００２１】
例えば、一例において、BPUA１０１が以下を含むと仮定する：
Location  A
for  (;  x<100;  ++x){
Location  B
if  (x>50){
Location  C
if  (y>41){
Location  D
abort()
}
Location  E
}
Location  F
}
Location  G
【００２２】
この例において、既存の記号実行エンジンは、１つ以上の入力（例えばテストケース）を使用して、BPUA１０１をテストし得る。例えば、入力xには、以下のように特定の値が割り当てられると仮定する：x=3、x=20、及びx=70。この場合、既存の記号実行エンジンは、x=3を用いて、BPUA１０１を具体値実行し、パス条件(x<100)、(x+1<100)、(x+2<100)、．．．、(x+96<100)、及び(NOT  x+97<100)を発見し得る。既存の記号実行エンジンは、x=20を用いて、BPUA１０１を同様に具体値実行し、パス条件(x<100)、(x+1<100)、(x+2<100)、．．．、(x+79<100)、及び(NOT  x+80<100)を発見し得る。既存の記号実行エンジンはまた、x=70を用いて、BPUA１０１を具体値実行し、パス条件(x<100)且つ(x>50)、(x+1<100)且つ(x+1>50)、．．．を発見し得る。この例の場合、既存の記号実行エンジンは、これらの３つの特定の入力x=3、x=20、及びx=70を、注目する入力とみなし得る。なぜならば、これらの３つの入力の各々は、BPUA１０１における新たなパスを発見するからである。しかしながら、分岐条件のコンテキストにおいて、入力x=3及びx=20は、BPUA１０１における同じ分岐を発見することに留意されたい。すなわち、x=20の具体値実行は、x=3の具体値実行中に発見されなかった新たな分岐を発見しない。分岐網羅に関して、既存の記号実行エンジンは、同じ分岐を繰り返し発見していたという点で、非効率的である。さらに、入力x=3及びx=20を、注目する入力としてグレーボックスファザー１０４に提供することは、グレーボックスファザー１０４がBPUA１０１における新たな分岐を発見することをもたらさないことがある。例えば、グレーボックスファザー１０４は、注目する入力x=3を変化させ、注目する入力x=3をグレーボックスファザー１０４に提供した既存の記号実行エンジンにより以前に発見された同じ分岐（例えば分岐A→B）を発見し得る。実際、BPUA１０１における分岐を再度発見することは、グレーボックスファザー１０４及び既存の記号実行エンジンの両方、並びに既存のハイブリッドファズテスト全般を、より非効率的にする。
【００２３】
図１の記号実行エンジン１０６は、上述した既存の記号実行エンジンの欠点に対処する。例えば、記号実行エンジン１０６は、ビットマップ１１４を使用して、グレーボックスファザー１０４により発見された分岐を学習する。記号実行エンジン１０６はまた、ビットマップ１１４を使用して、記号実行エンジン１０６により発見された分岐をグレーボックスファジング１０４に伝達する。本開示に鑑みれば理解されるように、以前に発見された分岐の知識は、グレーボックスファザー１０４と記号実行エンジン１０６との向上した統合を提供し、これは、ハイブリッドファズテストにおける増大した効率をもたらす。記号実行エンジン１０６はまた、分岐網羅情報を使用して、注目する入力についてその探索をガイドすることができる。分岐網羅情報は、記号実行エンジン１０６が、分岐網羅によりガイドされる記号実行を行うことを可能にし、したがって、記号実行エンジン１０６とグレーボックスファザー１０４との間の向上したコンパチビリティを提供する。
【００２４】
前述したように、記号実行エンジン１０６は、エグゼキュータ１０８、キュー１１０、及び制約ソルバ１１２を含む。記号実行エンジン１０６は、BPUA１０１のハイブリッドファズテストにおいて、分岐網羅によりガイドされる記号テストを実行するよう構成され得る。例えば、記号実行エンジン１０６は、テストケース１１６等の入力のセットに基づいて、分岐網羅によりガイドされる記号テストを実行することができる。
【００２５】
記号実行エンジン１０６は、コンコリック実行（concolic  execution）を行うことができる。コンコリック実行は、動的な記号実行の一形態である。コンコリック（concolic）という用語は、CONcreteとsymbOLICとを合わせた合成語であり、これは、コンコリック実行が具体値実行及び記号実行を含むことを示す。例えば、まず、BPUA１０１等のテスト対象ソフトウェアが、テストケース１１６等の入力のセットについて具体値（例えば、特定の値）を使用して実行されて、トレースが収集され得る。収集されたトレースは、例えば、特定の入力について具体値を使用したソフトウェアの実行が、ソフトウェアにおける条件ステートメントに応じて、TRUE（真）分岐に続くか又はFALSE（偽）分岐に続くかを示し得る。具体値実行に続いて、ソフトウェアが、具体値の代わりに、入力のセットについて記号値を使用して記号実行され得る。具体値実行中に収集されたトレースは、記号値を使用する、ソフトウェアの記号実行をガイドすることができる。例えば、条件(x>5)が存在するとき、xを記号値Xとして使用する実行は、分岐X>5及びX<=5の両方を満たす。しかしながら、x=10等の具体値を有するxを使用する実行は、実行トレースにおけるTRUE（真）分岐をもたらす。
【００２６】
いくつかの実施形態において、作成されたテストケース１１６が、グレーボックスファザー１０４により提供され得る又は別の形で利用可能にされ得る。テストケース１１６は、グレーボックスファザー１０４によるファズテスト中に発見され得る。例えば、テストケース１１６は、BPUA１０１のファズテスト中にグレーボックスファザー１０４により発見された注目する入力を含み得る。注目する入力は、BPUA１０１における新たなパスを発見する又はもたらす、BPUA１０１への入力を含み得る。他の実施形態において、テストケース１１６は、例えば、ハイブリッドファズテストエンジン１０２のユーザにより提供される任意の入力であり得る。
【００２７】
いくつかの実施形態において、エグゼキュータ１０８は、テストケース１１６に含まれる入力を具体値実行するよう構成され得る。例えば、エグゼキュータ１０８は、入力に割り当てられた特定の値を使用して、BPUA１０１を実行することができる。この例において、エグゼキュータ１０８は、入力（例えば入力変数）を特定の値として扱い、これは、BPUA１０１における入力の具体値実行をもたらす。例えば、変数を含む、BPUA１０１における式の場合、具体値実行は、変数に割り当てられた特定の値を使用した式の実行を含み得る。BPUA１０１の具体値実行は、入力の特定の値により決定される、BPUA１０１を通じて実行される１つのパスをもたらす。
【００２８】
エグゼキュータ１０８はまた、入力の具体値実行から生じたトレースを収集するよう構成され得る。前述したように、トレースは、入力の具体値実行中にBPUA１０１を通じて実行されたパスに関する情報を含む。例えば、IF-THEN-ELSE条件ステートメントの場合、トレースは、具体値実行中に、THENパスが実行されたか又はELSEパスが実行されたかを示し得る。
【００２９】
いくつかの実施形態において、エグゼキュータ１０８は、入力の具体値実行から収集されたトレースを使用して、具体値実行された入力を記号実行するよう構成され得る。例えば、エグゼキュータ１０８は、具体値実行中に使用された特定の値の代わりに、入力について記号値を使用して、BPUA１０１を再度実行することができる。この例において、エグゼキュータ１０８は、入力（例えば入力変数）を記号値として扱い、これは、BPUA１０１における入力の記号実行をもたらす。例えば、変数を含む、BPUA１０１における式の場合、記号実行は、変数について記号値を使用した式の実行を含み得る。エグゼキュータ１０８は、収集されたトレースからの情報を使用して、入力の具体値実行中にBPUA１０１を通じて実行されたパスに沿って、入力を記号実行することができる。
【００３０】
そのような実施形態において、エグゼキュータ１０８はまた、BPUA１０１を通じて実行されたパスに沿って、１つ以上の入力により満たされる制約を収集するよう構成され得る。上記で提示された例示的なBPUA１０１を参照すると、制約の例は、「x<100」、「x>50」、及び「y<41」を含む。収集された制約を使用して、BPUA１０１をテストするための新たな入力を生成することができる。例えば、本開示において提供されるいくつかの実施形態に従うと、制約又は制約の一部は否定され得、否定された制約を解決して、BPUA１０１をテストするための新たな入力を生成することができる。
【００３１】
エグゼキュータ１０８は、具体値実行された入力が、BPUA１０１における新たな分岐を発見したかどうかを判定するよう構成され得る。エグゼキュータ１０８は、ビットマップ１１４に含まれる情報から、入力の具体値実行中に発見された分岐が、（例えば、以前には発見されなかった）新たな分岐であるかどうかを判定することができる。例えば、BPUA１０１における各基本ブロックは、グレーボックスファザー１０４により、それぞれのIDを用いてインストルメントされ得、エグゼキュータ１０８は、基本ブロックに割り当てられたIDとビットマップ１１４に含まれる情報とを使用して、発見された分岐が新たな分岐であるかどうかを判定することができる。具体値実行された入力が新たな分岐を発見したとエグゼキュータ１０８が判定した場合、エグゼキュータ１０８は、新たに発見された分岐が現在発見されたことを示すようにビットマップ１１４を更新することができる。このようにして、記号実行エンジン１０６は、新たな分岐の発見をグレーボックスファザー１０４に伝達し、グレーボックスファザーが、BPUA１０１のテスト中に同じ分岐を再度発見するのを回避することを可能にする。エグゼキュータ１０８は、注目する入力として、具体値実行された入力をキュー１１０に含めることができる。以下でさらに説明されるように、記号実行エンジン１０６は、キュー１１０における注目する入力に基づいて、BPUA１０１をテストするための新たな入力を生成することができる。
【００３２】
キュー１１０は、入力の優先順位キューとして構成され得る。いくつかの実施形態において、キュー１１０における入力に割り当てられる優先順位は、入力が新たな分岐を発見したかどうかに基づいて決定され得る。例えば、新たな分岐を発見した入力には、新たな分岐を発見しなかった入力よりも高い優先順位が割り当てられる。他の実施形態において、キュー１１０における入力に割り当てられる優先順位は、入力により発見された新たな分岐の数に基づいて決定され得る。例えば、より多くの数の分岐を発見した入力には、より少ない数の分岐を発見した入力よりも高い優先順位が割り当てられる。
【００３３】
一方、具体値実行された入力が新たな分岐を発見しなかったとエグゼキュータ１０８が判定した場合、エグゼキュータ１０８は、具体値実行された入力（例えば、入力に割り当てられた特定の値）を破棄することができる。例示的な実装において、エグゼキュータ１０８は、入力をキュー１１０に含めないことにより、入力を破棄することができる。本開示に鑑みれば理解されるように、ビットマップ１１４における分岐発見情報は、エグゼキュータ１０８が、本開示において様々に説明されるように、BPUA１０１の記号実行中に、（例えば、新たな分岐を発見しなかった入力に基づいて、テストするための新たな入力を生成するために）そのような入力をさらに使用するのを回避することを可能にする。
【００３４】
いくつかの実施形態において、エグゼキュータ１０８は、新たな分岐を発見するために使用された入力の特定の値を含む、新たな分岐を発見した入力を、例えば注目する入力として、グレーボックスファザー１０４に提供する又は別の形で利用可能にすることができる。グレーボックスファザー１０４は、次いで、記号実行エンジン１０６により提供された入力を変化させて、BPUA１０１をテストするための追加の入力を生成することができる。
【００３５】
いくつかの実施形態において、エグゼキュータ１０８は、キュー１１０に含まれる入力を変形し、変形された入力を、制約ソルバ１１２に提供する又は別の形で利用可能にするよう構成され得る。例えば、エグゼキュータ１０８は、入力のそれぞれの優先順位に基づいて、キュー１１０における入力を変形することができる。例示的な実装において、エグゼキュータ１０８は、入力に関連付けられた制約又は制約の一部を否定することにより、入力を変形することができる。前述したように、制約は、入力の具体値実行から収集されたトレースを使用して、BPUA１０１の記号実行中に収集され得る。一例として、制約が、「入力が４つ以上の母音を有する（input  has  four  or  more  vowels）」であると仮定する。この場合、エグゼキュータ１０８は、この制約を否定して、「入力が４つ未満の母音を有する（input  has  less  than  four  vowels）」という否定された制約を生成することができる。別の例として、制約が、「入力が文字“T”で始まり、且つ、入力が第２の文字“R”を有する（input  begins  with  the  letter  “T”  AND  input  has  a  second  letter  “R”）」であると仮定する。この場合、エグゼキュータ１０８は、この制約の１番目の部分（例えば、入力が文字“T”で始まる（input  begins  with  the  letter  “T”））を否定することにより、この制約の２番目の部分（例えば、入力が第２の文字“R”を有する（input  has  a  second  letter  “R”））を否定することにより、この制約の１番目の部分及び２番目の部分の両方を否定することにより、制約演算子（例えば、且つ（AND））を否定することにより、又は、この制約のこのような構成要素の組み合わせにより、この制約を否定することができる。さらに別の例として、制約が「x<50」であると仮定する。この場合、エグゼキュータ１０８は、この制約を否定して、「x>50」という否定された制約を生成することができる。理解されるように、制約は、制約に応じて、多数の方法で否定され得る。
【００３６】
制約ソルバ１１２は、提供された制約が充足可能であるかどうかを判定し、充足可能である場合、制約を解決するモデルを生成するよう構成され得る。いくつかの実施形態において、制約ソルバ１１２は、Z3、Boolector、又は任意の他の適切な制約ソルバ等の何らかの既存の充足可能性モジュロ理論（SMT）ソルバを使用して実装され得る。例えば、提供された制約は、エグゼキュータ１０８により提供された否定された制約であり得る。一例として、制約が、「x<3且つx>5」であると仮定する。この場合、制約ソルバは、この制約が充足可能でないと判定し、エラー状態（例えば、エラーコード又はメッセージ）を生成することができる。別の例として、制約が、「x>100且つx<102」であると仮定する。この場合、制約ソルバは、この制約が充足可能であると判定し、この制約を解決するモデルとして「x=101」を生成することができる。制約ソルバ１１２は、注目する入力として、モデルをエグゼキュータ１０８に提供する又は別の形で利用可能にすることができる。いくつかの実施形態において、制約ソルバ１１２は、エグゼキュータ１０８によりアクセス可能であるキューに、モデルを提供することができる。エグゼキュータ１０８は、提供されたモデルを使用して、BPUA101をテストするための新たな入力を生成することができる。
【００３７】
本開示の範囲から逸脱することなく、環境１００に対して、変更、追加、又は省略が可能である。例えば、環境１００は、１つ以上のハイブリッドファズテストエンジン１０２、１つ以上のグレーボックスファザー１０４、１つ以上の記号実行エンジン１０６、又はこれらの任意の組み合わせを含んでもよい。さらに、本開示に記載の実施形態における様々なコンポーネント及びサーバの分離は、そのような分離が全ての実施形態において生じることを示すように意図されるものではない。例えば、エグゼキュータ１０８及び制約ソルバ１１２は、単一のコンポーネントであってもよい。加えて、いくつかの実施形態に従うと、ハイブリッドファズテストエンジン１０２の様々なコンポーネントは全て、スタンドアロンコンピューティングシステムにあり得るのに対し、他の実施形態においては、これらのコンポーネントは、複数のマシンにわたって分散され得ることに留意されたい。より一般的な意味において、本開示において提供される１つ以上の機能コンポーネントの統合及び分散の程度は、本開示に鑑みれば理解されるように、実施形態ごとに変わり得る。
【００３８】
図２Ａ〜図２Ｄは、本開示の少なくともいくつかの実施形態に従った、分岐網羅によりガイドされる記号実行のための方法を概念的に示している。例えば、分岐網羅によりガイドされる記号実行は、ハイブリッドファズテストエンジン１０２の記号実行エンジン１０６等の記号実行エンジンにより、解析対象バイナリプログラム（簡潔にするためにBPUAとも呼ばれる）２００の一部に対して行われ得る。例示される方法は、BPUA２００の分岐網羅記号実行中に、注目する入力を識別する。
【００３９】
図２Ａは、BPUA２００の基本ブロックと、関連付けられたそれぞれのID２０２と、を示している。例えば、グレーボックスファザー１０４等のグレーボックスファザーは、BPUA２００のハイブリッドファズテストの開始時に、ランダムに生成されたIDを用いて、BPUA２００において各基本ブロックをインストルメントすることができる。図２Ａに示されているように、ID２０２は、「Location  A」、「Location  B」、「Location  C」、「Location  D」、「Location  E」、「Location  F」、及び「Location  G」を含む。各ID２０２は、BPUA２００におけるそれぞれの基本ブロックに割り当てられる。前述したように、ID２０２を使用して、BPUA２００における分岐（遷移）を識別することができる。また、ID２０２を使用して、分岐の発見を記録する（例えば、示す）ために、ビットマップ１１４等のビットマップにおける位置を決定することができる。
【００４０】
図２Ｂは、BPUA２００におけるシード入力x=3の具体値実行中に発見された分岐を示している。図２Ｂに示されているように、３つの分岐２０４、２０６、及び２０８が、x=3の具体値実行により、BPUA２００において発見され得る。分岐２０４は、Location  Aにより識別される基本ブロックから、Location  Bにより識別される基本ブロックへの遷移（Location  A→Location  B）であり、分岐２０６は、Location  Bにより識別される基本ブロックから、Location  Fにより識別される基本ブロックへの遷移（Location  B→Location  F）であり、分岐２０８は、Location  Fにより識別される基本ブロックから、Location  Aにより識別される基本ブロックへの遷移（Location  F→Location  A）である。記号実行エンジン１０６は、ビットマップ１１４をチェックして、分岐２０４、２０６、２０８のうちのいずれかが、新たに発見された分岐であるかどうかを判定することができる。分岐２０４、２０６、２０８のうちのいずれかが、新たに発見された分岐である場合、記号実行エンジン１０６は、新たな分岐の発見をビットマップ１１４に記録し、例えば、注目する入力として、入力x=3を、グレーボックスファザー１０４に提供する又は別の形で利用可能にすることができる。分岐２０４、２０６、２０８のうちのいずれかが、新たに発見された分岐である場合、記号実行エンジン１０６はまた、BPUA２００の記号実行のための新たな入力を生成する際に使用するために、入力x=3を、注目する入力として識別することができる。
【００４１】
続いて、記号実行エンジン１０６は、シード入力x=20を具体値実行することができる。図２Ｃは、BPUA２００におけるシード入力x=20の具体値実行中に発見された分岐を示している。BPUA２００におけるx=3の具体値実行により発見された同じ３つの分岐２０４、２０６、及び２０８が、BPUA２００におけるx=20の具体値実行中に再度発見され得ることに留意されたい。記号実行エンジン１０６は、ビットマップ１１４をチェックして、分岐２０４、２０６、又は２０８が、新たに発見された分岐ではないと判定することができる。すなわち、BPUA２００におけるx=20の具体値実行は、新たな分岐を発見しない。したがって、記号実行エンジン１０６は、入力x=20を破棄することができる（例えば、x=20を、注目する入力として識別しない）。
【００４２】
続いて、記号実行エンジン１０６は、シード入力x=70を具体値実行することができる。図２Ｄは、BPUA２００におけるシード入力x=70の具体値実行中に発見された分岐を示している。図２Ｄに示されているように、５つの分岐２０４、２０８、２１０、２１２、及び２１４が、x=70の具体値実行により、BPUA２００において発見され得る。分岐２０４は、Location  Aにより識別される基本ブロックから、Location  Bにより識別される基本ブロックへの遷移（Location  A→Location  B）であり、分岐２１０は、Location  Bにより識別される基本ブロックから、Location  Cにより識別される基本ブロックへの遷移（Location  B→Location  C）であり、分岐２１２は、Location  Cにより識別される基本ブロックから、Location  Eにより識別される基本ブロックへの遷移（Location  C→Location  E）であり、分岐２１４は、Location  Eにより識別される基本ブロックから、Location  Fにより識別される基本ブロックへの遷移（Location  E→Location  F）であり、分岐２０８は、Location  Fにより識別される基本ブロックから、Location  Aにより識別される基本ブロックへの遷移（Location  F→Location  A）である。記号実行エンジン１０６は、ビットマップ１１４をチェックして、分岐２１０、２１２、及び２１４が、新たに発見された分岐であり、分岐２０４及び２０８が、新たに発見された分岐ではないと判定することができる。BPUA２００におけるx=70の具体値実行は、少なくとも１つの新たな分岐を発見しているので、記号実行エンジン１０６は、新たな分岐（この場合は分岐２１０、２１２、及び２１４）の発見をビットマップ１１４に記録し、例えば、注目する入力として、入力x=70を、グレーボックスファザー１０４に提供する又は別の形で利用可能にすることができる。記号実行エンジン１０６はまた、BPUA２００の記号実行のための新たな入力を生成する際に使用するために、入力x=70を、注目する入力として識別することができる。
【００４３】
図３は、本開示の少なくともいくつかの実施形態に従った、分岐網羅によりガイドされる記号実行のための例示的なプロセス３００を示すフロー図である。図４は、本開示の少なくともいくつかの実施形態に従った、注目する入力を変形し、記号実行のための新たな入力を生成するための例示的なプロセス４００を示すフロー図である。例示的なプロセス３００及び例示的なプロセス４００に示されている動作、機能、又はアクションは、いくつかの実施形態において、図１のハイブリッドファズテストエンジン１０２の様々なコンポーネントにより実行され得る。例示的なプロセス３００及び例示的なプロセス４００のそれぞれのブロックに示されている動作、機能、又はアクションはまた、コンピュータ実行可能な命令として、コンピューティングシステム５００のメモリ５０４及び／又はデータストレージ５０６等のコンピュータ読み取り可能な媒体に記憶され得る。
【００４４】
本開示に鑑みればさらに理解されるように、本出願において開示されているこのプロセス及び他のプロセス並びに方法について、このようなプロセス及び方法において実行される機能は、異なる順序で実行されることがある。追加的又は代替的に、２つ以上の動作が、同時に実行されることもあるし、又は、オーバーラップして並行に実行されることもある。さらに、説明されるアクション及び動作は、例として提供されているに過ぎず、アクション及び動作のうちの一部は、開示されている実施形態の本質を損なうことなく、任意的であることもあるし、より少ないアクション及び動作に組み合わされることもあるし、追加のアクション及び動作に拡張されることもある。
【００４５】
図３を参照すると、プロセス３００は、ブロック３０２において開始する。プロセス３００は、本開示において様々に説明されているように、ハイブリッドファズテストエンジン１０２の記号実行エンジン１０６により実行され得る。例示的なユースケースとして、テスト対象ソフトウェア（ソフトウェア）のハイブリッドファズテスト中、グレーボックスファザー１０４は、注目する入力を見つけることができないことがあり、記号実行エンジン１０６を呼び出し得る。
【００４６】
ブロック３０４において、記号実行エンジン１０６は、シード入力（テストケース）を受け取る。上記の例を続けると、シード入力は、グレーボックスファザー１０４により提供され得る。
【００４７】
ブロック３０６において、エグゼキュータ３０８は、ソフトウェアにおいて入力を具体値実行して、トレースを収集する。収集されたトレースは、入力の具体値実行中にソフトウェアを通じて実行されたパスを示す情報を含む。
【００４８】
ブロック３０８において、エグゼキュータ１０８は、入力の具体値実行から収集されたトレースを使用して、入力を記号的に再度実行する。いくつかの実装において、エグゼキュータ１０８は、２つの例を挙げるとQEMU及びDecaf等の任意の適切なエミュレータを使用して、入力の記号実行を行うことができる。エグゼキュータ１０８は、ソフトウェアを通じて実行されたパスに沿って、入力により満たされる制約を収集することができる。
【００４９】
判定ブロック３１０において、エグゼキュータ１０８は、入力の具体値実行が、ソフトウェアにおける新たな分岐を発見したかどうかを判定する。エグゼキュータ１０８は、ビットマップ１１４に保持されている発見された分岐のレコードをチェックして、新たな分岐が発見されたかどうかを判定することができる。新たな分岐が発見された場合、ブロック３１２において、エグゼキュータ１０８は、新たに発見された１つ以上の分岐を含めるように、発見された分岐のレコードを更新する。
【００５０】
ブロック３１４において、エグゼキュータ１０８は、変形のために、入力をキュー１１０に配置する。いくつかの実装において、キュー１１０は、優先順位キューであり得る。図４とともに以下でさらに説明されるように、キュー１１０における入力を変形して使用して、ソフトウェアの記号実行のための新たな入力を生成することができる。
【００５１】
ブロック３１６において、エグゼキュータ１０８は、入力を、グレーボックスファザー１０４に提供する又は別の形で利用可能にする。いくつかの実装において、エグゼキュータ１０８は、入力を、グレーボックスファザー１０４によりアクセス可能であるキューに配置し、新たな注目する入力を、グレーボックスファザー１０４に通知又はアラートすることができる。
【００５２】
一方、判定ブロック３１０において、新たな分岐が発見されなかったと判定された場合、ブロック３１８において、エグゼキュータ１０８は入力を破棄する。例えば、入力を破棄することは、ソフトウェアのハイブリッドファズテスト中の入力のさらなる使用を防止することができる。次いで、ブロック３２０において、プロセス３００は終了する。
【００５３】
図４を参照すると、プロセス４００は、ブロック４０２において開始する。プロセス４００は、本開示において様々に説明されているように、ハイブリッドファズテストエンジン１０２の記号実行エンジン１０６により実行され得る。図３からの例示的なユースケースを続けると、エグゼキュータ１０８は、変形のために、入力をキュー１１０に配置することができる。キュー１１０に配置された入力は、テスト対象ソフトウェア（ソフトウェア）における入力の具体値実行中に新たな分岐を発見した入力であり得る。
【００５４】
ブロック４０４において、エグゼキュータ１０８、又は記号実行エンジン１０６の他の適切なコンポーネントは、キュー１１０から入力を取得する。いくつかの実装において、キュー１１０は、優先順位キューであり得、入力は、キュー１１０におけるその優先順位に基づいて取得され得る。
【００５５】
ブロック４０６において、エグゼキュータ１０８、又は記号実行エンジン１０６の他の適切なコンポーネントは、入力に関連付けられた制約を否定する。例えば、制約は、図３におけるプロセス３００のブロック３０８に関連して前述したように、ソフトウェアにおける入力の記号実行中に収集され得る。次いで、否定された制約が、制約ソルバ１１２に提供される又は別の形で利用可能にされる。
【００５６】
判定ブロック４０８において、制約ソルバ１１２は、否定された制約が充足可能であるかどうかを判定する。否定された制約が充足可能である場合、ブロック４１０において、制約ソルバ１１２は、否定された制約を解決するモデルを生成する。ブロック４１２において、制約ソルバ１１２は、注目する入力として、モデルを、エグゼキュータ１０８、又は記号実行エンジン１０６の他の適切なコンポーネントに提供する又は別の形で利用可能にする。次いで、提供されたモデルを使用して、ソフトウェアの記号実行のための新たな入力を構成することができる。例えば、エグゼキュータ１０８は、ソフトウェアにおいて新たな入力を具体値実行することができる。
【００５７】
一方、判定ブロック４０８において、否定された制約が充足可能でないと判定された場合、ブロック４１４において、制約ソルバ１１２は、否定された制約が充足可能でないことを示すエラー状態を提供する（例えば、返す）。次いで、ブロック４１６において、プロセス４００は終了する。
【００５８】
図５は、本開示の少なくともいくつかの実施形態に従った、本開示において様々に説明されている技術のうちの任意の技術を実行するために使用され得る例示的なコンピューティングシステム５００の選択されたコンポーネントを示すブロック図である。いくつかの実施形態において、コンピューティングシステム５００は、図１のハイブリッドファズテストエンジン１０２に関連付けられているエンジン、コンポーネント、及び／又はモジュールの一部又は全てに関連付けられている１つ以上の動作を実施又は指示するよう構成され得る。例えば、グレーボックスファザー１０４、記号実行エンジン１０６、及びビットマップ１１４、又はこれらの任意の組み合わせは、コンピューティングシステム５００において且つ／又はコンピューティングシステム５００を使用して、実装され得る。１つの例示的な場合において、例えば、グレーボックスファザー１０４、エグゼキュータ１０８、及び制約ソルバ１１２の各々は、プロセッサ５０２により、メモリ５０４にロードされ、実行可能であり、キュー１１０及びビットマップ１１４は、データストレージ５０６に含められる。コンピューティングシステム５００は、ワークステーション、デスクトップコンピュータ、サーバ、ラップトップ、ハンドヘルドコンピュータ、タブレットコンピュータ（例えば、iPad（登録商標）タブレットコンピュータ）、モバイルコンピューティングデバイス若しくはモバイル通信デバイス（例えば、iPhone（登録商標）モバイル通信デバイス、Android（登録商標）モバイル通信デバイス等）、又は、本開示に記載の動作を実行するための十分なプロセッサパワー及びメモリ容量を有して通信が可能な他の形態のコンピューティングデバイス若しくは通信デバイス等の任意のコンピュータシステムとすることができる。複数のそのようなコンピューティングデバイスを含む分散型計算システムが提供されることもある。図示されているように、コンピューティングシステム５００は、プロセッサ５０２、メモリ５０４、及びデータストレージ５０６を含み得る。プロセッサ５０２、メモリ５０４、及びデータストレージ５０６は、通信可能に接続され得る。
【００５９】
概して、プロセッサ５０２は、様々なコンピュータハードウェア、ファームウェア、又はソフトウェアモジュールを含む任意の適切な専用又は汎用のコンピュータ、コンピューティングエンティティ、コンピューティングデバイス、又は処理デバイスを含み得、任意の適用可能なコンピュータ読み取り可能な記憶媒体に記憶されている、プログラム命令等の命令を実行するよう構成され得る。例えば、プロセッサ５０２は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（DSP）、特定用途向け集積回路（ASIC）、フィールドプログラマブルゲートアレイ（FPGA）、又は、プログラム命令を解釈及び／又は実行し、且つ／又はデータを処理するよう構成されている任意の他のデジタル回路若しくはアナログ回路を含み得る。プロセッサ５０２は、図５において１つのプロセッサとして示されているが、プロセッサ５０２は、本開示に記載の任意の数の動作を個別的又は集合的に実行する又は本開示に記載の任意の数の動作の実行を個別的又は集合的に指示するよう構成されている任意の数のプロセッサ及び／又はプロセッサコアを含んでもよい。さらに、プロセッサのうちの１つ以上のプロセッサは、異なるサーバ等の１つ以上の異なる電子デバイスにおいて存在してもよい。
【００６０】
いくつかの実施形態において、プロセッサ５０２は、メモリ５０４、データストレージ５０６、又はメモリ５０４とデータストレージ５０６との両方に記憶されているプログラム命令を解釈及び／又は実行し、且つ／又は、メモリ５０４、データストレージ５０６、又はメモリ５０４とデータストレージ５０６との両方に記憶されているデータを処理するよう構成され得る。いくつかの実施形態において、プロセッサ５０２は、データストレージ５０６からプログラム命令をフェッチして、プログラム命令をメモリ５０４にロードすることができる。プログラム命令がメモリ５０４にロードされた後、プロセッサ５０２は、プログラム命令を実行することができる。
【００６１】
例えば、いくつかの実施形態において、ハイブリッドファズテストエンジン１０２のエンジン、コンポーネント、及び／又はモジュールのうちの任意の１つ以上は、プログラム命令として、データストレージ５０６に含められ得る。プロセッサ５０２は、データストレージ５０６からプログラム命令の一部又は全てをフェッチして、フェッチされたプログラム命令をメモリ５０４にロードすることができる。プログラム命令をメモリ５０４にロードした後、プロセッサ５０２は、コンピューティングシステムがプログラム命令により指示されるように動作を実施できるように、プログラム命令を実行することができる。
【００６２】
いくつかの実施形態において、コンピューティングシステム５００におけるインフラストラクチャ及びリソースが動的に共有され得るように、仮想化が、コンピューティングシステム５００において用いられ得る。例えば、プロセスが、複数のコンピューティングリソースではなく、１つのコンピューティングリソースのみを使用しているように見えるように、仮想マシンが、複数のプロセッサ上で動作するプロセスを処理するために提供され得る。複数の仮想マシンが、１つのプロセッサとともに使用されることもある。
【００６３】
メモリ５０４及びデータストレージ５０６は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な記憶媒体を含み得る。そのようなコンピュータ読み取り可能な記憶媒体は、プロセッサ５０２等の汎用又は専用のコンピュータによりアクセスされ得る任意の利用可能な媒体を含み得る。限定ではなく例として、そのようなコンピュータ読み取り可能な記憶媒体は、ランダムアクセスメモリ（RAM）、読み取り専用メモリ（ROM）、電気的に消去可能なプログラム可能な読み取り専用メモリ（EEPROM）、コンパクトディスク読み取り専用メモリ（CD-ROM）若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又は、コンピュータ実行可能な命令又はデータ構造の形態の特定のプログラムコードを運ぶ又は記憶するために使用され得る任意の他の記憶媒体であって、汎用又は専用のコンピュータによりアクセスされ得る任意の他の記憶媒体、を含む非一時的なコンピュータ読み取り可能な記憶媒体を含み得る。上記の組合せも、コンピュータ読み取り可能な記憶媒体の範囲に含まれ得る。コンピュータ実行可能な命令は、例えば、プロセッサ５０２に所定の動作又は動作群を実行させるよう構成されている命令及びデータを含み得る。
【００６４】
本開示の範囲から逸脱することなく、コンピューティングシステム５００に対して、変更、追加、又は省略が可能である。例えば、いくつかの実施形態において、コンピューティングシステム５００は、本出願において明示的には図示又は説明されていないかもしれない任意の数の他のコンポーネントを含んでもよい。
【００６５】
上記で示したように、本開示に記載の実施形態は、本開示においてより詳細に説明されているような様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータ（例えば、図５のプロセッサ５０２）の使用を含み得る。理解されるように、汎用のコンピュータが、本開示の実施形態に従った機能を実行するようプログラム又は構成されると、その汎用のコンピュータは、専用のコンピュータになる。さらに、上記で示したように、本開示に記載の実施形態は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な媒体（例えば、図５のメモリ５０４）を使用して実現され得る。
【００６６】
多数の例示的な変形例及び構成例が、本開示に鑑みれば明らかであろう。いくつかの例に従うと、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための、コンピュータにより実行される方法が記載される。コンピュータにより実行される例示的な方法は、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取るステップと、前記BPUAにおいて前記シード入力を具体値実行するステップと、前記シード入力の前記具体値実行から生じたトレースを収集するステップと、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定するステップと、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、ステップと、前記シード入力を前記グレーボックスファザーに提供するステップと、を含み得る。
【００６７】
いくつかの例において、この方法はまた、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行するステップと、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集するステップであって、制約は、前記シード入力を変形するために使用される、ステップと、を含み得る。他の例において、前記パスは、前記トレースに基づく。さらに他の例において、この方法はまた、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、キューから入力を取得するステップと、前記入力に関連付けられた制約を否定するステップと、前記の否定された制約が充足可能であるかどうかを判定するステップと、前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成するステップと、前記モデルを使用して、新たな入力を生成するステップと、を含み得る。さらに他の例において、前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される。さらなる例において、この方法はまた、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄するステップを含み得る。さらなる例において、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく。さらなる例において、前記シード入力は、任意の入力である。
【００６８】
いくつかの例に従うと、命令で符号化された１つ以上の非一時的なマシン読み取り可能な媒体を含むコンピュータプログラム製品であって、前記命令が、１つ以上のプロセッサにより実行されたときに、前記命令は、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のためのプロセスを実行させる、コンピュータプログラム製品が記載される。例示的なプロセスは、記号実行エンジンにより、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取ることと、前記記号実行エンジンにより、前記BPUAにおいて前記シード入力を具体値実行することと、前記記号実行エンジンにより、前記シード入力の前記具体値実行から生じたトレースを収集することと、前記記号実行エンジンにより、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することと、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記記号実行エンジンにより、前記新たな分岐が発見されたことを示すようにビットマップを更新することであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、更新することと、前記記号実行エンジンにより、前記シード入力をキューに配置することと、前記記号実行エンジンにより、前記シード入力を前記グレーボックスファザーに提供することと、を含み得る。
【００６９】
いくつかの例において、このプロセスはまた、前記記号実行エンジンにより、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行することと、前記記号実行エンジンにより、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集することであって、制約は、前記シード入力を変形するために使用される、収集することと、を含み得る。他の例において、前記パスは、前記トレースに基づく。さらに他の例において、このプロセスはまた、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記記号実行エンジンにより、前記キューから入力を取得することと、前記記号実行エンジンにより、前記入力に関連付けられた制約を否定することと、前記記号実行エンジンにより、前記の否定された制約が充足可能であるかどうかを判定することと、前記の否定された制約が充足可能であるという判定に応じて、前記記号実行エンジンにより、前記の否定された制約を解決するモデルを生成することと、前記記号実行エンジンにより、前記モデルを使用して、新たな入力を生成することと、を含み得る。さらに他の例において、前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される。さらなる例において、このプロセスは、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄することをさらに含み得る。さらなる例において、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく。
【００７０】
他の例に従うと、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行を行うシステムが記載される。例示的なシステムは、命令を記憶するよう構成されている１つ以上の非一時的なマシン読み取り可能な媒体と、前記１つ以上の非一時的なマシン読み取り可能な媒体に記憶されている前記命令を実行するよう構成されている１つ以上のプロセッサと、を含み得る。前記１つ以上のプロセッサによる前記命令の実行は、前記１つ以上のプロセッサに、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取る動作と、前記BPUAにおいて前記シード入力を具体値実行する動作と、前記シード入力の前記具体値実行から生じたトレースを収集する動作と、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行する動作と、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集する動作と、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定する動作と、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記新たな分岐が発見されたことを示すようにビットマップを更新する動作であって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、動作と、前記シード入力をキューに配置する動作と、前記シード入力を前記グレーボックスファザーに提供する動作と、を実行させ得る。
【００７１】
いくつかの例において、前記パスは、前記トレースに基づく。他の例において、前記命令の実行は、前記１つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記キューから入力を取得する動作と、前記入力に関連付けられた制約を否定する動作と、前記の否定された制約が充足可能であるかどうかを判定する動作と、前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成する動作と、前記モデルを使用して、新たな入力を生成する動作と、を実行させる。さらに他の例において、前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される。さらに他の例において、前記命令の実行は、前記１つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄する動作を実行させる。
【００７２】
本開示において使用される場合、「エンジン」若しくは「モジュール」又は「コンポーネント」という用語は、エンジン若しくはモジュール又はコンポーネントの動作を実行するよう構成されている特定のハードウェア実装、及び／又は、コンピューティングシステムの汎用ハードウェア（例えば、コンピュータ読み取り可能な媒体等）に記憶され得る且つ／又はコンピューティングシステムの汎用ハードウェア（例えば、処理デバイス等）により実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを指し得る。いくつかの実施形態において、本開示に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステム上で実行されるオブジェクト又はプロセスとして（例えば、別個のスレッドとして）実装され得る。本開示に記載のシステム及び方法のうちの一部は、（汎用ハードウェアに記憶される且つ／又は汎用ハードウェアにより実行される）ソフトウェアにより実装されるとして一般に説明されるが、特定のハードウェア実装、ファームウェア実装、又はこれらの任意の組み合わせも可能であり企図されている。本説明において、「コンピューティングエンティティ」は、本開示において前に記載された任意のコンピューティングシステム、又は、コンピューティングシステム上で実行される任意のモジュール又はモジュールの組み合わせであり得る。
【００７３】
本開示及び請求項（例えば、請求項の本体部分）において使用される用語は、一般に、「オープンな」用語であるとして意図される（例えば、「〜を備える」という用語は、「〜を備えるが、〜に限定されるものではない」として解釈されるべきであり、「〜を有する」という用語は、「少なくとも〜を有する」として解釈されるべきであり、「〜を含む」という用語は、「〜を含むが、〜に限定されるものではない」として解釈されるべきである、等）。
【００７４】
さらに、導入される請求項記載事項の特定の数が意図される場合、そのような意図は、当該請求項中に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、請求項中に、請求項記載事項を導入するための「少なくとも１つの」及び「１つ以上の」といった導入句の使用が含まれることがある。しかしながら、このような導入句の使用は、「a」又は「an」といった不定冠詞による請求項記載事項の導入が、同一の請求項中に「１つ以上の」又は「少なくとも１つの」といった導入句と「a」又は「an」といった不定冠詞とが含まれるとしても、当該導入された請求項記載事項を含む特定の請求項が、当該請求項記載事項を１つしか含まない実施形態に限定されることを意味するとして解釈されるべきではない（例えば、「a」及び／又は「an」は、「少なくとも１つの」又は「１つ以上の」を意味するとして解釈されるべきである）。請求項記載事項を導入するために使用される定冠詞の使用についても同じことが当てはまる。
【００７５】
さらに、導入される請求項記載事項の特定の数が明示的に記載されている場合であっても、そのような記載は、少なくとも記載されている数を意味するとして解釈されるべきである（例えば、他の修飾語のない「２つのウィジェット」という単なる記載は、少なくとも２つのウィジェット又は２つ以上のウィジェットを意味する）。さらに、「Ａ、Ｂ、及びＣ等のうちの少なくとも１つ」又は「Ａ、Ｂ、及びＣ等のうちの１つ以上」に類する表記が使用される場合、一般に、そのような構造は、Ａのみ、Ｂのみ、Ｃのみ、Ａ及びＢの両方、Ａ及びＣの両方、Ｂ及びＣの両方、又は、Ａ、Ｂ、及びＣの全て、等を含むことが意図される。
【００７６】
本開示において記載された全ての例及び条件付き文言は、当該技術を促進させるために本発明者によって寄与されるコンセプト及び本開示を読者が理解するのを助ける教育上の目的のために意図され、そのような具体的に記載された例及び条件に限定されるものではないとして解釈されるべきである。本開示の実施形態が詳細に説明されたが、それら実施形態に対する様々な変形、置換、及び変更が、本開示の主旨及び範囲から逸脱することなく可能である。したがって、本開示の範囲は、詳細な説明によってではなく、請求項によって定められることが意図されている。
【００７７】
以上の実施形態に関し、さらに以下の付記を開示する。
【００７８】
（付記１）
ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための、コンピュータにより実行される方法であって、
グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取るステップと、
前記BPUAにおいて前記シード入力を具体値実行するステップと、
前記シード入力の前記具体値実行から生じたトレースを収集するステップと、
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定するステップと、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、ステップと、
前記シード入力を前記グレーボックスファザーに提供するステップと、
を含む、方法。
【００７９】
（付記２）
前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行するステップと、
前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集するステップであって、制約は、前記シード入力を変形するために使用される、ステップと、
をさらに含む、付記１に記載の方法。
【００８０】
（付記３）
前記パスは、前記トレースに基づく、付記２に記載の方法。
【００８１】
（付記４）
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
キューから入力を取得するステップと、
前記入力に関連付けられた制約を否定するステップと、
前記の否定された制約が充足可能であるかどうかを判定するステップと、
前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成するステップと、
前記モデルを使用して、新たな入力を生成するステップと、
をさらに含む、付記２に記載の方法。
【００８２】
（付記５）
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、付記４に記載の方法。
【００８３】
（付記６）
前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄するステップ
をさらに含む、付記１に記載の方法。
【００８４】
（付記７）
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく、付記１に記載の方法。
【００８５】
（付記８）
前記シード入力は、任意の入力である、付記１に記載の方法。
【００８６】
（付記９）
命令で符号化された１つ以上の非一時的なマシン読み取り可能な媒体を含むコンピュータプログラム製品であって、前記命令が、１つ以上のプロセッサにより実行されたときに、前記命令は、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のためのプロセスを実行させ、前記プロセスは、
記号実行エンジンにより、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取ることと、
前記記号実行エンジンにより、前記BPUAにおいて前記シード入力を具体値実行することと、
前記記号実行エンジンにより、前記シード入力の前記具体値実行から生じたトレースを収集することと、
前記記号実行エンジンにより、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することと、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記記号実行エンジンにより、前記新たな分岐が発見されたことを示すようにビットマップを更新することであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、更新することと、
前記記号実行エンジンにより、前記シード入力をキューに配置することと、
前記記号実行エンジンにより、前記シード入力を前記グレーボックスファザーに提供することと、
を含む、コンピュータプログラム製品。
【００８７】
（付記１０）
前記プロセスは、
前記記号実行エンジンにより、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行することと、
前記記号実行エンジンにより、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集することであって、制約は、前記シード入力を変形するために使用される、収集することと、
をさらに含む、付記９に記載のコンピュータプログラム製品。
【００８８】
（付記１１）
前記パスは、前記トレースに基づく、付記１０に記載のコンピュータプログラム製品。
【００８９】
（付記１２）
前記プロセスは、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記記号実行エンジンにより、前記キューから入力を取得することと、
前記記号実行エンジンにより、前記入力に関連付けられた制約を否定することと、
前記記号実行エンジンにより、前記の否定された制約が充足可能であるかどうかを判定することと、
前記の否定された制約が充足可能であるという判定に応じて、前記記号実行エンジンにより、前記の否定された制約を解決するモデルを生成することと、
前記記号実行エンジンにより、前記モデルを使用して、新たな入力を生成することと、
をさらに含む、付記１０に記載のコンピュータプログラム製品。
【００９０】
（付記１３）
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、付記１２に記載のコンピュータプログラム製品。
【００９１】
（付記１４）
前記プロセスは、
前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄すること
をさらに含む、付記９に記載のコンピュータプログラム製品。
【００９２】
（付記１５）
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく、付記９に記載のコンピュータプログラム製品。
【００９３】
（付記１６）
ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行を行うシステムであって、
命令を記憶するよう構成されている１つ以上の非一時的なマシン読み取り可能な媒体と、
前記１つ以上の非一時的なマシン読み取り可能な媒体に記憶されている前記命令を実行するよう構成されている１つ以上のプロセッサであって、前記命令の実行は、前記１つ以上のプロセッサに、
グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム（BPUA）のシード入力を受け取る動作と、
前記BPUAにおいて前記シード入力を具体値実行する動作と、
前記シード入力の前記具体値実行から生じたトレースを収集する動作と、
前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行する動作と、
前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる１つ以上の制約を収集する動作と、
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定する動作と、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記新たな分岐が発見されたことを示すようにビットマップを更新する動作であって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、動作と、
前記シード入力をキューに配置する動作と、
前記シード入力を前記グレーボックスファザーに提供する動作と、
を実行させる、１つ以上のプロセッサと、
を有する、システム。
【００９４】
（付記１７）
前記パスは、前記トレースに基づく、付記１６に記載のシステム。
【００９５】
（付記１８）
前記命令の実行は、前記１つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記キューから入力を取得する動作と、
前記入力に関連付けられた制約を否定する動作と、
前記の否定された制約が充足可能であるかどうかを判定する動作と、
前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成する動作と、
前記モデルを使用して、新たな入力を生成する動作と、
を実行させる、付記１６に記載のシステム。
【００９６】
（付記１９）
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、付記１８に記載のシステム。
【００９７】
（付記２０）
前記命令の実行は、前記１つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄する動作を実行させる、付記１６に記載のシステム。
【符号の説明】
【００９８】
１００  環境
１０１  解析対象バイナリプログラム（BPUA）
１０２  ハイブリッドファズテストエンジン
１０４  グレーボックスファザー
１０６  記号実行エンジン
１０８  エグゼキュータ
１１０  優先順位キュー
１１２  制約ソルバ
１１４  ビットマップ
１１６  テストケース
５００  コンピューティングシステム
５０２  プロセッサ
５０４  メモリ
５０６  データストレージ
【図１】
2019220141.tif 000003
【図２】
2019220141.tif 000004
【図３】
2019220141.tif 000005
【図４】
2019220141.tif 000006
【図５】
2019220141.tif 000007