(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-20
(45)【発行日】2023-03-01
(54)【発明の名称】ソフトウェアバイナリのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行
(51)【国際特許分類】
G06F 11/36 20060101AFI20230221BHJP
【FI】
G06F11/36 184
G06F11/36 108
(21)【出願番号】P 2019027539
(22)【出願日】2019-02-19
【審査請求日】2021-11-09
(32)【優先日】2018-06-18
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】ファン・コック-サーン
(72)【発明者】
【氏名】ムルティー・プラヴィーン
【審査官】杉浦 孝光
(56)【参考文献】
【文献】中国特許出願公開第108052825(CN,A)
【文献】特開2016-167262(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための、コンピュータにより実行される方法であって、
グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取るステップと、
前記BPUAにおいて前記シード入力を具体値実行するステップと、
前記シード入力の前記具体値実行から生じたトレースを収集するステップと、
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定するステップと、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、ステップと、
前記シード入力を前記グレーボックスファザーに提供するステップと、
を含む、方法。
【請求項2】
前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行するステップと、
前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集するステップであって、制約は、前記シード入力を変形するために使用される、ステップと、
をさらに含む、請求項1に記載の方法。
【請求項3】
前記パスは、前記トレースに基づく、請求項2に記載の方法。
【請求項4】
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
キューから入力を取得するステップと、
前記入力に関連付けられた制約を否定するステップと、
前記の否定された制約が充足可能であるかどうかを判定するステップと、
前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成するステップと、
前記モデルを使用して、新たな入力を生成するステップと、
をさらに含む、請求項2に記載の方法。
【請求項5】
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、請求項4に記載の方法。
【請求項6】
前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄するステップ
をさらに含む、請求項1に記載の方法。
【請求項7】
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく、請求項1に記載の方法。
【請求項8】
前記シード入力は、任意の入力である、請求項1に記載の方法。
【請求項9】
命令
を有するコンピュータプログラ
ムであって、前記命令が、1つ以上のプロセッサにより実行されたときに、前記命令は、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のためのプロセスを実行させ、前記プロセスは、
記号実行エンジンにより、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取ることと、
前記記号実行エンジンにより、前記BPUAにおいて前記シード入力を具体値実行することと、
前記記号実行エンジンにより、前記シード入力の前記具体値実行から生じたトレースを収集することと、
前記記号実行エンジンにより、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することと、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記記号実行エンジンにより、前記新たな分岐が発見されたことを示すようにビットマップを更新することであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、更新することと、
前記記号実行エンジンにより、前記シード入力をキューに配置することと、
前記記号実行エンジンにより、前記シード入力を前記グレーボックスファザーに提供することと、
を含む、コンピュータプログラ
ム。
【請求項10】
前記プロセスは、
前記記号実行エンジンにより、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行することと、
前記記号実行エンジンにより、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集することであって、制約は、前記シード入力を変形するために使用される、収集することと、
をさらに含む、請求項9に記載のコンピュータプログラ
ム。
【請求項11】
前記パスは、前記トレースに基づく、請求項10に記載のコンピュータプログラ
ム。
【請求項12】
前記プロセスは、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記記号実行エンジンにより、前記キューから入力を取得することと、
前記記号実行エンジンにより、前記入力に関連付けられた制約を否定することと、
前記記号実行エンジンにより、前記の否定された制約が充足可能であるかどうかを判定することと、
前記の否定された制約が充足可能であるという判定に応じて、前記記号実行エンジンにより、前記の否定された制約を解決するモデルを生成することと、
前記記号実行エンジンにより、前記モデルを使用して、新たな入力を生成することと、
をさらに含む、請求項10に記載のコンピュータプログラ
ム。
【請求項13】
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、請求項12に記載のコンピュータプログラ
ム。
【請求項14】
前記プロセスは、
前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄すること
をさらに含む、請求項9に記載のコンピュータプログラ
ム。
【請求項15】
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく、請求項9に記載のコンピュータプログラ
ム。
【請求項16】
ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行を行うシステムであって、
命令を記憶するよう構成されている1つ以上の非一時的なマシン読み取り可能な媒体と、
前記1つ以上の非一時的なマシン読み取り可能な媒体に記憶されている前記命令を実行するよう構成されている1つ以上のプロセッサであって、前記命令の実行は、前記1つ以上のプロセッサに、
グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取る動作と、
前記BPUAにおいて前記シード入力を具体値実行する動作と、
前記シード入力の前記具体値実行から生じたトレースを収集する動作と、
前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行する動作と、
前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集する動作と、
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定する動作と、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記新たな分岐が発見されたことを示すようにビットマップを更新する動作であって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、動作と、
前記シード入力をキューに配置する動作と、
前記シード入力を前記グレーボックスファザーに提供する動作と、
を実行させる、1つ以上のプロセッサと、
を有する、システム。
【請求項17】
前記パスは、前記トレースに基づく、請求項16に記載のシステム。
【請求項18】
前記命令の実行は、前記1つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記キューから入力を取得する動作と、
前記入力に関連付けられた制約を否定する動作と、
前記の否定された制約が充足可能であるかどうかを判定する動作と、
前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成する動作と、
前記モデルを使用して、新たな入力を生成する動作と、
を実行させる、請求項16に記載のシステム。
【請求項19】
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、請求項18に記載のシステム。
【請求項20】
前記命令の実行は、前記1つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄する動作を実行させる、請求項16に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、ソフトウェアのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行に関する。
【背景技術】
【0002】
自動化されたテスト方法が、バイナリプログラムをテストするために一般に使用される。例えば、バイナリプログラムは、バイナリプログラムにおける可能性のある脆弱性を発見するために、自動化されたテスト方法を使用してテストされ得る。いくつかの自動化されたテスト方法は、ランダム入力を生成してバイナリプログラムをテストする。そのような自動化されたテスト方法の一例がファズテストである。ファズテストは、分岐網羅によりガイドされ、一般に、バイナリプログラムの各分岐を実行させるためのランダム入力を使用して、バイナリプログラムをテストすることを含む。ファズテストは、バイナリプログラムの迅速なテストを提供する。しかしながら、バイナリプログラムのファズテストは、バイナリプログラムの分岐が網羅又はテストされないことをもたらし得る。そのような自動化されたテスト方法の別の例は記号実行である。記号実行は、パス網羅によりガイドされ、一般に、バイナリプログラムを解析して、どのような入力がバイナリプログラムの各パスを実行させるかを判定することを含む。残念ながら、記号実行は、ファズテストよりもかなりのオーダー分遅い。加えて、記号実行は、パス爆発に影響されやすいものであり得る。パス爆発は、テストされているバイナリプログラムが記号的に探索すべき非常に多くのパスを含むときに生じ得る。パス爆発は、バイナリプログラムの不完全なテストをもたらし得る。
【0003】
本開示において特許請求される主題は、あらゆる欠点を解決する実施形態又は上記のような環境においてのみ動作する実施形態に限定されるものではない。そうではなく、この背景技術の記載は、本開示に記載のいくつかの実施形態が実施され得る1つの例示的な技術領域を示すために提供されているに過ぎない。
【発明の概要】
【0004】
いくつかの例に従うと、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための、コンピュータにより実行される方法が記載される。コンピュータにより実行される例示的な方法は、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA:binary program under analysis)のシード入力を受け取るステップを含み得る。この方法はまた、BPUAにおいてシード入力を具体値実行するステップと、シード入力の具体値実行から生じたトレースを収集するステップと、を含み得る。この方法は、シード入力の具体値実行が新たな分岐を発見したかどうかを判定するステップをさらに含み得る。この方法は、シード入力の具体値実行が新たな分岐を発見したという判定に応じて、新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、ビットマップは、BPUAにおける発見された分岐のレコードを保持するためにグレーボックスファザーにより使用される、ステップと、シード入力をグレーボックスファザーに提供するステップと、を含み得る。
【0005】
実施形態の目的及び利点が、少なくとも請求項において特に示される要素、特徴、及び組み合わせにより、実現及び達成される。
【0006】
前述の総括的な説明及び以下の詳細な説明の両方ともが、例として与えられ、説明的なものであり、特許請求される本開示を限定するものではない。
【図面の簡単な説明】
【0007】
例示的な実施形態が、本開示の少なくともいくつかの実施形態に従った添付の図面を使用して、より具体的且つ詳細に記載及び説明される。
【
図1】ハイブリッドファズテストにおける分岐網羅によりガイドされる記号実行が実現され得る例示的な環境のブロック図。
【
図2】A乃至Dは、分岐網羅によりガイドされる記号実行のための方法を概念的に示す図。
【
図3】分岐網羅によりガイドされる記号実行のための例示的なプロセスを示すフロー図。
【
図4】注目する入力を変形し、記号実行のための新たな入力を生成するための例示的なプロセスを示すフロー図。
【
図5】本開示において様々に説明される技術のうちの任意の技術を実行するために使用され得る例示的なコンピューティングシステムの選択されたコンポーネントを示すブロック図。
【発明を実施するための形態】
【0008】
ハイブリッドファズテストは、ソフトウェア、特に、プログラムバイナリにおける脆弱性を発見するための技術である。ハイブリッドファザーは、記号実行及び網羅によりガイドされるグレーボックスファザーの組み合わせを含む。概して、グレーボックスファザーは、多数の(例えば数千又は数十万の)ランダムに生成された入力を使用して、テスト対象ソフトウェアを繰り返し実行する。グレーボックスファザーは、「注目する」入力を選択するために、上記の入力を使用してソフトウェアをテストすることから生じる、ソフトウェアの分岐網羅に関する情報を記録する。例えば、2つの入力が、ソフトウェアにおける同じ分岐を網羅する場合、これらの2つの入力のうちの一方のみが保持され(保たれ)、他方のテストは破棄される。さらに、入力が、ソフトウェアにおける異なる分岐を網羅する場合、この入力は、注目する入力として識別され(例えば、マークされ)、解析のためにキューされる。グレーボックスファザーは、キューされた注目する入力を変化させ、変化させられた入力を使用してソフトウェアをテストして、ソフトウェアがクラッシュする(例えば、実行を止める)又は望まない若しくは予期しない挙動を示すかを判定する。グレーボックスファザーが、ソフトウェアをテストするための注目する入力を識別できないとき、グレーボックスファザーは、ソフトウェアをテストすることに「行き詰り得る」。このポイントにおいて、記号実行が、探索されていない分岐を発見するために呼び出され得る。例えば、記号実行エンジンは、入力を使用してソフトウェアをテストして、制約(例えばパス条件)を収集することができる。入力は、任意の入力又はグレーボックスファザーにより提供される入力であってよい。ソフトウェアにおける新たな分岐条件を発見する入力は、変形のためにキューされる。記号実行エンジンは、ソフトウェアにおける分岐条件を系統的に否定して(negate)、分岐条件に沿ったソフトウェアの実行を駆動することができる新たな入力を決定することができる。これらの新たな入力は、ソフトウェアの引き続きのテストにおける使用のために、グレーボックスファザーに提供されることもあるし、別の形でグレーボックスファザーに利用可能にされることもある。グレーボックスファザーは、提供された入力を変化させ続け(例えば、新たなランダム入力を生成し続け)、変化させられた入力を使用してソフトウェアをテストすることができる。ハイブリッドファザーのいくつかの追加の詳細は、参照によりその全体が本明細書に組み込まれる米国特許出願第15/198064号において見出すことができる。加えて、いくつかの他の例示的なグレーボックスファザーは、American Fuzzy Lop及びlibfuzzer並びにその変形を含む。American Fuzzy Lopのいくつかの追加の詳細は、http://lcamtuf.coredump.cx/afl/において見出すことができる。libfuzzerのいくつかの追加の詳細は、https://llvm.org/docs/LibFuzzer.htmlにおいて見出すことができる。
【0009】
ハイブリッドファザーにおける1つの課題は、グレーボックスファザーと記号実行との効果的な統合である。記号実行は、プログラム解析及び制約解決を用いて、異なるプログラムパスを動かす入力を合成するホワイトボックスファジング技術である。そのようなものとして、記号実行は、テスト対象ソフトウェアにおけるパスを探索するための系統的探索に起因してパス網羅によりガイドされる(例えば、記号実行の目的は、ソフトウェアにおけるパスを発見することにより、予期しない挙動をトリガすることである)。対照的に、グレーボックスファザーは、ソフトウェアにおける分岐の探索に起因して分岐網羅によりガイドされる(例えば、グレーボックスファザーの目的は、ソフトウェアにおける分岐を発見することにより、予期しない挙動をトリガすることである)。したがって、例えば、記号実行は、入力が新たなパスを発見するという点で、入力が、注目する入力であると判定し、それに応じて、入力をグレーボックスファザーに提供し得る。残念なことに、記号実行は、入力を、注目する入力とみなすが、この注目する入力は、グレーボックスファザーが新たな分岐を発見する(例えば、グレーボックスファザーにとって新しい分岐を発見する)ことをもたらさないことがある。そのようなものとして、分岐網羅の観点で、記号実行は、グレーボックスファザーにより実行されるテストを単に繰り返し得る。分岐の繰り返しの発見は、計算リソースを浪費するという点で、非効率的である。これは、記号実行が、計算コストが高いプロセスであるという事実により、一層悪化する。
【0010】
このために、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行を提供するための技術が開示される。分岐網羅記号実行は、ハイブリッドファザーの記号実行コンポーネントとグレーボックスファザーとの間で情報を共有することにより実現され得る。本開示のいくつかの実施形態に従うと、グレーボックスファザーは、各テスト対象ソフトウェアについてのビットマップを生成する。ソフトウェアのハイブリッドファズテスト中、グレーボックスファザーは、ビットマップを使用して、ソフトウェアにおいて発見された分岐のレコードを保持する。このビットマップは、ハイブリッドファジングの一部としてソフトウェアの記号実行を行う記号実行エンジンと共有される。例えば、記号実行エンジンは、ビットマップにおける情報を使用して、入力が、ソフトウェアにおける新たな分岐を発見したかどうかを判定し、そのような入力を、注目する入力として識別することができる。ビットマップの使用は、記号実行エンジンが、新たな分岐を発見しなかった入力を、当該入力がソフトウェアにおいて新たなパスを発見しているかもしれないとしても、破棄することを可能にする。したがって、記号実行は、分岐網羅によりガイドされ、記号実行エンジンは、ビットマップに基づいて、以前には発見されていなかった、ソフトウェアにおける分岐を発見した注目する入力を、グレーボックスファザーに提供することができる。記号実行エンジンはまた、記号実行中のそのような分岐の発見をビットマップに記録する。これは、グレーボックスファザーが、記号実行エンジンにより以前に発見された、ソフトウェアにおける分岐を再度発見するのを回避することを可能にする。したがって、ビットマップにおける分岐網羅情報の共有は、ハイブリッドファザーの記号実行コンポーネントとグレーボックスファザーとの間の向上した統合をもたらす。
【0011】
開示される技術は、ハイブリッドファジングの効率を著しく向上させる(例えば、計算リソースを低減させる、スピードを増大させる等)。例えば、プログラムにおいて新たな分岐を発見しなかった入力は、破棄され、テスト対象ソフトウェアにおける同じ分岐を繰り返し発見するためには使用され得ない。さらに、本開示に記載の実施形態は、それに応じて、ハイブリッドファジングの有効性を向上させることができる。例えば、グレーボックスファザー及び記号実行エンジンの両方は、他方の成果を複製することなく、テスト中分岐網羅を達成することに向けて機能する。さらに、パス網羅ではなく分岐網羅によりガイドされることにより、記号実行は、パスの数が、例えばループ及び再帰の場合に、分岐ごとに指数関数的に増加するパス爆発問題を緩和することができる。これらの利点及び他の利点並びに代替実施形態が、本開示に鑑みると明らかになるであろう。
【0012】
図1は、本開示の少なくともいくつかの実施形態に従った、ハイブリッドファズテストにおける分岐網羅によりガイドされる記号実行が実現され得る例示的な環境100のブロック図である。図示されているように、環境100は、解析対象バイナリプログラム(BPUA)101のハイブリッドファズテストを実行するよう構成され得るハイブリッドファズテストエンジン102を含み得る。BPUA101は、脆弱性を発見するためにテストされる且つ/又はBPUA101の動作についてテストされる任意のソフトウェアプログラムを含み得る。
【0013】
本開示に記載のハイブリッドファズテストエンジン102及びその1つ以上のコンポーネント又はモジュールは、(例えば、1つ以上の動作を実行する又は1つ以上の動作の実行を制御する)プロセッサ、(例えば、1つ以上の動作を実行する又は1つ以上の動作の実行を制御する)マイクロプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実装され得る。いくつかの他の例において、ハイブリッドファズテストエンジン102は、ハードウェアとソフトウェアとの組み合わせを使用して実装され得る。ソフトウェアによる実装は、(例えば、
図5に示されている)コンピューティングシステムのハードウェアに含まれ得るような1つ以上のトランジスタ又はトランジスタ素子の迅速なアクティブ化及び非アクティブ化を含み得る。さらに、ソフトウェア定義命令は、トランジスタ素子内の情報に作用し得る。ソフトウェア命令の実施は、少なくとも一時的に電子的経路を再構成してコンピューティングハードウェアを変換し得る。
【0014】
図1に示されているように、ハイブリッドファズテストエンジン102は、グレーボックスファザー104及び記号実行エンジン106を含み得、さらに、記号実行エンジン106は、エグゼキュータ108、優先順位キュー110、及び制約ソルバ112を含み得る。グレーボックスファザー104は、ランダム入力又は変化させられた入力を使用して、BPUA101を繰り返し実行するよう構成され得る。簡潔にまとめると、グレーボックスファザー104は、分岐網羅によりガイドされ得る。したがって、例えば、一実施形態に従うと、グレーボックスファザー104は、BPUA101の分岐網羅を計測して、注目する入力を選択する。入力に関連して使用されている場合、用語「注目する」は、入力が、さらに、例えば、BPUA101等のソフトウェアをテストするための追加の入力を決定するために解析され得ることを示し得る。例えば、注目する入力は、BPUA101における新たな分岐を発見し得る。注目する入力は、解析のためにキューされ得る。グレーボックスファザー104は、2つの入力がBPUA101における同じ分岐を網羅する場合、1つの入力のみが保持されるように、構成され得る。すなわち、複数の入力がBPUA101における同じ分岐を網羅するとグレーボックスファザー104が判定した場合、グレーボックスファザー104は、複数の入力のうちの1つの入力を保持し、保持される入力と同じ分岐を網羅する、複数の入力のうちの残りの入力を破棄することができる。グレーボックスファザー104は、例えばキューにおける注目する入力を変化させることができる。グレーボックスファザー104は、次いで、注目する入力の変化版を使用して、BPUA101を実行することができる。注目する入力の変化版を使用する、BPUA101の実行は、BPUA101のクラッシュ及び/又はBPUA101により望まない挙動が示されることをもたらし得る。
【0015】
いくつかの実装において、グレーボックスファザー104は、ビットマップ114を実現及び使用することができる。ビットマップ114は、BPUA101に関連付けられ得、BPUA101のハイブリッドファズテスト中に発見された、BPUA101における分岐(例えば、分岐条件)を示す情報(データ)を含み得る。例えば、BPUA101をテストするのを開始するときに、グレーボックスファザー104は、ランダムに生成された識別子(ID)を用いて、BPUA101において各基本ブロックをインストルメントすることができる。基本ブロックは、入口に入るとき及び出口において出るときを除いて分岐を有しない直線的コードシーケンスである。分岐条件は、新たな基本ブロックを生成(開始)する。したがって、例えば、分岐条件を含まないプログラムは、単一の基本ブロックである。したがって、基本ブロックは、制御フローグラフにおいて頂点又はノードを形成し得る。いくつかの実施形態において、各基本ブロックに割り当てられるランダムに生成されるIDは、一意なIDとすることができる。グレーボックスファザー104が、新たな分岐(例えば、以前には網羅されていなかった分岐)を発見したとき、グレーボックスファザー104は、ビットマップ114において、新たに発見された分岐のレコードを保持することができる。いくつかの実施形態において、ビットマップ114は、ベクトルとして実現され得、ここで、ベクトルにおける各ビットは、BPUA101における分岐に対応する。分岐のコンテキストにおいて、1つの基本ブロック(例えば第1の基本ブロック)から別の基本ブロック(例えば第2の基本ブロック)への遷移は、分岐とみなされ得る。そのようなものとして、用語「分岐」及び用語「遷移」は、文脈が別途示さない限り、本開示において同義に使用され得る。
【0016】
そのような実施形態において、グレーボックスファザー104は、新たに発見された遷移(例えば分岐)に対応する、ビットマップ114におけるビットを識別し、遷移が発見されたことを示すように対応するビットの値を(例えば「1」から「0」に)設定することができる。例えば、新たに発見された遷移が、基本ブロックAから基本ブロックBであると仮定する。この場合、基本ブロックAから基本ブロックBへの遷移に対応する、ビットマップ114における位置は、基本ブロックA及び基本ブロックBに割り当てられた識別子を、例えば、ビット単位のXOR演算を用いて、ハッシュすることにより、決定され得る。グレーボックスファザー104は、次いで、ビットマップ114を使用して、入力が、注目する入力であるかどうかを判定することができる。例えば、グレーボックスファザー104は、ビットマップ114における発見された遷移のレコードに基づいて、入力が、新たな分岐を発見したかどうか(例えば、新たな遷移を発見し、したがって、新たな分岐網羅を提供するかどうか)を判定することができる。命令により発見された遷移が以前には発見されていなかったことをビットマップ114が示す場合、グレーボックスファザー104は、ビットマップ114において、遷移が発見されたことを示し、入力を、注目する入力として識別することができる。
【0017】
いくつかの例において、グレーボックスファザー104は、注目する入力を発見することができないことがある。これらの例のうちの1つは、検討されている入力が、探索されたパス(例えば、発見された分岐)に属するときである。したがって、テストの初期期間中、複数の注目する入力が存在し得る。なぜならば、探索されたパスの数が少ないからである。しかしながら、BPUA101のより多くのパスが探索されるにつれ、注目する入力を発見するのがより難しくなり得る。
【0018】
これらの例及び他の例において、記号実行エンジン106が呼び出され得る。記号実行エンジン106は、例えば、グレーボックスファザー104をBPUA101の別の区画(compartment)に移行させるために使用され得る。BPUA101に関連付けられているときの用語「区画」は、入力空間のサブセットを含み得る。概して、同じ区画における入力は、BPUA101が類似する挙動を示すことをもたらし得る。グレーボックスファザー104は、同じ区画における入力を発見することができる。しかしながら、グレーボックスファザー104が、記号実行エンジン106からの支援なく別の区画に移るのは難しいことがあり得る。
【0019】
しかしながら、BPUA101がループ及び/又は再帰を含む場合、いくつかの既存の記号実行エンジンは、多数のパスが通る分岐にはまり込んだ結果、妥当な時間内に、BPUA101における新たな分岐を発見できないことがある。これは、「パス爆発問題」としばしば呼ばれる。なぜならば、探索すべき非常に多くのパスが存在するからである。結果として、記号実行は、新たな分岐ではなく新たなパスを発見する新たな入力を生成し得る。したがって、これらの入力は、グレーボックスファザー104により、「注目しない」とみなされ得る。これらの場合、記号実行エンジンは、グレーボックスファザーをどのようにも支援せず、悪い入力をシードとして提供することにより、グレーボックスファザーの生産性を低減させることさえある。これらの既存の記号実行エンジンは、グレーボックスファザー104又は既存の記号実行エンジンにより以前に発見された分岐及び入力の大局的視点を有しない。したがって、既存の記号実行エンジンは、BPUA101のパスに沿って結合を効率的に否定することができない。
【0020】
既存の記号実行エンジンは、注目する入力を実行し、制約(例えば、入力に関する変形及び分岐条件)を収集する。そのような記号実行エンジンは、分岐条件を系統的に否定して、否定された分岐に沿ってBPUA101における実行を駆動することができる新たな入力を決定する。新たな入力は、グレーボックスファザー104に伝達又は提供され得る。グレーボックスファザー104は、そのような記号実行エンジンにより提供された新たな入力を変化させ、変化させられた入力を使用してBPUA101を実行して、BPUA101の網羅を増大させる(例えば、BPUA101における新たな分岐を発見する)ことができる。
【0021】
例えば、一例において、BPUA101が以下を含むと仮定する:
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
【0022】
この例において、既存の記号実行エンジンは、1つ以上の入力(例えばテストケース)を使用して、BPUA101をテストし得る。例えば、入力xには、以下のように特定の値が割り当てられると仮定する:x=3、x=20、及びx=70。この場合、既存の記号実行エンジンは、x=3を用いて、BPUA101を具体値実行し、パス条件(x<100)、(x+1<100)、(x+2<100)、...、(x+96<100)、及び(NOT x+97<100)を発見し得る。既存の記号実行エンジンは、x=20を用いて、BPUA101を同様に具体値実行し、パス条件(x<100)、(x+1<100)、(x+2<100)、...、(x+79<100)、及び(NOT x+80<100)を発見し得る。既存の記号実行エンジンはまた、x=70を用いて、BPUA101を具体値実行し、パス条件(x<100)且つ(x>50)、(x+1<100)且つ(x+1>50)、...を発見し得る。この例の場合、既存の記号実行エンジンは、これらの3つの特定の入力x=3、x=20、及びx=70を、注目する入力とみなし得る。なぜならば、これらの3つの入力の各々は、BPUA101における新たなパスを発見するからである。しかしながら、分岐条件のコンテキストにおいて、入力x=3及びx=20は、BPUA101における同じ分岐を発見することに留意されたい。すなわち、x=20の具体値実行は、x=3の具体値実行中に発見されなかった新たな分岐を発見しない。分岐網羅に関して、既存の記号実行エンジンは、同じ分岐を繰り返し発見していたという点で、非効率的である。さらに、入力x=3及びx=20を、注目する入力としてグレーボックスファザー104に提供することは、グレーボックスファザー104がBPUA101における新たな分岐を発見することをもたらさないことがある。例えば、グレーボックスファザー104は、注目する入力x=3を変化させ、注目する入力x=3をグレーボックスファザー104に提供した既存の記号実行エンジンにより以前に発見された同じ分岐(例えば分岐A→B)を発見し得る。実際、BPUA101における分岐を再度発見することは、グレーボックスファザー104及び既存の記号実行エンジンの両方、並びに既存のハイブリッドファズテスト全般を、より非効率的にする。
【0023】
図1の記号実行エンジン106は、上述した既存の記号実行エンジンの欠点に対処する。例えば、記号実行エンジン106は、ビットマップ114を使用して、グレーボックスファザー104により発見された分岐を学習する。記号実行エンジン106はまた、ビットマップ114を使用して、記号実行エンジン106により発見された分岐をグレーボックスファジング104に伝達する。本開示に鑑みれば理解されるように、以前に発見された分岐の知識は、グレーボックスファザー104と記号実行エンジン106との向上した統合を提供し、これは、ハイブリッドファズテストにおける増大した効率をもたらす。記号実行エンジン106はまた、分岐網羅情報を使用して、注目する入力についてその探索をガイドすることができる。分岐網羅情報は、記号実行エンジン106が、分岐網羅によりガイドされる記号実行を行うことを可能にし、したがって、記号実行エンジン106とグレーボックスファザー104との間の向上したコンパチビリティを提供する。
【0024】
前述したように、記号実行エンジン106は、エグゼキュータ108、キュー110、及び制約ソルバ112を含む。記号実行エンジン106は、BPUA101のハイブリッドファズテストにおいて、分岐網羅によりガイドされる記号テストを実行するよう構成され得る。例えば、記号実行エンジン106は、テストケース116等の入力のセットに基づいて、分岐網羅によりガイドされる記号テストを実行することができる。
【0025】
記号実行エンジン106は、コンコリック実行(concolic execution)を行うことができる。コンコリック実行は、動的な記号実行の一形態である。コンコリック(concolic)という用語は、CONcreteとsymbOLICとを合わせた合成語であり、これは、コンコリック実行が具体値実行及び記号実行を含むことを示す。例えば、まず、BPUA101等のテスト対象ソフトウェアが、テストケース116等の入力のセットについて具体値(例えば、特定の値)を使用して実行されて、トレースが収集され得る。収集されたトレースは、例えば、特定の入力について具体値を使用したソフトウェアの実行が、ソフトウェアにおける条件ステートメントに応じて、TRUE(真)分岐に続くか又はFALSE(偽)分岐に続くかを示し得る。具体値実行に続いて、ソフトウェアが、具体値の代わりに、入力のセットについて記号値を使用して記号実行され得る。具体値実行中に収集されたトレースは、記号値を使用する、ソフトウェアの記号実行をガイドすることができる。例えば、条件(x>5)が存在するとき、xを記号値Xとして使用する実行は、分岐X>5及びX<=5の両方を満たす。しかしながら、x=10等の具体値を有するxを使用する実行は、実行トレースにおけるTRUE(真)分岐をもたらす。
【0026】
いくつかの実施形態において、作成されたテストケース116が、グレーボックスファザー104により提供され得る又は別の形で利用可能にされ得る。テストケース116は、グレーボックスファザー104によるファズテスト中に発見され得る。例えば、テストケース116は、BPUA101のファズテスト中にグレーボックスファザー104により発見された注目する入力を含み得る。注目する入力は、BPUA101における新たなパスを発見する又はもたらす、BPUA101への入力を含み得る。他の実施形態において、テストケース116は、例えば、ハイブリッドファズテストエンジン102のユーザにより提供される任意の入力であり得る。
【0027】
いくつかの実施形態において、エグゼキュータ108は、テストケース116に含まれる入力を具体値実行するよう構成され得る。例えば、エグゼキュータ108は、入力に割り当てられた特定の値を使用して、BPUA101を実行することができる。この例において、エグゼキュータ108は、入力(例えば入力変数)を特定の値として扱い、これは、BPUA101における入力の具体値実行をもたらす。例えば、変数を含む、BPUA101における式の場合、具体値実行は、変数に割り当てられた特定の値を使用した式の実行を含み得る。BPUA101の具体値実行は、入力の特定の値により決定される、BPUA101を通じて実行される1つのパスをもたらす。
【0028】
エグゼキュータ108はまた、入力の具体値実行から生じたトレースを収集するよう構成され得る。前述したように、トレースは、入力の具体値実行中にBPUA101を通じて実行されたパスに関する情報を含む。例えば、IF-THEN-ELSE条件ステートメントの場合、トレースは、具体値実行中に、THENパスが実行されたか又はELSEパスが実行されたかを示し得る。
【0029】
いくつかの実施形態において、エグゼキュータ108は、入力の具体値実行から収集されたトレースを使用して、具体値実行された入力を記号実行するよう構成され得る。例えば、エグゼキュータ108は、具体値実行中に使用された特定の値の代わりに、入力について記号値を使用して、BPUA101を再度実行することができる。この例において、エグゼキュータ108は、入力(例えば入力変数)を記号値として扱い、これは、BPUA101における入力の記号実行をもたらす。例えば、変数を含む、BPUA101における式の場合、記号実行は、変数について記号値を使用した式の実行を含み得る。エグゼキュータ108は、収集されたトレースからの情報を使用して、入力の具体値実行中にBPUA101を通じて実行されたパスに沿って、入力を記号実行することができる。
【0030】
そのような実施形態において、エグゼキュータ108はまた、BPUA101を通じて実行されたパスに沿って、1つ以上の入力により満たされる制約を収集するよう構成され得る。上記で提示された例示的なBPUA101を参照すると、制約の例は、「x<100」、「x>50」、及び「y<41」を含む。収集された制約を使用して、BPUA101をテストするための新たな入力を生成することができる。例えば、本開示において提供されるいくつかの実施形態に従うと、制約又は制約の一部は否定され得、否定された制約を解決して、BPUA101をテストするための新たな入力を生成することができる。
【0031】
エグゼキュータ108は、具体値実行された入力が、BPUA101における新たな分岐を発見したかどうかを判定するよう構成され得る。エグゼキュータ108は、ビットマップ114に含まれる情報から、入力の具体値実行中に発見された分岐が、(例えば、以前には発見されなかった)新たな分岐であるかどうかを判定することができる。例えば、BPUA101における各基本ブロックは、グレーボックスファザー104により、それぞれのIDを用いてインストルメントされ得、エグゼキュータ108は、基本ブロックに割り当てられたIDとビットマップ114に含まれる情報とを使用して、発見された分岐が新たな分岐であるかどうかを判定することができる。具体値実行された入力が新たな分岐を発見したとエグゼキュータ108が判定した場合、エグゼキュータ108は、新たに発見された分岐が現在発見されたことを示すようにビットマップ114を更新することができる。このようにして、記号実行エンジン106は、新たな分岐の発見をグレーボックスファザー104に伝達し、グレーボックスファザーが、BPUA101のテスト中に同じ分岐を再度発見するのを回避することを可能にする。エグゼキュータ108は、注目する入力として、具体値実行された入力をキュー110に含めることができる。以下でさらに説明されるように、記号実行エンジン106は、キュー110における注目する入力に基づいて、BPUA101をテストするための新たな入力を生成することができる。
【0032】
キュー110は、入力の優先順位キューとして構成され得る。いくつかの実施形態において、キュー110における入力に割り当てられる優先順位は、入力が新たな分岐を発見したかどうかに基づいて決定され得る。例えば、新たな分岐を発見した入力には、新たな分岐を発見しなかった入力よりも高い優先順位が割り当てられる。他の実施形態において、キュー110における入力に割り当てられる優先順位は、入力により発見された新たな分岐の数に基づいて決定され得る。例えば、より多くの数の分岐を発見した入力には、より少ない数の分岐を発見した入力よりも高い優先順位が割り当てられる。
【0033】
一方、具体値実行された入力が新たな分岐を発見しなかったとエグゼキュータ108が判定した場合、エグゼキュータ108は、具体値実行された入力(例えば、入力に割り当てられた特定の値)を破棄することができる。例示的な実装において、エグゼキュータ108は、入力をキュー110に含めないことにより、入力を破棄することができる。本開示に鑑みれば理解されるように、ビットマップ114における分岐発見情報は、エグゼキュータ108が、本開示において様々に説明されるように、BPUA101の記号実行中に、(例えば、新たな分岐を発見しなかった入力に基づいて、テストするための新たな入力を生成するために)そのような入力をさらに使用するのを回避することを可能にする。
【0034】
いくつかの実施形態において、エグゼキュータ108は、新たな分岐を発見するために使用された入力の特定の値を含む、新たな分岐を発見した入力を、例えば注目する入力として、グレーボックスファザー104に提供する又は別の形で利用可能にすることができる。グレーボックスファザー104は、次いで、記号実行エンジン106により提供された入力を変化させて、BPUA101をテストするための追加の入力を生成することができる。
【0035】
いくつかの実施形態において、エグゼキュータ108は、キュー110に含まれる入力を変形し、変形された入力を、制約ソルバ112に提供する又は別の形で利用可能にするよう構成され得る。例えば、エグゼキュータ108は、入力のそれぞれの優先順位に基づいて、キュー110における入力を変形することができる。例示的な実装において、エグゼキュータ108は、入力に関連付けられた制約又は制約の一部を否定することにより、入力を変形することができる。前述したように、制約は、入力の具体値実行から収集されたトレースを使用して、BPUA101の記号実行中に収集され得る。一例として、制約が、「入力が4つ以上の母音を有する(input has four or more vowels)」であると仮定する。この場合、エグゼキュータ108は、この制約を否定して、「入力が4つ未満の母音を有する(input has less than four vowels)」という否定された制約を生成することができる。別の例として、制約が、「入力が文字“T”で始まり、且つ、入力が第2の文字“R”を有する(input begins with the letter “T” AND input has a second letter “R”)」であると仮定する。この場合、エグゼキュータ108は、この制約の1番目の部分(例えば、入力が文字“T”で始まる(input begins with the letter “T”))を否定することにより、この制約の2番目の部分(例えば、入力が第2の文字“R”を有する(input has a second letter “R”))を否定することにより、この制約の1番目の部分及び2番目の部分の両方を否定することにより、制約演算子(例えば、且つ(AND))を否定することにより、又は、この制約のこのような構成要素の組み合わせにより、この制約を否定することができる。さらに別の例として、制約が「x<50」であると仮定する。この場合、エグゼキュータ108は、この制約を否定して、「x>50」という否定された制約を生成することができる。理解されるように、制約は、制約に応じて、多数の方法で否定され得る。
【0036】
制約ソルバ112は、提供された制約が充足可能であるかどうかを判定し、充足可能である場合、制約を解決するモデルを生成するよう構成され得る。いくつかの実施形態において、制約ソルバ112は、Z3、Boolector、又は任意の他の適切な制約ソルバ等の何らかの既存の充足可能性モジュロ理論(SMT)ソルバを使用して実装され得る。例えば、提供された制約は、エグゼキュータ108により提供された否定された制約であり得る。一例として、制約が、「x<3且つx>5」であると仮定する。この場合、制約ソルバは、この制約が充足可能でないと判定し、エラー状態(例えば、エラーコード又はメッセージ)を生成することができる。別の例として、制約が、「x>100且つx<102」であると仮定する。この場合、制約ソルバは、この制約が充足可能であると判定し、この制約を解決するモデルとして「x=101」を生成することができる。制約ソルバ112は、注目する入力として、モデルをエグゼキュータ108に提供する又は別の形で利用可能にすることができる。いくつかの実施形態において、制約ソルバ112は、エグゼキュータ108によりアクセス可能であるキューに、モデルを提供することができる。エグゼキュータ108は、提供されたモデルを使用して、BPUA101をテストするための新たな入力を生成することができる。
【0037】
本開示の範囲から逸脱することなく、環境100に対して、変更、追加、又は省略が可能である。例えば、環境100は、1つ以上のハイブリッドファズテストエンジン102、1つ以上のグレーボックスファザー104、1つ以上の記号実行エンジン106、又はこれらの任意の組み合わせを含んでもよい。さらに、本開示に記載の実施形態における様々なコンポーネント及びサーバの分離は、そのような分離が全ての実施形態において生じることを示すように意図されるものではない。例えば、エグゼキュータ108及び制約ソルバ112は、単一のコンポーネントであってもよい。加えて、いくつかの実施形態に従うと、ハイブリッドファズテストエンジン102の様々なコンポーネントは全て、スタンドアロンコンピューティングシステムにあり得るのに対し、他の実施形態においては、これらのコンポーネントは、複数のマシンにわたって分散され得ることに留意されたい。より一般的な意味において、本開示において提供される1つ以上の機能コンポーネントの統合及び分散の程度は、本開示に鑑みれば理解されるように、実施形態ごとに変わり得る。
【0038】
図2A~
図2Dは、本開示の少なくともいくつかの実施形態に従った、分岐網羅によりガイドされる記号実行のための方法を概念的に示している。例えば、分岐網羅によりガイドされる記号実行は、ハイブリッドファズテストエンジン102の記号実行エンジン106等の記号実行エンジンにより、解析対象バイナリプログラム(簡潔にするためにBPUAとも呼ばれる)200の一部に対して行われ得る。例示される方法は、BPUA200の分岐網羅記号実行中に、注目する入力を識別する。
【0039】
図2Aは、BPUA200の基本ブロックと、関連付けられたそれぞれのID202と、を示している。例えば、グレーボックスファザー104等のグレーボックスファザーは、BPUA200のハイブリッドファズテストの開始時に、ランダムに生成されたIDを用いて、BPUA200において各基本ブロックをインストルメントすることができる。
図2Aに示されているように、ID202は、「Location A」、「Location B」、「Location C」、「Location D」、「Location E」、「Location F」、及び「Location G」を含む。各ID202は、BPUA200におけるそれぞれの基本ブロックに割り当てられる。前述したように、ID202を使用して、BPUA200における分岐(遷移)を識別することができる。また、ID202を使用して、分岐の発見を記録する(例えば、示す)ために、ビットマップ114等のビットマップにおける位置を決定することができる。
【0040】
図2Bは、BPUA200におけるシード入力x=3の具体値実行中に発見された分岐を示している。
図2Bに示されているように、3つの分岐204、206、及び208が、x=3の具体値実行により、BPUA200において発見され得る。分岐204は、Location Aにより識別される基本ブロックから、Location Bにより識別される基本ブロックへの遷移(Location A→Location B)であり、分岐206は、Location Bにより識別される基本ブロックから、Location Fにより識別される基本ブロックへの遷移(Location B→Location F)であり、分岐208は、Location Fにより識別される基本ブロックから、Location Aにより識別される基本ブロックへの遷移(Location F→Location A)である。記号実行エンジン106は、ビットマップ114をチェックして、分岐204、206、208のうちのいずれかが、新たに発見された分岐であるかどうかを判定することができる。分岐204、206、208のうちのいずれかが、新たに発見された分岐である場合、記号実行エンジン106は、新たな分岐の発見をビットマップ114に記録し、例えば、注目する入力として、入力x=3を、グレーボックスファザー104に提供する又は別の形で利用可能にすることができる。分岐204、206、208のうちのいずれかが、新たに発見された分岐である場合、記号実行エンジン106はまた、BPUA200の記号実行のための新たな入力を生成する際に使用するために、入力x=3を、注目する入力として識別することができる。
【0041】
続いて、記号実行エンジン106は、シード入力x=20を具体値実行することができる。
図2Cは、BPUA200におけるシード入力x=20の具体値実行中に発見された分岐を示している。BPUA200におけるx=3の具体値実行により発見された同じ3つの分岐204、206、及び208が、BPUA200におけるx=20の具体値実行中に再度発見され得ることに留意されたい。記号実行エンジン106は、ビットマップ114をチェックして、分岐204、206、又は208が、新たに発見された分岐ではないと判定することができる。すなわち、BPUA200におけるx=20の具体値実行は、新たな分岐を発見しない。したがって、記号実行エンジン106は、入力x=20を破棄することができる(例えば、x=20を、注目する入力として識別しない)。
【0042】
続いて、記号実行エンジン106は、シード入力x=70を具体値実行することができる。
図2Dは、BPUA200におけるシード入力x=70の具体値実行中に発見された分岐を示している。
図2Dに示されているように、5つの分岐204、208、210、212、及び214が、x=70の具体値実行により、BPUA200において発見され得る。分岐204は、Location Aにより識別される基本ブロックから、Location Bにより識別される基本ブロックへの遷移(Location A→Location B)であり、分岐210は、Location Bにより識別される基本ブロックから、Location Cにより識別される基本ブロックへの遷移(Location B→Location C)であり、分岐212は、Location Cにより識別される基本ブロックから、Location Eにより識別される基本ブロックへの遷移(Location C→Location E)であり、分岐214は、Location Eにより識別される基本ブロックから、Location Fにより識別される基本ブロックへの遷移(Location E→Location F)であり、分岐208は、Location Fにより識別される基本ブロックから、Location Aにより識別される基本ブロックへの遷移(Location F→Location A)である。記号実行エンジン106は、ビットマップ114をチェックして、分岐210、212、及び214が、新たに発見された分岐であり、分岐204及び208が、新たに発見された分岐ではないと判定することができる。BPUA200におけるx=70の具体値実行は、少なくとも1つの新たな分岐を発見しているので、記号実行エンジン106は、新たな分岐(この場合は分岐210、212、及び214)の発見をビットマップ114に記録し、例えば、注目する入力として、入力x=70を、グレーボックスファザー104に提供する又は別の形で利用可能にすることができる。記号実行エンジン106はまた、BPUA200の記号実行のための新たな入力を生成する際に使用するために、入力x=70を、注目する入力として識別することができる。
【0043】
図3は、本開示の少なくともいくつかの実施形態に従った、分岐網羅によりガイドされる記号実行のための例示的なプロセス300を示すフロー図である。
図4は、本開示の少なくともいくつかの実施形態に従った、注目する入力を変形し、記号実行のための新たな入力を生成するための例示的なプロセス400を示すフロー図である。例示的なプロセス300及び例示的なプロセス400に示されている動作、機能、又はアクションは、いくつかの実施形態において、
図1のハイブリッドファズテストエンジン102の様々なコンポーネントにより実行され得る。例示的なプロセス300及び例示的なプロセス400のそれぞれのブロックに示されている動作、機能、又はアクションはまた、コンピュータ実行可能な命令として、コンピューティングシステム500のメモリ504及び/又はデータストレージ506等のコンピュータ読み取り可能な媒体に記憶され得る。
【0044】
本開示に鑑みればさらに理解されるように、本出願において開示されているこのプロセス及び他のプロセス並びに方法について、このようなプロセス及び方法において実行される機能は、異なる順序で実行されることがある。追加的又は代替的に、2つ以上の動作が、同時に実行されることもあるし、又は、オーバーラップして並行に実行されることもある。さらに、説明されるアクション及び動作は、例として提供されているに過ぎず、アクション及び動作のうちの一部は、開示されている実施形態の本質を損なうことなく、任意的であることもあるし、より少ないアクション及び動作に組み合わされることもあるし、追加のアクション及び動作に拡張されることもある。
【0045】
図3を参照すると、プロセス300は、ブロック302において開始する。プロセス300は、本開示において様々に説明されているように、ハイブリッドファズテストエンジン102の記号実行エンジン106により実行され得る。例示的なユースケースとして、テスト対象ソフトウェア(ソフトウェア)のハイブリッドファズテスト中、グレーボックスファザー104は、注目する入力を見つけることができないことがあり、記号実行エンジン106を呼び出し得る。
【0046】
ブロック304において、記号実行エンジン106は、シード入力(テストケース)を受け取る。上記の例を続けると、シード入力は、グレーボックスファザー104により提供され得る。
【0047】
ブロック306において、エグゼキュータ308は、ソフトウェアにおいて入力を具体値実行して、トレースを収集する。収集されたトレースは、入力の具体値実行中にソフトウェアを通じて実行されたパスを示す情報を含む。
【0048】
ブロック308において、エグゼキュータ108は、入力の具体値実行から収集されたトレースを使用して、入力を記号的に再度実行する。いくつかの実装において、エグゼキュータ108は、2つの例を挙げるとQEMU及びDecaf等の任意の適切なエミュレータを使用して、入力の記号実行を行うことができる。エグゼキュータ108は、ソフトウェアを通じて実行されたパスに沿って、入力により満たされる制約を収集することができる。
【0049】
判定ブロック310において、エグゼキュータ108は、入力の具体値実行が、ソフトウェアにおける新たな分岐を発見したかどうかを判定する。エグゼキュータ108は、ビットマップ114に保持されている発見された分岐のレコードをチェックして、新たな分岐が発見されたかどうかを判定することができる。新たな分岐が発見された場合、ブロック312において、エグゼキュータ108は、新たに発見された1つ以上の分岐を含めるように、発見された分岐のレコードを更新する。
【0050】
ブロック314において、エグゼキュータ108は、変形のために、入力をキュー110に配置する。いくつかの実装において、キュー110は、優先順位キューであり得る。
図4とともに以下でさらに説明されるように、キュー110における入力を変形して使用して、ソフトウェアの記号実行のための新たな入力を生成することができる。
【0051】
ブロック316において、エグゼキュータ108は、入力を、グレーボックスファザー104に提供する又は別の形で利用可能にする。いくつかの実装において、エグゼキュータ108は、入力を、グレーボックスファザー104によりアクセス可能であるキューに配置し、新たな注目する入力を、グレーボックスファザー104に通知又はアラートすることができる。
【0052】
一方、判定ブロック310において、新たな分岐が発見されなかったと判定された場合、ブロック318において、エグゼキュータ108は入力を破棄する。例えば、入力を破棄することは、ソフトウェアのハイブリッドファズテスト中の入力のさらなる使用を防止することができる。次いで、ブロック320において、プロセス300は終了する。
【0053】
図4を参照すると、プロセス400は、ブロック402において開始する。プロセス400は、本開示において様々に説明されているように、ハイブリッドファズテストエンジン102の記号実行エンジン106により実行され得る。
図3からの例示的なユースケースを続けると、エグゼキュータ108は、変形のために、入力をキュー110に配置することができる。キュー110に配置された入力は、テスト対象ソフトウェア(ソフトウェア)における入力の具体値実行中に新たな分岐を発見した入力であり得る。
【0054】
ブロック404において、エグゼキュータ108、又は記号実行エンジン106の他の適切なコンポーネントは、キュー110から入力を取得する。いくつかの実装において、キュー110は、優先順位キューであり得、入力は、キュー110におけるその優先順位に基づいて取得され得る。
【0055】
ブロック406において、エグゼキュータ108、又は記号実行エンジン106の他の適切なコンポーネントは、入力に関連付けられた制約を否定する。例えば、制約は、
図3におけるプロセス300のブロック308に関連して前述したように、ソフトウェアにおける入力の記号実行中に収集され得る。次いで、否定された制約が、制約ソルバ112に提供される又は別の形で利用可能にされる。
【0056】
判定ブロック408において、制約ソルバ112は、否定された制約が充足可能であるかどうかを判定する。否定された制約が充足可能である場合、ブロック410において、制約ソルバ112は、否定された制約を解決するモデルを生成する。ブロック412において、制約ソルバ112は、注目する入力として、モデルを、エグゼキュータ108、又は記号実行エンジン106の他の適切なコンポーネントに提供する又は別の形で利用可能にする。次いで、提供されたモデルを使用して、ソフトウェアの記号実行のための新たな入力を構成することができる。例えば、エグゼキュータ108は、ソフトウェアにおいて新たな入力を具体値実行することができる。
【0057】
一方、判定ブロック408において、否定された制約が充足可能でないと判定された場合、ブロック414において、制約ソルバ112は、否定された制約が充足可能でないことを示すエラー状態を提供する(例えば、返す)。次いで、ブロック416において、プロセス400は終了する。
【0058】
図5は、本開示の少なくともいくつかの実施形態に従った、本開示において様々に説明されている技術のうちの任意の技術を実行するために使用され得る例示的なコンピューティングシステム500の選択されたコンポーネントを示すブロック図である。いくつかの実施形態において、コンピューティングシステム500は、
図1のハイブリッドファズテストエンジン102に関連付けられているエンジン、コンポーネント、及び/又はモジュールの一部又は全てに関連付けられている1つ以上の動作を実施又は指示するよう構成され得る。例えば、グレーボックスファザー104、記号実行エンジン106、及びビットマップ114、又はこれらの任意の組み合わせは、コンピューティングシステム500において且つ/又はコンピューティングシステム500を使用して、実装され得る。1つの例示的な場合において、例えば、グレーボックスファザー104、エグゼキュータ108、及び制約ソルバ112の各々は、プロセッサ502により、メモリ504にロードされ、実行可能であり、キュー110及びビットマップ114は、データストレージ506に含められる。コンピューティングシステム500は、ワークステーション、デスクトップコンピュータ、サーバ、ラップトップ、ハンドヘルドコンピュータ、タブレットコンピュータ(例えば、iPad(登録商標)タブレットコンピュータ)、モバイルコンピューティングデバイス若しくはモバイル通信デバイス(例えば、iPhone(登録商標)モバイル通信デバイス、Android(登録商標)モバイル通信デバイス等)、又は、本開示に記載の動作を実行するための十分なプロセッサパワー及びメモリ容量を有して通信が可能な他の形態のコンピューティングデバイス若しくは通信デバイス等の任意のコンピュータシステムとすることができる。複数のそのようなコンピューティングデバイスを含む分散型計算システムが提供されることもある。図示されているように、コンピューティングシステム500は、プロセッサ502、メモリ504、及びデータストレージ506を含み得る。プロセッサ502、メモリ504、及びデータストレージ506は、通信可能に接続され得る。
【0059】
概して、プロセッサ502は、様々なコンピュータハードウェア、ファームウェア、又はソフトウェアモジュールを含む任意の適切な専用又は汎用のコンピュータ、コンピューティングエンティティ、コンピューティングデバイス、又は処理デバイスを含み得、任意の適用可能なコンピュータ読み取り可能な記憶媒体に記憶されている、プログラム命令等の命令を実行するよう構成され得る。例えば、プロセッサ502は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又は、プログラム命令を解釈及び/又は実行し、且つ/又はデータを処理するよう構成されている任意の他のデジタル回路若しくはアナログ回路を含み得る。プロセッサ502は、
図5において1つのプロセッサとして示されているが、プロセッサ502は、本開示に記載の任意の数の動作を個別的又は集合的に実行する又は本開示に記載の任意の数の動作の実行を個別的又は集合的に指示するよう構成されている任意の数のプロセッサ及び/又はプロセッサコアを含んでもよい。さらに、プロセッサのうちの1つ以上のプロセッサは、異なるサーバ等の1つ以上の異なる電子デバイスにおいて存在してもよい。
【0060】
いくつかの実施形態において、プロセッサ502は、メモリ504、データストレージ506、又はメモリ504とデータストレージ506との両方に記憶されているプログラム命令を解釈及び/又は実行し、且つ/又は、メモリ504、データストレージ506、又はメモリ504とデータストレージ506との両方に記憶されているデータを処理するよう構成され得る。いくつかの実施形態において、プロセッサ502は、データストレージ506からプログラム命令をフェッチして、プログラム命令をメモリ504にロードすることができる。プログラム命令がメモリ504にロードされた後、プロセッサ502は、プログラム命令を実行することができる。
【0061】
例えば、いくつかの実施形態において、ハイブリッドファズテストエンジン102のエンジン、コンポーネント、及び/又はモジュールのうちの任意の1つ以上は、プログラム命令として、データストレージ506に含められ得る。プロセッサ502は、データストレージ506からプログラム命令の一部又は全てをフェッチして、フェッチされたプログラム命令をメモリ504にロードすることができる。プログラム命令をメモリ504にロードした後、プロセッサ502は、コンピューティングシステムがプログラム命令により指示されるように動作を実施できるように、プログラム命令を実行することができる。
【0062】
いくつかの実施形態において、コンピューティングシステム500におけるインフラストラクチャ及びリソースが動的に共有され得るように、仮想化が、コンピューティングシステム500において用いられ得る。例えば、プロセスが、複数のコンピューティングリソースではなく、1つのコンピューティングリソースのみを使用しているように見えるように、仮想マシンが、複数のプロセッサ上で動作するプロセスを処理するために提供され得る。複数の仮想マシンが、1つのプロセッサとともに使用されることもある。
【0063】
メモリ504及びデータストレージ506は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な記憶媒体を含み得る。そのようなコンピュータ読み取り可能な記憶媒体は、プロセッサ502等の汎用又は専用のコンピュータによりアクセスされ得る任意の利用可能な媒体を含み得る。限定ではなく例として、そのようなコンピュータ読み取り可能な記憶媒体は、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的に消去可能なプログラム可能な読み取り専用メモリ(EEPROM)、コンパクトディスク読み取り専用メモリ(CD-ROM)若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又は、コンピュータ実行可能な命令又はデータ構造の形態の特定のプログラムコードを運ぶ又は記憶するために使用され得る任意の他の記憶媒体であって、汎用又は専用のコンピュータによりアクセスされ得る任意の他の記憶媒体、を含む非一時的なコンピュータ読み取り可能な記憶媒体を含み得る。上記の組合せも、コンピュータ読み取り可能な記憶媒体の範囲に含まれ得る。コンピュータ実行可能な命令は、例えば、プロセッサ502に所定の動作又は動作群を実行させるよう構成されている命令及びデータを含み得る。
【0064】
本開示の範囲から逸脱することなく、コンピューティングシステム500に対して、変更、追加、又は省略が可能である。例えば、いくつかの実施形態において、コンピューティングシステム500は、本出願において明示的には図示又は説明されていないかもしれない任意の数の他のコンポーネントを含んでもよい。
【0065】
上記で示したように、本開示に記載の実施形態は、本開示においてより詳細に説明されているような様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータ(例えば、
図5のプロセッサ502)の使用を含み得る。理解されるように、汎用のコンピュータが、本開示の実施形態に従った機能を実行するようプログラム又は構成されると、その汎用のコンピュータは、専用のコンピュータになる。さらに、上記で示したように、本開示に記載の実施形態は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な媒体(例えば、
図5のメモリ504)を使用して実現され得る。
【0066】
多数の例示的な変形例及び構成例が、本開示に鑑みれば明らかであろう。いくつかの例に従うと、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための、コンピュータにより実行される方法が記載される。コンピュータにより実行される例示的な方法は、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取るステップと、前記BPUAにおいて前記シード入力を具体値実行するステップと、前記シード入力の前記具体値実行から生じたトレースを収集するステップと、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定するステップと、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、ステップと、前記シード入力を前記グレーボックスファザーに提供するステップと、を含み得る。
【0067】
いくつかの例において、この方法はまた、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行するステップと、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集するステップであって、制約は、前記シード入力を変形するために使用される、ステップと、を含み得る。他の例において、前記パスは、前記トレースに基づく。さらに他の例において、この方法はまた、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、キューから入力を取得するステップと、前記入力に関連付けられた制約を否定するステップと、前記の否定された制約が充足可能であるかどうかを判定するステップと、前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成するステップと、前記モデルを使用して、新たな入力を生成するステップと、を含み得る。さらに他の例において、前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される。さらなる例において、この方法はまた、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄するステップを含み得る。さらなる例において、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく。さらなる例において、前記シード入力は、任意の入力である。
【0068】
いくつかの例に従うと、命令で符号化された1つ以上の非一時的なマシン読み取り可能な媒体を含むコンピュータプログラム製品であって、前記命令が、1つ以上のプロセッサにより実行されたときに、前記命令は、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のためのプロセスを実行させる、コンピュータプログラム製品が記載される。例示的なプロセスは、記号実行エンジンにより、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取ることと、前記記号実行エンジンにより、前記BPUAにおいて前記シード入力を具体値実行することと、前記記号実行エンジンにより、前記シード入力の前記具体値実行から生じたトレースを収集することと、前記記号実行エンジンにより、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することと、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記記号実行エンジンにより、前記新たな分岐が発見されたことを示すようにビットマップを更新することであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、更新することと、前記記号実行エンジンにより、前記シード入力をキューに配置することと、前記記号実行エンジンにより、前記シード入力を前記グレーボックスファザーに提供することと、を含み得る。
【0069】
いくつかの例において、このプロセスはまた、前記記号実行エンジンにより、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行することと、前記記号実行エンジンにより、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集することであって、制約は、前記シード入力を変形するために使用される、収集することと、を含み得る。他の例において、前記パスは、前記トレースに基づく。さらに他の例において、このプロセスはまた、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記記号実行エンジンにより、前記キューから入力を取得することと、前記記号実行エンジンにより、前記入力に関連付けられた制約を否定することと、前記記号実行エンジンにより、前記の否定された制約が充足可能であるかどうかを判定することと、前記の否定された制約が充足可能であるという判定に応じて、前記記号実行エンジンにより、前記の否定された制約を解決するモデルを生成することと、前記記号実行エンジンにより、前記モデルを使用して、新たな入力を生成することと、を含み得る。さらに他の例において、前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される。さらなる例において、このプロセスは、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄することをさらに含み得る。さらなる例において、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく。
【0070】
他の例に従うと、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行を行うシステムが記載される。例示的なシステムは、命令を記憶するよう構成されている1つ以上の非一時的なマシン読み取り可能な媒体と、前記1つ以上の非一時的なマシン読み取り可能な媒体に記憶されている前記命令を実行するよう構成されている1つ以上のプロセッサと、を含み得る。前記1つ以上のプロセッサによる前記命令の実行は、前記1つ以上のプロセッサに、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取る動作と、前記BPUAにおいて前記シード入力を具体値実行する動作と、前記シード入力の前記具体値実行から生じたトレースを収集する動作と、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行する動作と、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集する動作と、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定する動作と、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記新たな分岐が発見されたことを示すようにビットマップを更新する動作であって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、動作と、前記シード入力をキューに配置する動作と、前記シード入力を前記グレーボックスファザーに提供する動作と、を実行させ得る。
【0071】
いくつかの例において、前記パスは、前記トレースに基づく。他の例において、前記命令の実行は、前記1つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、前記キューから入力を取得する動作と、前記入力に関連付けられた制約を否定する動作と、前記の否定された制約が充足可能であるかどうかを判定する動作と、前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成する動作と、前記モデルを使用して、新たな入力を生成する動作と、を実行させる。さらに他の例において、前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される。さらに他の例において、前記命令の実行は、前記1つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄する動作を実行させる。
【0072】
本開示において使用される場合、「エンジン」若しくは「モジュール」又は「コンポーネント」という用語は、エンジン若しくはモジュール又はコンポーネントの動作を実行するよう構成されている特定のハードウェア実装、及び/又は、コンピューティングシステムの汎用ハードウェア(例えば、コンピュータ読み取り可能な媒体等)に記憶され得る且つ/又はコンピューティングシステムの汎用ハードウェア(例えば、処理デバイス等)により実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを指し得る。いくつかの実施形態において、本開示に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステム上で実行されるオブジェクト又はプロセスとして(例えば、別個のスレッドとして)実装され得る。本開示に記載のシステム及び方法のうちの一部は、(汎用ハードウェアに記憶される且つ/又は汎用ハードウェアにより実行される)ソフトウェアにより実装されるとして一般に説明されるが、特定のハードウェア実装、ファームウェア実装、又はこれらの任意の組み合わせも可能であり企図されている。本説明において、「コンピューティングエンティティ」は、本開示において前に記載された任意のコンピューティングシステム、又は、コンピューティングシステム上で実行される任意のモジュール又はモジュールの組み合わせであり得る。
【0073】
本開示及び請求項(例えば、請求項の本体部分)において使用される用語は、一般に、「オープンな」用語であるとして意図される(例えば、「~を備える」という用語は、「~を備えるが、~に限定されるものではない」として解釈されるべきであり、「~を有する」という用語は、「少なくとも~を有する」として解釈されるべきであり、「~を含む」という用語は、「~を含むが、~に限定されるものではない」として解釈されるべきである、等)。
【0074】
さらに、導入される請求項記載事項の特定の数が意図される場合、そのような意図は、当該請求項中に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、請求項中に、請求項記載事項を導入するための「少なくとも1つの」及び「1つ以上の」といった導入句の使用が含まれることがある。しかしながら、このような導入句の使用は、「a」又は「an」といった不定冠詞による請求項記載事項の導入が、同一の請求項中に「1つ以上の」又は「少なくとも1つの」といった導入句と「a」又は「an」といった不定冠詞とが含まれるとしても、当該導入された請求項記載事項を含む特定の請求項が、当該請求項記載事項を1つしか含まない実施形態に限定されることを意味するとして解釈されるべきではない(例えば、「a」及び/又は「an」は、「少なくとも1つの」又は「1つ以上の」を意味するとして解釈されるべきである)。請求項記載事項を導入するために使用される定冠詞の使用についても同じことが当てはまる。
【0075】
さらに、導入される請求項記載事項の特定の数が明示的に記載されている場合であっても、そのような記載は、少なくとも記載されている数を意味するとして解釈されるべきである(例えば、他の修飾語のない「2つのウィジェット」という単なる記載は、少なくとも2つのウィジェット又は2つ以上のウィジェットを意味する)。さらに、「A、B、及びC等のうちの少なくとも1つ」又は「A、B、及びC等のうちの1つ以上」に類する表記が使用される場合、一般に、そのような構造は、Aのみ、Bのみ、Cのみ、A及びBの両方、A及びCの両方、B及びCの両方、又は、A、B、及びCの全て、等を含むことが意図される。
【0076】
本開示において記載された全ての例及び条件付き文言は、当該技術を促進させるために本発明者によって寄与されるコンセプト及び本開示を読者が理解するのを助ける教育上の目的のために意図され、そのような具体的に記載された例及び条件に限定されるものではないとして解釈されるべきである。本開示の実施形態が詳細に説明されたが、それら実施形態に対する様々な変形、置換、及び変更が、本開示の主旨及び範囲から逸脱することなく可能である。したがって、本開示の範囲は、詳細な説明によってではなく、請求項によって定められることが意図されている。
【0077】
以上の実施形態に関し、さらに以下の付記を開示する。
【0078】
(付記1)
ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のための、コンピュータにより実行される方法であって、
グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取るステップと、
前記BPUAにおいて前記シード入力を具体値実行するステップと、
前記シード入力の前記具体値実行から生じたトレースを収集するステップと、
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定するステップと、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記新たな分岐が発見されたことを示すようにビットマップを更新するステップであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、ステップと、
前記シード入力を前記グレーボックスファザーに提供するステップと、
を含む、方法。
【0079】
(付記2)
前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行するステップと、
前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集するステップであって、制約は、前記シード入力を変形するために使用される、ステップと、
をさらに含む、付記1に記載の方法。
【0080】
(付記3)
前記パスは、前記トレースに基づく、付記2に記載の方法。
【0081】
(付記4)
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
キューから入力を取得するステップと、
前記入力に関連付けられた制約を否定するステップと、
前記の否定された制約が充足可能であるかどうかを判定するステップと、
前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成するステップと、
前記モデルを使用して、新たな入力を生成するステップと、
をさらに含む、付記2に記載の方法。
【0082】
(付記5)
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、付記4に記載の方法。
【0083】
(付記6)
前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄するステップ
をさらに含む、付記1に記載の方法。
【0084】
(付記7)
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく、付記1に記載の方法。
【0085】
(付記8)
前記シード入力は、任意の入力である、付記1に記載の方法。
【0086】
(付記9)
命令で符号化された1つ以上の非一時的なマシン読み取り可能な媒体を含むコンピュータプログラム製品であって、前記命令が、1つ以上のプロセッサにより実行されたときに、前記命令は、ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行のためのプロセスを実行させ、前記プロセスは、
記号実行エンジンにより、グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取ることと、
前記記号実行エンジンにより、前記BPUAにおいて前記シード入力を具体値実行することと、
前記記号実行エンジンにより、前記シード入力の前記具体値実行から生じたトレースを収集することと、
前記記号実行エンジンにより、前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することと、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記記号実行エンジンにより、前記新たな分岐が発見されたことを示すようにビットマップを更新することであって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、更新することと、
前記記号実行エンジンにより、前記シード入力をキューに配置することと、
前記記号実行エンジンにより、前記シード入力を前記グレーボックスファザーに提供することと、
を含む、コンピュータプログラム製品。
【0087】
(付記10)
前記プロセスは、
前記記号実行エンジンにより、前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行することと、
前記記号実行エンジンにより、前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集することであって、制約は、前記シード入力を変形するために使用される、収集することと、
をさらに含む、付記9に記載のコンピュータプログラム製品。
【0088】
(付記11)
前記パスは、前記トレースに基づく、付記10に記載のコンピュータプログラム製品。
【0089】
(付記12)
前記プロセスは、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記記号実行エンジンにより、前記キューから入力を取得することと、
前記記号実行エンジンにより、前記入力に関連付けられた制約を否定することと、
前記記号実行エンジンにより、前記の否定された制約が充足可能であるかどうかを判定することと、
前記の否定された制約が充足可能であるという判定に応じて、前記記号実行エンジンにより、前記の否定された制約を解決するモデルを生成することと、
前記記号実行エンジンにより、前記モデルを使用して、新たな入力を生成することと、
をさらに含む、付記10に記載のコンピュータプログラム製品。
【0090】
(付記13)
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、付記12に記載のコンピュータプログラム製品。
【0091】
(付記14)
前記プロセスは、
前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄すること
をさらに含む、付記9に記載のコンピュータプログラム製品。
【0092】
(付記15)
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定することは、前記ビットマップに含まれる情報に基づく、付記9に記載のコンピュータプログラム製品。
【0093】
(付記16)
ハイブリッドファジングのための、分岐網羅によりガイドされる記号実行を行うシステムであって、
命令を記憶するよう構成されている1つ以上の非一時的なマシン読み取り可能な媒体と、
前記1つ以上の非一時的なマシン読み取り可能な媒体に記憶されている前記命令を実行するよう構成されている1つ以上のプロセッサであって、前記命令の実行は、前記1つ以上のプロセッサに、
グレーボックスファザーによるテスト中に発見された、解析対象バイナリプログラム(BPUA)のシード入力を受け取る動作と、
前記BPUAにおいて前記シード入力を具体値実行する動作と、
前記シード入力の前記具体値実行から生じたトレースを収集する動作と、
前記トレースを使用して、前記BPUAにおいて前記シード入力を記号的に再度実行する動作と、
前記BPUAを通じて実行されたパスに沿って、前記シード入力により満たされる1つ以上の制約を収集する動作と、
前記シード入力の前記具体値実行が新たな分岐を発見したかどうかを判定する動作と、
前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記新たな分岐が発見されたことを示すようにビットマップを更新する動作であって、前記ビットマップは、前記BPUAにおける発見された分岐のレコードを保持するために前記グレーボックスファザーにより使用される、動作と、
前記シード入力をキューに配置する動作と、
前記シード入力を前記グレーボックスファザーに提供する動作と、
を実行させる、1つ以上のプロセッサと、
を有する、システム。
【0094】
(付記17)
前記パスは、前記トレースに基づく、付記16に記載のシステム。
【0095】
(付記18)
前記命令の実行は、前記1つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見したという判定に応じて、
前記キューから入力を取得する動作と、
前記入力に関連付けられた制約を否定する動作と、
前記の否定された制約が充足可能であるかどうかを判定する動作と、
前記の否定された制約が充足可能であるという判定に応じて、前記の否定された制約を解決するモデルを生成する動作と、
前記モデルを使用して、新たな入力を生成する動作と、
を実行させる、付記16に記載のシステム。
【0096】
(付記19)
前記キューは、優先順位キューであり、前記入力は、割り当てられた優先順位に従って取得される、付記18に記載のシステム。
【0097】
(付記20)
前記命令の実行は、前記1つ以上のプロセッサに、前記シード入力の前記具体値実行が新たな分岐を発見しなかったという判定に応じて、前記シード入力を破棄する動作を実行させる、付記16に記載のシステム。
【符号の説明】
【0098】
100 環境
101 解析対象バイナリプログラム(BPUA)
102 ハイブリッドファズテストエンジン
104 グレーボックスファザー
106 記号実行エンジン
108 エグゼキュータ
110 優先順位キュー
112 制約ソルバ
114 ビットマップ
116 テストケース
500 コンピューティングシステム
502 プロセッサ
504 メモリ
506 データストレージ