JP7058302B2 - アプリケーション・プログラムのための脆弱性により起動されるハイブリッド・テストシステム - Google Patents

アプリケーション・プログラムのための脆弱性により起動されるハイブリッド・テストシステム Download PDF

Info

Publication number
JP7058302B2
JP7058302B2 JP2020100093A JP2020100093A JP7058302B2 JP 7058302 B2 JP7058302 B2 JP 7058302B2 JP 2020100093 A JP2020100093 A JP 2020100093A JP 2020100093 A JP2020100093 A JP 2020100093A JP 7058302 B2 JP7058302 B2 JP 7058302B2
Authority
JP
Japan
Prior art keywords
vulnerability
seed
inputs
seed inputs
concoric
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020100093A
Other languages
English (en)
Other versions
JP2020205047A (ja
Inventor
ピン リー,
ユーロン チャン,
タオ ウェイ,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Baidu USA LLC
Original Assignee
Baidu USA LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Baidu USA LLC filed Critical Baidu USA LLC
Publication of JP2020205047A publication Critical patent/JP2020205047A/ja
Application granted granted Critical
Publication of JP7058302B2 publication Critical patent/JP7058302B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3696Methods or tools to render software testable
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明の実施形態は、一般に、安全なマルチパーティ・コンピューティングに関する。より具体的には、本発明の実施形態は、アプリケーション・プログラムのための脆弱性により起動されるテストシステムに関する。
ハイブリッド・ファジーテストは、手法のいずれか1つに対するコード・カバレッジを単独で改善するためにファジーテスト(すなわちファジング)とコンコリック実行の両方を導入するが、コード・カバレッジ中心の設計は、いかなる脆弱性も含有していないコード空間をやみくもに探索する可能性があるので、脆弱性検知において非効率的である。また、カバレッジ中心のハイブリッド・テストは、コードのチャンクに到達した後に、コードのチャンクの内部に隠れた欠陥を検査するのではなく、素早く次へ進む。しばしば、カバレッジ中心のハイブリッド・ファジーテストは、既に脆弱性の周辺のコードパスが調査済であるという事実にもかかわらず、セキュリティホールとなる脆弱性を逃す可能性がある。
現在のカバレッジ中心のハイブリッド・テスト方法は、Driller(選択的なシンボリック実行によってファジングを増補すること)と、QSYM(ハイブリッド・ファジングに適合された実用的なコンコリック実行エンジン)と、ハイブリッド・ファジングに関する確率的パス優先順位とを含む。これらのカバレッジ中心のハイブリッド・ファジング方法のすべてが上記の問題を抱えている。
本発明の実施形態が、限定ではなく例として示され、添付図面では類似の参照は類似の要素を示す。
一実施形態に係るホストシステムを示すブロック図である。 一実施形態に係る、脆弱性で起動されるハイブリッド・ファジーテスト方法の流れ図の一例を示すブロック図である。 一実施形態に係る、潜在脆弱性に関してコンパイラによって注入されたコードを示すブロック図である。 一実施形態に係る、アプリケーション・プログラムに関する制御フローグラフおよび対応するマッピング・タプルの一例である。 一実施形態に係る、到達可能な脆弱性を有する基本ブロック・マッピングの一例である。 一実施形態に係る、シナリオに関する脆弱性スコア計算の一例である。 一実施形態に係る方法を示す流れ図である。 一実施形態に係るデータ処理システムを示すブロック図である。
本発明の様々な実施形態および態様が、以下で論じられる詳細を参照しながら説明され、添付図面は様々な実施形態を示す。以下の説明および図面は本発明の実例であり、本発明を限定するものと解釈されるべきではない。本発明の様々な実施形態の完全な理解を提供するために、多くの具体的な詳細が説明される。しかしながら、特定の事例では、本発明の実施形態の簡潔な議論を提供するために、周知の詳細または従来の詳細は説明されない。
本明細書における「一実施形態」または「実施形態」に対する参照は、実施形態に関連して説明された特定の特徴、構造または特性が、本発明の少なくとも1つの実施形態に含まれ得ることを意味する。様々な位置において「一実施形態では」という慣用句が出現することは、必ずしもすべてが本明細書における同一の実施形態を指すわけではない。
本開示の実施形態は、プログラムコードの脆弱性を評価するための方法およびシステムを開示するものである。一実施形態によれば、システムは、コンパイラがソースコードに基づいて生成した中間結果を受け取り、中間結果は、ソースコードの潜在的に脆弱な1または複数のラインを指示する1または複数の脆弱性インジケータを含む。このシステムは、中間結果から生成された第1の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第1のセットを生成する。このシステムは、到達可能であるがグレーボックス・ファジング処理によって調査されていないソースコード領域に関する脆弱性インジケータの数に基づいて、第1のセットのシード入力の各々について脆弱性スコアを計算する。このシステムは、第1のセットにおけるシード入力のうち最高の脆弱性スコアを有する1つを選択する。このシステムは、選択されたシード入力を優先権として使用して、中間結果から生成された第2の実行可能コードに対して遂行されるコンコリック実行を遂行する。
図1は、一実施形態に係るデータ処理システムを示すブロック図である。図1を参照して、データ処理システム(たとえばホスト)100は、ウェブ・サーバまたはクラウド・サーバ、アプリケーション・サーバ、バックエンド・サーバ、またはそれらの組合せなど、サーバまたはサーバのクラスタを含む任意の種類のコンピュータシステムでよい。別の実施形態では、システム100は、パソコン(たとえばデスクトップ・コンピュータ、ノートパソコン、およびタブレット型コンピュータ)、「シン」クライアント、携帯情報端末(PDA)、ウェブで使用可能な設備、スマートウォッチ、または携帯電話(たとえばスマートフォン)などの任意のタイプのデバイスでよい。システム100は、クライアントがシステム100によって提供されるリソースまたはサービスにアクセスすることを可能にするインターフェースを含むことができる。サービスの例は、ソフトウェア・プログラムのアプリケーション・ソースコードに関する、バグ/脆弱性分析、ファジーテスト、コリック実行、および優先権を与えられたハイブリッド・ファジーテスト・サービスを含むことができる。サービスは、脆弱性で起動される優先順位づけモジュール110を使用して遂行され得る。システム100は、プライベート・クラウド、パブリック・クラウド、またはハイブリッド・クラウドであり得るクラウドに対するsoftware-as-a-service(SaaS)システムもしくはplatform-as-a-service(PaaS)システムの一部分として構成され得る。インターフェースは、ウェブ・インターフェース、アプリケーション・プログラミング・インターフェース(API)、および/またはコマンドライン・インターフェース(CLI)を含み得る。
脆弱性で起動される優先順位づけモジュール110は、脆弱性/サニタイザ・モジュール101、基本ブロック(BB)マッピング・モジュール105、制御フローグラフ・モジュール103、コーディネータ・モジュール107、ファジング・モジュール109、およびコンコリック実行モジュール111を含み得る。脆弱性/サニタイザ・モジュール101は、ソフトウェア・プログラムのソースコードの中の潜在脆弱性を識別するツールであり得る。これらの脆弱性は、メモリ破損、データ不整合、スレッドに関連するバグ/脆弱性などを含み得る。一実施形態では、モジュール101は、コンパイラClangのUndefined Behavior Sanitizerなどコンパイラのフロントエンドまたはバックエンドによって脆弱性のラベリングを遂行する。別の実施形態では、モジュール101は、潜在脆弱性を含有しているコード領域を分析して脆弱性ラベルの数を識別することができるスタンドアロンのアナライザである。別の実施形態では、ソースコードはコード分析の中間結果としての中間表現(IR)に変換され得る。
制御フローグラフ(CFG)モジュール103は、ソフトウェア・プログラムについて、1つの基本ブロック(BB)から別の基本ブロックまで種々のパスまたは制御フローのグラフを識別してマッピングすることができる。ここで、基本ブロックすなわちBBは、コードの1または複数のラインあるいはソフトウェア・プログラムの内部のコードのブロックを含有しているコードの単位を指す。グラフ・マッピングは、BBを相互に接続する1または複数の分岐を記述する1または複数のタプルとして記憶されたツリーグラフであり得る。モジュール103は、所与のソフトウェア・アプリケーション・プログラムに対して、ソフトウェア・プログラムの内部の関数/プロシージャの各々について1または複数の手続き内(intraprocedural)CFGを構築し、発信者-着信者の関係によって手続き間(intraprocedural)(または関数レベル)CFGを関数に橋渡しして、ソフトウェア・プログラムの手続き間CFGを構築する。モジュール103は、関数の間接呼び出し(ポインタを介するものなど)を解明するために、ポインタが関数呼び出しを指し示す場合にはアプリケーション・プログラムの内部のポインタに対してAndersenのポインタ分析を遂行して、任意の呼び出しの関数を拡張することができる。Andersenのポインタ分析は、どのポインタまたはヒープ参照がどの変数を指し示すかを分析する静的コード分析である。ポインタ分析は、たとえば変数のアドレシング、ポインタの参照解除、1つの変数から別の変数へのポインタのコピー、およびポインタによる割り当てといった4つのインストラクション・タイプに関する分析を含むことができる。別の実施形態では、モジュール103は、たとえばmallocまたは新規のメモリ操作に関連したコードといった動的メモリ割り当てを伴うコードに対してAndersenのポインタ分析を適用することもできる。
基本ブロック(BB)マッピング・モジュール105は、ソフトウェア・プログラムの内部の各BBを、BBに関連した複数の潜在脆弱性にマッピングすることができる。マッピングは、BBの1または複数のタプル、およびBBによって到達可能な、同タプルの潜在脆弱性の関連するカウントとして記憶され得る。コーディネータ・モジュール107は1または複数のグレーボックス・ファジングおよび/またはコンコリック実行を調整することができる。ファジング・モジュール109は、ソフトウェア・アプリケーション・プログラムが1または複数のシード入力を生成するためのファジング(たとえばブラックボックス・ファジング、グレーボックス・ファジングまたはホワイトボックス・ファジング)を遂行することができる。コンコリック実行モジュール111は、1または複数のシード入力に基づいて、ソフトウェア・アプリケーション・プログラムに対するコンコリック実行を遂行することができる。グレーボックス・ファジングはカバレッジ誘導ファジングを指し、したがって、グレーボックス・ファジングは、アプリケーション・プログラムの新規の制御パスを調査するシード入力のランダム化生成を優先し得ることに留意されたい。ランダム化生成の例は、シード入力のスワップバイト、反転ビットなど、シード入力の変更を含む。BBによって到達可能な脆弱性は、BBの制御フローの内部の潜在脆弱性/バグを指すことに留意されたい。
一実施形態では、脆弱性で起動される優先順位づけモジュール110は、クライアントから、分析のために、アプリケーション・プログラムのソースコードを受け取ってよい。このソースコードは、ソースコード151の一部分としてメモリ150内に記憶され得る。ソースコードの中間表現(IR)(たとえば中間結果)はコンパイラによって(IRコード153の一部分として)生成され得る。次いで、CFGモジュール103およびBBマッピング・モジュール105は、IRを分析し、IRコードからBBマッピングおよびCFGを生成して、CFG/BBマップ155の一部分として脆弱性分析のために記憶する。
図2は、一実施形態に係る脆弱性で起動されるハイブリッド・ファジーテスト方法の流れ図の一例を示すブロック図である。流れ図200は、ソフトウェア・プログラムに対する、コンコリック実行を伴う優先されたハイブリッド・ファジングの動作を示す。流れ図200を遂行し得る処理ロジックは、ソフトウェア、ハードウェア、またはこれらの組合せを含み得る。一実施形態では、流れ図は図1のシステム100によって遂行される。図2を参照して、処理ロジックはターゲットプログラム201を受け取る。ターゲットプログラム201は、任意のプログラム可能言語(C、C++、java、python、objective-C、JavaScriptなど)のソースコードであり得る。動作1において、サニタイザ・モジュールを有するコンパイラは、ターゲットプログラムのソースコードから、サニタイザ・ラベルを有する中間表現203(たとえばIRコード)を生成する。サニタイザ・モジュールは、ソースコードの中の1または複数の潜在脆弱性を表す、コンパイラによって注入された1または複数のサニタイザ・コードに対応する1または複数のサニタイザ・ラベル(たとえばサニタイザ/脆弱性ラベル)を生成する。中間表現(IR)は、コンパイラまたは仮想マシンによってソースコードを表すために内部で使用されるデータ構造またはコードを指すことに留意されたい。
図2を参照して、IRコード203が一旦生成されると、動作2において、IRコード203における各BBの内部の脆弱性ラベルの数をカウントするために、IRコード203に対して静的解析が遂行される。処理ロジックは、BB識別子(ID)を有する各BBにさらにラベルを付けて、BBの内部の(またはBBが到達可能な)脆弱性ラベルの数に対するBB IDのマッピングを生成することができる。BBは、エントリ以外は分岐入力がなく、イグジット以外は分岐出力がない、ソース・ライン・シーケンスを指すことに留意されたい。基本ブロックは、制御フローグラフ(CFG)における、頂点またはノードを形成することができる。CFGは、アプリケーション・プログラムが実行中に通過する可能性があるすべてのパスの、グラフ表記法を使用した表現を指す。
図2を参照して、動作3において、IR 203は2つの実行ファイル209~211へとコンパイルされ得、第1の実行ファイル209はグレーボックス・ファジングのために使用され、第2の実行ファイル211はコンコリック実行のために使用される。ここには2つの実行ファイルしか示されていないが、3つ以上の実行ファイルが生成され得、そのため、複数のファジングおよび/またはコンコリック実行が同時に実行され得る。一実施形態では、BBペアリング情報207が生成され得る。BBペアリング情報207は、優先度分析のためのターゲットプログラムのCFGを表すことができる。BBペアリング情報は、親子関係のIDによってBBをBBのエッジ(または分岐)にマッピングする1または複数のマッピング・タプルを含むことができる。エッジはマッピングされるBBの子BBの分岐に対応する。
図2を参照して、一実施形態では、シード入力の第1のセットを生成するために、第1のコンパイルされた実行ファイルに対してファジングが繰り返し遂行される。ファジングまたはファジーテストは、コンピュータ・プログラムに対するシード入力として無効データ、予想外のデータ、またはランダム・データを生成する自動のソフトウェア・アプリケーション・プログラムのテスト技術を指す。一実施形態では、ファジングは、プログラムに対して投げかけられた除外項目(たとえばわな/試み)を監視することができる。ファザーは、ブラックボックス・ファザー、グレーボックス・ファザー、またはホワイトボックス・ファザーであり得る。ブラックボックス・ファザーはアプリケーション・プログラムをブラックボックスとして扱い、プログラムの内部構造に気づかない。ホワイトボックス・ファザーは、プログラムの内部構造にアクセスし、アクセスに基づいてプログラムにおける種々のパスを系統的に調査することができるが、分析のために長い時間がかかるため、実行時間が高コストである。グレーボックス・ファザーは、プログラムの構造に関する情報を集めるために計測を利用することができる。たとえば、グレーボックス・ファザーはシード入力に関する基本ブロック遷移/分岐をトレースするためのトレーサを利用することができ、したがって調査されているソースコードの中に新規の分岐があるかどうかを指示することができる。計測は、性能のレベルを監視するかもしくは測定するため、誤差を診断するため、および/またはアプリケーション・プログラムのトレース情報にアクセスするための能力を指すことに留意されたい。
一実施形態では、ファジングはシード入力をランダムに生成する。別の実施形態では、ファジングは、既存のシード入力を変化させるシード入力を生成する。ファジングのためのユーザ設定は、シード入力をランダムに生成するべきか、それとも既存のシード入力を変更して追加のシード入力を生成するべきかを選択し得る。
ファジングの繰り返しが一旦完了してシード入力の第1のセットが生成されると、動作4において、コーディネータは、シード入力の第1のセットの各々について脆弱性スコアを計算する。脆弱性スコアは、到達可能であるがシード入力用のファザーによって調査されていない分岐の脆弱性ラベルのカウントであり得る。一実施形態では、シード入力に関する脆弱性スコアは順を追ってソートされ、より大きい脆弱性スコアを有するシード入力に、コンコリック実行に対する入力として優先権が与えられる。ここで、第2のコンパイルされた実行ファイルによってコンコリック実行が実行され得る。別の実施形態では、複数のコンコリック実行が同時に実行され得る。コンコリック実行またはコンコリック・テストは、特定の実行パスに沿ってプログラム変数をシンボリック変数として扱う技術である、計測を通じてのシンボリック実行によるテストを指すことに留意されたい。ここで、シード入力の第1のセットに関して、到達可能であるが未調査のパスに対してコンコリック実行を実行し得ることに留意されたい。1または複数のコンコリック実行に基づいて、シード入力の第2のセットが、脆弱性で起動される(または優先権を与えられる)やり方で判定され得る。ここで、到達可能であるが調査されていない潜在脆弱性のカウントが大きいシード入力に優先権が与えられる。
図2を参照して、動作5において、シード入力の第2のセットがシード入力の第1のセットと組み合わされ、コーディネータは、シード入力の(第1のセットおよび第2のセットと重複しない)第3のセットを生成するために、第2の繰り返しにおいて遂行されるファジングを調整する。次いで、出力は、シード入力の第4のセットを生成するために、1または複数のコンコリック実行に対する入力として供給される。繰り返しは、予定時間が経過するまで、あるいは脆弱性の割合および/またはカウントに到達するまで、繰り返され得る。一実施形態では、コーディネータはすべてのシード入力の経過を追う。別の実施形態では、新規の脆弱性および/または分岐を明らかにすることなく、固有の分岐および/または脆弱性を調査するシード入力のみ維持するシード入力は、コーディネータによって棄却される。
図3は、一実施形態に係る潜在脆弱性に関してコンパイラによって注入されたコードを示すブロック図である。図3を参照して、c=a+bという演算の出力をプリントするc++ソースコード301が示されている。サニタイザを伴うコンパイラは、ソースコード303のコードのライン“int c = a+b;”に対するIRコード303を生成することができる。ここで、IRコード303は、たとえばコード“int c = a+b”に関する潜在脆弱性である整数オーバーフロー・エラーを見つけるためのハンドラである。数値演算の結果が結果型の範囲で表現できないとき、整数オーバーフロー・エラーが生じ得る。これは、演算a+bの結果が[INT_MIN, INT_MAX]の範囲を超えたとき生じ得る。
図4は、一実施形態に係るアプリケーション・プログラムに関する制御フローグラフ(CFG)および対応するマッピング・タプルの一例を示すものである。図4を参照して、CFG 400は、ID(A1)、ID(B1)およびID(B2)といったIDを有する3つの基本ブロックと、ID(A1->B1)を有するA1からB1への分岐およびのID(A1->B2)を有するA1からB2への分岐の2つの分岐とを含むことができる。CFG 400に基づいて、ペアリング情報またはマッピング・タプルは、{<ID(A1): ID(A1->B1)>, <ID(A1): ID(A1->B2)>}と生成され得る。
図5は、一実施形態に係る到達可能な脆弱性を有する基本ブロックの一例である。図5を参照して、CFG 500は、BBによって前方に到達され得る複数の脆弱性ラベルを示す。ここで、IRの潜在脆弱性コード・ブロックを生成するためにClang用の未定義動作サニタイザ(UBSan)が使用される。図5を参照して、BB 501は8つの子BBを含み、たとえばBB 502~BB 504といった3つのBBがUBSan(または潜在脆弱性)を含有している。したがって、BB 501は、BB 501によって到達可能な潜在脆弱性の数について3つのカウントを有する。そこで、BB 501から脆弱性ラベリング数へのBBマッピングは<ID(BB):number>となり得、たとえば<501:3>である。BBマッピングは、コーディネータ・モジュールによって、BBに対応するシード入力に対するコンコリック実行に優先権を与えるために使用され得る。
図6は、一実施形態に係るシナリオに関する脆弱性スコア計算の一例である。図6の計算は、図1のコーディネータ・モジュール107などのコーディネータ・モジュールによって遂行され得る。図6を参照して、一実施形態では、コーディネータは、脆弱性で起動されるハイブリッド・グレーボックス・ファジングおよびコンコリック実行の第1の繰り返しを開始していてよい。このシナリオでは、ファジング繰り返しは、CFG 600を有するアプリケーション・プログラムの実行ファイルによって遂行されていてよく、シード入力601~602を生成していてよい。ここで、シード入力601はBB D1に到達するパスに対応し得、シード入力602はBB C5に到達するパスに対応し得る。シード入力生成は、バイトを交換することまたはビットをフリッピングすることによって、ランダム化されていてよく、または変化させられていてよい。次に、脆弱性/バグ・カバレッジを最大化するために、コンコリック実行向けに、より大きいスコアを有するシードに優先権を与えるように、シード入力601および602の各々について脆弱性スコアが計算される。
図6を参照して、CFG 600は、(以前に説明されたように)アプリケーション・プログラムに対する制御フローグラフを表すことができる。より具体的には、CFG 600はツリー階層構造の中に1または複数のBBを含み、各BBは、各BBが到達可能な複数の脆弱性またはバグを指示する。たとえば、BB A1(A1:24によって表される)は、主ノードA1が24の到達可能な潜在脆弱性を有することを指示し得る。
一実施形態では、脆弱性スコア計算は、シード入力のBBに対応する、到達可能であるが未調査のBBの数に基づいて計算される。たとえばシード入力すなわちパス601はA1からD1までのパスに対応する。ここで、パス601の調査済のBBはA1、B1、C1、およびD1を含む。パス601に対する未調査のBBはD2、C2、C3、およびC4を含む。未調査のBBに基づき、一実施形態では、脆弱性スコアは、到達可能であるが未調査の潜在バグの総数の、到達可能であるが未調査のBBの数のカウントに対する平均をとることによって計算され得、たとえばパス601のスコア=1/4(4+5+3+4)=4となる。別の実施形態では、脆弱性スコアは、重み付けされた平均値算出のための解明する試行カウンタに基づいて計算することができる。
A1からC5までのパスに対応するシード入力すなわちパス602については、パス602に関する調査済のBBはA1、B2、およびC5を含む。パス602に関する未調査のBBはC6を含む。未調査のBBに基づいて、脆弱性スコアは、到達可能であるが未調査の潜在バグの総数の、到達可能であるが未調査のBBの数のカウントに対する平均をとることによって計算され得、たとえばパス602のスコア=3(BB C6の到達可能な脆弱性/バグ)となる。コーディネータは、パス601~602の計算された脆弱性スコアに基づいて、コンコリック実行のためのシード入力として、たとえば4のスコアを有するパス601である最高の脆弱性スコアを有するシード入力を選択することになる。ここで、コンコリック実行は、シード入力としてシード入力601を受け取ることになる。次いで、コンコリック実行は、シード入力601を再生し、分岐条件を調査するためのコンコリック実行を遂行して、パス601の、直接到達可能であるが未調査のBB用のシード入力を判定し、たとえばD2、C2、C3、およびC4のBBに到達し得るシード入力を判定する。パス601に対するコンコリック実行が遂行された後、コーディネータは、最高の脆弱性スコアを有する次のシード入力(たとえばシード入力602)を判定することになる。コンコリック実行は、次いで、シード入力602が次の最高の脆弱性スコア3を有するので、シード入力602を使用して遂行されることになる。次いで、パス602に対応する直接到達可能であるが未調査の任意のパスに対するシード入力を判定するために、コンコリック実行が遂行され、たとえば、コンコリック実行はBB C6に到達することができるシード入力を判定する。コンコリック実行が使用可能なファジング・シード入力を求めて遂行された後に、一実施形態では、コンコリック実行で生成されたシード入力が、再実行のためにファザーにフィード・バックされる。次いで、ファザーは、シード入力の各々がバグ・カバレッジを改善するかどうかということに依拠して、シード入力を保持するかまたは棄却することができる。別の実施形態では、明らかになった分岐のために、解明する試行カウンタが増加され得る。そのため、はるかに大きい解明する試行値を有する分岐は、調査されているので、優先度を下げられることになる。一実施形態では、コーディネータは、生成されたシード入力を監視して、ファジングと、優先権を与えられたコンコリック実行との、別の繰り返しを開始してよい。別の実施形態では、ファジングと、優先権を与えられたコンコリック実行とが、予定時間まで、または繰り返しが生じるまで繰り返され得る。別の実施形態では、ファジングと、優先権を与えられたコンコリック実行とは、バグ・カバレッジの所定の割合が達成されるまで繰り返され得る。
脆弱性スコアは、より未検証のバグに達することができるシード入力に優先権を与えるために使用されるが、長期的にはいかなる解明困難な分岐条件にも捕らえられるべきではないことに留意されたい。
図7は一実施形態に係る方法を示す流れ図である。処理700を遂行し得る処理ロジックは、ソフトウェア、ハードウェア、またはこれらの組合せを含み得る。たとえば、処理700は図1のデータ処理システム100によって遂行され得る。図7を参照して、ブロック701において、処理ロジックは、コンパイラによってソースコードに基づいて生成された中間結果(たとえばコンパイラによって注入された脆弱性コードを有する中間表現)を受け取り、中間結果は、ソースコードの潜在的に脆弱な1または複数のラインを指示する1または複数の脆弱性インジケータを含む。ブロック702において、処理ロジックは、中間結果から生成された第1の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第1のセットを生成する。ブロック703において、処理ロジックは、到達可能であるがグレーボックス・ファジング処理によって調査されていないソースコードのラインに関する脆弱性インジケータに基づいて、第1のセットのシード入力の各々について脆弱性スコアを計算する。ブロック704において、処理ロジックは、第1のセットにおけるシード入力のうち最高の脆弱性スコアを有する1つを選択する。ブロック705において、処理ロジックは、選択されたシード入力を優先権として使用して、中間結果から生成された第2の実行可能コードに対して遂行されるコンコリック実行を遂行する。
一実施形態では、コンコリック実行がシード入力の第2のセットを生成し、シード入力の第2のセットにより、コンコリック実行のプログラムフロー制御が、グレーボックス・ファジング処理によって調査されていないソースコードの1または複数の分岐を調査する。別の実施形態では、処理ロジックは、次の繰り返しの間にグレーボックス・ファジング処理によって第2のセットの1または複数のシード入力が利用されるように、シード入力の第1のセットに対してシード入力の第2のセットをさらに付加する。
一実施形態では、第1のセットのシード入力の各々について脆弱性スコアを計算するステップは、シード入力に対応するグレーボックス・ファジング処理によって調査されたプログラム制御フローを識別するステップと、プログラム制御フローによって到達可能であるがグレーボックス・ファジング処理によって調査されていない複数の脆弱性インジケータに基づいて、シード入力に関する脆弱性スコアを計算するステップとを含む。一実施形態では、第1のセットのシード入力のうち最高の脆弱性スコアを有する1つを選択するステップは、シード入力の第1のセットに対するコンコリック実行に優先権を与えるように、第1のセットのシード入力をそれぞれの脆弱性スコアに基づいて並べるステップを含む。
一実施形態では、処理ロジックは、中間結果からコードの複数の基本ブロックをさらに識別する。処理ロジックは、基本ブロックの各々について、基本ブロックの内部の複数の脆弱性インジケータをさらに判定して、各基本ブロックのブロック識別子(ID)を基本ブロックに関連した複数の脆弱性インジケータにマッピングするマッピング表を生成し、マッピング表は脆弱性スコアを計算するために利用される。別の実施形態では、第1のセットのシード入力の各々について脆弱性スコアを計算するステップは、シード入力に対応する中間結果のプログラム制御フローに基づいてプログラム制御フローグラフ(CFG)を構築するステップと、シード入力の脆弱性スコアを表すために、プログラムCFGによって到達可能であるが調査されていないすべての基本ブロックの脆弱性インジケータの数を合計するステップであって、マッピング表におけるルックアップ演算を遂行して、基本ブロックに関連した複数の脆弱性インジケータを判定するステップを含む、合計するステップとを含む。一実施形態では、脆弱性インジケータのうち少なくとも1つは、コンパイラによって挿入された、例外のスローおよびキャッチ(スロー/キャッチ)のブロックを含み、ソースコードの関連するラインが実行中に安全規則に違反したとき、オペレーティングシステムによって、例外がスローされ、キャッチされる。
上記で示されて説明されたコンポーネントのうちいくつかまたはすべてが、ソフトウェア、ハードウェア、またはこれらの組合せで実施され得ることに留意されたい。たとえば、そのようなコンポーネントは持続的記憶デバイスにインストールして記憶されたソフトウェアとして実施され得、本出願の全体にわたって説明された処理または演算を実行するために、プロセッサ(図示せず)によってメモリにロードされ、かつ実行され得る。あるいは、そのようなコンポーネントは、集積回路(たとえば特定用途向けICすなわちASIC)、デジタル信号プロセッサ(DSP)、またはフィールド・プログラマブル・ゲートアレイ(FPGA)などの専用ハードウェアの中にプログラムされた、または組み込まれた、アプリケーションから、対応するドライバおよび/またはオペレーティングシステムを介してアクセス可能な実行可能コードとして実施され得る。その上、そのようなコンポーネントは、ソフトウェア・コンポーネントによって1または複数の特定の命令を介してアクセス可能な命令セットの一部分として、プロセッサまたはプロセッサコアにおける特定のハードウェア・ロジックとして実施され得る。
図8は、本発明の一実施形態とともに使用され得るデータ処理システムの一例を示すブロック図である。たとえば、システム1500は、上記で説明された処理または方法のうち任意のものを遂行する、上記で説明されたデータ処理システムのうち任意のものを表し得、たとえば上記で説明されたようなシステム101など、たとえば上記で説明されたクライアント・デバイスまたはサーバなどでよい。
システム1500は多くの様々な構成要素を含むことができる。これらの構成要素は、集積回路(IC)、ICの一部分、個別の電子デバイス、またはコンピュータシステムのマザーボードもしくはアドイン・カードなどの回路基板に適合された他のモジュール、またはコンピュータシステムのシャーシの内部に別様に組み込まれた構成要素として実施され得る。
システム1500は、コンピュータシステムの多くの構成要素の高レベルの概観を示すように意図されていることにも留意されたい。しかしながら、特定の実装形態には追加の構成要素が存在し得、その上、他の実装形態では、示された構成要素の種々の配置が生じ得ることを理解されたい。システム1500は、デスクトップ・コンピュータ、ノートパソコン、タブレット型コンピュータ、サーバ、携帯電話、メディアプレーヤ、携帯情報端末(PDA)、スマートウォッチ、パーソナル・コミュニケータ、ゲーム機、ネットワークのルータまたはハブ、無線アクセスポイント(AP)またはリピータ、セットトップ・ボックス、またはこれらの組合せを表し得る。さらに、単一のマシンまたはシステムしか示されていないが、「マシン」または「システム」という用語は、本明細書で論じられた技法のうち任意の1または複数を遂行する1組(または複数の組)の命令を個々にまたは連帯的に実行するマシンまたはシステムの任意の収集を含むと解釈されるものとする。
一実施形態では、システム1500は、バスまたは相互接続1510を介して、プロセッサ1501、メモリ1503、およびデバイス1505~1508を備える。プロセッサ1501は、単一のプロセッサコアまたは複数のプロセッサコアを含む、単一のプロセッサまたは複数のプロセッサを表し得る。プロセッサ1501は、マイクロプロセッサ、中央処理装置(CPU)等の1または複数の汎用プロセッサを表し得る。より具体的には、プロセッサ1501は、複数命令セット・コンピューティング(CISC)マイクロプロセッサ、縮小命令セット・コンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIM)マイクロプロセッサ、他の命令セットを実施するプロセッサ、または命令セットの組合せを実施するプロセッサでよい。プロセッサ1501は、特定用途向け集積回路(ASIC)、セルラー式プロセッサまたはベースバンド・プロセッサ、フィールド・プログラマブル・ゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、ネットワーク・プロセッサ、グラフィックス・プロセッサ、通信用プロセッサ、暗号プロセッサ、コプロセッサ、組み込み型プロセッサ、または命令を処理することができる何らかの他のタイプの論理などの1または複数の専用プロセッサでもよい。
超低電圧プロセッサなど低電力のマルチコア・プロセッサ・ソケットであり得るプロセッサ1501は、システムの様々な構成要素と通信するための主処理ユニットおよび中央ハブとして働き得る。そのようなプロセッサはシステム・オン・チップ(SoC)として実施され得る。プロセッサ1501は、本明細書で論じた動作およびステップを遂行するための命令を実行するように構成されている。システム1500がさらに含み得るグラフィックス・インターフェースは、表示コントローラ、グラフィックス・プロセッサ、および/または表示デバイスを含み得る任意選択のグラフィックス・サブシステム1504と通信する。
プロセッサ1501はメモリ1503と通信してよく、メモリ1503は、一実施形態では、所与の量のシステムメモリを与えるために複数のメモリ・デバイスによって実施され得る。メモリ1503は、ランダムアクセスメモリ(RAM)、動的RAM(DRAM)、シンクロナスDRAM(SDRAM)、静的RAM(SRAM)または他のタイプの記憶デバイスなど、1または複数の揮発性記憶(すなわちメモリ)デバイスを含み得る。メモリ1503は、プロセッサ1501または何らかの他のデバイスによって実行される命令のシーケンスを含む情報を記憶し得る。たとえば、種々のオペレーティングシステム、デバイス・ドライバ、ファームウェア(たとえば入出力基本システムすなわちBIOS)の実行可能コードおよび/またはデータ、および/またはアプリケーションがメモリ1503にロードされ、プロセッサ1501によって実行され得る。オペレーティングシステムは、たとえばマイクロソフト(登録商標)のウィンドウズ(登録商標)オペレーティングシステム、アップルのマックOS(登録商標)/iOS(登録商標)、グーグル(登録商標)のアンドロイド(登録商標)、Linux(登録商標)、Unix(登録商標)など任意の種類のオペレーティングシステム、またはVxWorksなど他のリアルタイム・オペレーティングシステムもしくは組み込み型オペレーティングシステムであり得る。
システム1500がさらに含み得るデバイス1505~1508などのIOデバイスは、ネットワーク・インターフェース・デバイス1505、任意選択の入力デバイス1506、および他の任意選択のIOデバイス1507を含む。ネットワーク・インターフェース・デバイス1505は、無線トランシーバおよび/またはネットワーク・インターフェース・カード(NIC)を含み得る。無線トランシーバは、Wi-Fiトランシーバ、赤外線トランシーバ、ブルートゥース・トランシーバ、WiMaxトランシーバ、無線セルラー電話トランシーバ、衛星トランシーバ(たとえば全地球測位システム(GPS)トランシーバ)、もしくは他の無線周波数(RF)トランシーバ、またはこれらの組合せでよい。NICはイーサネットカードでよい。
入力デバイス1506は、マウス、タッチパッド、タッチセンシティブ・スクリーン(表示デバイス1504に組み込まれ得る)、スタイラスなどのポインタデバイス、および/またはキーボード(たとえば物理的キーボードまたはタッチセンシティブ・スクリーンの一部分として表示されたバーチャル・キーボード)を含み得る。たとえば、入力デバイス1506はタッチスクリーンに結合されたタッチスクリーン・コントローラを含み得る。タッチスクリーンおよびタッチスクリーン・コントローラは、たとえば、それだけではないが、容量技術、抵抗技術、赤外線技術、表面弾性波技術、ならびに他の近接センサ配列またはタッチスクリーンに対する1または複数の接触点を判定するための他の要素を含む複数のタッチ感知技術のうち任意のものを使用して、接触と、動きまたは動きの中断とを検知する。
IOデバイス1507はオーディオ・デバイスを含み得る。オーディオ・デバイスは、音声認識、音声応答、デジタル記録、および/または電話の機能など、音声対応の機能を促進するためのスピーカおよび/またはマイクロフォンを含み得る。他のIOデバイス1507は、ユニバーサル・シリアル・バス(USB)ポート、パラレルポート、シリアルポート、プリンタ、ネットワーク・インターフェース、バスブリッジ(たとえばPCI-PCIブリッジ)、センサ(たとえば加速度計、ジャイロスコープ、磁力計、光センサ、コンパス、近接センサなどの運動センサ)またはこれらの組合せをさらに含み得る。デバイス1507がさらに含み得る画像処理サブシステム(たとえばカメラ)は、写真およびビデオクリップの記録などのカメラ機能を促進するために利用される電荷結合デバイス(CCD)または相補型金属酸化膜半導体(CMOS)光センサなどの光センサを含み得る。特定のセンサがセンサ・ハブ(図示せず)を介して相互接続1510に結合されてよく、一方、キーボードまたは熱センサなど他のデバイスは、システム1500の特定の構成または設計に依拠して、組み込みコントローラ(図示せず)によって制御され得る。
データ、アプリケーション、1または複数のオペレーティングシステムなどの情報の持続的記憶を提供するために、プロセッサ1501には大容量記憶装置(図示せず)も結合され得る。様々な実施形態において、より薄くより軽いシステム設計を可能にするばかりでなくシステム応答性も改善するために、この大容量記憶装置はソリッドステート・デバイス(SSD)によって実施されてよい。しかしながら、他の実施形態では、大容量記憶装置は、停電中にコンテキスト状態および他のそのような情報の不揮発性記憶装置を有効にするために、主として、SSDキャッシュとして働く少量のSSD記憶装置を伴うハードディスク・ドライブ(HDD)を使用して実施されてよく、その結果、システム・アクティビティの再起動において高速のパワーアップが可能になる。また、フラッシュメモリが、たとえばシリアル周辺インターフェース(SPI)を介してプロセッサ1501に結合されてよい。このフラッシュメモリは、基本入出力ソフトウェア(BIOS)ならびにシステムの他のファームウェアを含むシステム・ソフトウェアの不揮発性記憶装置をもたらし得る。
記憶デバイス1508が含み得るコンピュータ・アクセス可能な記憶媒体1509(マシン可読記憶媒体またはコンピュータ可読媒体としても知られている)には、本明細書で説明された技法または機能のうち任意の1または複数を具現する1または複数の命令のセットまたはソフトウェア(たとえばモジュール、ユニット、および/またはロジック1528)が記憶されている。処理モジュール/ユニット/ロジック1528は、たとえば脆弱性で起動される優先順位づけモジュール110または図1のシステム100など、上記で説明された構成要素のうち任意のものを表し得る。処理モジュール/ユニット/ロジック1528は、データ処理システム1500による実行中には、メモリ1503の内部および/またはプロセッサ1501の内部に、余すところなく、または少なくとも部分的に存在してもよく、メモリ1503およびプロセッサ1501はマシンアクセス可能な記憶媒体も構成する。処理モジュール/ユニット/ロジック1528は、ネットワーク・インターフェース・デバイス1505によってネットワークを通じてさらに送信/受信されてよい。
コンピュータ可読記憶媒体1509は、上記で説明されたいくつかのソフトウェア機能を持続的に記憶するためにも使用され得る。例示的実施形態では、コンピュータ可読記憶媒体1509は単一の媒体であるように示されているが、「コンピュータ可読記憶媒体」という用語は、命令の1または複数のセットを記憶する単一の媒体または複数の媒体(たとえば集中型もしくは分散型のデータベース、および/または関連するキャッシュおよびサーバ)を含むように解釈されるべきである。「コンピュータ可読記憶媒体」という用語は、マシンによる実行のための命令のセットを記憶することまたは符号化することが可能であって本発明の技法のうち任意の1または複数をマシンに遂行させる任意の媒体を含むようにも解釈されるべきである。したがって、「コンピュータ可読記憶媒体」という用語は、それだけではないが、ソリッドステート・メモリならびに光媒体および磁気媒体、または何らかの他の非一時的マシン可読媒体を含むように解釈されるべきである。
処理モジュール/ユニット/ロジック1528、構成要素および本明細書で説明された他の機能は、個別のハードウェア構成要素として実施され得、またはASIC、FPGA、DSPまたは類似のデバイスなどハードウェア構成要素の機能の中に組み込まれ得る。加えて、処理モジュール/ユニット/ロジック1528は、ハードウェアデバイスの内部のファームウェアまたは機能回路として実施され得る。さらに、処理モジュール/ユニット/ロジック1528は、ハードウェアデバイスとソフトウェア・コンポーネントの任意の組合せで実施され得る。
システム1500は、データ処理システムの様々な構成要素を用いて示されているが、何らかの特定のアーキテクチャまたは構成要素を相互に連結するやり方を表すことは意図されておらず、そのため、詳細は、本発明の実施形態に密接な関係はないことに留意されたい。ネットワークコンピュータ、ハンドヘルドコンピュータ、携帯電話、サーバ、および/または構成要素がより少ないかもしくは恐らくより多い他のデータ処理システムも、本発明の実施形態とともに使用され得ることも理解されたい。
先の詳細な説明のいくつかの部分は、コンピュータ記憶装置の内部のデータ・ビットにおける動作のアルゴリズムおよび記号表現の観点から提示されている。これらのアルゴリズム的な説明および表現は、データ処理技術の当業者が、著作物の要旨を他の当業者に最も効果的に伝えるために使用するやり方である。ここで、アルゴリズムは、一般に、所望の結果に達する動作の自己矛盾がないシーケンスと考えられる。動作は、物理量の物理的操作を必要とするものである。
しかしながら、これらおよび類似の用語のすべてが、適切な物理量に関連づけられるべきであり、これらの量に与えられた好都合なラベルでしかないことを念頭に置かれたい。特に別記しない限り、上記の議論から明らかなように、説明の全体にわたって、以下の特許請求の範囲において説明されるものなどの用語を利用する議論は、コンピュータシステムのレジスタおよびメモリの内部の物理的(電子的)量として表されたデータを操作して、コンピュータシステムのメモリもしくはレジスタ、または他のそのような情報の記憶デバイス、伝送デバイスもしくは表示デバイスの内部の物理量として同様に表される他のデータへと変換するコンピュータシステム(または類似の電子計算デバイス)の作用および処理を指すことが理解される。
図に示された技術は、1または複数の電子デバイス上に記憶されて実行されるコードおよびデータを使用して実施され得る。そのような電子デバイスは、非一時的コンピュータ可読記憶媒体(たとえば磁気ディスク、光ディスク、ランダムアクセスメモリ、読み取り専用メモリ、フラッシュメモリ・デバイス、相変化メモリ)および一時的なコンピュータ可読伝送媒体(たとえば搬送波、赤外線信号、デジタル信号など、電気、光、音響、または他の形態の伝搬される信号)などのコンピュータ可読媒体を使用して、コードおよびデータを記憶したり、(内部で、および/またはネットワーク上の他の電子デバイスと)通信したりする。
先の図に表された処理または方法は、ハードウェア(たとえば回路、専用ロジックなど)、ファームウェア、(たとえば非一時的コンピュータ可読媒体上に具現された)ソフトウェア、またはこれらの組合せを含む処理ロジックによって遂行され得る。上記では、処理または方法がいくつかの順次動作の観点から説明されているが、説明された動作のうちいくつかは異なる順序で遂行され得ることを理解されたい。その上に、いくつかの動作は、順次ではなく並行して遂行され得る。
前述の明細書では、本発明の実施形態が特定の例示的実施形態を参照しながら説明されている。以下の特許請求の範囲で説明されるような本発明のより広範な精神および範囲から逸脱することなく、様々な修正形態が作製され得ることが明白であろう。したがって、本明細書および図面は、限定的意味ではなく例示的意味に見なされるべきである。

