(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024137122
(43)【公開日】2024-10-07
(54)【発明の名称】ファジングプラットフォーム装置、及びファジング制御方法
(51)【国際特許分類】
G06F 21/57 20130101AFI20240927BHJP
【FI】
G06F21/57 370
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2023048514
(22)【出願日】2023-03-24
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】藤井 翔太
(72)【発明者】
【氏名】西嶋 克哉
(72)【発明者】
【氏名】重本 倫宏
(72)【発明者】
【氏名】鍛 忠司
(57)【要約】
【課題】ファジングに要する実行コストや属人性を低減する。
【解決手段】対象プログラムに対するファジングを制御するファジングプラットフォーム装置であって、1以上の計算機と、1以上のメモリリソースと、1以上の記憶装置と、を備え、前記計算機は、複数のファジングエンジン候補を順に用いて前記対象プログラムに対するプレファジングを実行し、前記プレファジングの結果に基づき、前記複数のファジングエンジン候補の中から前記対象プログラムに対する前記ファジングに用いるファジングエンジンを選定する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
対象プログラムに対するファジングを制御するファジングプラットフォーム装置であって、
1以上の計算機と、1以上のメモリリソースと、1以上の記憶装置と、を備え、
前記計算機は、
複数のファジングエンジン候補を順に用いて前記対象プログラムに対するプレファジングを実行し、
前記プレファジングの結果に基づき、前記複数のファジングエンジン候補の中から前記対象プログラムに対する前記ファジングに用いるファジングエンジンを選定することを特徴とするファジングプラットフォーム装置。
【請求項2】
請求項1に記載のファジングプラットフォーム装置であって、
前記計算機は、
前記記憶装置は、前記ファジングエンジンの情報を保持し、
前記保持されたファジングエンジンのうち、前記対象プログラムに対する前記ファジングに利用可能なものを前記ファジングエンジン候補に選出することを特徴とするファジングプラットフォーム装置。
【請求項3】
請求項1に記載のファジングプラットフォーム装置であって、
前記計算機は、
前記ファジングエンジン候補毎の前記プレファジングの結果に基づく実行パス数、クラッシュ数、バグ数、及びCVSSスコアのうちの少なくとも一つに基づいて、前記ファジングエンジンを選定することを特徴とするファジングプラットフォーム装置。
【請求項4】
請求項1に記載のファジングプラットフォーム装置であって、
前記計算機は、
1または複数の前記ファジングエンジンを選定することを特徴とするファジングプラットフォーム装置。
【請求項5】
請求項1に記載のファジングプラットフォーム装置であって、
前記計算機は、
選定した前記ファジングエンジンを用いて前記対象プログラムに対する前記ファジングを実行することを特徴とするファジングプラットフォーム装置。
【請求項6】
請求項5に記載のファジングプラットフォーム装置であって、
前記計算機は、
周辺環境を再現して前記ファジング、及び前記プレファジングの少なくとも一方を実行することを特徴とするファジングプラットフォーム装置。
【請求項7】
請求項5に記載のファジングプラットフォーム装置であって、
前記計算機は、
前記ファジングと同時に、または前記ファジング後に実行する追加機能を登録する機能追加処理を実行することを特徴とするファジングプラットフォーム装置。
【請求項8】
請求項5に記載のファジングプラットフォーム装置であって、
前記計算機は、
ユーザに対して前記対象プログラムの脆弱性に関する情報を提供する脆弱性補足処理を実行することを特徴とするファジングプラットフォーム装置。
【請求項9】
請求項5に記載のファジングプラットフォーム装置であって、
前記計算機は、
前記ファジングにより顕現した脆弱性に対応する際の優先度を設定する優先度設定処理を実行することを特徴とするファジングプラットフォーム装置。
【請求項10】
請求項5に記載のファジングプラットフォーム装置であって、
前記計算機は、
前記ファジングにより顕現した脆弱性に対処するための修正パッチを生成する修正パッチ生成処理を実行することを特徴とするファジングプラットフォーム装置。
【請求項11】
対象プログラムに対するファジングを制御するファジングプラットフォーム装置によるファジング制御方法であって、
複数のファジングエンジン候補を順に用いて前記対象プログラムに対するプレファジングを実行し、
前記プレファジングの結果に基づき、前記複数のファジングエンジン候補の中から前記対象プログラムに対する前記ファジングに用いるファジングエンジンを選定することを特徴とするステップを含むファジング制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ファジングプラットフォーム装置、及びファジング制御方法に関する。
【背景技術】
【0002】
脆弱性をついた攻撃によるサイバーセキュリティの被害は増加・深刻化しており、対策が必要である。このような状況から、ファジング技術を用いてプログラムの脆弱性やバグを検出するサービスが存在する。ファジングとは、プログラムに対して様々な入力を試行することにより、当該プログラムのバグや脆弱性を検査する技術である。ファジングによって当該プログラムのバグや脆弱性を検出し、それを修正することによって、バグや脆弱性の悪用、それらによって引き起こされる被害を未然に防止することが期待されている。
【0003】
他方で、ファジングを実行するシステム(以下、ファジングエンジンと称する)は、利用方法や対象が異なっており、統一的に利用することが難しく、ファジングエンジンやファジングの対象とするプログラム毎に利用方法を習熟する必要がある。また、各ファジングエンジンはそれぞれ得手不得手があり、機能にも差異があるため、ファジングの対象とするプログラムに対してどのファジングエンジンを利用すべきかの判断が容易ではない。
【0004】
現在、種々のシステムがネットワークに接続されているため、従前のようにセキュリティの専門家だけでなく、あらゆる開発者がファジングを実施できることが望ましい。このため、上述のようにファジングエンジンの利用に一定以上の専門性や習熟度が必要な現状は望ましくない。また、ファジングエンジンの選定や習得をした後にも、ファジング技術は実行コストや属人性が高い課題が控えており、ファジングサービスの対象範囲やビジネス規模拡大の阻害となっている。
【0005】
ファジングに関し、例えば、特許文献1には「配備されたプログラムの脆弱性分析の方法であって、前記配備されたプログラムから導出された分析対象バイナリプログラム(BPUA)を受け取るステップと、前記配備されたプログラムの入出力(I/O)動作を分析するステップと、前記BPUAに対する2つ以上の調査技法の適用及び前記I/O動作の分析に基づいて前記配備されたプログラムに対する入力を発見するステップと、前記入力のいずれが負の入力であるのかを判定するステップであって、前記負の入力は、前記配備されたプログラムの脆弱性を含む応答をトリガする前記入力の一部分を含む、ステップと、前記負の入力及びトリガされた応答に基づいて、前記配備されたプログラムを変更して前記脆弱性を含む応答をトリガすることなしに前記負の入力の少なくともいくつかを処理するための前記配備されたプログラム用のパッチを開発するステップと、前記パッチを前記配備されたプログラムに自動的にディスパッチするステップと、を有する方法」が記載されている。
【0006】
また、非特許文献1には、ファジングエンジンを自動でチューニングしてカバレッジ等の性能向上を図るものが記載されている。
【0007】
さらに、非特許文献2には、ファジングをGUI(Graphical User Interface)から平易に実施可能なツールが記載されている。
【先行技術文献】
【特許文献】
【0008】
【非特許文献】
【0009】
【非特許文献1】Yuki Koike, Hiroyuki Katsura, Hiromu Yakura, and Yuma Kurogome: SLOPT: Bandit Optimization Framework for Mutation-Based Fuzzing, In Proceedings of the 38th Annual Computer Security Applications Conference (ACSAC '22), pp. 519-533 (2022),https://dl.acm.org/doi/abs/10A145/3564625.3564659
【非特許文献2】宮木龍、吉田則裕、藤原賢二、都築夏樹、山本椋太、高田広章: Fuzz4B:ファジングツールAFLの利用支援ツール、コンピュータ ソフトウェア、39巻、2号、pp. 124-142 (2022), https://doi.org/10A1309/jssst.39.2_124
【発明の概要】
【発明が解決しようとする課題】
【0010】
特許文献1に記載の技術によれば、ファジングを組み合わせて、自動で検査対象プログラムの脆弱性を発見できる。しかしながら、その利用には専門性が必要で、利用性やスケール性の観点で課題がある。
【0011】
非特許文献1に記載の技術は、本願発明とはスコープ(変数や関数の有効範囲)が異なる。
【0012】
非特許文献2に記載の技術は、利用可能なファジングエンジンが限られており、それに伴って利用可能なファジング手法や対象プログラムに制限がある。
【0013】
上記のように、ファジングの高度化や支援を図る技術は存在するが、ファジングの実行コストや属人性が高いという課題が残存している。
【0014】
本発明は、上記の点に鑑みてなされたものであって、ファジングに要する実行コストや属人性を低減できるようにすることを目的とする。
【課題を解決するための手段】
【0015】
本願は、上記課題の少なくとも一部を解決する手段を複数含んでいるが、その例を挙げるならば、以下の通りである。
【0016】
上記課題を解決するため、本発明の一態様に係るファジングプラットフォーム装置は、対象プログラムに対するファジングを制御するファジングプラットフォーム装置であって、1以上の計算機と、1以上のメモリリソースと、1以上の記憶装置と、を備え、前記計算機は、複数のファジングエンジン候補を順に用いて前記対象プログラムに対するプレファジングを実行し、前記プレファジングの結果に基づき、前記複数のファジングエンジン候補の中から前記対象プログラムに対する前記ファジングに用いるファジングエンジンを選定する。
【発明の効果】
【0017】
本発明によれば、ファジングに要する実行コストや属人性を低減することが可能となる。
【0018】
上記した以外の課題、構成、及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【0019】
【
図1】
図1は、本発明の第1の一実施形態に係るファジングプラットフォームシステムの構成例を示す図である。
【
図2】
図2は、ファジングタスク一覧の一例を示す図である。
【
図3】
図3は、ファジングエンジン一覧の一例を示す図である。
【
図4】
図4は、実行環境一覧の一例を示す図である。
【
図5】
図5は、ファジング結果一覧の一例を示す図である。
【
図6】
図6は、ファジングエンジン推薦処理の一例を説明するフローチャートである。
【
図7】
図7は、ファジングエンジン推薦処理後の一連の処理の一例を説明するフローチャートである。
【
図8】
図8は、ファジングタスク登録処理の一例を説明するフローチャートである。
【
図9】
図9は、ファジング実行処理の一例を説明するフローチャートである。
【
図10】
図10は、ファジング結果登録処理の一例を説明するフローチャートである。
【
図11】
図11は、UI画面生成処理の一例を説明するフローチャートである。
【
図13】
図13は、ファジングエンジン登録処理の一例を説明するフローチャートである。
【
図14】
図14は、実行環境登録処理の一例を説明するフローチャートである。
【
図15】
図15は、ファジング実行処理の変形例を説明するフローチャートである。
【
図16】
図16は、本発明の第2の実施形態に係るファジングプラットフォームシステムの構成例を示す図である。
【
図18】
図18は、機能追加処理の一例を説明するフローチャートである。
【
図19】
図19は、脆弱性補足処理の一例を説明するフローチャートである。
【
図20】
図20は、優先度設定処理の一例を説明するフローチャートである。
【
図21】
図21は、修正パッチ生成処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【0020】
以下、本発明の複数の実施形態について図面に基づいて説明する。なお、各実施形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。また、以下の実施形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合、及び原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須ではない。また、「Aからなる」、「Aよりなる」、「Aを有する」、「Aを含む」と言うときは、特にその要素のみである旨明示した場合等を除き、それ以外の要素を排除しない。同様に、以下の実施形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合及び原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含む。
【0021】
<本発明の第1の実施形態に係るファジングプラットフォームシステム(以下、ファジングPFシステムと称する)10-1の構成例>
図1は、本発明の第1の実施形態に係るファジングPFシステム10-1の構成例を示している。
【0022】
ファジングPFシステム10-1は、ファジングによりバグや脆弱性を検査するプログラム(いか、対象プログラムと称する)に対し、単一の環境において、予め登録されている異なる複数のファジングエンジンのうち、最適なファジングエンジンを特定し、特定したファジングエンジンによりファジングを実行するものである。
【0023】
ファジングPFシステム10-1は、ファジングプラットフォーム装置(以下、ファジングPF装置と称する)100、及びファジングPF装置100とネットワーク12を介して接続されたユーザ端末20a~20cを備える。
【0024】
ネットワーク12は、LAN(Local Area Network)やWAN(Wide Area Network)、インターネット等の双方向通信網である。ユーザ端末20a~20cは、パーソナルコンピュータ等の一般的なコンピュータである。以下、ユーザ端末20a~20cを個々に区別する必要がない場合、単にユーザ端末20と称する。
【0025】
ファジングPF装置100は、CPU(Central Processing Unit)等のプロセッサ101、DRAM(Dynamic Random Access Memory)等のメモリ102、HDD(Hard Disk Drive)やSSD(Solid State Drive)等のストレージ104、Ethernet(商標)カードやWi-Fi(商標)アダプタ等の通信IF(Interface)105、及びキーボードやディスプレイ、メディアドライブ等の入出力装置106を備えるサーバコンピュータやパーソナルコンピュータ等の一般的なコンピュータからなる。プロセッサ101は、本発明の計算機に相当する。
【0026】
プロセッサ101は、メモリ102に格納されたプログラム103を実行することにより、ファジングエンジン推薦部111、ファジングタスク登録部112、ファジング実行部113、ファジング結果登録部114、UI画面生成部115、ファジングエンジン登録部116、及び実行環境登録部117の各機能ブロックを実現する。
【0027】
なお、プログラム103は、予めメモリ102に格納しておいてもよいし、必要な時に、ストレージ104から読み出したり、入出力装置106から入力したり、通信IF105を介して他の装置からダウンロードしたりしてメモリ102に格納するようにしてもよい。
【0028】
ファジングエンジン推薦部111は、対象プログラムに対するファジングに利用するファジングエンジンを推薦するファジングエンジン推薦処理を実行する。ファジングタスク登録部112は、ファジングタスクをファジングPF装置100に登録するファジングタスク登録処理を実行する。ファジング実行部113は、対象プログラムに対してファジングを行うファジング実行処理を実行する。ファジング結果登録部114は、ファジング結果を生成するファジング結果登録処理を実行する。UI画面生成部115は、上述した各処理の結果をユーザに提示するためのUI画面を生成するUI画面生成処理を実行する。ファジングエンジン登録部116は、ファジングエンジンをファジングPF装置100に登録するファジングエンジン登録処理を実行する。実行環境登録部117は、対象プログラムを実行する際の実行環境をファジングPF装置100に登録する実行環境登録処理を実行する。各処理の詳細については後述する。
【0029】
ストレージ104には、ファジングタスク一覧131、ファジングエンジン一覧132、実行環境一覧133、及びファジング結果一覧134が格納される。
【0030】
ファジングタスク一覧131には、ファジングタスクに関する情報が記録される。ファジングエンジン一覧132には、ファジングエンジンに関する情報が記録される。実行環境一覧133には、実行環境に関する情報が記録される。ファジング結果一覧134は、ファジング結果が記録される。
【0031】
次に、
図2は、ファジングタスク一覧131の一例を示している。ファジングタスク一覧131には、タスクIDに対応付けて、登録日時、開始日時、完了日時、対象プログラム、実行環境ID、ファジングエンジンID、ステータス、及び結果格納パスの各項目の情報が記録される。ただし、ファジングタスク一覧131に記録される項目は上述した例に限られない。
【0032】
タスクIDは、当該ファジングタスクを一意に識別するための識別情報である。登録日時は、当該ファジングタスクが登録された日時情報である。開始日時は、当該ファジングタスクが開始された日時情報である。完了日時は、当該ファジングタスクが終了された日時情報である。なお、登録日時、開始日時、及び完了日時の各日時情報のデータ形式は任意であり、Unixtime等、日時が判別できるデータ形式であれば、どのようなデータ形式を用いてもよい。以降に説明するその他の日時情報についても同様である。
【0033】
対象プログラムは、当該ファジングタスクがファジングの対象とするプログラムを特定する情報である。実行環境IDは、当該ファジングタスクに対応する対象プログラムの実行環境を表す情報であり、後述する実行環境一覧133における一つのレコードに紐付けられている。ファジングエンジンIDは、当該ファジングタスクで利用するファジングエンジンを特定する情報であり、後述するファジングエンジン一覧132における一つのレコードに紐付けられている。
【0034】
ステータスは、当該ファジングタスクの実行状況を表す情報であり、例えば、「完了」、「実行中」、「未実行」等が記録される。「完了」は、当該ファジングタスクに対応するファジング実行処理、及びファジング結果登録処理が終了していることを表す。「実行中」は、ファジング実行処理が開始済み(実行中、または終了)であって、ファジング結果登録処理が未実行であることを表す。「未実行」は、ファジング実行処理、及びファジング結果登録処理が未実行であることを表す。
【0035】
結果格納パスは、当該ファジングタスクに対するファジング実行処理の結果へのパスを表す。
【0036】
例えば、
図2の場合、タスクIDが「2」であるタスクは、登録日時が「2022/01/01 09:00:00」、開始日時が「2022/01/01 12:00:00」、完了日時が「2022/01/02 23:50:00」、対象プログラムが「PUT/a.exe」、実行環境IDが「0」、ファジングエンジンIDが「0」、ステータスが「完了」、結果格納パスが「result/0/」であることを表している。
【0037】
次に、
図3は、ファジングエンジン一覧132の一例を示している。ファジングエンジン一覧132には、ファジングエンジンIDに対応付けて、登録日時、名称、実行パス、及びオプションの各項目の情報が記録される。ただし、ファジングエンジン一覧132に記録される項目は上述した例に限られない。
【0038】
ファジングエンジンIDは、ファジングエンジンを一意に識別するための識別情報である。登録日時は、当該ファジングエンジンが登録された日時情報である。名称は、当該ファジングエンジンの名称である。実行パスは、当該ファジングエンジンを実行するためのパスを表す。
【0039】
オプションは、当該ファジングエンジンを実行するに際して選択可能なオプションを表す。例えば、オプション「-o」では、IPアドレス、及びポート番号を「IP_ADDR:PORT」の形式で与えることによって、ファジング対象のIPアドレスとポート番号を指定できる。オプション「-E」は、実行回数を「NUM_FUZZING」の形式で与えることによって、ファジングの実行回数を指定できる。なお、ファジングの各実行回次においては、回時毎にパラメータ(設定値の初期値、入力値)が変更される。
【0040】
例えば、
図3の場合、ファジングエンジンIDが「0」のファジングエンジンは、登録日時が「2019/01/01 14:30:00」、名称が「Fuzzer_A」、実行パスが「fuzzer/fuzzer_A」、オプションが「-o」、「-E」であることを表している。
【0041】
次に、
図4は、実行環境一覧133の一例を示している。実行環境一覧133には、実行環境IDに対応付けて、登録日時、名称、種別、アーキテクチャ、ビット幅、OS、及び格納パスの各項目の情報が記録される。ただし、実行環境一覧133に記録される項目は上述した例に限られない。
【0042】
実行環境IDは、実行環境を一意に識別するための識別情報である。登録日時は、当該実行環境が登録された日時情報である。名称は、当該実行環境の名称である。種別は、当該実行環境の種別を表す。種別としては、「VM(VM Virtual Machine)」、「Container」、「Simulator」等が記録される。アーキテクチャは、当該実行環境のアーキテクチャ(ハードウェア構成)を表す。ビット幅は、当該実行環境のアーキテクチャのビット幅を表す。OSは、当該実行環境のオペレーティングシステムを表す。格納パスは、当実行環境へのパスを表す。
【0043】
例えば、
図4の場合、実行環境IDが「0」の実行環境は、登録日時が「2019/04/01 11:10:00」、名称が「VM_A_64bit」、種別が「VM」、アーキテクチャが「CPU A」、ビット幅が「64bit」、OSが「OS A」、格納パスが「exec/vm/exec_0」であることを表している。
【0044】
次に、
図5は、ファジング結果一覧134の一例を示している。ファジング結果一覧134は、ファジング結果IDに対応付けて、タスクID、完了日時、実行時間、結果格納パス、実行パス数、クラッシュ数、及びバグ数の各項目の情報が記録される。ただし、ファジング結果一覧134に記録される項目は上述した例に限られない。
【0045】
ファジング結果IDは、ファジング結果を一意に識別するための識別情報である。タスクIDは、当該ファジング結果を得たファジングタスクを特定するための情報であり、ファジングタスク一覧131における一つのレコードに紐付けられている。完了日時は、当該ファジング結果を得たファジングタスクが完了した日時情報である。実行時間は、当該ファジング結果を得たファジングタスクの実行に要した時間を表す。結果格納パスは、当該ファジング結果を得たファジングタスク(ファジング実行処理)の結果へのパスを表す。
【0046】
実行パス数は、当該ファジング結果を得たファジングタスク(ファジング実行処理)において実行されたパス数を表す。クラッシュは、当該ファジング結果を得たファジングタスクにおいて発生したクラッシュ数を表す。バグ数は、当該ファジング結果を得たファジングタスクにおいて検出されたバグ数を表す。
【0047】
例えば、
図5の場合、ファジング結果IDが「0」のファジング結果は、タスクIDが「0」であるファジングタスクに対応するものであり、完了日時が「2022/01/01」、実行時間が「24時間」、結果格納パスが「result/0/」、実行パス数が「1000」、クラッシュ数が「150」、バグ数が「10」であることを表している。
【0048】
<ファジングエンジン推薦処理について>
次に、
図6は、ファジングエンジン推薦部111によるファジングエンジン推薦処理の一例を説明するフローチャートである。
【0049】
当該ファジングエンジン推薦処理の前提として、対象プログラムは決定済みであり、ストレージ104に格納されているファジングエンジン一覧132には、複数のファジングエンジンが登録済みであるとする。
【0050】
当該ファジングエンジン推薦処理は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。
【0051】
はじめに、ファジングエンジン推薦部111が、ファジングエンジン一覧132に登録されているファジングエンジンのうち、対象プログラムに利用可能なものを一つずつ順にファジングエンジン候補に選出する(ステップS1)。次に、ファジングエンジン推薦部111が、ステップS1で選出したファジングエンジン候補を用い、対象プログラムに対して所定時間だけファジングを実行する(以下、ファジングエンジン候補を用いたファジングをプレファジングと称する)。そして、ファジングエンジン推薦部111が、プレファジングの結果を分析して、実行パス数、クラッシュ数、バグ数、及びCVSS(Common Vulnerability Scoring System)スコアを取得する(ステップS2)。
【0052】
次に、ファジングエンジン推薦部111が、ファジングエンジン一覧132に登録されているファジングエンジンのうち、ファジングエンジン候補に未選出のものが残っているか否かを判定する(ステップS3)。ここで、未選出のファジングエンジンが残っていると判定した場合(ステップS3でYES)、ファジングエンジン推薦部111が、処理をステップS1に戻してステップS1~S3を繰り返す。
【0053】
その後、未選出のファジングエンジンが残っていないと判定した場合(ステップS3でNO)、次に、ファジングエンジン推薦部111が、ステップS2の結果に基づき、ファジング成果を最大化可能なファジングエンジン候補を、ファジング実行処理に用いるファジングエンジンとして選定し、ユーザに推薦する(ステップS4)。
【0054】
ファジング実行処理に用いるファジングエンジンの選定は、例えば、ファジングの目的に応じ、実行パス数、クラッシュ数、バグ数、またはCVSSスコアが最多となるファジングエンジンを将来的なファジング成果を最大化できるものとして選定する。例えば、バグ数が最多であったファジングエンジンを選定した場合、対象プログラムのセキュリティを担保できる。また例えば、クラッシュ数が最多であったファジングエンジンを選定した場合、対象プログラムのセキュリティを担保できることに加えて対象プログラムの動作テストを兼ねることができ、対象プログラムの信頼性を確認できる。さらに例えば、実行パス数が最多であったファジングエンジンを選定した場合、特に対象プログラムの動作テストとして有益な効果的なものと選定できる。なお、実行パス数、クラッシュ数、バグ数、及びCVSSスコアのうちの少なくとも一つに基づいて統合的にファジングエンジンを選定してもよい。
【0055】
また、単体のファジングエンジンを推薦するのではなく、複数のファジングエンジンを推薦するようにしてもよい。この場合、ユーザに対してファジング実行処理(後述)に用いるファジングエンジンの選択肢を増やすことができる。また、ファジング実行処理におけるバグ等の発見率を高めることができる。
【0056】
さらに、プレファジングを実行する所定時間は、計算機資源等を考慮して事前に決定して固定してよいし、プレファジング実行中にその時点までの成果を考慮して動的に変更してもよい。
【0057】
さらに、ファジングエンジンを推薦する際、ファジングエンジンにおいて採用すべきオプションも推薦するようにしてもよい。ファジングエンジン推薦処理の説明は以上である。
【0058】
<ファジングエンジン推薦処理後の一連の処理について>
次に、
図7は、上述したファジングエンジン推薦処理後に実行する一連の処理の一例を説明するフローチャートである。
【0059】
当該一連の処理の前提として、ファジングエンジン推薦処理が実行済みであり、実行環境一覧133には、少なくとも一つのレコードが登録済みであるものとする。
【0060】
始めに、ファジングタスク登録部112が、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて、ファジングタスク登録処理を実行する(ステップS11)。
【0061】
図8は、ファジングタスク登録処理の一例を詳述するフローチャートである。まず、ファジングタスク登録部112は、ユーザによる対象プログラムの指定を受け付ける(ステップS21)。ここで、ユーザは、実行済みのファジングエンジン推薦処理時と同じプログラムを、対象プログラムに指定するものとする。
【0062】
次に、ファジングタスク登録部112は、ユーザによる対象プログラムを実行する際の実行環境の指定を受け付ける(ステップS22)。ここで、ユーザは、実行環境一覧133に登録済みの実行環境の中から一つの実行環境を指定するものにする。
【0063】
次に、ファジングタスク登録部112は、ユーザによるファジングエンジンの指定を受け付ける(ステップS23)。ここで、ユーザは、ファジングエンジン一覧132の中から、実行済みのファジングエンジン推薦処理によって推薦されたファジングエンジンを選択するものとする。
【0064】
次に、ファジングタスク登録部112は、タスクIDを発行し、当該タスクIDに対応付けて、ステップS21~S23で受け付けた対象プログラム、実行環境、及びファジングエンジンをファジングタスク一覧131に登録する。さらに、ファジングタスク登録部112は、当該タスクIDに対応付けて、登録日時の項目には現在の日時を登録し、ステータスの項目には「未実行」を登録する(ステップS24)。ファジングタスク登録処理の説明は以上である。
【0065】
なお、ステップS23で受け付けるファジングエンジンは単体でもよいし、複数でもよい。例えば、ファジングエンジンを複数指定し、複数用意した実行環境に対して複製した対象プログラムを展開し、別々のファジングエンジンで同時並列的にファジングを行うようなタスクを登録してもよい。
【0066】
図7に戻る。次に、ファジング実行部113が、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて、ファジング実行処理を実行し、その結果(例えば、対象プログラムに対する入力データと、入力データに応じて対象プログラムから出力された出力データとの組み合わせ等)をストレージ104等に格納する(ステップS12)。
【0067】
図9は、ファジング実行処理の一例を詳述するフローチャートである。まず、ファジング実行部113は、ファジングタスク一覧131を参照し、ステータスが「未実行」であるタスクを選択する(ステップS31)。
【0068】
次に、ファジング実行部113は、選択したタスクの登録日時の項目に現在の日時を登録し、ステータスの項目に「実行中」を登録し、登録済みのファジングエンジンを用い、登録済みの対象プログラムに対して、登録済みの実行環境で、ファジングを実行し、その結果をストレージ104等に格納する。そして、ファジング実行した後、ファジング実行部113は、選択したタスクの完了日時の項目に現在の日時を登録し、結果格納パスの項目にファジング実行処理の結果へのパスを登録する(ステップS32)。ファジング実行処理の説明は以上である。
【0069】
図7に戻る。次に、ファジング結果登録部114が、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて、ファジング結果登録処理を実行する(ステップS13)。
【0070】
図10は、ファジング結果登録処理の一例を説明するフローチャートである。まず、ファジング結果登録部114は、ファジングタスク一覧131を参照し、ステータスが「実行中」であるタスクを一つずつ順に選択する(ステップS41)。ここで、ステータスが「実行中」であるタスクは、ファジング実行処理(
図9)が開始済み(実行中、または終了)であって、ファジング結果登録処理が未実行であるタスクである。なお、ステータスが「実行中」であるタスクが存在しない場合、ファジング結果登録部114は、ここで当該ファジング結果登録処理を終了する。
【0071】
次に、ファジング結果登録部114は、ステップS41で選択したタスクに対するファジング実行処理が終了しているか否かを判定する(ステップS42)。この判定は、例えば、ファジングタスク一覧131の、ステップS41で選択したタスクに対応する結果格納パスの項目にパスが登録されている場合にはファジング実行処理が終了していると判定し、登録されていない場合にはファジング実行処理が終了していないと判定する。ここで、ステップS41で選択したタスクに対するファジング実行処理が終了していないと判定した場合(ステップS42でNO)、ファジング結果登録部114は、ステップS43~S45をスキップして、処理をステップS46に進める。
【0072】
反対に、ステップS41で選択したタスクに対するファジング実行処理が終了していると判定した場合(ステップS42でYES)、ファジング結果登録部114は、ファジングタスク一覧131の、ステップS41で選択したタスクに対応する結果格納パスからファジング実行処理の結果を取得する(ステップS43)。次に、ファジング結果登録部114は、ファジング実行処理の結果を分析し、実行パス数、クラッシュ数、及びバグ数を取得する(ステップS44)。
【0073】
次に、ファジング結果登録部114は、ファジング結果IDを発行し、当該ファジング結果IDに対応付けて、ステップS41で選択したタスクのタスクID、ステップS44で取得した実行パス数、クラッシュ数、及びバグ数をファジング結果一覧134に登録する。また、ファジング結果登録部114は、当該タスクIDに対応付けて、完了日時の項目に現在の日時を登録し、実行時間の項目に、対応するファジング実行処理の開始日時から現在までの経過時間を登録し、結果格納パスの項目にステップS43でファジング実行処理の結果を取得したパスをコピーする。さらに、ファジング結果登録部114は、ファジングタスク一覧131のステップS41で選択したタスクに対応するステータスを「完了」に更新する(ステップS45)。
【0074】
次に、ファジング結果登録部114は、ファジングタスク一覧131を参照し、ステータスが「実行中」であるタスクのうち、未選択のものが残っているか否かを判定する(ステップS46)。ここで、未選択のタスクが残っていると判定した場合(ステップS46でYES)、処理をステップS41に戻してステップS41以降を繰り返す。反対に、未選択のタスクが残っていないと判定した場合(ステップS46でNO)、ファジング結果登録部114は、当該ファジング結果登録処理を終了する。ファジング結果登録処理の説明は以上である。
【0075】
次に、
図11は、UI画面生成部115によるUI画面生成処理の一例を説明するフローチャートである。
【0076】
当該UI画面生成処理は、上述したファジングエンジン推薦処理後の一連の処理(
図7)から独立して別途実行することができる。当該UI画面生成処理は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。
【0077】
はじめに、UI画面生成部115が、ファジング結果一覧134を参照し、ファジング結果IDの一覧をユーザ端末20の画面に表示させてユーザに選択させる。そして、UI画面生成部115が、ユーザが選択したファジング結果IDに関連付けられたファジング結果、ファジングタスク、ファジングエンジン、及び実行環境についての情報をファジング結果一覧134、ファジングタスク一覧131、ファジングエンジン一覧132、実行環境一覧133から取得する(ステップS51)。
【0078】
次に、UI画面生成部115が、ステップS51で取得した各種の情報から構成されたUI画面1000(
図12)を生成し、例えば、Web画面としてユーザ端末20に表示させる(ステップS52)。UI画面生成処理の説明は以上である。
【0079】
次に、
図12は、UI画面1000の表示例を示している。UI画面1000には、表示欄1001~1005が設けられている。表示欄1001には、ユーザが選択したファジング結果IDが表示される。表示欄1002には、当該ファジング結果IDに関連付けられたファジング結果が表示される。表示欄1003には、当該ファジング結果IDに関連付けられたファジングタスクの情報が表示される。表示欄1004には、当該ファジング結果IDに関連付けられたファジングエンジンの情報が表示される。表示欄1005には、当該ファジング結果IDに関連付けられた実行環境の情報が表示される。ただし、図示の都合上、表示欄1002~1005に表示する情報は適宜省略している。
【0080】
なお、UI画面1000には、当該ファジング結果IDに関連する情報であれば、上述した情報以外の情報を表示してもよい。
【0081】
<ファジングエンジン登録処理について>
次に、
図13は、上述したファジングエンジン推薦処理(
図6)、及びファジングエンジン推薦処理後の一連の処理に先行して実行する必要があるファジングエンジン登録処理の一例を説明するフローチャートである。
【0082】
当該ファジングエンジン登録処理は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。はじめに、ファジングエンジン登録部116が、例えばユーザが指定したファジングエンジンに対し、ファジングエンジンIDを発行してファジングエンジン一覧132に登録し、当該ファジングエンジンIDに対応付けて、登録日時の項目に現在の日時を登録する(ステップS61)。
【0083】
次に、ファジングエンジン登録部116が、当該ファジングエンジンに関する情報(名称、実行パス、オプション等)をユーザから受け付ける(ステップS62)。次に、ファジングエンジン登録部116が、ステップS61で発行したファジングエンジンIDに対応付けて、ステップS62で受け付けたファジングエンジンに関する情報をファジングエンジン一覧132に登録する(ステップS63)。ファジングエンジン登録処理の説明は以上である。
【0084】
<実行環境登録処理について>
次に、
図14は、ファジングエンジン推薦処理後の一連の処理に先行して実行する必要がある実行環境登録処理の一例を説明するフローチャートである。
【0085】
当該実行環境登録処理は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。はじめに、実行環境登録部117が、実行環境IDを発行して実行環境一覧133に登録し、当該実行環境IDに対応付けて、登録日時の項目に現在の日時を登録する(ステップS71)。
【0086】
次に、実行環境登録部117が、実行環境に関する情報(名称、種別、アーキテクチャ、ビット数、OS、格納パス等)をユーザから受け付ける(ステップS72)。次に、実行環境登録部117が、ステップS71で発行した実行環境IDに対応付けて、ステップS72で受け付けた実行環境に関する情報を実行環境一覧133に登録する(ステップS73)。実行環境登録処理の説明は以上である。
【0087】
以上に説明したファジングPFシステム10-1によれば、ユーザのファジングや対象プログラムへの知見に依らず、対象プログラム毎に適したファジングエンジンを推薦可能である。また、様々な種別の対象プログラムに対して、複数のファジングエンジンを共通のインタフェースで透過的に取り扱うことができる。これにより、ファジングに関する実行コストや属人性を低減することが可能となる。
【0088】
<ファジング実行処理の変形例>
次に、
図15は、ファジング実行処理の変形例を説明するフローチャートである。当該変形例は、対象プログラムに対して、実行環境に加えて、様々な周辺環境をシミュレータ等で再現した上でファジングを実行するものである。
【0089】
周辺環境とは、例えば、対象プログラムに対してデータを入出力し得る機器(ハードウェア)をネットワーク12に接続したり、対象プログラムに対してデータを入出力し得る他のプログラム(ソフトウェア)を対象プログラムと同時に実行したりすることを指す。
【0090】
当該変形例は、上述したファジング実行処理の一例(
図9)のステップS31とステップS32の間に、ステップS101を追加したものである。
【0091】
当該、変形例は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。
【0092】
まず、ファジング実行部113は、ファジングタスク一覧131を参照し、ステータスが「未実行」であるタスクを選択する(ステップS31)。ファジング実行部113は、例えば、ユーザが指定した周辺環境を構築する(ステップS101)。次に、ファジング実行部113は、選択したタスクの登録日時の項目に現在の日時を登録し、ステータスの項目に「実行中」を登録してから、登録されているファジングエンジンを用い、登録されている対象プログラムに対して、登録されている実行環境で、ファジングを実行する。そして、ファジング実行した後、ファジング実行部113は、選択したタスクの完了日時の項目に現在の日時を登録し、結果格納パスの項目にファジング実行処理の結果へのパスを登録する(ステップS32)。ファジング実行処理の変形例の説明は以上である。
【0093】
ファジング実行処理の変形例によれば、ファジング実行時に単一の実行環境だけでなく周辺環境の再現を行うことができる。これにより、対象プログラムに対して、単体の動作では顕現し得ない動作を引き出上でファジングを実行することが可能となる。
【0094】
なお、ファジングエンジン推薦処理(プレファジング)においても、周辺環境を再現できるようにしてもよい。
【0095】
<本発明の第2の実施形態に係るファジングPFシステム10-2の構成例>
次に、
図16は、本発明の第2の実施形態に係るファジングPFシステム10-2の構成例を示している。
【0096】
ファジングPFシステム10-2は、ファジングPFシステム10-1(
図1)に対して、ファジングPF装置100のプロセッサ101が実現する機能ブロックに、機能追加部118、脆弱性補足部119、優先度設定部120、及び修正パッチ生成部121を追加したものである。また、ファジングPFシステム10-2は、ファジングPFシステム10-1に対して、ストレージ104に格納される情報として追加機能一覧135を追加したものである。
【0097】
ファジングPFシステム10-2の構成要素のうち、機能追加部118、脆弱性補足部119、優先度設定部120、及び修正パッチ生成部121、並びに追加機能一覧135以外のものについては、ファジングPFシステム10-1の構成要素と共通であって同一の符号を付しているので、その説明は省略する。
【0098】
機能追加部118は、ファジングと同時に、またはファジング後に実行する処理(追加機能)を登録する機能追加処理を実行する。脆弱性補足部119は、ユーザに対して対象プログラムの脆弱性に関する情報を提供する脆弱性補足処理を実行する。優先度設定部120は、ファジングにより顕現した脆弱性に対応する際の優先度を設定する優先度設定処理を実行する。修正パッチ生成部121は、ファジングにより顕現した脆弱性に対処するための修正パッチを生成する修正パッチ生成処理を実行する。追加機能一覧135は、追加機能に関する情報が記録される。
【0099】
図17は、追加機能一覧135の一例を示している。追加機能一覧135には、追加機能IDに対応付けて、登録日時、名称、実行パス、オプション、及び説明の各項目の情報が記録される。ただし、追加機能一覧135に記録される項目は上述した例に限られない。
【0100】
追加機能IDは、追加機能を一意に識別するための識別情報である。登録日時は、当該追加機能が登録された日時情報である。名称は、当該追加機能の名称である。実行パスは、当該追加機能を実行するためのパスを表す。
【0101】
オプションは、当該追加機能を実行するに際して選択可能なオプションを表す。例えば、オプション「-o」では、IPアドレス、及びポート番号を「IP_ADDR:PORT」の形式で与えることによって、監視対象のIPアドレスとポート番号を指定できる。オプション「-i」は、秒数を「INTERVAL_SEC」の形式で与えることによって、追加機能のインターバス時間を指定できる。説明は、当該追加機能の説明である。
【0102】
例えば、
図17の場合、追加機能IDが「0」の追加機能は、登録日時が「2019/01/01 14:30:00」、名称が「WatchDog」、実行パスが「plugin/wd」、オプションが「-o」、「-i」、その内容が対象プログラムの死活管理(例えば、クラッシュした場合の再起動等)であることを表している。
【0103】
次に、
図18は、機能追加部118による機能追加処理の一例を説明するフローチャートである。
【0104】
当該機能追加処理は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。はじめに、機能追加部118が、追加機能IDを発行して追加機能一覧135に登録し、当該追加機能IDに対応付けて、登録日時の項目に現在の日時を登録する(ステップS111)。
【0105】
次に、機能追加部118が、追加機能に関する情報(名称、実行パス、オプション、説明等)をユーザから受け付ける(ステップS112)。次に、機能追加部118が、ステップS111で発行した追加機能IDに対応付けて、ステップS112で受け付けた追加機能に関する情報を追加機能一覧135に登録する(ステップS113)。機能追加処理の説明は以上である。
【0106】
機能追加処理によれば、例えば、ファジング実行処理の最中に対象プログラムがクラッシュした場合等に当該対象プログラムを再起動することができる。
【0107】
次に、
図19は、脆弱性補足部119による脆弱性補足処理の一例を説明するフローチャートである。
【0108】
当該脆弱性補足処理は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。はじめに、脆弱性補足部119が、ファジング結果一覧134、及びファジングタスク一覧131を参照し、既にファジング結果が得られている対象プログラムの一覧をユーザ端末20の画面に表示させて、当該脆弱性補足処理の対象とする対象プログラムをユーザに選択させる。そして、脆弱性補足部119が、選択された対象プログラムに対するファジング実行処理の結果を取得する(ステップS121)。
【0109】
次に、脆弱性補足部119が、ファジング実行処理の結果から関連する脆弱性情報を取得する(ステップS122)。例えば、脆弱性補足部119が、顕現した脆弱性や脆弱性を誘発した入力等をキーワードとしてWeb検索を行い、検索結果を取得する。なお、Web検索を行う代わりに、または追加して、予めデータベースを用意し、当該データベースを参照するようにしてもよい。
【0110】
次に、脆弱性補足部119が、ステップS122で取得した検索結果をユーザ端末20の画面に表示させてユーザに提示する(ステップS123)。脆弱性補足処理の説明は以上である。
【0111】
脆弱性補足処理によれば、ユーザに対して、ファジング結果を分析して得られる実行パス数、クラッシュ数、バグ数に加えて、例えば、顕現した脆弱性や脆弱性を誘発した入力等をキーワードに関する情報をユーザに提供することができる。
【0112】
次に、
図20は、優先度設定部120による優先度設定処理の一例を説明するフローチャートである。
【0113】
当該優先度設定処理は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。はじめに、優先度設定部120が、ファジング結果一覧134、及びファジングタスク一覧131を参照し、既にファジング結果が得られている対象プログラムの一覧をユーザ端末20の画面に表示させて、当該優先度設定処理の対象とする対象プログラムをユーザに選択させる。そして、優先度設定部120が、選択された対象プログラムにそれぞれ対応するファジング実行処理の結果を取得する(ステップS131)。
【0114】
次に、優先度設定部120が、ファジング実行処理の結果に基づき、対象プログラムに顕在した複数の脆弱性に対し、優先的に対処すべき順序を表す優先度を付与する(ステップS132)。例えば、優先度設定部120が、対象プログラムに顕現した脆弱性のCVSSスコアを取得し、CVSSスコアがより高い方の脆弱性に対して高い優先度を付与する。ただし、例えば、プログラムの運用環境に応じて、対応の必要がない脆弱性については、一般的にその危険性が高くても優先度を下げて設定してもよい。
【0115】
次に、優先度設定部120が、ステップS133で付与した優先度をユーザ端末20の画面に表示させてユーザに提示する(ステップS133)。優先度設定処理の説明は以上である。
【0116】
優先度設定処理によれば、対象プログラムに複数の脆弱性が顕在する場合において、優先的に対処すべき脆弱性の順序をユーザに提示することができる。
【0117】
次に、
図21は、修正パッチ生成部121による修正パッチ生成処理の一例を説明するフローチャートである。
【0118】
当該修正パッチ生成処理は、例えば、ユーザによるユーザ端末20を用いた所定の開始指示操作に応じて開始される。はじめに、修正パッチ生成部121が、ファジング結果一覧134、及びファジングタスク一覧131を参照し、既にファジング結果が得られている対象プログラムの一覧をユーザ端末20の画面に表示させて、当該修正パッチ生成処理の対象とする対象プログラムをユーザに選択させる。そして、修正パッチ生成部121が、選択された対象プログラムに対するファジング実行処理の結果を取得する(ステップS141)。
【0119】
次に、修正パッチ生成部121が、ファジング実行処理の結果に基づき、修正パッチを生成する(ステップS142)。例えば、修正パッチ生成部121が、顕現した脆弱性情報を基にWeb検索を行って修正情報を取得したり、脆弱性を誘発した入力を棄却するようなパッチを生成したりする。
【0120】
次に、修正パッチ生成部121が、ステップS142で生成した修正パッチをユーザ端末20の画面に表示させてユーザに提示する(ステップS143)。修正パッチ生成処理の説明は以上である。
【0121】
修正パッチ生成処理によれば、対象プログラムに権限した脆弱性に対する修正パッチをユーザに提示することができる。
【0122】
ファジングPFシステム10-2によれば、ファジングPFシステム10-1と同様の作用、効果に加えて、種々の補足機能や支援機能をユーザに提供できる。よって、ファジングPFシステム10-2は、より平易な、あるいは高度なファジングを実行でき、ファジングに関する実行コストや属人性を低減することが可能となる。
【0123】
本発明は、上述した実施形態に限定されるものではなく、様々な変形が可能である。例えば、上述した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えたり、追加したりすることが可能である。
【0124】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0125】
10-1,10-2・・・ファジングPFシステム、12・・・ネットワーク、20・・・ユーザ端末、100・・・ファジングPF装置、101・・・プロセッサ、102・・・メモリ、103・・・プログラム、104・・・ストレージ、106・・・入出力装置、111・・・ファジングエンジン推薦部、112・・・ファジングタスク登録部、113・・・ファジング実行部、114・・・ファジング結果登録部、115・・・UI画面生成部、116・・・ファジングエンジン登録部、117・・・実行環境登録部、118・・・機能追加部、119・・・脆弱性補足部、120・・・優先度設定部、121・・・修正パッチ生成部、131・・・ファジングタスク一覧、132・・・ファジングエンジン一覧、133・・・実行環境一覧、134・・・ファジング結果一覧、135・・・追加機能一覧、1000・・・UI画面