JP2016167262A - 脆弱性分析のための自律型推論システム - Google Patents

脆弱性分析のための自律型推論システム Download PDF

Info

Publication number
JP2016167262A
JP2016167262A JP2016038033A JP2016038033A JP2016167262A JP 2016167262 A JP2016167262 A JP 2016167262A JP 2016038033 A JP2016038033 A JP 2016038033A JP 2016038033 A JP2016038033 A JP 2016038033A JP 2016167262 A JP2016167262 A JP 2016167262A
Authority
JP
Japan
Prior art keywords
inputs
input
program
deployed
patch
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.)
Granted
Application number
JP2016038033A
Other languages
English (en)
Other versions
JP6686529B2 (ja
Inventor
マーシー プラビーン
Murthy Praveen
マーシー プラビーン
コポス ボグダン
Copos Bogdan
コポス ボグダン
ファム トゥアン
Pham Thuan
ファム トゥアン
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2016167262A publication Critical patent/JP2016167262A/ja
Application granted granted Critical
Publication of JP6686529B2 publication Critical patent/JP6686529B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • 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

Landscapes

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

Abstract

【課題】プログラムの脆弱性分析の方法を提供する。
【解決手段】アーキテクチャ300のバイナリ分析モジュール350は、配備されたプログラム112から導出された分析対象バイナリプログラム(BPUA)314を受け取り、プログラムの入出力(I/O)動作を分析し、BPUAに対する調査技法の適用及びI/O動作の分析に基づいて負の入力及び正の入力を発見する。負の入力は、プログラムの脆弱性を含む応答をトリガする入力であり、負の入力及びトリガされた応答に基づいて、パッチモジュール352は、配備されたプログラムを変更して、脆弱性を含む応答をトリガすることなしに、負の入力の少なくともいくつかを処理するためのプログラムを変更するプログラム用のパッチを開発し、配備されたプログラムにパッチ処理済みのBPUA364を自動的にディスパッチする。
【選択図】図3

Description

関連出願の相互参照
本特許出願は、2015年3月5日付けで出願された米国仮特許出願第62/128,932号の利益及びその優先権を主張するものであり、この特許文献の内容は、引用により、そのすべてが本明細書に包含される。
本明細書において開示されている実施形態は、脆弱性分析のための自律型推論システムに関する。
ソフトウェア開発における現在の慣行には、開発フェーズにおけるソフトウェアの試験及び検証が伴いうる。但し、多くのバグ又はコーナーケースは、満足できるほどに解決されない場合がある。開発フェーズにおける試験により、バグ又はコーナーケースのすべてが解決されない場合があり、その理由は、完全なカバレージ用の試験は、一般に難しく、且つ、経済的に実行可能なものをはるかに上回る時間及びリソースを所要しうるからである。
また、現在の慣行には、ソフトウェアにおけるソフトウェア脆弱性を検出するセキュリティを専門としたセキュリティコンサルタント及び会社が伴いうる。脆弱性が検出された後に、セキュリティコンサルタントは、それらの脆弱性をオリジナルのソフトウェア開発者に提出しうる。この結果、パッチを開発するべく、オリジナルのソフトウェア開発者が頼られることになる。但し、オリジナルのソフトウェア開発者が、もはや、存在していない場合があり、或いは、脆弱性のパッチ処理に伴うリソースの消費を回避する場合もある。パッチが開発される場合にも、ソフトウェアのユーザーの大部分におけるパッチの再配備は、大きな時間及びリソースの支出を必要とする場合があり、且つ、更新の適用において1つ又は複数のユーザーの勤勉性に依存している場合もある。
ソフトウェアの脆弱性を修復するための別の方式は、利用するべく署名を開発し、且つ、クライアントサイトにおいて配備されたウイルス除去及びマルウェア除去スキャナを介してこれらを阻止するというものである。但し、この方式が有効でありうるのは、既知の脅威の場合のみである。この結果、ウイルス除去スキャナは、ウイルス又はマルウェアが有効であることを許容する未知のソフトウェア脆弱性を修正しない。
米国特許出願第14/620,106号明細書 米国特許出願第14/792,507号明細書
本明細書において特許請求されている主題は、後述のものなどの任意の欠点を解決するか又は環境においてのみ稼働する実施形態に限定されるものではない。むしろ、この背景の節は、本明細書において記述されているいくつかの実施形態が実施されうる1つの例示用の技術エリアを示すべく提供されるに過ぎない。
一実施形態の一態様によれば、配備されたプログラムの脆弱性分析の方法は、配備されたプログラムから導出された分析対象バイナリプログラム(Binary Program Under Analysis:BPUA)を入力するステップを含んでもよい。方法は、配備されたプログラムの入出力(I/O)動作を分析するステップを含んでもよい。方法は、BPUAに対する2つ以上の調査技法の適用及びI/O動作の分析に基づいて配備されたプログラムに対する入力を発見するステップを含んでもよい。方法は、入力のいずれが負の入力であるのかを判定するステップを含んでもよい。負の入力は、配備されたプログラムの脆弱性を含む応答をトリガする入力の一部分を含んでもよい。負の入力及びトリガされた応答に基づいて、方法は、配備されたプログラムを変更して脆弱性を含む応答をトリガすることなしに負の入力の少なくともいくつかを処理するための配備されたプログラム用のパッチを開発するステップを含んでもよい。方法は、配備されたプログラムに対してパッチを自動的にディスパッチするステップを含んでもよい。
実施形態の目的及び利点は、少なくとも請求項において具体的に指摘されている要素、特徴、及び組合せにより、実現及び達成されることになる。
上述の概略的な説明及び以下の詳細な説明は、いずれも、特許請求されている本発明の例示及び説明を目的としており、且つ、その限定を目的としたものではないことを理解されたい。
そのいずれもが、本明細書において記述されている少なくとも1つの実施形態に従って構成されている添付図面を使用し、例示用の実施形態について更なる具体性及び詳細を伴って記述及び説明することとする。
1つ又は複数の実施形態が実装されうる例示用のシステムのブロックダイアグラムである。 図1のシステムにおいて実装されうる例示用の演算(計算)システムを示す。 図1及び図2のシステムにおいて実装されうる例示用の自律型推論システム(ARS)モジュールを示す。 図3のARSモジュールの例示用の一実施形態を示す。 図4のARSモジュールにおいて実装されうる例示用の入力発見プロセスを示す。 配備されたプログラムの脆弱性を分析する方法のフローチャートを示す。 配備されたプログラムの脆弱性を分析する方法のフローチャートを示す。
ソフトウェアの複雑性の増大に伴って、これらのソフトウェアを広範に試験するシステムの複雑性も増大している。現在のソフトウェア試験慣行は、リリース前にソフトウェアを試験すると共に、リリース後に、バグが見出されるのに伴ってバグを修正するステップを含みうる。増加するサイバー犯罪に起因し、リリース後におけるバグの修正は、問題であり、その理由は、これが、予め未知の脆弱性を利用した絶え間ない「0デイ」攻撃をもたらしうるからである。
従って、本明細書において開示されているいくつかの実施形態においては、自律型推論システム(Autonomous Reasoning System:ARS)が配備されてもよい。ARSは、ARSが試験するべく実装されている配備されたプログラムから離隔した状態で配備されてもよい。ARSは、配備されたプログラムの脆弱性について常に監視してもよく、且つ、最小限の人間による介入を伴って又は伴うことなしに、配備されたプログラムを修正する。ARSは、配備されたシステムと共に稼働してもよく、且つ、配備されたプログラムのソフトウェアリリースサイクルにおいて通常の試験及び検証フローの外部において脆弱性を検出してもよい。ARSは、配備されたプログラムを構築した開発チームから遠く離れた状態で、クライアントサイトにおいて配備されるのに伴い、自律的に機能してもよい。更には、ARSは、自律的に稼働すると共に検出された脅威をパッチ処理してもよく、且つ、「人間の時間」ではなく、「機械の時間」において修正する。
いくつかの実施形態においては、ARSは、プログラム分析技法とI/O動作分析の両方を使用することにより、配備されたプログラムの脆弱性を継続的に試験してもよい。ARSは、クラッシュを結果的にもたらすソフトウェア脆弱性をトリガしうる入力について継続的にサーチしてもよい。ARSは、将来のクラッシュが、脆弱性をトリガした特定の入力において発生しえないように、配備されたプログラムを自動的に修正するパッチを開発してもよい。
ARSは、ソフトウェア脆弱性を見出すためのいくつかのタイプのソフトウェア分析を組み合わせてもよい。例えば、ARSは、稼働の最中に配備されたプログラムに適用されたコンソールにおけるやり取り及び/又はネットワークトラフィックから収集された入出力(I/O)動作を分析してもよい。ARSは、適宜、(クラッシュをトリガする入力及びクラッシュをトリガしない入力の両方について)情報を収集し、クラッシュをトリガする入力用のパッチを開発し、且つ、パッチを適用する。添付図面を参照し、この及びその他の実施形態について説明する。
図1は、いくつかの実施形態が実装されうる例示用のシステム100のブロックダイアグラムである。システム100は、演算(計算)システム102において実装されたローカルARSモジュール110及び/又はクラウドサーバー106において実装されたクラウドARSモジュール111を含んでもよい。ローカルARSモジュール110及びクラウドARSモジュール111は、ARSモジュール110/111と総称される。ARSモジュール110/111は、配備されたプログラム112の脆弱性分析のために構成されてもよい。脆弱性分析は、継続的に、実質的に継続的に、定期的に、又はなんらかのインターバルで、実行されてもよい。
一般に、ARSモジュール110/111によって実行される脆弱性分析は、配備されたプログラム112に対する入力の発見を含んでもよい。入力は、データの組又はストリング、データのタイプ、データのシーケンス、数値、シンボルなどのような特定のデータ、或いは、これらのなんらかの組合せを含んでもよい。入力に対する配備されたプログラム112の応答が特定されてもよい。いくつかの実施形態においては、応答は、調査技法から且つ/又は配備されたプログラム112の入出力(I/O)動作の分析から特定されてもよい。ARSモジュール110/111は、入力のいずれが、配備されたプログラム112の脆弱性を含む応答を結果的にもたらすのかを判定してもよい(負の入力)。次いで、ARSモジュール110/111は、負の入力がもはや脆弱性を含む応答を結果的にもたらさないように、配備されたプログラム112を変更するパッチを開発及び/又はディスパッチしてもよい。
配備されたプログラム112は、任意のソフトウェアプログラムを含んでもよい。図示の実施形態においては、配備されたプログラム112は、一般の人々への一般的な普及のために、その製造者によってリリースされたものであってもよい。例えば、ARSモジュール110/111は、配備されたプログラム112の製造者とARSモジュール110/111を監督している別のエンティティの間における調整を伴うことなしに、配備されたプログラム112のリリースの後に実装されてもよい。一般に、配備されたプログラムは、ARSモジュール110/111に関係付けられていなくてもよく、その理由は、配備されたプログラム112に関する事前の知識が、ARSモジュール110/111によって実行される脆弱性分析に関与しえないからである。
システム100においては、演算システム102、クラウドサーバー106、及び外部演算(計算)システム104は、ネットワーク104を介して通信してもよい。以下、演算システム102、クラウドサーバー106、外部演算システム104、及びネットワーク140のそれぞれについて簡単に説明する。
ネットワーク140は、有線及び/又は無線のネットワークを含んでもよく、且つ、スター構成、トークンリング構成、又はその他の構成などの任意の適切な構成を有してもよい。更には、ネットワーク140は、ローカルエリアネットワーク(Local Area Network:LAN)、ワイドエリアネットワーク(Wide Area Network:WAN)(例えば、インターネット)、及び/又は複数の装置がそれに跨って通信しうるその他の相互接続されたデータ経路を含んでもよい。いくつかの実施形態においては、ネットワーク140は、ピアツーピアネットワークを含んでもよい。又、ネットワーク140は、様々な異なる通信プロトコルにおけるデータの通信を可能にしうる電気通信ネットワークの一部分に結合されてもよく、或いは、これを含んでもよい。
いくつかの実施形態においては、ネットワーク140は、ショートメッセージサービス(Short Messaging Service:SMS)、マルチメディアメッセージングサービス(Multimedia Messaging Service:MMS)、ハイパーテキスト転送プロトコル(HyperText Transfer Protocol:HTTP)、直接的なデータ接続、無線アプリケーションプロトコル(Wireless Application Protocol:WAP)、電子メールなどを介したものを含むデータを送受信するためのBLUETOOTH(登録商標)通信ネットワーク及び/又はセルラー通信ネットワークを含む。ネットワーク140は、規格に基づいたプロトコル又は別の適切なプロトコル(例えば、Wi−Fi(登録商標))を介した通信を可能にしてもよい。
外部演算システム104は、ハードウェアサーバー、パーソナルコンピュータ、モバイルコンピュータ、モバイル装置、及びこれらに類似したものなどの任意の演算装置を含んでもよい。外部演算システム104は、メモリ、1つ又は複数のプロセッサ、及びネットワーク140を介して通信するべく使用されるハードウェアを含んでもよい。
外部演算システム104は、演算システム102及び配備されたプログラム112とインターフェイスしてもよい。例えば、配備されたプログラム112は、外部演算システム104からネットワーク140を介して入力を受け取ってもよいと共に/又はネットワーク140を介して外部演算システム104に対して応答を提供してもよい。外部演算システム104及び演算システム102からの入力及び応答の通信は、ネットワークトラフィックの一例であってもよく、これらは、ARSモジュール110/111によって使用されてもよい。いくつかの実施形態においては、ユーザーは、外部演算システム104上のコンソールを動作させてもよい。コンソールの動作により、配備されたプログラム112に対して入力が提供されうる。
クラウドサーバー106は、メモリ、1つ又は複数のプロセッサ、及びネットワーク140を介して通信するための能力を有するハードウェアサーバーを含んでもよい。クラウドサーバー106は、クラウドARSモジュール111をその上に読み込まれた状態において有してもよい。クラウドARSモジュール111は、ローカルARSモジュール110に実質的に類似した方式で動作するように構成されてもよい。クラウドARSモジュール111は、配備されたプログラム112がその上に読み込まれる演算システム102に対してリモート方式により、読み込まれてもよい。クラウドARSモジュール111を実装した実施形態においては、演算システム102は、ローカルARSモジュール110を有していなくてもよい。その代わりに、クラウドARSモジュール111は、本開示の別の場所において記述されている脆弱性分析又はそのいくつかの部分を実行するべく、演算システム102及び/又は配備されたプログラム112に対してリモート方式でアクセスしてもよい。
演算システム102は、ハードウェアサーバー、パーソナルコンピュータ、モバイルコンピュータ、モバイル装置、及びこれらに類似したものなどの任意の演算装置を含んでもよい。演算システム102は、メモリ、1つ又は複数のプロセッサ、及びネットワーク140を介して通信するべく使用されるハードウェアを含んでもよい。演算システム102のいくつかの更なる詳細は、図2を参照して提供される。
演算システム102は、ローカルARSモジュール110及び配備されたプログラム112をその上に読み込まれた状態において有してもよい。ローカルARSモジュール110は、配備されたプログラム112の脆弱性分析を実行するべく、配備されたプログラム112とやり取りしてもよい。演算システム102上において配備されている間に、ユーザーは、コンソールなどのなんらかのハードウェアコンポーネントを使用することにより、配備されたプログラム112とやり取り(相互に作用)してもよい。例えば、ユーザーは、コンソールを介して入力を配備されたプログラム112に提供してもよく、且つ、コンソール又は演算システム102の別のハードウェアコンポーネントを介して応答を受け取ってもよい。ローカルARSモジュール110及び/又はクラウドARSモジュール111は、コンソールにおけるやり取りを使用し、配備されたプログラム112内の脆弱性を見出してもよい。
ARSモジュール110/111は、配備されたプログラム112の脆弱性分析のために構成されたコード及びルーチンを含んでもよい。脆弱性分析は、配備されたプログラム112における脆弱性を見出すと共にパッチ処理するステップを含んでもよい。いくつかの実施形態においては、ARSモジュール110/111は、例えば、フィールドプログラム可能なゲートアレイ(Field−Programmable Gate Array:FPGA)又は用途固有の集積回路(Application−Specific Integrated Circuit:ASIC)を含むハードウェアを使用することにより、実装されてもよい。いくつかのその他の例においては、ARSモジュール110/111は、ハードウェアとソフトウェアの組合せを使用して実装されてもよい。
ソフトウェアにおける実装形態は、演算システム102及び/又はクラウドサーバー106のハードウェアに含まれうるものなどの1つ又は複数のトランジスタ又はトランジスタ素子の迅速な起動及び起動停止を含んでもよい。更には、ソフトウェアによって定義された命令が、トランジスタ素子内の情報に対して動作してもよい。ソフトウェア命令の実装形態は、少なくとも一時的に、電子経路を再構成してもよく、且つ、演算ハードウェアを変換してもよい。
図示の実施形態においては、ARSモジュール110/111は、配備されたプログラム112の脆弱性を分析するように構成されてもよい。脆弱性は、例えば、メモリ破壊エラー、バッファオーバーフロー、ソフトウェアクラッシュ、演算エラー(例えば、0による除算)を含んでもよいであろう。更には、ARSモジュール110/111は、配備されたプログラム112のI/O動作を分析するように構成されてもよい。I/O動作は、本開示の別の場所において記述されているコンソールにおけるやり取り及び/又はネットワークトラフィックに基づいたものであってもよい。いくつかの実施形態においては、配備されたプログラム112の脆弱性を分析するステップ及びI/O動作を分析するステップは、配備されたプログラム112が稼働中である間に実行されてもよい。
ARSモジュール110/111は、配備されたプログラム112の入出力(I/O)動作を分析してもよい。いくつかの実施形態においては、I/O動作は、配備されたプログラムとの間におけるユーザーのコンソールにおけるやり取り及び/又は配備されたプログラム112との間において通信されたネットワークトラフィックを含んでもよい。ネットワークトラフィックは、ARSモジュール110/111によってキャプチャされてもよい。配備されたプログラム112の脆弱性を見出すべく、ARSモジュール110/111は、入力及び入力を処理した結果得られる応答を発見及び/又は収集するように構成されてもよい。ARSモジュール110/111は、配備されたプログラム112に対する入力を発見してもよく、且つ、入力のいずれが、配備されたプログラム112の脆弱性を含む応答をトリガする(引き起こす)のか(負の入力)、並びに、入力のいずれが、配備されたプログラム112の脆弱性を含んでいない応答をトリガするのか(正の入力)、を判定してもよい。
入力は、複数の調査技法及び/又はI/O動作を使用することにより、発見されてもよい。いくつかの実施形態においては、複数の調査技法は、2つ以上の調査技法を含んでもよく、これらは、BPUAのシンボリック実行プロセス、未知のプログラム動作用のサイドチャネル入力生成プロセス、及び配備されたプログラム112の状態機械を抽象的レベルにおいてキャプチャするように構成されたステートフルモデル生成プロセスを含んでもよい。
負の入力、正の入力、並びに、負の入力及び正の入力によってトリガされた応答に基づいて、ARSモジュール110/111は、配備されたプログラム112用のパッチを開発してもよい。パッチは、脆弱性を含む応答をトリガすることなしに負の入力の少なくともいくつかを処理するべく配備されたプログラム112を変更してもよい。ARSモジュール110/111は、配備されたプログラム112に対してパッチを自動的にディスパッチしてもよい。
いくつかの実施形態においては、入力及び応答は、試験ケースとして試験データベース内において保存されてもよい。試験ケースは、正の試験ケースと負の試験ケースを含んでもよい。正の試験ケースは、正の入力及び関連付けられた応答に基づいたものであってもよい。負の試験ケースは、負の入力及び関連付けられた応答に基づいたものであってもよい。ARSモジュール110/111は、試験ケースに基づいてパッチを試験及び開発してもよい。
本開示の範囲を逸脱することなしに、変更、追加、又は省略がシステム100に対して実施されてもよい。例えば、本開示は、外部演算システム104のうちの1つ又は複数、1つ又は複数のクラウドサーバー106、1つ又は複数の配備されたプログラム112を有する1つ又は複数の演算システム102、又はこれらの任意の組合せを含みうるシステムに対して適用されてもよい。
更には、本明細書において記述されている実施形態における様々なコンポーネントの分離は、分離がすべての実施形態において発生することを示すべく意図されたものではない。記述されているコンポーネントは、本開示の利益を伴って、単一のコンポーネントとして1つに統合されてもよく、或いは、複数のコンポーネントに分離されてもよいものと理解されたい。
図2は、例示用の演算(計算)装置200を示している。演算装置200は、配備されたプログラム112の脆弱性分析のために構成されてもよい。演算装置200は、1つ又は複数のプロセッサ224、メモリ222、ARSモジュール110/111を含むデータストレージ202を含んでもよく、且つ、配備されたプログラム112、通信ユニット226、及びコンソール201を含んでもよい。演算装置200は、図1の演算システム102に対応したものであってもよい。更には、演算装置200は、図1の外部演算システム104及び/又はクラウドサーバー106に実質的に類似したものであってもよい。
プロセッサ224は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な特殊目的又は汎用コンピュータ、演算エンティティ、又は処理装置を含んでもよく、且つ、任意の適用可能なコンピュータ可読ストレージ媒体上において保存された命令を実行するように構成されてもよい。例えば、プロセッサ224は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(Digital Signal Processor:DSP)、ASIC、FPGA、又はプログラム命令を解釈及び/又は実行すると共に/又はデータを処理するように構成された任意のその他のデジタル又はアナログ回路を含んでもよい。
図2には、単一のプロセッサとして示されているが、プロセッサ224は、個別に又は集合的に本開示において記述されている任意の数の動作を実行するように構成された任意の数のプロセッサを含んでもよいことを理解されたい。更には、プロセッサ224のうちの1つ又は複数は、1つ又は複数の異なる電子装置上において存在してもよい。いくつかの実施形態においては、プロセッサ224は、プログラム命令を解釈及び/又は実行してもよいと共に/又は、メモリ222、データストレージ202、又はメモリ222、並びに、データストレージ202内において保存されたデータを処理してもよい。いくつかの実施形態においては、プロセッサ224は、データストレージ202からプログラム命令をフェッチしてもよく、且つ、プログラム命令をメモリ222内に読み込んでもよい。プログラム命令がメモリ222内に読み込まれた後に、プロセッサ224は、プログラム命令を実行してもよい。
メモリ222及びデータストレージ202は、その上に保存された状態においてコンピュータ実行可能命令又はデータ構造を担持するか又は有するコンピュータ可読ストレージ媒体を含んでもよい。このようなコンピュータ可読ストレージ媒体は、プロセッサ224などの汎用又は特殊目的コンピュータによってアクセスされうる任意の利用可能な媒体を含んでもよい。限定ではなく、例として、このようなコンピュータ可読ストレージ媒体は、ランダムアクセスメモリ(Random Access Memory:RAM)、読出し専用メモリ(Read−Only Memory:ROM)、電気的に消去可能なプログラム可能な読出し専用メモリ(Electrically Erasble Programmble Read−Only Memory:EEPROM)、コンパクトディスク読出し専用メモリ(Compact Disc Read−Only Memory:CD−ROM)、又はその他の光学ディスクストレージ、磁気ディスクストレージ、又はその他の磁気ストレージ装置、フラッシュメモリ装置(例えば、半導体メモリ装置)、又はコンピュータ実装可能命令又はデータ構造の形態において望ましいプログラムコードを担持又は保存するように使用されてもよいと共に汎用又は特殊目的コンピュータによってアクセスされうる任意のその他のストレージ媒体を含む有体の又は一時的ではないコンピュータ可読ストレージ媒体を含んでもよい。又、上述のものの組合せも、コンピュータ可読ストレージ媒体の範囲に含まれうる。コンピュータ実行可能命令は、例えば、プロセッサ224に特定の動作又は動作のグループを実行させるように構成された命令及びデータを含んでもよい。
通信ユニット226は、通信を送受信するように構成された1つ又は複数のハードウェアを含んでもよい。いくつかの実施形態においては、通信ユニット226は、その他の通信ハードウェアに加えて、アンテナ、有線ポート、及び変調/復調ハードウェアのうちの1つ又は複数を含む。具体的には、通信ユニット226は、演算装置200の外部から通信を受信し、且つ、通信をプロセッサ224に提示し、或いは、プロセッサ224からの通信を別の装置又はネットワーク(例えば、図1のネットワーク140)に送信するように、構成されてもよい。
コンソール201は、情報を演算装置200に入力し、且つ、通信を表示するか又は演算装置200のユーザーにその他の方法で通知するように構成された1つ又は複数のハードウェアを含んでもよい。いくつかの実施形態においては、コンソール201は、その他のハードウェア装置に加えて、スピーカ、マイクロフォン、ディスプレイ、キーボード、及びタッチスクリーンのうちの1つ又は複数を含んでもよい。これらの及びその他の実施形態においては、コンソール201は、演算装置200のユーザーから入力を受け取るように構成されてもよい。
ARSモジュール110/111は、データストレージ202内において保存されたプログラム命令を含んでもよい。プロセッサ224は、ARSモジュール110/111をメモリ222内に読み込みと共にARSモジュール110/111を実行するように構成されてもよい。ARSモジュール110/111を実行する際に、プロセッサ224は、本開示の別の場所において記述されているソフトウェア脆弱性を見出すと共にパッチ処理するステップを含みうる脆弱性分析の動作を実行するように構成されてもよい。
同様に、配備されたプログラム112は、データストレージ202内において保存されたプログラム命令を含んでもよい。プロセッサ224は、配備されたプログラム112をメモリ222内に読み込むと共に配備されたプログラム112を実行するように構成されてもよい。ARSモジュール110/111を実行する際には、プロセッサ224は、配備されたプログラム112によって制御されるように、動作を実行するべく構成されてもよい。演算装置200のいくつかの実施形態においては、配備されたプログラム112は、データストレージ202内において含まれていなくてもよい。これらの及びその他の実施形態においては、ARSモジュール110/111は、通信ユニット226、プロセッサ224、メモリ222、コンソール201、又はこれらのなんらかの組合せを使用することにより、配備されたプログラム112とインターフェイスするように構成されてもよい。
本開示に鑑み、本開示の範囲を逸脱することなしに、変更、追加、又は省略が演算装置200に対して実施されうることを理解されたい。例えば、いくつかの実施形態においては、演算装置200は、コンソール201を含まなくてもよい。いくつかの実施形態においては、演算装置200の様々なコンポーネントは、物理的に別個であってもよいと共に/又は、任意の適切なメカニズムを介して通信自在に結合されてもよい。例えば、データストレージ202は、プロセッサ224、メモリ222、及びストレージ装置に通信自在に結合された通信ユニット226を含むサーバーとは別個のストレージ装置の一部分であってもよい。
図3は、図1及び図2のシステム100内において実装されうるARSモジュール110/111の例示用のアーキテクチャ300を示している。ARSモジュール110/111は、負の入力を発見すると共に、負の入力が脆弱性を含む応答を結果的にもたらさないように、配備されたプログラム112を変更するパッチを開発するように構成されてもよい。次いで、ARSモジュール110/111は、パッチをディスパッチしてもよく、このパッチは、配備されたプログラム112内において実装されてもよい。
図3の実施形態においては、図示のアーキテクチャ300は、バイナリ分析モジュール350と、調整器340と、パッチモジュール352と、試験ケースデータベース(図3においては、「試験ケースDB」)354と、を含んでもよい。バイナリ分析モジュール350は、入力を発見するように構成されてもよく、入力は、負の入力と正の入力を含んでもよい。パッチモジュール352は、パッチを開発、試験、及びディスパッチするように構成されてもよい。調整器340は、バイナリ分析モジュール350及び/又はパッチモジュール352を同期化するか又はその他の方法で制御しうる調整動作及び制御動作を実行するように構成されてもよい。
バイナリ分析モジュール350は、配備されたプログラム112のI/O動作を分析するように構成されてもよい。I/O動作は、配備されたプログラム112との間におけるコンソール201から受け取られたユーザーのコンソールにおけるやり取り及び/又は外部演算システム104と配備されたプログラム112の間において伝達されうるネットワークトラフィック360(図3においては、「トラフィック」)を含んでもよい。いくつかの実施形態においては、コンソールにおけるやり取りは、ネットワークトラフィック360に含まれてもよい。
I/O動作の分析は、入力及び関連付けられた応答の発見を含んでもよい。入力は、正の入力と負の入力を含んでもよい。更には、I/O動作は、入力のうちのより多くを発見するべくバイナリ分析モジュール350において実装された1つ又は複数の調査技法によって使用されてもよい。
バイナリ分析モジュール350は、分析対象のバイナリプログラム(BPUA)314を分析するように更に構成されてもよい。BPUA314は、配備されたプログラム112から導出されてもよい。BPUA314は、配備されたプログラム112のバイナリ表現を含んでもよい。バイナリ形態の配備されたプログラム112などのBPUA314の使用を通じて、ARSモジュール110/111は、配備されたプログラム112が記述されているプログラミング言語とは無関係に、実装されてもよい。
BPUA314は、配備されたプログラム112のローカルコピーを含んでもよい。例えば、ARSモジュール110/111は、演算システム102上に読み込まれたローカルARSモジュール110を含んでもよい。又、配備されたプログラム112は、例えば、演算システム102上などにおいて、ローカルに、読み込まれてもよく、且つ、動作してもよい。ARSモジュール110/111がクラウドARSモジュール111を含む実施形態においては、ARSモジュール110/111は、配備されたプログラム112が演算システム102上において動作している最中に、クラウドサーバー106上において動作してもよい。
BPUA314は、バイナリ分析モジュール350によって受け取られてもよい。次いで、バイナリ分析モジュール350は、負の入力及び正の入力である配備されたプログラム112に対する入力を発見するべく、BPUA314を分析してもよい。ARSモジュール110/111は、入力の発見及びファジングを使用することにより、正しい及び正しくない動作を推定するように構成されてもよい。ファジングは、無効な、予測されていない、或いは、ランダムなデータを入力として提供するステップを含みうるランダム試験の1つのタイプである。
更には、ARSモジュール110/111は、応答に基づいて、入力/出力マップの集合体を構築してもよい。例えば、配備されたプログラム112をクラッシュさせる入力に応答して、ARSモジュール110/111は、負の試験ケースを構築してもよい。同様に、配備されたプログラム112をクラッシュさせない入力に応答して、ARSモジュール110/111は、正の試験ケースを構築してもよい。負の試験ケース及び正の試験ケースは、試験ケースデータベース354を介してパッチモジュール352に提供されてもよい。
負の入力及び負の入力の処理から結果的に得られる応答は、試験ケースデータベース354内において負の試験ケースとして保存されてもよい。正の入力及び正の入力の処理の結果として得られる応答は、試験ケースデータベース354内において正の試験ケースとして保存されてもよい。負の試験ケース及び正の試験ケースは、入力−出力試験の組を形成するべく、組み合わせられてもよい。
試験ケースデータベース354は、図2を参照して説明されたメモリ222などの任意の適切な電子ストレージ媒体を含んでもよい。試験ケースデータベース354及びその上において保存された情報(例えば、試験ケース)には、ARSモジュール110/111によるアクセスが可能であってもよい。図示の実施形態においては、試験ケースデータベース354は、演算システム102又はクラウドサーバー106に含まれている。いくつかの実施形態においては、試験ケースデータベース354は、ネットワーク140を介してアクセス可能なリモートデータベースを含んでもよい。
パッチモジュール352は、負の入力のうちの1つ又は複数用のパッチを開発するように構成されてもよい。パッチモジュール352は、試験ケースデータベース354内に保存されている試験ケースに基づいてパッチを開発してもよい。いくつかの実施形態においては、フィットネス関数が、正の試験ケース及び負の試験ケースに基づいて生成されてもよい。フィットネス関数は、配備されたプログラム112が、目的の実現に対してどれだけ近接しているのか(例えば、1つ又は複数の脆弱性によって応答しない)を要約する目的関数を含んでもよい。フィットネス関数に基づいて、パッチが開発されてもよい。例えば、パッチは、フィットネス関数及び遺伝的プログラミングに基づいた配備されたプログラム112に対する変化過程を含んでもよい。遺伝的プログラミングは、配備されたプログラム112を変更する生物学的進化に類似した進化的なタイプの方法を含んでもよい。
パッチモジュール352は、試験ケースデータベース内の負の試験ケース及び/又は正の試験ケースを使用することにより、開発されたパッチを試験してもよい。いくつかの実施形態においては、パッチモジュール352は、試験ケースに基づいて既存の機能を可能な最良の程度に維持しつつ配備されたプログラム112用のパッチを開発するべく、バイナリ分析モジュール350によって生成される試験ケースを使用してもよい。例えば、パッチモジュール352は、新しい負の入力が生成されないか又は正の入力が負の入力になるように、パッチが、配備されたプログラム112を変更しない尤度を保証又は低減してもよい。
パッチモジュール352は、配備されたプログラム112にパッチをディスパッチしてもよい。図示の実施形態においては、パッチは、パッチ処理済みのBPUA364を含んでもよい。パッチ処理済みのBPUA364は、配備されたプログラム112に組み込まれてもよい。新しいBPUA(例えば、BPUA314)が、パッチ処理済みのBPUA364が組み込まれた配備されたプログラム112から導出されてもよい。バイナリ分析モジュール350は、新しいBPUA314の脆弱性分析を実行してもよい。パッチは、人間のやり取りを伴うことなしに、或いは、場合によっては、ユーザーの知識さえも伴うことなしに、配備されたプログラム112のローカルコピーに対してディスパッチされてもよい。
調整器340は、ハウスキーピング機能を実行するように構成されてもよい。例えば、調整器340は、アーキテクチャ300のコンポーネント(例えば、後述する342、304、306、400、310、302、308、326、320、400、及び324)をチェックしてもよく、これには、心拍などの周期的な同期化信号が伴ってもよい。調整器340は、必要に応じて、コンポーネントを再起動してもよい。いくつかの実施形態においては、調整器340は、ARSモジュール110/111又はそのコンポーネントをスクリプトを介して調整してもよい。図示の実施形態においては、ARSモジュール110/111は、破線303を伴うボックス内において示されている。ARSモジュール110/111がクラウドARSモジュール111である実施形態においては、ARSモジュール110/111は、クラウドサーバー106上に読み込まれてもよく、且つ、配備されたプログラム112、BPUA314、及びパッチ処理済みのBPUA364は、演算システム102に読み込まれると共に/又は伝達されてもよい。従って、これらの及びその他の実施形態においては、破線303は、クラウドサーバー106と演算システム102の間の物理的分離を表してもよい。
ARSモジュール110/111がローカルARSモジュール110を含む実施形態においては、クラウドサーバー106は、システム100から省略されてもよい。BPUA、配備されたプログラム112、パッチ処理済みのBPUA364は、演算システム102に読み込まれてもよい。従って、これらの及びその他の実施形態においては、破線303は、物理的分離を表さなくてもよい。
図4は、図3のARSモジュール110/111の例示用のアーキテクチャ300の詳細図を示している。図4の実施形態は、バイナリ分析モジュール350、調整器340を伴うパッチモジュール352、及び試験ケースデータベース354の例を含む。バイナリ分析モジュール350は、BPUA314の入力空間を理解すると共に、配備されたプログラム112の脆弱性を結果的にもたらす入力を発見するべく、2つ以上の異なる調査技法を使用してもよい。更には、バイナリ分析モジュール350は、その時点までに学習されたBPUA314のI/O動作を抽象的レベルにおいて表す入力−出力状態機械モデル(ステートフルモデル)を開発してもよい。ステートフルモデルは、新しい情報が推定又は発見されるのに伴って、継続的に更新されてもよい。バイナリ分析モジュール350は、入力が負の入力であるのか又は正の入力であるのかを判定し、且つ、正の試験ケース及び負の試験ケースを試験ケースデータベース354内において保存する。試験ケースに基づいて、フィットネス関数が生成され、これらのフィットネス関数は、パッチを開発するべく使用される。パッチモジュール352は、既存の機能を可能な最良の程度に維持しつつ配備されたプログラム112用のパッチを開発するために、ステートフルモデル及び/又はフィットネス関数を使用してもよい。
バイナリ分析モジュール350は、制御フローグラフ(Control Flow Graph:CFG)/.dataモジュール308(図4において、「CFG/.data」)、パケットキャプチャモジュール302、シンボリック実行エンジン310、有効入力生成器400、状態機械生成器306、入力ファインダ304、ファザー312、及び脆弱性生成器342を含んでもよい。
入力空間は、少なくとも部分的に入力ファインダ304及びシンボリック実行エンジン310を使用することにより、調査されてもよい。入力ファインダ340は、サイドチャネル情報を使用してBPUA314が受け入れる入力を発見する入力発見技法を実装してもよい。例えば、いくつかの実施形態においては、入力ファインダ304は、米国特許出願第14/620,106号明細書に記述されているように実質的に動作してもよく、この特許文献の内容は、引用により、そのすべてが本明細書に包含される。これに加えて、又はこの代わりに、入力ファインダ304は、2015年6月6日付けで出願された米国特許出願第14/792,507号明細書に記述されているように実質的に動作してもよく、この特許文献の内容は、引用により、そのすべてが本明細書に包含される。入力ファインダ304は、入力及び応答を状態機械生成器306及び/又は有効入力生成器400に伝達してもよい。
シンボリック実行エンジン310は、シンボリック実行フレームワークを実装してもよい。シンボリック実行フレームワークは、入力を発見するべく、例えば、ホワイトボックスファジング又はスマートファジング技法及びテイント分析を使用してもよい。シンボリック実行エンジン310は、BPUA314、制御フローグラフ(CFG)、.dataフィールドの分析、或いは、これらのなんらかの組合せを受け取るように構成されてもよい。CFG及び/又は.dataフィールドの分析は、BPUA314に対する入力のいずれの部分をシンボリックとするのかを判定するべく使用されてもよい。シンボリック実行エンジン310は、BPUA314のシンボリック実行を実行してもよい。シンボリック実行を使用することにより、配備されたプログラム112を特定の経路に沿って駆動する経路制約及び入力を判定してもよい。更には、シンボリック実行エンジン310は、BPUA314のコンコリックモード(concolic mode)を実行してもよい。コンコリックモードにおいては、シンボリック実行エンジン310は、1つ又は複数の試験ケースを生成してもよい。
シンボリック実行エンジン310は、入力及び/又は応答を出力してもよい。例えば、BPUA314のシンボリック実行は、関連付けられた応答と共に負の入力及び正の入力を発見しうる。シンボリック実行エンジン310は、入力及び関連付けられた応答を有効入力生成器400及び/又は状態機械生成器306に伝達するように構成されてもよい。状態機械生成器306は、入力及び応答に基づいてステートフルモデルを更新してもよい。有効入力生成器400は、配備されたプログラムをより深い状態に駆動して脆弱性を結果的にもたらしうる更なる入力を調査するべく、入力及び関連付けられた応答を使用してもよい。状態機械生成器306及び有効入力生成器400のいくつかの更なる詳細は、以下において提供される。
いくつかの実施形態においては、シンボリック実行は、テイント分析のために使用されてもよい。例えば、プログラム入力をシンボリック/コンコリックとマーキングし、且つ、配備されたプログラム112をコンコリックに実行することにより、入力データを潜在的なプログラム場所まで伝播させてもよい。ARSモジュール110/111は、潜在的なプログラム場所における変数/レジスタがシンボリックであるか又は非シンボリックであるのかをチェックしてもよく、これにより、変数/レジスタが汚染されているかどうかを判定してもよい。変数/レジスタがシンボリックであると共に汚染されている場合には、シンボリック実行エンジン310は、変数/レジスタのシンボリック表現の分析を通じて汚染源を発見してもよい。この情報により、発見的方法を適用し、配備されたプログラム112をファジングするようにファザー312を案内することにより、脆弱性をトリガしてもよい。
いくつかの実装形態においては、発見的方法又はその他のアドオンプラグインが、S2Eなどの選択的シンボリック実行エンジンの上部に構築されてもよい。選択的シンボリック実行エンジンは、経路調査を潜在的な脆弱性場所に向かって案内し、クラッシュをトリガし、且つ、負の入力を生成するべく、ファザー312をサポートしてもよく、且つ、目標とするサーチ方式を実行してもよい。
パケットキャプチャモジュール302は、ネットワークトラフィック360などのI/O動作から入力を発見するべく、パケットキャプチャ(PCAP)ファイルを解析してもよい。パケットキャプチャモジュール302は、ネットワークパケットをキャプチャすると共に/又はパケットキャプチャファイルを読み取るように構成されてもよい。ネットワークパケットのキャプチャ及び/又はパケットキャプチャファイルの読取りに基づいて、パケットキャプチャモジュール302は、パケット情報を生成してもよい。パケット情報は、状態機械生成器306に伝達されてもよい。状態機械生成器306は、パケット情報をステートフルモデルに内蔵してもよい。
いくつかの実施形態においては、パケットキャプチャモジュール302は、BPUA314のI/O動作について、提供されたPCAPファイルを分析してもよく、且つ、BPUA314の初期ステートフルモデルを構築してもよい。実装形態がネットワーク(例えば、図1の140)上におけるBPUA314との間のリアルタイムのやり取りを含んでいる場合には、パケットキャプチャモジュール302は、パケットのリアルタイムキャプチャを実行すると共にリアルタイムのキャプチャから動作を推定するべく、ワイヤシャーク(wirechark)などのフレームワークを起動してもよい。
CFG/.dataモジュール308は、BPUA314を受け取るように構成されてもよい。CFG/.dataモジュール308は、BPUA314内の.dataフィールドを分析するように構成されてもよい。.dataフィールドの分析に基づいて、CFG/.dataモジュール308は、CFGを生成するように構成されてもよい。CFGは、BPUA314のメモリ場所や変数などのような情報を含んでもよい。CFG/.dataモジュール308は、.data分析及び/又はCFGを状態機械生成器306及び/又はシンボリック実行エンジン310に伝達してもよい。
状態機械生成器306は、CFG、.dataフィールドの分析、入力ファインダ304からの入力及び応答、シンボリック実行エンジン310からの入力及び応答、及びパケット情報から、ステートフルモデルを生成するように構成されてもよい。例えば、状態機械生成器306は、配備されたプログラムの状態機械を抽象的レベルにおいてキャプチャするステートフルモデルを生成するように構成されてもよい。状態機械生成器306は、入力及び応答が発見されると共に/又はパッチが開発及びディスパッチされるのに伴って、ステートフルモデルを増分的な方式で生成するように構成されてもよい。
いくつかの実施形態においては、状態機械生成器306は、入力及び/又は入力に対する応答のうちの1つ又は複数を含んでもよく、或いは、これらを発見するべく使用されてもよい。入力及び応答は、有効入力生成器400によってアクセス可能であってもよく、或いは、これに対して伝達されてもよい。
更には、いくつかの実施形態においては、状態機械生成器306は、BPUA314のプロトコルを表すステートフルモデルを生成してもよい。ステートフルモデルは、パケットキャプチャモジュール302によって生成された情報から、又はPCAPファイルの形態の提供されたネットワークトレースから、生成されてもよい。例えば、状態機械生成器306の引数は、ReverXツールを含んでもよく、これについては、Joao Antunes, N.F.(2011). ReverX: Reverse Engineering of Protocols. Lisbon: LASIGE, University of Lisboa, Portugalに記述されており、この内容は、引用により、そのすべてが本明細書に包含される。
状態機械生成器306は、入力及び出力メッセージの両方をキャプチャしうるステートフルモデルを推定してもよい。パケットは、実行の際に動的にキャプチャされてもよいことから、状態機械生成器306は、ステートフルモデルを継続的に改善してもよい。更には、CFGを活用することにより、ステートフルモデルの生成をサポートしてもよい。この結果、推定された状態機械とステートフルモデルのプログラム構造の両方を使用し、ファザー312を案内してもよい。
状態機械生成器306の機能は、入力ファインダ304、シンボリック実行エンジン310、状態機械生成器306、及びパケットキャプチャモジュール302によって発見された入力によってステートフルモデルを更新するステップを含んでもよい。いくつかの実施形態においては、状態機械生成器306は、入力ファインダ304、シンボリック実行エンジン310、状態機械生成器306、又はパケットキャプチャモジュール302によって発見された入力の間において選択してもよい。状態機械生成器306は、その時点まで構築済みであるステートフルモデルに更なる詳細を追加するべく入力を選択してもよい。そして、シンボリック実行エンジン310には、プログラム実行がホワイトボックスファジングを介して更に深い状態まで駆動されうるように、有効入力生成器400により、発見された入力が提供されてもよい。
更に深いプログラム状態において、更なる負の入力及び脆弱性が発見されてもよい。更には、状態機械生成器306の機能は、入力ファインダ304が新しいプログラム状態に移行すると共に新しいプログラム状態において新しい入力を学習できるようにするべく、入力情報を入力ファインダ304に提供するステップを含んでもよい。
有効入力生成器400は、入力及び関連づけられた応答を入力ファインダ304、シンボリック実行エンジン310、及び状態機械生成器306から受け取るように構成されてもよい。入力ファインダ304、シンボリック実行エンジン310、及び状態機械生成器306のそれぞれからの入力及び応答は、異なってもよい。例えば、入力ファインダ304によって発見された第1入力及び応答は、状態機械生成器306によって発見されたステートフルモデルに含まれていなくてもよく、且つ、この逆も又同様である。従って、有効入力生成器400は、任意の差に基づいて、1つ又は複数のメッセージを入力ファインダ304、シンボリック実行エンジン310、及び状態機械生成器306に伝達してもよい。有効入力生成器400のいくつかの更なる詳細は、図5を参照して提供される。
いくつかの実施形態においては、有効入力生成器400によって伝達されるメッセージのうちの1つは、ファザー312に対するメッセージを含んでもよい。ファザー312は、正及び/又は負の入力のランダムな変化過程を生成するように構成されてもよい。特定の更なる入力は、入力のタイプに基づいたものであってもよい。例えば、正の入力が、191などの数値タイプの入力である場合には、ファザー312は、−191、0、191.000、191×10^10、及びこれらに類似したものなどの更なる入力を生成してもよい。更なる入力は、更なる入力がクラッシュ応答などの脆弱性を含む応答を結果的にもたらすかどうかを調査するべく、BPUA314に伝達されてもよく、且つ、その内部に導入されてもよい。
ファザー312は、部分的入力について使用されてもよい。例えば、入力がコマンド「GET」を含む場合に、ARSモジュール110/111は、コマンド「GET」を進行させるためのなんらかの引数を発見するべく、ファザー312を使用してもよい。従って、ファザー312には、「GET aaaa」が付与されてもよく、且つ、「GET」部分をファジングしない状態において、「aaaa」部分をファジングするように、命令されてもよい。従って、ファザー312は、入力ストリングの脆弱な変化過程を発見するべく、使用されてもよい。ファザーを盲目的に使用するのではなく、有効入力生成器400は、配備されたプログラム112をファジング調査が開始されうる適切な状態に駆動した状態にあってもよい。
脆弱性生成器342は、負の試験ケースを使用し、特定の解決策が特定の目的の実現にどれだけ近接しているのかを要約する目的関数を含む特定のフィットネス関数を生成するように構成されてもよい。特定のフィットネス関数は、特定の負の試験ケースに基づいたものであってもよく、この特定の負の試験ケースには、試験ケースデータベース354からアクセスされてもよい。特定のフィットネス関数は、パッチモジュール352の全体フィットネス関数生成器324に伝達されてもよい。
パッチモジュール352は、ディスパッチャ326、パッチテスタ320、GenProgインスタンス322、及び全体フィットネス関数生成器324を含んでもよい。脆弱性生成器342は、全体フィットネス関数生成器324とインターフェイスしてもよい。全体フィットネス関数生成器324は、脆弱性生成器342の特定のフィットネス関数及び試験ケースデータベース354内に保存された1つ又は複数の正の試験ケースを使用し、全体フィットネス関数388(図4において、「全体FF」)を生成するように構成されてもよい。全体フィットネス関数388は、1つ又は複数のパッチを開発するべく、パッチ生成ツール(GenProg)と共に使用されてもよい。ARSモジュール110/111においては、特定のフィットネス関数は、特定の脆弱性に関係した1つ又は複数の正の試験ケース及び1つ又は複数の負の試験ケースを要約してもよい。
例えば、図示のアーキテクチャ300においては、パッチモジュール352は、「GenProg」というオープンソースフレームワークを使用してパッチを生成してもよい。一般に、GenProgは、配備されたプログラムの試験の組に基づいてパッチを生成する遺伝的プログラミングツールである。試験の組は、配備されたプログラムの正しい及び正しくない動作を提供する。但し、ARSモジュール110/111には、このような組は存在していない。その代わりに、ARSモジュール110/111は、上述の入力発見及びファジングを使用してパッチモジュール352によって使用される試験の組を開発することより、正しい且つ正しくない動作を推定するように構成されてもよい。
全体フィットネス関数388は、GenProgインスタンス322用のガイダンスを提供する。GenProgインスタンス322は、1つ又は複数の脆弱性の全体フィットネス関数388からパッチを開発してもよい。GenProgは、配備されたプログラム112を新しいプログラムに「変化」させるために、遺伝的プログラミングを使用する。全体フィットネス関数388は、これらの変化過程のいずれが、その他のものよりも「よりフィットしている」のかを判定する。ARS110/111の目標は、正の入力のすべてについて正しくポーリングすると共に負の入力のうちの1つ又は複数において脆弱性を含む応答を結果的にもたらさない配備されたプログラム112を得ることを含んでもよい。
図4の実施形態においては、複数のGenProgインスタンス322がパッチモジュール352内に含まれている。複数のGenProgインスタンス322は、並行して動作し、全体フィットネス関数388に基づいて複数のパッチを生成してもよい。いくつかの実施形態においては、1つのGenProgインスタンス322が、パッチモジュール352内に含まれてもよい。
GenProgインスタンス322は、1つ又は複数のパッチをパッチテスタ320に伝達してもよい。パッチテスタ320は、1つ又は複数のパッチの正しさを試験するように構成されてもよい。例えば、パッチテスタ320は、障害耐性、ディスパッチされたプログラム112との間の互換性、タイムアウトなどを試験するように構成されてもよい。1つ又は複数のパッチが試験に合格するのに伴って、パッチテスタ320は、パッチをディスパッチャ326に伝達してもよい。
いくつかの実施形態においては、パッチテスタ320は、試験ケースデータベース354に記録された新しい試験ケースに照らして、生成されたパッチを継続的に評価してもよい。いくつかの入力に基づいて生成されたパッチは、後から観察される入力において障害が発生しうることから、新しい入力が正の入力である場合にも、新しいケースが利用可能となるのに伴って、パッチを更新するのが望ましいであろう。この結果、更新済みのパッチが生成されてもよい。更新済みのパッチは、以前のパッチよりも多くの機能を保持してもよく、且つ、従って、ディスパッチャ326を介してディスパッチされてもよい。GenProgインスタンス322が1つ又は複数の試験において不合格となるのに応答して、パッチテスタ320は、全体フィットネス関数388及びGenProgインスタンス322を開発するために、更に多くの試験ケースが必要とされうるというメッセージを全体フィットネス関数生成器324に伝達してもよい。いくつかの実施形態においては、別の全体フィットネス関数388が生成されてもよい。
これに加えて、又はこの代わりに、パッチテスタ320は、1つ又は複数のパッチの品質を予測するための試験方式を実装してもよい。一般に、GenProgにおける唯一の制約は、提供される試験の組である。ARSモジュール110/111においては、試験の組が試験ケースデータベース354によって置換されている。GenProgインスタンス322を付与することにより、試験ケースデータベース354は、パッチ処理済みのプログラムにいまだ観察されていない入力において障害が発生するという結果をもたらしうる。従って、ARSモジュール110/111は、クロス検証又はホールドアウト技法を使用してもよく、この場合には、試験ケースデータベース354の試験ケースのサブセットが、パッチを生成するべく使用される。次いで、パッチは、観察されていない/使用されていない試験ケースを使用することにより、試験されてもよい。パッチがこれらの観察されていない試験ケースにおいて成功した場合には、それは、パッチが高度にローカライズされており、且つ、従って、その他の観察されていない入力における動作に対して影響を及ぼす可能性が低いことを通知しうる。パッチの品質スコアを判定するべく、コード比較技法を含むその他の技法が使用されてもよい。
ディスパッチャ326は、パッチ処理済みのBPUA(図3において、364)をディスパッチ又は配備するように構成されてもよい。上述のように、ARSモジュール110/111は、パッチを開発し、且つ、パッチ処理済みのBPUAをディスパッチする。配備されたプログラム112及びBPUA314は、BPUAに基づいて更新されてもよい。更新されたBPUAは、BPUA314となる。従って、更新されたBPUAがシンボリックに実行され、更新されたBPUAのCFGが生成され、更新されたBPUAの新しい脆弱性が発見され、以下同様である。従って、ARSモジュール110/111は、BPUA314のパッチ処理及び分析の反復を通じて、配備されたプログラム112を継続的に改善する。パッチは、人間を伴うやり取りを伴うことなしに、或いは、場合によっては、ユーザーの知識さえも伴うことなしに、配備されたプログラム112のローカルコピーに対してディスパッチされてもよい。
いくつかの用途においては、全体フィットネス関数生成器324を使用する際に、時間予算化(time budgeting)の課題が存在する場合がある。例えば、入力の発見は、時間を所要しうる。又、既に発見された脆弱性用のパッチの生成も、時間を所要しうる。相対的に多くの入力が発見される前に、パッチが生成された場合には、そのパッチは、新しい入力において障害が発生しうる。従って、パッチの生成を試みる前に、十分に多くの数の入力が発見される時点まで待つことが望ましいであろう。入力発見のための初期時間が確保されてもよく、且つ、入力発見用の初期時間が経過した後に、パッチが生成されてもよい。パッチ生成時間においては、入力及び脆弱性の発見が進行してもよく、且つ、新しいパッチが、試みられてもよいが、時間の欠如に起因して障害が発生する場合がある。いくつかの実施形態においては、発見的方法により、パッチ開発のために時間を予算化する方式を判定してもよく、その理由は、更なる入力が学習されるのに伴って後から再度獲得されうる機能の喪失という犠牲を払っても、パッチの即時開発が有利でありうるからであり、この結果、相対的に多くの機能を保持するパッチが開発される。
図5は、図1〜図4のARSモジュール110/111において実装されうる例示用の入力発見プロセス550を示している。いくつかの実施形態においては、入力発見プロセス550は、有効入力生成器400によって少なくとも部分的に実装されてもよい。入力発見プロセス550は、未知のバイナリプログラム(例えば、図3のBPUA314)を理解すると共にその脆弱性を見出す能力を増大させうる。
図5を参照して説明されているように、入力ファインダ304、シンボリック実行エンジン310、及び状態機械生成器306は、入力の組510A〜510C(総合的に、入力の組510)を発見するか又はその他の方法で関係付けてもよい。入力の組510に含まれている入力のいくつかは、負の入力であってもよく、且つ、入力の組510に含まれている入力のいくつかは、正の入力であってもよい。複数の方法(例えば、入力ファインダ304、シンボリック実行エンジン310、及び状態機械生成器306)で入力の組510を発見するか又はその他の方法で関係付けることにより、ディスパッチされたプログラム(例えば、図1〜図4の配備されたプログラム112)の複数のタイプの脆弱性が見出されてもよく、且つ、脆弱性についてのパッチが開発されてもよい。例えば、入力ファインダ304のみの使用は、ディスパッチされたプログラムの限られた理解と、従って、限られた数の入力と、を結果的にもたらしうる。但し、入力ファインダ304及び状態機械生成器306を使用することにより、ディスパッチプログラムの更に完全な理解が得られることになり、且つ、脆弱性の多くのものが見出されると共にパッチ処理されうる。
更には、入力ファインダ304、シンボリック実行エンジン310、及び状態機械生成器306のうちの1つによって発見された入力の組510の入力は、導出された入力と呼称される更なる入力を発見するべく、入力ファインダ304、シンボリック実行エンジン310、及び状態機械生成器306のうちの別のものにおいて使用されてもよい。導出された入力は、後続の入力の組に含まれてもよい。
例えば、有効入力生成器400は、シンボリック実行プロセスにおいてシンボリック実行エンジン310において発見された入力の第1の組510Aを受け取ってもよい。更には、有効入力生成器400は、未知のプログラム動作識別プロセス用のサイドチャネル入力生成において入力ファインダ304において発見された入力の第2の組510Bを受け取ってもよく、且つ、ステートフルモデル生成プロセスからの状態機械生成器306によって関係付けられた入力の第3の組510Cを受け取ってもよい。有効入力生成器400は、入力の組510を比較し、入力のいずれが入力の組510のすべてに含まれていないのかを判定してもよい。次いで、有効入力生成器400は、すべての入力の組510に含まれていない入力を状態機械生成器306、入力ファインダ304、又はシンボリック実行エンジン310に転送してもよく、そこで、導出された入力が発見されてもよい。
例えば、入力の第2の組510Bから除外されている入力のいずれかについて、プレフィックスの組502が生成されてもよい。入力のプレフィックスの組502は、入力ファインダ304に伝達されてもよい。入力ファインダ304は、サイドチャネル入力生成において、1つ又は複数の導出された入力を発見するための基礎としてプレフィックスの組502を使用してもよい。例えば、入力は、「com par arg1 arg2」を含んでもよい。入力が入力ファインダ304によって見出されていない場合に、有効入力生成器400は、{”com”,”com par”,”com par arg1”,”com par arg1 arg2”}を含みうるプレフィックスの組502を生成してもよい。プレフィックスの組502は、入力ファインダ304に伝達されてもよい。
入力ファインダ304は、入力タイプ512をシンボリック実行エンジン310に伝達してもよい。入力タイプ512のうちの1つ又は複数は、プレフィックスの組502に基づいたものであってもよい。
更には、入力の第1の組510Aから除外されている入力のうちの1つ又は複数(省略された入力504)は、状態機械生成器306に伝達されてもよく、そこで、省略された入力504は、ステートフルモデルに内蔵されてもよい。状態機械生成器306は、1つ又は複数の入力511をシンボリック実行エンジン310に更に伝達してもよい。入力511のうちの1つ又は複数は、ステートフルモデルに基づいたものであってもよい。
更には、有効入力生成器400は、入力の組510の入力のいずれをファザー入力520に含めるべきかを判定してもよい。有効入力生成器400は、ファザー入力520をファザー312に伝達してもよい。次いで、図4を参照して説明されているように、ファザー312は、調査されうる更なる入力を生成してもよい。更なる入力及び更なる入力から結果的に得られる応答は、(例えば、正又は負の)試験ケースとして試験ケースデータベース354内において保存されてもよい。ファザー入力520は、上述のように部分的な入力であってもよい。又、有効入力生成器400は、BPUA314と直接的にやり取りしてもよい。
図6A及び図6Bは、本明細書において記述されている少なくとも1つの実施形態に従って構成された配備されたプログラムの脆弱性分析の方法600のフローチャートを示している。方法600は、図1及び図2を参照して説明した演算システム102及びARSモジュール110/111などのそのなんからのコンポーネントにより、実行されてもよい。いくつかの実施形態においては、演算システム102又は別の演算装置は、演算装置及び/又は演算システム102に方法600を実行させるべく(図2のプロセッサ224のような)プロセッサによって実行可能であるプログラムコード又は命令をその上において保存された状態で有する一時的はない(例えば、図2のメモリ222などの)コンピュータ可読媒体を含んでもよく、或いは、これに対して通信自在に結合されてもよい。これに加えて、又はこの代わりに、演算システム102は、演算システム102又は別の演算装置に方法600を実行させるべくコンピュータ命令を実行するように構成された上述のプロセッサ224を含んでもよい。別個のブロックとして示されているが、様々なブロックは、望ましい実装形態に応じて、更なるブロックに分割されてもよく、更に少ない数のブロックに組み合わせられてもよく、或いは、除去されてもよい。
図6Aを参照すれば、方法600は、ブロック602において始まっており、ここで、BPUAが受け取られてもよい。BPUAは、配備されたプログラムから導出されてもよい。ブロック604において、配備されたプログラムのI/O動作が分析されてもよい。I/O動作は、配備されたプログラムとの間におけるユーザーのコンソールにおけるやり取り及び配備されたプログラムとの間において通信されてキャプチャされたネットワークトラフィックを含んでもよい。ブロック606において、ステートフルモデルが開発されてもよい。ステートフルモデルは、その時点までに学習されたBPUAのI/O動作を抽象的なレベルにおいて表してもよい。ステートフルモデルは、遺伝的プログラミングに基づいた修復フレームワークを使用したパッチ開発の基礎であってもよい。
ブロック608において、配備されたプログラムに対する入力が発見されてもよい。入力は、BPUAに対する2つ以上の調査技法の適用及びI/O動作の分析に基づいて発見されてもよい。いくつかの実施形態においては、入力は、シンボリック実行プロセスにおいて発見された入力の第1組、サイドチャネル入力生成において発見された入力の第2の組、及びステートフルモデル生成プロセスからの入力の第3の組を受け取ることにより、発見されてもよい。入力の第1の組、入力の第2の組、及び入力の第3の組を比較し、入力のいずれが入力の第1の組、入力の第2の組、及び入力の第3の組のすべてに含まれていないのかを判定してもよい。入力の第2の組から除外されている入力のうちの1つ又は複数について、方法600は、除外されている入力のプレフィックスの組を生成するステップを含んでもよい。プレフィックスの組は、サイドチャネル入力生成において、1つ又は複数のその他の入力を発見するための基礎として使用されてもよい。入力の第1の組から除外されている入力のうちの1つ又は複数について、方法600は、除外されている入力をステートフルモデルに内蔵するステップを含んでもよい。
ブロック610において、1つ又は複数のファザーを使用することにより、追加の入力が発見されてもよい。ブロック612において、入力のいずれが負の入力であるのかが判定されてもよい。ブロック614において、追加の入力のいずれが負の入力であるのかが判定されてもよい。ブロック616において、入力のいずれが正の入力であるのかが判定されてもよい。いくつかの実施形態においては、脆弱性は、メモリ破壊エラー、バッファオーバーフロー、ソフトウェアクラッシュ、及び演算エラーを含んでもよい。
いくつかの実施形態においては、調査技法は、BPUAのシンボリック実行プロセス、未知のプログラム動作用のサイドチャネル入力生成プロセス、及び抽象的レベルにおいて配備されたプログラムの状態機械をキャプチャするように構成されたステートフルモデル生成プロセス、或いは、これらのなんらかの例を含んでもよい。状態機械は、その時点までに学習されたBPUAのI/O動作を抽象的レベルにおいて表してもよい。状態機械モデルは、遺伝的プログラミングに基づいた修復フレームワークを使用したパッチ開発の基礎である。
ブロック618において、負の入力及び正の入力が、配備されたプログラム内においてトリガされた応答と関連付けられてもよい。応答は、負の入力の導入を通じて特定されてもよく、且つ、正の入力が調査技法に導入される。ブロック620において、負の入力の1つ又は複数及び関連付けられた応答が、負の試験ケースとして試験データベース内において保存されてもよい。ブロック622において、正の入力の1つ又は複数及び関連付けられた応答が、正の試験ケースとして試験データベース内において保存されてもよい。
ブロック624において、フィットネス関数が生成されてもよい。フィットネス関数は、正の試験ケース及び負の試験ケースに基づいたものであってもよい。ブロック626において、配備されたプログラム用のパッチが開発されてもよい。パッチは、負の入力及びトリガされた応答に基づいて、配備されたプログラム用に開発されてもよい。パッチは、脆弱性を含む応答をトリガすることなしに負の入力の少なくともいくつかを処理するべく配備されたプログラムを変更するように構成されてもよい。パッチは、フィットネス関数及び遺伝的プログラミングに基づいた配備されたプログラムに対する変化過程を含んでもよい。ブロック628において、パッチが試験されてもよい。例えば、パッチは、正の試験ケース及び負の試験ケースを使用することにより、試験されてもよい。ブロック630において、配備されたプログラムに対してパッチを自動的にディスパッチするステップが発生している。いくつかの実施形態においては、パッチは、配備されたプログラムにパッチを自動的にディスパッチする前に、試験されてもよい。いくつかの実施形態においては、I/O動作の分析、入力の発見、入力の導入、判定、パッチの開発、及びディスパッチは、配備されたプログラムが稼働している間に実行されてもよい。
当業者は、本明細書に開示されているこの及びその他の手順及び方法の場合に、プロセス及び方法において実行されている機能は、異なる順序で実装されうることを理解するであろう。更には、概説されたステップ及び動作は、例として提供されたものに過ぎず、且つ、ステップ及び動作のうちのいくつかは、開示された実施形態から逸脱することなしに、任意選択であってもよく、更に少ない数のステップ及び動作に組み合わせられてもよく、或いは、更なるステップ及び動作に拡張されてもよい。
本明細書において記述されている実施形態は、更に詳しく後述する様々なコンピュータハードウェア又はソフトウェアモジュールを含む特殊目的又は汎用コンピュータの使用を含んでもよい。
本明細書において記述されている実施形態は、その上に保存されたコンピュータ実行可能命令及びデータ構造を担持するか又は有するコンピュータ可読媒体を使用することにより、実装されてもよい。このようなコンピュータ可読媒体は、汎用又は特殊目的コンピュータによってアクセスされうる任意の利用可能な媒体であってもよい。限定を伴うことなしに、例として、このようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROM、又はその他の光ディスクストレージ、磁気ディスクストレージ、又はその他の磁気ストレージ装置、或いは、コンピュータ実行可能命令又はデータ構造の形態において望ましいプログラムコードを担持するか又は有してもよいと共に汎用又は特殊目的コンピュータによってアクセスされうる任意のその他の一時的ではないストレージ媒体を含む有体の又は一時的ではないコンピュータ可読ストレージ媒体を含んでもよい。又、上述のものの組合せがコンピュータ可読媒体の範囲に含まれてもよい。
コンピュータ実行可能命令は、例えば、汎用コンピュータ、特殊目的コンピュータ、又は特殊目的処理装置に特定の機能又は機能のグループを実行させる命令及びデータを有する。主題は、構造的特徴及び/又は方法の動作に固有の言語において記述されているが、添付の請求項において定義されている主題は、必ずしも、上述の特定の特徴又は動作に限定されるものではないことを理解されたい。むしろ、上述の特定の特徴及び動作は、請求項を実装する例示用の形態として開示されたものである。
本明細書において使用されている「モジュール」、「コンポーネント」、及び/又は「エンジン」という用語は、演算システム上において稼働するソフトウェアオブジェクト又はルーチンを意味してもよい。本明細書において記述されている様々なコンポーネント、モジュール、エンジン、及びサービスは、演算システム上において(例えば、別個のスレッドとして)稼働するオブジェクト又はプロセスとして実装されてもよい。本明細書において記述されているシステム及び方法は、好ましくは、ソフトウェアにおいて実装されているが、ハードウェア又はソフトウェアとハードウェアの組合せにおける実装も、可能であり、且つ、想定される。この説明において、「演算エンティティ」とは、本明細書において予め定義されている任意の演算システムであるか、又は演算システム上において稼働する任意のモジュール又はモジュールの組合せであってもよい。
本明細書と、特に、添付の請求項(例えば、添付の請求項の本文)において使用されている用語は、一般に、「開放型」の用語として解釈されたい(例えば、「含む(including)」という用語は、「限定を伴うことなしに含む」として解釈されるべきであり、「有する」という用語は、「少なくとも有する」として解釈されるべきであり、「含む(includes)」という用語は、「限定を伴うことなしに含む」として解釈されるべきである)。
更には、特定数の導入された請求項記述物が意図されている場合には、そのような意図が明示的に請求項において記述されることになり、且つ、そのような記述が存在していない場合には、そのような意図は存在していない。例えば、理解のための支援として、添付の請求項は、請求項記述物を導入するべく、「少なくとも1つの」及び「1つ又は複数の」という導入用のフレーズの使用を含む場合がある。但し、このようなフレーズの使用は、同一の請求項が「1つ又は複数の」又は「少なくとも1つの」という導入用のフェーズ並びに「a」又は「an」などの不定冠詞(例えば、「a」及び/又は「an」は、「少なくとも1つの」又は「1つ又は複数の」を意味するものと解釈されるべきである)を含む場合にも、不定冠詞「a」又は「an」による請求項記述物の導入が、そのような導入された請求項記述物を含む任意の特定の請求項を1つのみのそのような記述物を含む実施形態に限定することを意味するものと解釈されるべきではなく、これは、請求項記述物を導入するべく使用されている定冠詞の使用についても適用される。
更には、特定数の導入された請求項記述物が明示的に記述されている場合にも、当業者は、そのような記述は、記述された数を少なくとも意味している(例えば、その他の修飾子を伴わない「2つの記述物」という簡潔な記述は、少なくとも2つの記述物又は2つ以上の記述物を意味している)と解釈されるべきであることを認識するであろう。更には、「A、B、及びCの少なくとも1つ、他」又は「A、B、及びCの1つ又は複数、他」に類似した表記法が使用されている例においては、このような構造は、一般に、Aのみ、Bのみ、Cのみ、共にA及びB、共にA及びC、共にB及びC、或いは、共にA、B、及びCなどを含むものと解釈されたい。例えば、「及び/又は」という用語の使用は、この方式によって解釈されるべく意図されている。
更には、2つ以上の代替用語を提示する任意の選言的な言葉又はフレーズは、実施形態、請求項、又は図面の説明であるかどうかに拘わらず、これらの用語のうちの1つ、これらの用語のうちのいずれか、又はこれらの用語のうちの両方を含む可能性を想定しているものと理解されたい。例えば、「A又はB」というフレーズは、「A」又は「B」或いは「A及びB」の可能性を含むものと理解されたい。
本明細書において記述されているすべての例及び条件付き言語は、本発明と、当技術分野の発展に対して本発明者によって寄与される概念と、を理解する際の読者の支援のための教育的目的を意図したものであり、且つ、このような具体的に記述された例及び条件に対する限定を伴うものではないと解釈されたい。以上、本発明の実施形態について詳細に説明したが、本発明の精神及び範囲を逸脱することなしに、様々な変更、置換、及び変形がこれらに対して実施されうることを理解されたい。

Claims (20)

  1. 配備されたプログラムの脆弱性分析の方法であって、
    前記配備されたプログラムから導出された分析対象バイナリプログラム(BPUA)を受け取るステップと、
    前記配備されたプログラムの入出力(I/O)動作を分析するステップと、
    前記BPUAに対する2つ以上の調査技法の適用及び前記I/O動作の分析に基づいて前記配備されたプログラムに対する入力を発見するステップと、
    前記入力のいずれが負の入力であるのかを判定するステップであって、前記負の入力は、前記配備されたプログラムの脆弱性を含む応答をトリガする前記入力の一部分を含む、ステップと、
    前記負の入力及びトリガされた応答に基づいて、前記配備されたプログラムを変更して前記脆弱性を含む応答をトリガすることなしに前記負の入力の少なくともいくつかを処理するための前記配備されたプログラム用のパッチを開発するステップと、
    前記パッチを前記配備されたプログラムに自動的にディスパッチするステップと、
    を有する方法。
  2. 前記入力のいずれが正の入力であるのかを判定するステップであって、前記正の入力は、前記配備されたプログラムの脆弱性を含まない応答をトリガする前記入力の一部分を含む、ステップと、
    前記負の入力のそれぞれ及び前記正の入力のそれぞれを、前記配備されたプログラム内においてトリガされる前記応答と関連付けるステップと、
    前記負の入力のそれぞれ及び関連付けられた応答を負の試験ケースとして試験データベース内において保存するステップと、
    前記正の入力のそれぞれ及び関連付けられた応答を正の試験ケースとして前記試験データベース内において保存するステップと、
    を更に有する請求項1に記載の方法。
  3. 前記正の試験ケース及び負の試験ケースに基づいて全体フィットネス関数を生成するステップを更に有し、前記パッチは、前記フィットネス関数及び遺伝的プログラミングに基づいた前記配備されたプログラムに対する変化過程を含む請求項2に記載の方法。
  4. 前記パッチを前記配備されたプログラムに自動的にディスパッチする前に、前記正の試験ケース及び負の試験ケースを使用して前記パッチを試験するステップを更に有する請求項2に記載の方法。
  5. 1つ又は複数のファザーを使用して追加の入力を更に発見するステップと、
    前記追加の入力のいずれが負の入力であるのかを判定するステップと、
    を更に有する請求項1に記載の方法。
  6. 前記脆弱性は、メモリ破壊エラー、バッファオーバーフロー、ソフトウェアクラッシュ、及び演算エラーを含む請求項1に記載の方法。
  7. 前記調査技法は、前記BPUAのシンボリック実行及び未知のプログラム動作用のサイドチャネル入力生成プロセスを含み、且つ、
    前記I/O動作は、前記配備されたプログラムとの間におけるユーザーのコンソールにおけるやり取り及び前記配備されたプログラムとの間において通信されてキャプチャされたネットワークトラフィックを含む請求項1に記載の方法。
  8. 前記入力を発見するステップは、
    シンボリック実行プロセスにおいて発見された入力の第1の組を受け取るステップと、
    サイドチャネル入力生成において発見された入力の第2の組を受け取るステップと、
    入力−出力状態機械モデル(ステートフルモデル)生成プロセスから入力の第3の組を受け取るステップと、
    前記入力の第1の組、前記入力の第2の組、及び前記入力の第3の組を比較し、前記入力のいずれが、前記入力の第1の組、前記入力の第2の組、及び前記入力の第3の組のすべてに含まれていないのかを判定するステップと、
    前記入力の第2の組から除外されている前記入力の1つ又は複数について、除外されている入力のプレフィックスの組を生成し、且つ、前記サイドチャネル入力生成において、前記プレフィックスの組を1つ又は複数のその他の入力を発見するための基礎として使用するステップと、
    前記入力の第1の組から除外されている前記入力の1つ又は複数について、前記除外されている入力を前記ステートフルモデルに組み込むステップと、
    を含む請求項1に記載の方法。
  9. その時点までに学習された前記BPUAの前記I/O動作を抽象的レベルにおいて表す入力−出力状態機械モデル(ステートフルモデル)を開発するステップを更に有し、前記ステートフルモデルは、遺伝的プログラミングに基づいた修復フレームワークを使用したパッチ開発の基礎である請求項1に記載の方法。
  10. 前記I/O動作を分析するステップ、前記入力を発見するステップ、前記判定するステップ、前記パッチを開発するステップ、及び前記ディスパッチするステップは、前記配備されたプログラムが稼働している間に実行される請求項1に記載の方法。
  11. 動作を実行するべく1つ又は複数のプロセッサによって実行可能であるプログラミングコードをその内部においてエンコードされた状態で有する1つ又は複数の一時的ではないコンピュータ可読媒体であって、
    前記動作は、
    配備されたプログラムから導出された分析対象バイナリプログラム(BPUA)を受け取るステップと、
    前記配備されたプログラムの入出力(I/O)動作を分析するステップと、
    前記BPUAに対する2つ以上の調査技法の適用及び前記I/O動作の分析に基づいて前記配備されたプログラムに対する入力を発見するステップと、
    前記入力のいずれが負の入力であるのかを判定するステップであって、前記負の入力は、前記配備されたプログラムの脆弱性を含む応答をトリガする前記入力の一部分を含む、ステップと、
    前記負の入力及びトリガされた応答に基づいて、前記配備されたプログラムを変更して前記脆弱性を含む応答をトリガすることなしに前記負の入力の少なくともいくつかを処理するための前記配備されたプログラム用のパッチを開発するステップと、
    前記パッチを前記配備されたプログラムに自動的にディスパッチするステップと、
    を有する、媒体。
  12. 前記動作は、
    入力のいずれが正の入力であるのかを判定するステップであって、前記正の入力は、前記配備されたプログラムの脆弱性を含まない応答をトリガする前記入力の一部分を含む、ステップと、
    前記負の入力のそれぞれ及び前記正の入力のそれぞれを、前記配備されたプログラム内においてトリガされる前記応答と関連付けるステップと、
    前記負の入力のそれぞれ及び関連付けられた応答を負の試験ケースとして試験データベース内において保存するステップと、
    前記正の入力のそれぞれ及び関連付けられた応答を正の試験ケースとして前記試験データベース内において保存するステップと、
    を更に有する請求項11に記載の一時的ではないコンピュータ可読媒体。
  13. 前記動作は、前記正の試験ケース及び負の試験ケースに基づいて全体フィットネス関数を生成するステップを更に有し、前記パッチは、前記フィットネス関数及び遺伝的プログラミングに基づいた前記配備されたプログラムに対する変化過程を含む請求項12に記載の一時的ではないコンピュータ可読媒体。
  14. 前記動作は、前記パッチを前記配備されたプログラムに自動的にディスパッチする前に、前記正の試験ケース及び負の試験ケースを使用して前記パッチを試験するステップを更に有する請求項12に記載の一時的ではないコンピュータ可読媒体。
  15. 前記動作は、
    1つ又は複数のファザーを使用して追加の入力を更に発見するステップと、
    前記追加の入力のいずれが負の入力であるのかを判定するステップと、
    を更に有する請求項11に記載の一時的ではないコンピュータ可読媒体。
  16. 前記脆弱性は、メモリ破壊エラー、バッファオーバーフロー、ソフトウェアクラッシュ、及び演算エラーを含む請求項11に記載の一時的ではないコンピュータ可読媒体。
  17. 前記調査技法は、前記BPUAのシンボリック実行及び未知のプログラム動作用のサイドチャネル入力生成プロセスを含み、且つ、
    前記I/O動作は、前記配備されたプログラムとの間におけるユーザーのコンソールにおけるやり取り及び前記配備されたプログラムとの間において通信されてキャプチャされたネットワークトラフィックを含む請求項11に記載の一時的ではないコンピュータ可読媒体。
  18. 前記入力を発見するステップは、
    シンボリック実行プロセスにおいて発見された入力の第1の組を受け取るステップと、
    サイドチャネル入力生成において発見された入力の第2の組を受け取るステップと、
    入力−出力状態機械モデル(ステートフルモデル)生成プロセスからの入力の第3の組を受け取るステップと、
    前記入力の第1の組、前記入力の第2の組、及び前記入力の第3の組を比較し、前記入力のいずれが、前記入力の第1の組、前記入力の第2の組、及び前記入力の第3の組のすべてに含まれていないのかを判定するステップと、(明細書の対応記載を確認)
    前記入力の第2の組から除外されている前記入力の1つ又は複数について、除外されている入力のプレフィックスの組を生成し、且つ、前記サイドチャネル入力生成において、前記プレフィックスの組を1つ又は複数のその他の入力を発見するための基礎として使用するステップと、
    前記入力の第1の組から除外されている前記入力の1つ又は複数について、前記除外されている入力を前記ステートフルモデルに組み込むステップと、
    を含む請求項11に記載の一時的ではないコンピュータ可読媒体。
  19. 前記動作は、その時点までに学習された前記BPUAの前記I/O動作を抽象的レベルにおいて表す入力−出力状態機械モデル(ステートフルモデル)を開発するステップを更に有し、前記ステートフルモデルは、遺伝的プログラムに基づいた修復フレームワークを使用したパッチ開発の基礎である請求項11に記載の一時的ではないコンピュータ可読媒体。
  20. 前記I/O動作を分析するステップ、前記入力を発見するステップ、前記判定するステップ、前記パッチを開発するステップ、及び前記ディスパッチするステップは、前記配備されたプログラムが稼働している間に実行される請求項11に記載の一時的はないコンピュータ可読媒体。
JP2016038033A 2015-03-05 2016-02-29 脆弱性分析のための自律型推論システム Active JP6686529B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562128932P 2015-03-05 2015-03-05
US62/128,932 2015-03-05
US14/795,812 US9767290B2 (en) 2015-03-05 2015-07-09 Autonomous reasoning system for vulnerability analysis
US14/795,812 2015-07-09

Publications (2)

Publication Number Publication Date
JP2016167262A true JP2016167262A (ja) 2016-09-15
JP6686529B2 JP6686529B2 (ja) 2020-04-22

Family

ID=56849679

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016038033A Active JP6686529B2 (ja) 2015-03-05 2016-02-29 脆弱性分析のための自律型推論システム

Country Status (2)

Country Link
US (1) US9767290B2 (ja)
JP (1) JP6686529B2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101876685B1 (ko) * 2017-08-08 2018-07-10 엘에스웨어(주) Spdx 기술을 이용하여 소프트웨어의 취약점을 관리하기 위한 시스템 및 그 방법
KR101904911B1 (ko) * 2017-10-13 2018-10-08 한국인터넷진흥원 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
KR20190041912A (ko) * 2018-09-28 2019-04-23 한국인터넷진흥원 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
JP2019204482A (ja) * 2018-05-24 2019-11-28 富士通株式会社 並行脆弱性検出
JP2019220141A (ja) * 2018-06-18 2019-12-26 富士通株式会社 ソフトウェアバイナリのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行
WO2020194455A1 (ja) 2019-03-25 2020-10-01 三菱電機株式会社 テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム
JP2022535785A (ja) * 2019-06-12 2022-08-10 エヌイーシー ラボラトリーズ ヨーロッパ ゲーエムベーハー ブロックチェーンネットワークにおけるスマートコントラクトをサポートするための方法及びコントラクト書き換えフレームワークシステム

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201317203D0 (en) * 2013-09-27 2013-11-13 Cory Robert Computer program generation
US9727738B1 (en) * 2016-06-08 2017-08-08 Synack, Inc. Patch validation via replay and remediation verification
US10176086B2 (en) * 2016-10-03 2019-01-08 Fujitsu Limited Event-driven software test sequence determination
US11030318B1 (en) * 2017-02-03 2021-06-08 Synopsys, Inc. Interactive verification of security vulnerability detections using runtime application traffic
US10387655B2 (en) * 2017-02-15 2019-08-20 International Business Machines Corporation Method, system and product for using a predictive model to predict if inputs reach a vulnerability of a program
US11115430B2 (en) * 2017-06-09 2021-09-07 Raytheon Company Tactical bus fuzz tester
CN108519944B (zh) * 2018-03-07 2019-04-05 北京航空航天大学 一种基于噪声共振的软件加速测试技术的构建方法
US11017083B2 (en) * 2018-10-17 2021-05-25 International Business Machines Corporation Multiple phase graph partitioning for malware entity detection
US11636211B2 (en) * 2019-06-27 2023-04-25 Blackberry Limited Binary static analysis of application structure to identify vulnerabilities
US11363055B2 (en) 2020-11-02 2022-06-14 Bank Of America Corporation System and methods for dynamic controlled evaluation of cloud service vulnerabilities
CN115033895B (zh) * 2022-08-12 2022-12-09 中国电子科技集团公司第三十研究所 一种二进制程序供应链安全检测方法及装置
CN116303101B (zh) * 2023-05-19 2023-08-15 建信金融科技有限责任公司 测试案例生成方法、装置和设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005038428A (ja) * 2003-07-16 2005-02-10 Microsoft Corp 脆弱性のあるファイルの自動的な検出およびパッチ
JP2008538638A (ja) * 2005-04-21 2008-10-30 マイクロソフト コーポレーション ウェブサービスを提供するコンピュータをマルウェアから保護する方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7784044B2 (en) * 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
US20110138469A1 (en) * 2009-12-03 2011-06-09 Recursion Software, Inc. System and method for resolving vulnerabilities in a computer network
US9268945B2 (en) * 2010-03-19 2016-02-23 Contrast Security, Llc Detection of vulnerabilities in computer systems
US20130019314A1 (en) * 2011-07-14 2013-01-17 International Business Machines Corporation Interactive virtual patching using a web application server firewall

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005038428A (ja) * 2003-07-16 2005-02-10 Microsoft Corp 脆弱性のあるファイルの自動的な検出およびパッチ
JP2008538638A (ja) * 2005-04-21 2008-10-30 マイクロソフト コーポレーション ウェブサービスを提供するコンピュータをマルウェアから保護する方法

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101876685B1 (ko) * 2017-08-08 2018-07-10 엘에스웨어(주) Spdx 기술을 이용하여 소프트웨어의 취약점을 관리하기 위한 시스템 및 그 방법
KR101904911B1 (ko) * 2017-10-13 2018-10-08 한국인터넷진흥원 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
US10586053B2 (en) 2017-10-13 2020-03-10 Korea Internet & Security Agency Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
US10621362B2 (en) 2017-10-13 2020-04-14 Korea Internet & Security Agency Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
JP7200661B2 (ja) 2018-05-24 2023-01-10 富士通株式会社 並行脆弱性検出
JP2019204482A (ja) * 2018-05-24 2019-11-28 富士通株式会社 並行脆弱性検出
JP7230572B2 (ja) 2018-06-18 2023-03-01 富士通株式会社 ソフトウェアバイナリのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行
JP2019220141A (ja) * 2018-06-18 2019-12-26 富士通株式会社 ソフトウェアバイナリのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行
KR101981028B1 (ko) * 2018-09-28 2019-05-23 한국인터넷진흥원 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
KR20190041912A (ko) * 2018-09-28 2019-04-23 한국인터넷진흥원 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
WO2020194455A1 (ja) 2019-03-25 2020-10-01 三菱電機株式会社 テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム
US11994977B2 (en) 2019-03-25 2024-05-28 Mitsubishi Electric Corporation Test case generation apparatus, test case generation method, and computer readable medium
JP2022535785A (ja) * 2019-06-12 2022-08-10 エヌイーシー ラボラトリーズ ヨーロッパ ゲーエムベーハー ブロックチェーンネットワークにおけるスマートコントラクトをサポートするための方法及びコントラクト書き換えフレームワークシステム
JP7250178B2 (ja) 2019-06-12 2023-03-31 エヌイーシー ラボラトリーズ ヨーロッパ ゲーエムベーハー ブロックチェーンネットワークにおけるスマートコントラクトをサポートするための方法及びコントラクト書き換えフレームワークシステム

Also Published As

Publication number Publication date
US9767290B2 (en) 2017-09-19
US20160259943A1 (en) 2016-09-08
JP6686529B2 (ja) 2020-04-22

Similar Documents

Publication Publication Date Title
JP6686529B2 (ja) 脆弱性分析のための自律型推論システム
US11868242B1 (en) Method, apparatus, and computer program product for predictive API test suite selection
US10691810B1 (en) Detecting vulnerabilities associated with a software application build
US10855717B1 (en) Systems and methods of intelligent and directed dynamic application security testing
US20230333828A1 (en) Inductive equivalence in machine-based instruction editing
Beaman et al. Fuzzing vulnerability discovery techniques: Survey, challenges and future directions
EP3234851B1 (en) A system and method for facilitating static analysis of software applications
JP2018525714A (ja) アプリケーションのシミュレーション
US9069963B2 (en) Statistical inspection systems and methods for components and component relationships
US9405906B1 (en) System and method for enhancing static analysis of software applications
US20150089290A1 (en) Derivation of generalized test cases
WO2022271339A1 (en) Detection of supply chain-related security threats to software applications
KR102035246B1 (ko) 백워드 패스파인딩을 이용한 소프트웨어 취약점 분석 장치 및 방법
Kim et al. FIRM-COV: high-coverage greybox fuzzing for IoT firmware via optimized process emulation
KR101324691B1 (ko) 모바일 악성 행위 어플리케이션 탐지 시스템 및 방법
Qin et al. UCRF: Static analyzing firmware to generate under-constrained seed for fuzzing SOHO router
Dogga et al. A system-wide debugging assistant powered by natural language processing
JP7409197B2 (ja) ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
US12007883B2 (en) Automated method and system for finding vulnerabilities in a program using fuzzing
US9734458B2 (en) Predicting outcome based on input
US11574252B2 (en) System and method for prioritizing and ranking static analysis results using machine learning
KR20200048016A (ko) 바이너리 분석을 위한 중간 언어 테스트 방법 및 장치
US20240232354A9 (en) Systems and Methods for API Security Integration
US20240134979A1 (en) Systems and Methods for API Security Integration
Bhojan et al. A MACHINE LEARNING BASED APPROACH FOR DETECTING NON-DETERMINISTIC TESTS AND ITS ANALYSIS IN MOBILE APPLICATION TESTING.

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181112

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190913

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191008

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191031

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: 20200303

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200316

R150 Certificate of patent or registration of utility model

Ref document number: 6686529

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150