Claims (21)

  1. プログラムコードの脆弱性を評価するためのコンピュータで実装される方法であって、
    コンパイラによってソースコードに基づいて生成された中間結果を受け取るステップであって、前記中間結果が、前記ソースコードの潜在的に脆弱な1または複数のラインを指示する1または複数の脆弱性インジケータを含むステップと、
    前記中間結果から生成された第1の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第1のセットを生成するステップと、
    到達可能であるが前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの前記ラインに関する前記脆弱性インジケータに基づいて、前記第1のセットの前記シード入力の各々について脆弱性スコアを計算するステップと、
    前記第1のセットにおける前記シード入力のうち最高の脆弱性スコアを有する1つを選択するステップと、
    前記選択されたシード入力を優先権として使用して、前記中間結果から生成された第2の実行可能コードに対して遂行されるコンコリック実行を遂行するステップとを含む方法。
  2. 前記コンコリック実行がシード入力の第2のセットを生成し、シード入力の前記第2のセットにより、前記コンコリック実行のプログラムフロー制御が、前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの1または複数の分岐を調査する請求項1に記載の方法。
  3. 次の繰り返しの間に前記グレーボックス・ファジング処理によって前記第2のセットの1または複数のシード入力が利用されるように、シード入力の前記第1のセットに対してシード入力の前記第2のセットを付加するステップを含む請求項2に記載の方法。
  4. 前記第1のセットのシード入力の各々について脆弱性スコアを計算するステップが、
    前記シード入力に対応する前記グレーボックス・ファジング処理によって調査されたプログラム制御フローを識別するステップと、
    該プログラム制御フローによって到達可能であるが前記グレーボックス・ファジング処理によって調査されていない複数の脆弱性インジケータに基づいて、前記シード入力に関する前記脆弱性スコアを計算するステップと、
    を含む請求項1に記載の方法。
  5. 前記第1のセットの前記シード入力のうち最高の脆弱性スコアを有する1つを選択するステップが、シード入力の前記第1のセットに対する前記コンコリック実行に優先権を与えるように、前記第1のセットの前記シード入力をそれぞれの脆弱性スコアに基づいて並べるステップを含む、請求項1に記載の方法。
  6. 前記中間結果からコードの複数の基本ブロックを識別するステップと、
    前記基本ブロックの各々について、該基本ブロックの内部の複数の脆弱性インジケータを判定するステップと、
    前記基本ブロックに関連した複数の脆弱性インジケータに対して各基本ブロックのブロック識別子(ID)をマッピングするマッピング表を生成するステップであって、前記マッピング表が脆弱性スコアを計算するために利用されるステップと、
    を含む請求項1に記載の方法。
  7. 前記第1のセットの前記シード入力の各々について脆弱性スコアを計算するステップが、
    前記シード入力に対応する前記中間結果のプログラム制御フローに基づいて、プログラム制御フローグラフ(CFG)を構築するステップと、
    前記シード入力の前記脆弱性スコアを表すために、前記プログラムCFGによって到達可能であるが調査されていないすべての基本ブロックの脆弱性インジケータの数を合計するステップであって、前記マッピング表におけるルックアップ演算を遂行して、前記基本ブロックに関連した複数の脆弱性インジケータを判定することを含むステップと、
    を含む請求項6に記載の方法。
  8. 前記脆弱性インジケータのうち少なくとも1つが、前記コンパイラによって挿入された、例外のスローおよびキャッチ(スロー/キャッチ)のブロックを含み、ソースコードの関連するラインが実行中に安全規則に違反したとき、オペレーティングシステムによって、例外がスローされキャッチされる請求項1に記載の方法。
  9. 命令を記憶した非一時的マシン可読媒体であって、前記命令がプロセッサによって実行されたとき、該プロセッサが、
    コンパイラによってソースコードに基づいて生成された中間結果を受け取るステップであって、前記中間結果が、前記ソースコードの潜在的に脆弱な1または複数のラインを指示する1または複数の脆弱性インジケータを含むステップと、
    前記中間結果から生成された第1の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第1のセットを生成するステップと、
    到達可能であるが前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの前記ラインに関する前記脆弱性インジケータに基づいて、前記第1のセットの前記シード入力の各々について脆弱性スコアを計算するステップと、
    前記第1のセットにおける前記シード入力のうち最高の脆弱性スコアを有する1つを選択するステップと、
    前記選択されたシード入力を優先権として使用して、前記中間結果から生成された第2の実行可能コードに対して遂行されるコンコリック実行を遂行するステップと、
    を含む動作を遂行する非一時的マシン可読媒体。
  10. 前記コンコリック実行がシード入力の第2のセットを生成し、シード入力の前記第2のセットにより、前記コンコリック実行のプログラムフロー制御が、前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの1または複数の分岐を調査する請求項9に記載の非一時的マシン可読媒体。
  11. 前記動作が、次の繰り返しの間に前記グレーボックス・ファジング処理によって前記第2のセットの1または複数のシード入力が利用されるように、シード入力の前記第1のセットに対してシード入力の前記第2のセットを付加するステップを含む請求項10に記載の非一時的マシン可読媒体。
  12. 前記第1のセットの前記シード入力の各々について脆弱性スコアを計算するステップが、
    前記シード入力に対応する前記グレーボックス・ファジング処理によって調査されたプログラム制御フローを識別するステップと、
    前記プログラム制御フローによって到達可能であるが前記グレーボックス・ファジング処理によって調査されていない複数の脆弱性インジケータに基づいて、前記シード入力に関する前記脆弱性スコアを計算するステップと、
    を含む請求項9に記載の非一時的マシン可読媒体。
  13. 前記第1のセットの前記シード入力のうち最高の脆弱性スコアを有する1つを選択するステップが、シード入力の前記第1のセットに対する前記コンコリック実行に優先権を与えるように、前記第1のセットの前記シード入力をそれぞれの脆弱性スコアに基づいて並べるステップを含む請求項9に記載の非一時的マシン可読媒体。
  14. 前記動作が、
    前記中間結果からコードの複数の基本ブロックを識別するステップと、
    前記基本ブロックの各々について、該基本ブロックの内部の複数の脆弱性インジケータを判定するステップと、
    前記基本ブロックに関連した複数の脆弱性インジケータに対して各基本ブロックのブロック識別子(ID)をマッピングするマッピング表を生成するステップであって、前記マッピング表が脆弱性スコアを計算するために利用されるステップと、
    を含む請求項9に記載の非一時的マシン可読媒体。
  15. 前記第1のセットの前記シード入力の各々について脆弱性スコアを計算するステップが、
    前記シード入力に対応する前記中間結果のプログラム制御フローに基づいて、プログラム制御フローグラフ(CFG)を構築するステップと、
    前記シード入力の前記脆弱性スコアを表すために、前記プログラムCFGによって到達可能であるが調査されていないすべての基本ブロックの脆弱性インジケータの数を合計するステップであって、前記マッピング表におけるルックアップ演算を遂行して、前記基本ブロックに関連した複数の脆弱性インジケータを判定することを含むステップと、
    を含む請求項14に記載の非一時的マシン可読媒体。
  16. 前記脆弱性インジケータのうち少なくとも1つが、前記コンパイラによって挿入された、例外のスローおよびキャッチ(スロー/キャッチ)のブロックを含み、ソースコードの関連するラインが実行中に安全規則に違反したとき、オペレーティングシステムによって、例外がスローされキャッチされる請求項9に記載の非一時的マシン可読媒体。
  17. プロセッサと、命令を記憶するために該プロセッサに結合されたメモリとを備えるデータ処理システムであって、前記命令が前記プロセッサによって実行されたとき、該プロセッサが、
    コンパイラによってソースコードに基づいて生成された中間結果を受け取るステップであって、前記中間結果が、前記ソースコードの潜在的に脆弱な1または複数のラインを指示する1または複数の脆弱性インジケータを含むステップと、
    前記中間結果から生成された第1の実行可能コードに対してグレーボックス・ファジング処理を遂行して、シード入力の第1のセットを生成するステップと、
    到達可能であるが前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの前記ラインに関する前記脆弱性インジケータに基づいて、前記第1のセットの前記シード入力の各々について脆弱性スコアを計算するステップと、
    前記第1のセットにおける前記シード入力のうち最高の脆弱性スコアを有する1つを選択するステップと、
    前記選択されたシード入力を優先権として使用して、前記中間結果から生成された第2の実行可能コードに対して遂行されるコンコリック実行を遂行するステップと、
    を含む動作を遂行するデータ処理システム。
  18. 前記コンコリック実行がシード入力の第2のセットを生成し、シード入力の前記第2のセットにより、前記コンコリック実行のプログラムフロー制御が、前記グレーボックス・ファジング処理によって調査されていない前記ソースコードの1または複数の分岐を調査する請求項17に記載のシステム。
  19. 前記動作が、次の繰り返しの間に前記グレーボックス・ファジング処理によって前記第2のセットの1または複数のシード入力が利用されるように、シード入力の前記第1のセットに対してシード入力の前記第2のセットを付加するステップを含む請求項18に記載のシステム。
  20. 前記第1のセットの前記シード入力の各々について脆弱性スコアを計算するステップが、
    前記シード入力に対応する前記グレーボックス・ファジング処理によって調査されたプログラム制御フローを識別するステップと、
    前記プログラム制御フローによって到達可能であるが前記グレーボックス・ファジング処理によって調査されていない複数の脆弱性インジケータに基づいて、前記シード入力に関する前記脆弱性スコアを計算するステップと、
    を含む請求項17に記載のシステム。
  21. 前記第1のセットの前記シード入力のうち最高の脆弱性スコアを有する1つを選択するステップが、シード入力の前記第1のセットに対する前記コンコリック実行に優先権を与えるように、前記第1のセットの前記シード入力をそれぞれの脆弱性スコアに基づいて並べるステップを含む請求項17に記載のシステム。
JP2020100093A 2019-06-17 2020-06-09 アプリケーション・プログラムのための脆弱性により起動されるハイブリッド・テストシステム Active JP7058302B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/443,619 2019-06-17
US16/443,619 US11205004B2 (en) 2019-06-17 2019-06-17 Vulnerability driven hybrid test system for application programs

Publications (2)

Publication Number Publication Date
JP2020205047A JP2020205047A (ja) 2020-12-24
JP7058302B2 true JP7058302B2 (ja) 2022-04-21

Family

ID=70058275

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020100093A Active JP7058302B2 (ja) 2019-06-17 2020-06-09 アプリケーション・プログラムのための脆弱性により起動されるハイブリッド・テストシステム

Country Status (5)

Country Link
US (1) US11205004B2 (ja)
EP (1) EP3754527B1 (ja)
JP (1) JP7058302B2 (ja)
KR (1) KR102307364B1 (ja)
CN (1) CN112100050B (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102019211037A1 (de) * 2019-07-25 2021-01-28 Robert Bosch Gmbh Verfahren zum Testen eines Systems
US11349963B1 (en) * 2020-01-27 2022-05-31 Keysight Technologies, Inc. Method and system for detecting anomalies of server and client
JPWO2022145092A1 (ja) * 2020-12-28 2022-07-07
CN113485755B (zh) * 2021-06-30 2023-08-18 深圳市科力锐科技有限公司 设备驱动程序验证方法、装置、设备及存储介质
US11934534B2 (en) * 2021-11-29 2024-03-19 Microsoft Technology Licensing, Llc Vulnerability analysis of a computer driver
KR102483489B1 (ko) * 2022-03-25 2022-12-30 연세대학교 산학협력단 동적 자원 분배가 가능한 하이브리드 퍼징 장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006523898A (ja) 2003-04-18 2006-10-19 オンス ラブス,インク ソースコードの脆弱点の検出法および検出システム
JP2017520842A (ja) 2014-06-13 2017-07-27 ザ・チャールズ・スターク・ドレイパー・ラボラトリー・インコーポレイテッド ソフトウェア分析のためのシステムおよび方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7480902B2 (en) 2004-07-08 2009-01-20 Intel Corporation Unwind information for optimized programs
US8805043B1 (en) * 2010-04-02 2014-08-12 Jasjit S. Suri System and method for creating and using intelligent databases for assisting in intima-media thickness (IMT)
US8387018B2 (en) * 2010-09-01 2013-02-26 International Business Machines Corporation Fault localization using directed test generation
US9135405B2 (en) 2011-05-26 2015-09-15 Carnegie Mellon University Automated exploit generation
US8918885B2 (en) * 2012-02-09 2014-12-23 International Business Machines Corporation Automatic discovery of system integrity exposures in system code
US20140304687A1 (en) * 2013-04-05 2014-10-09 2236008 Ontario, Inc. Compilation validation
CN107451474B (zh) * 2016-05-31 2020-06-26 百度在线网络技术(北京)有限公司 用于终端的软件漏洞修复方法和装置
CN109117169B (zh) * 2016-12-12 2022-06-07 百度在线网络技术(北京)有限公司 用于修复内核漏洞的方法和装置
RU2651531C1 (ru) * 2017-04-20 2018-04-19 Федеральное государственное бюджетное образовательное учреждение высшего образования "Комсомольский-на-Амуре государственный технический университет" (ФГБОУ ВО "КнАГТУ") Автоматизированная пропускная система
KR101904911B1 (ko) * 2017-10-13 2018-10-08 한국인터넷진흥원 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
CN108052825B (zh) * 2017-12-29 2021-05-07 哈尔滨工业大学 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统
CN108647520B (zh) * 2018-05-15 2020-05-29 浙江大学 一种基于脆弱性学习的智能模糊测试方法与系统
US10635576B2 (en) * 2018-06-18 2020-04-28 Fujitsu Limited Branch coverage guided symbolic execution for hybrid fuzz testing of software binaries
CN108845944B (zh) * 2018-06-28 2021-10-15 中国人民解放军国防科技大学 一种结合符号执行提高软件模糊测试效率的方法
CN109635568B (zh) * 2018-11-26 2023-05-26 华中科技大学 一种基于静态分析和模糊测试相结合的并发漏洞检测方法
CN109670316A (zh) * 2018-12-19 2019-04-23 杭州安恒信息技术股份有限公司 一种基于Java异常的漏洞检测方法和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006523898A (ja) 2003-04-18 2006-10-19 オンス ラブス,インク ソースコードの脆弱点の検出法および検出システム
JP2017520842A (ja) 2014-06-13 2017-07-27 ザ・チャールズ・スターク・ドレイパー・ラボラトリー・インコーポレイテッド ソフトウェア分析のためのシステムおよび方法

Also Published As

Publication number Publication date
JP2020205047A (ja) 2020-12-24
KR20200144051A (ko) 2020-12-28
KR102307364B1 (ko) 2021-09-29
US20200394311A1 (en) 2020-12-17
CN112100050B (zh) 2023-12-29
EP3754527A1 (en) 2020-12-23
EP3754527B1 (en) 2022-11-09
US11205004B2 (en) 2021-12-21
CN112100050A (zh) 2020-12-18

Similar Documents

Publication Publication Date Title
JP7058302B2 (ja) アプリケーション・プログラムのための脆弱性により起動されるハイブリッド・テストシステム
JP2016539421A (ja) コールパスファインダ
US20140331204A1 (en) Micro-execution for software testing
US9715440B2 (en) Test scope determination based on code change(s)
CN110741354A (zh) 呈现代码实体调用之间的差异
WO2021034391A1 (en) Data preservation using memory aperture flush order
US7788543B2 (en) Methods and systems for generating and storing computer program execution trace data
US9772881B2 (en) Hardware resource allocation for applications
US20230059703A1 (en) Method, apparatus, and storage medium for generating test cases
US20180157605A1 (en) Configuration of a memory controller for copy-on-write
US8769498B2 (en) Warning of register and storage area assignment errors
US8145819B2 (en) Method and system for stealing interrupt vectors
US20150309776A1 (en) Identifying potentially uninitialized source code variables
US11334349B2 (en) Removing feature flag-related codebase from applications
US10216562B2 (en) Generating diagnostic data
JP2016537730A (ja) 割り付けられていないメモリ、または初期化されていないメモリに対するリード・アクセスを検出すること
US9535713B2 (en) Manipulating rules for adding new devices
US20190235899A1 (en) Tracking virtual machine data
WO2021047380A1 (zh) 应用程序管理方法、装置和存储介质
US11074200B2 (en) Use-after-free exploit prevention architecture
US8359456B2 (en) Generating random addresses for verification of distributed computerized devices
US10379776B2 (en) Operation interlocking in an address-sliced cache system
US20190286464A1 (en) Virtual machine state recorder
US20240177025A1 (en) System and method for managing data processing systems hosting distributed inference models
CN111897632B (zh) 一种中断处理方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200609

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210727

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210803

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211102

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220405

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220411

R150 Certificate of patent or registration of utility model

Ref document number: 7058302

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150