(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2023-06-05
(45)【発行日】2023-06-13
(54)【発明の名称】コード類似性に基づくファジーテスト方法、装置及び記憶媒体
(51)【国際特許分類】
G06F 11/36 20060101AFI20230606BHJP
【FI】
G06F11/36 112
(21)【出願番号】P 2022182775
(22)【出願日】2022-11-15
【審査請求日】2022-11-15
(31)【優先権主張番号】202210401549.6
(32)【優先日】2022-04-18
(33)【優先権主張国・地域又は機関】CN
【早期審査対象出願】
(73)【特許権者】
【識別番号】520414480
【氏名又は名称】中国長江三峡集団有限公司
(74)【代理人】
【識別番号】110001807
【氏名又は名称】弁理士法人磯野国際特許商標事務所
(72)【発明者】
【氏名】李雨欣
(72)【発明者】
【氏名】庄宇飛
(72)【発明者】
【氏名】蘇一博
(72)【発明者】
【氏名】于▲チィー▼
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2004-062394(JP,A)
【文献】特開2015-179312(JP,A)
【文献】特開平08-241192(JP,A)
【文献】特開2018-136763(JP,A)
【文献】米国特許出願公開第2020/0065226(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
コード類似性に基づくファジーテスト方法であって、
テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップと、
類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するステップであって、前記類似コード情報はテスト対象のコードにおける類似コード、異常なクラッシュの位置コードにおける類似コード及びテスト対象のコードにおける脆弱性データベースコードに類似したコードを含むステップと、
前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップと、
前記テスト対象のコードにおける異常なクラッシュの位置コード及び類似コード情報における異常なクラッシュの位置コードに基づいて、テスト対象のコードにおける脆弱性情報を決定するステップと、を含み、
類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するステップは、
テスト対象のコードをコード行レベルのコードファイル及びコードブロックレベルのコードファイルに切り分けるステップと、
コード行レベルのコードファイルに対して類似度分析を行い、第1の類似コードを得るステップと、
コードブロックレベルのコードファイルに対して類似度分析を行い、第2の類似コードを得るステップと、
第1の類似コード及び第2の類似コードに基づきテスト対象のコードにおける類似コード情報を得るステップと、
異常なクラッシュの位置コードをコード行レベル及びコードブロックレベルにおいてテスト対象のコードと類似度分析を行い、異常なクラッシュの位置コードにおけるコード行類似コード及びコードブロック類似コードを得るステップと、
テスト対象のコードを予め設定された脆弱性データベースにおけるコードと類似度分析を行い、テスト対象のコードにおける脆弱性データベースコードに類似したコードを得るステップと、を含み、
前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップは、
コードブロックレベルにおけるコードブロックと類似コード情報におけるコードとの間の距離を計算するステップと、
グレイボックスファジーテストにおける各シードが通ったコードブロックの対応する距離の平均値を計算するステップと、
平均値が最も小さい場合の対応するシードを選択して変異を行った後にテスト対象のコードに入力してファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップと、
【請求項2】
テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップは、
グレイボックスファジーテストアルゴリズムに基づきテスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップを含む、ことを特徴とする請求項1に記載のコード類似性に基づくファジーテスト方法。
【請求項3】
グレイボックスファジーテストアルゴリズムに基づきテスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップは、
リソーススケジューリングアルゴリズムを用いてテスト対象のコードにおけるファジーテストを行う条件文を選択するステップと、
初期シードに対して汚染追跡を行い、前記初期シードにおける条件文への入りに影響を与えるキーバイトを得るステップと、
勾配降下アルゴリズムを用いて前記キーバイトに対して変異を行い、変異シードを得るステップと、
テスト対象のコードにおける条件文に入ることができる解を得るまで、変異シードをテスト対象のコードに入力して実行するステップと、
得られた解をファジーテストを行うように選択された文に入力し、予め設定された時間内に異常なクラッシュをトリガーできなくなるまで、上記汚染追跡、シード変異及び実行のプロセスを繰り返すステップと、を含む、ことを特徴とする請求項2に記載のコード類似性に基づくファジーテスト方法。
【請求項4】
平均値が最も小さい場合の対応するシードを選択して変異を行った後にテスト対象のコードに入力してファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップは、
各シードの対応する平均値に基づいて平均値が最も小さい場合の対応するシードを類似コード情報のファジーテストのテストシードとして選択するステップと、
勾配降下アルゴリズムを用いて前記テストシードに対して変異を行い、変異シードを得るステップと、
グレイボックスファジーテストアルゴリズムに基づき、変異シードを用いてテスト対象のコードに入力しファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップと、を含む、ことを特徴とする請求項1に記載のコード類似性に基づくファジーテスト方法。
【請求項5】
コード類似性に基づくファジーテスト装置であって、
テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るための第1のテストモジュールと、
類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するための類似分析モジュールであって、前記類似コード情報はテスト対象のコードにおける類似コード、異常なクラッシュの位置コードにおける類似コード及びテスト対象のコードにおける脆弱性データベースコードに類似したコードを含む類似分析モジュールと、
前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るための第2のテストモジュールと、
前記テスト対象のコードにおける異常なクラッシュの位置コード及び類似コード情報における異常なクラッシュの位置コードに基づいて、テスト対象のコードにおける脆弱性情報を決定するための脆弱性決定モジュールと、を含み、
類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するステップは、
テスト対象のコードをコード行レベルのコードファイル及びコードブロックレベルのコードファイルに切り分けるステップと、
コード行レベルのコードファイルに対して類似度分析を行い、第1の類似コードを得るステップと、
コードブロックレベルのコードファイルに対して類似度分析を行い、第2の類似コードを得るステップと、
第1の類似コード及び第2の類似コードに基づきテスト対象のコードにおける類似コード情報を得るステップと、
異常なクラッシュの位置コードをコード行レベル及びコードブロックレベルにおいてテスト対象のコードと類似度分析を行い、異常なクラッシュの位置コードにおけるコード行類似コード及びコードブロック類似コードを得るステップと、
テスト対象のコードを予め設定された脆弱性データベースにおけるコードと類似度分析を行い、テスト対象のコードにおける脆弱性データベースコードに類似したコードを得るステップと、を含み、
前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップは、
コードブロックレベルにおけるコードブロックと類似コード情報におけるコードとの間の距離を計算するステップと、
グレイボックスファジーテストにおける各シードが通ったコードブロックの対応する距離の平均値を計算するステップと、
平均値が最も小さい場合の対応するシードを選択して変異を行った後にテスト対象のコードに入力してファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップと、
【請求項6】
請求項1~4のいずれか1項に記載のコード類似性に基づくファジーテスト方法
をコンピュータに実行させるためのコンピュータ命令が記憶されている、ことを特徴とするコンピュータ可読記憶媒体。
【請求項7】
電子機器であって、メモリ及びプロセッサを含み、前記メモリと前記プロセッサは互いに通信可能に接続され、前記メモリにはコンピュータ命令が記憶されており、前記プロセッサは前記コンピュータ命令を実行することにより請求項1~4のいずれか1項に記載のコード類似性に基づくファジーテスト方法を実行する、ことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータセキュリティ技術分野に関し、具体的には、コード類似性に基づくファジィテスト方法、装置及び記憶媒体に関する。
【背景技術】
【0002】
ソフトウェアクローニングとはソースコードをコピーしてペーストすることで再利用することである。これらのクローンは、新しい環境や用途に適応するように少し改変されることがある。コードクローニングの問題は、コピー毎にオリジナルドキュメントのエラーを修正しなければならないため、拡張や調整などの変更を行う場合も複数回行う必要がある。しかし、作成者は、通常、コードコピーの位置を記録しない。この場合、これらを検出することは非常に困難である。
【0003】
コードの再利用により、ソフトウェアシステムに複数の類似するコードが発生し、それによりソフトウェアシステムにおける全ての脆弱性を修復することが困難であり、すなわち脆弱性は複数のソフトウェアプログラムに存在する可能性があり、十分に追跡できない。これは類似する脆弱性がプログラムにおける異なる場所に潜むことを引き起こす。すべての脆弱性インスタンスを網羅することができないため、すべての脆弱性を修復プログラムで簡単に解決することはできない。追跡コードを再利用するのが簡単であるような気がするが、プログラム数が多いため、実際には管理できない。
【発明の概要】
【発明が解決しようとする課題】
【0004】
これに鑑みて、本発明の実施例は、従来技術における、コードの再利用のためソフトウェアシステムにおいて全ての脆弱性検出を行う効率が低くなるという技術的問題を解決するように、コード類似性に基づくファジーテスト方法、装置及び記憶媒体を提供する。
【課題を解決するための手段】
【0005】
本発明が提供する技術的解決手段は以下のとおりである。
【0006】
本発明の実施例の第1態様は、テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップと、類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するステップであって、前記類似コード情報はテスト対象のコードにおける類似コード、異常なクラッシュの位置コードにおける類似コード及びテスト対象のコードにおける脆弱性データベースコードに類似したコードを含むステップと、前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップと、前記テスト対象のコードにおける異常なクラッシュの位置コード及び類似コード情報における異常なクラッシュの位置コードに基づいて、テスト対象のコードにおける脆弱性情報を決定するステップと、を含むコード類似性に基づくファジーテスト方法を提供する。
【0007】
選択的には、テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップは、グレイボックスファジーテストアルゴリズムに基づきテスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップを含む。
【0008】
選択的には、グレイボックスファジーテストアルゴリズムに基づきテスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップは、リソーススケジューリングアルゴリズムを用いてテスト対象のコードにおけるファジーテストを行う条件文を選択するステップと、初期シードに対して汚染点追跡を行い、前記初期シードにおける条件文への入りに影響を与えるキーバイトを得るステップと、勾配降下アルゴリズムを用いて前記キーバイトに対して変異を行い、変異シードを得るステップと、テスト対象のコードにおける条件文に入ることができる解を得るまで、変異シードをテスト対象のコードに入力して実行するステップと、得られた解をファジーテストを行うように選択された文に入力し、予め設定された時間内に異常なクラッシュをトリガーできなくなるまで、上記汚染点追跡、シード変異及び実行のプロセスを繰り返すステップと、を含む。
【0009】
選択的には、類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するステップは、テスト対象のコードをコード行レベルのコードファイル及びコードブロックレベルのコードファイルに切り分けるステップと、コード行レベルのコードファイルに対して類似度分析を行い、第1の類似コードを得るステップと、コードブロックレベルのコードファイルに対して類似度分析を行い、第2の類似コードを得るステップと、第1の類似コード及び第2の類似コードに基づきテスト対象のコードにおける類似コード情報を得るステップと、を含む。
【0010】
選択的には、類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するステップは、異常なクラッシュの位置コードをコード行レベル及びコードブロックレベルにおいてテスト対象のコードと類似度分析を行い、異常なクラッシュの位置コードにおけるコード行類似コード及びコードブロック類似コードを得るステップと、テスト対象のコードを予め設定された脆弱性データベースにおけるコードと類似度分析を行い、テスト対象のコードにおける脆弱性データベースコードに類似したコードを得るステップと、をさらに含む。
【0011】
選択的には、前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップは、コードブロックレベルにおけるコードブロックと類似コード情報におけるコードとの間の距離を計算するステップと、グレイボックスファジーテストにおける各シードが通ったコードブロックの対応する距離の平均値を計算するステップと、平均値が最も小さい場合の対応するシードを選択して変異を行った後にテスト対象のコードに入力してファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップと、を含む。
【0012】
選択的には、平均値が最も小さい場合の対応するシードを選択して変異を行った後にテスト対象のコードに入力してファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップは、各シードの対応する平均値に基づいて平均値が最も小さい場合の対応するシードを類似コード情報のファジーテストのテストシードとして選択するステップと、勾配降下アルゴリズムを用いて前記テストシードに対して変異を行い、変異シードを得るステップと、グレイボックスファジーテストアルゴリズムに基づき、変異シードを用いてテスト対象のコードに入力しファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップと、を含む。
【0013】
選択的には、以下の式により、コードブロックレベルにおけるコードブロックと類似コード情報におけるコードとの間の距離を計算する
【数1】
(式中、コードブロックレベルの目標距離d
b(m,T
b)はコードブロックレベルにおけるコードブロックmと類似コード情報におけるコードとの間の距離を表し、T
bは類似コード情報におけるコード集合を表し、Tはコードブロックmが呼び出した関数iの制御フローグラフG
iにおけるコードブロックの集合を表し、cは関数レベルの距離を拡大する定数であり、N(m)はコードブロックmが呼び出した関数の集合を表し、
【数2】
式中、R(n,T
f)は関数呼び出しグラフにおける関数nから到達可能なすべての目標関数の集合を表す)。
【0014】
以下の式により、グレイボックスファジーテストにおける各シードが通ったコードブロックの対応する距離の平均値を計算する
【数3】
【0015】
本発明の実施例の第2態様は、テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るための第1のテストモジュールと、類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するための類似分析モジュールであって、前記類似コード情報はテスト対象のコードにおける類似コード、異常なクラッシュの位置コードにおける類似コード及びテスト対象のコードにおける脆弱性データベースコードに類似したコードを含む類似分析モジュールと、前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るための第2のテストモジュールと、前記テスト対象のコードにおける異常なクラッシュの位置コード及び類似コード情報における異常なクラッシュの位置コードに基づいて、テスト対象のコードにおける脆弱性情報を決定するための脆弱性決定モジュールと、を含むコード類似性に基づくファジーテスト装置を提供する。
【0016】
本発明の実施例の第3態様は、本発明の実施例の第1態様及び第1態様のいずれかに記載のコード類似性に基づくファジーテスト方法を前記コンピュータに実行させるためのコンピュータ命令が記憶されているコンピュータ可読記憶媒体を提供する。
【0017】
本発明の実施例の第4態様は、メモリ及びプロセッサを含み、前記メモリと前記プロセッサは互いに通信可能に接続され、前記メモリにはコンピュータ命令が記憶されており、前記プロセッサは前記コンピュータ命令を実行することにより本発明の実施例の第1態様及び第1態様のいずれかに記載のコード類似性に基づくファジーテスト方法を実行する電子機器を提供する。
【発明の効果】
【0018】
本発明に係る技術的解決手段は、以下の効果を有する。
【0019】
本発明の実施例に係るコード類似性に基づくファジーテスト方法、装置及び記憶媒体は、類似コード情報をガイドとして、テスト対象のコードと類似コード情報に対してファジーテストを行い、そのうち、コード類似度分析が静的方法であり、ファジーテストが動的方法であり、該ファジーテスト方法は2つの方法を組み合わせたものであり、コード類似度の計算はファジーテストに目標を提供し、ファジーテストはコード類似度の計算にサンプルを提供し、2つの方法を組み合わせることにより、コードの再使用やコピーによって引き起こされる脆弱性を可能な限り見つけるという効果が実現される。そして、プログラムの作成者は大規模なプロジェクトのコードプログラムを作成する過程で、コードのコピーや再使用を行うことが多く、この現象はプログラムの安全性の問題をもたらしている。該方法はコード類似性を導入することにより、プログラムコードに対して多角度的な類似性研究を行い、そのうちの潜在的な隠れた危険コードを比較全面的に見つけ、ソフトウェア脆弱性を発見する可能性を大幅に向上させるとともに、ファジーテストの脆弱性発見の速度を加速させ、ファジーテストの効率は効果的に向上する。
【0020】
本発明の具体的な実施形態又は従来技術における技術的解決手段をより明確に説明するために、以下、具体的な実施形態又は従来技術の記述のために使用した図面を簡単に説明するが、明らかに、以下に記述した図面は本発明のいくつかの実施形態であり、当業者にとって、創造的な労力をせずに、これらの図面に基づいて他の図面を得ることもできる。
【図面の簡単な説明】
【0021】
【
図1】本発明の実施例に係るコード類似性に基づくファジーテスト方法のフローチャートである。
【
図2】本発明の別の実施例に係るコード類似性に基づくファジーテスト方法のフローチャートである。
【
図3】本発明の別の実施例に係るコード類似性に基づくファジーテスト方法のフローチャートである。
【
図4】本発明の別の実施例に係るコード類似性に基づくファジーテスト方法のフローチャートである。
【
図5】本発明の実施例に係るコード類似性に基づくファジーテスト装置の構造ブロック図である。
【
図6】本発明の実施例に係るコンピュータの読み取り可能な記憶媒体の構造概略図である。
【
図7】本発明の実施例に係る電子機器の構造概略図である。
【発明を実施するための形態】
【0022】
当業者が本発明の解決手段をより良好に理解できるために、以下、本発明の実施例における図面を参照しながら、本発明の実施例における技術的解決手段を明確で完全に記述し、明らかなように、記述される実施例は本発明の一部の実施例に過ぎず、すべての実施例ではない。本発明の実施例に基づき、当業者であれば、創造的な労働を必要とせずに取得するすべてのその他の実施例はいずれも本発明の保護範囲に属する。
【0023】
本発明の明細書、特許請求の範囲及び上記図面における用語「第1」、「第2」、「第3」、「第4」等は類似する対象を区別するために用いられ、特定の順序又は優先順位を記述するために用いられる必要はない。ここで記述される実施例がここで示され又は記述されたもの以外の順序で実施されることを可能にするために、このように使用された数字は適した場合であれば互いに取り替え可能なことは、理解されるべきである。また、用語「含む」と「有する」及びそれらの任意の変形は、非排他的な包含物をカバーすることを意図し、たとえば、一連のステップ又はユニットを含む過程、方法、システム、製品又は機器は明確に示されるこれらのステップ又はユニットに限定される必要がなく、明瞭に示されていない又はこれらの過程、方法、製品又は機器に固有の他のステップ又はユニットを含んでもよい。
【0024】
本発明の実施例によれば、コード類似性に基づくファジーテスト方法を提供し、説明する必要があるものとして、図面のフローチャートに示されるステップはたとえば一組のコンピュータ実行可能命令のコンピュータシステムに実行され得、且つ、フローチャートには論理的順序が示されているが、場合によって、ここでの順序と異なる順序で示され又は記述されるステップを実行することができる。
【0025】
本実施例では、コード類似性に基づくファジーテスト方法を提供し、コンピュータ、携帯電話、タブレットPC等の電子機器に適用されており、
図1は本発明の実施例に係るコード類似性に基づくファジーテスト方法のフローチャートであり、
図1に示すように、該方法は以下のステップを含む。
【0026】
ステップS101:テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得る。具体的に、テスト対象のコードに対してファジーテストを行う時に、初期シードを選定しリソーススケジューリングアルゴリズムを用いて条件文を選択してから、初期シードをテスト対象のコードに入力し実行する。実行中、異常なクラッシュが検出された場合にプログラム脆弱性が発見されたと見なす。これにより、脆弱性情報を決定するために、ファジーテスト時のテスト対象のコードにおけるトリガーされた異常なクラッシュの位置コードを収集することができる。
【0027】
ステップS102:類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定し、前記類似コード情報はテスト対象のコードにおける類似コード、異常なクラッシュの位置コードにおける類似コード及びテスト対象のコードにおける脆弱性データベースコードに類似したコードを含む。
【0028】
具体的に、コードの再使用により、ソフトウェアシステムには複数の類似又は同一のコードを含む可能性がある。ソフトウェアシステムにおけるコードのすべての脆弱性をより効率的且つ包括的に検出するために、テスト対象のコードに対して類似性分析を行って、テスト対象のコードにおけるすべての類似コードを取得することができる。同時に、テスト対象のコードを脆弱性があると検出されたコードと類似分析を行い、得られる類似コード情報は後続のファジーテスト過程を指導することができ、それによりファジーテストの効率が向上する。
【0029】
類似コード情報の決定は具体的に、テスト対象のコードをコード行レベルのコードファイル及びコードブロックレベルのコードファイルに切り分けるステップと、コード行レベルのコードファイルに対して類似度分析を行い、第1の類似コードを得るステップと、コードブロックレベルのコードファイルに対して類似度分析を行い、第2の類似コードを得るステップと、第1の類似コード及び第2の類似コードに基づきテスト対象のコードにおける類似コード情報を得るステップと、異常なクラッシュの位置コードをコード行レベル及びコードブロックレベルにおいてテスト対象のコードと類似度分析を行い、異常なクラッシュの位置コードにおけるコード行類似コード及びコードブロック類似コードを得るステップと、テスト対象のコードを予め設定された脆弱性データベースにおけるコードと類似度分析を行い、テスト対象のコードにおける脆弱性データベースコードに類似したコードを得るステップと、を含む。
【0030】
テスト対象のコードに対して類似性分析を行う時に、コード行レベル及びコードブロックレベルという2つのレベルに切り分けられる。コード行レベルのコードファイルは複数のコード行ファイルを含み、複数のコード行ファイルに対して類似度分析を行い、複数のコード行における類似コードを決定し、同様に、コードブロックファイルに含まれる複数のコードブロックが類似度分析を行うと複数の類似したコードブロックを得ることもできる。検出された異常なクラッシュの位置コードに対して同様にコード行レベル及びコードブロックレベルにおいて類似性分析を行う。この他、テスト対象のコードのみを考慮すると脆弱性があるすべての位置コードを検出できない恐れがあるので、テスト対象のコードを予め設定された脆弱性データベースにおけるコードと類似度分析を行うことができる。該予め設定された脆弱性データベースは既存の知られている脆弱性データベース、たとえばCVE(Common Vulnerabilities & Exposures、共通の脆弱性及びリスク)脆弱性データベース及び脆弱性修復プログラムデータベース(VPD、Virtural Private Database)等であってもよい。
【0031】
類似度分析を行う時に、既存の類似度分析ツールで実現することができ、たとえば、simツールを用いるか、又はその他のツール又はアルゴリズムで類似度分析を行う。simツールで類似度分析を行う場合、その主な分析プロセスは、入力をトークンに変換し、循環的に読み取ってトークンシーケンスを取得し、ハッシュテーブルを使用してフォワード参照テーブルを構築しマッチングを行うことを含む。
【0032】
ステップS103:前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得る。具体的に、上記ステップでテスト対象のコードにおけるすべてのコード類似情報を決定した後に、該類似コードを新たなテスト対象のコードとしてファジーテストを行い続け、該類似コード情報における異常なクラッシュの位置コードを得る。
【0033】
ステップS104:前記テスト対象のコードにおける異常なクラッシュの位置コード及び類似コード情報における異常なクラッシュの位置コードに基づいて、テスト対象のコードにおける脆弱性情報を決定する。ファジーテストを行う時に、異常なクラッシュが発生するとプログラム脆弱性が発見されたと見なすため、テスト対象のコードにおける異常なクラッシュの位置コード及び類似コード情報を利用した後に発見された異常なクラッシュの位置コードを収集することによりテスト対象のコードにおけるプログラム脆弱性を決定することができる。
【0034】
本発明の実施例に係るコード類似性に基づくファジーテスト方法は、類似コード情報をガイドとして、テスト対象のコードと類似コード情報に対してファジーテストを行い、そのうち、コード類似度分析が静的方法であり、ファジーテストが動的方法であり、該ファジーテスト方法は2つの方法を組み合わせたものであり、コード類似度の計算はファジーテストに目標を提供し、ファジーテストはコード類似度の計算にサンプルを提供し、2つの方法を組み合わせることにより、コードの再使用やコピーによって引き起こされる脆弱性を可能な限り見つけるという効果が実現される。そして、プログラムの作成者は大規模なプロジェクトのコードプログラムを作成する過程で、コードのコピーや再使用を行うことが多く、この現象はプログラムの安全性の問題をもたらしている。該方法はコード類似性を導入することにより、プログラムコードに対して多角度的な類似性研究を行い、そのうちの潜在的な隠れた危険コードを比較全面的に見つけ、ソフトウェア脆弱性を発見する可能性を大幅に向上させるとともに、ファジーテストの脆弱性発見の速度を加速させ、ファジーテストの効率は効果的に向上する。
【0035】
一態様では、テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップは、グレイボックスファジーテストアルゴリズムに基づきテスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップを含む。具体的に、グレイボックスファジーテストを用いる場合、グレイボックステストツールAngoraで具体的なファジーテスト過程を実現することができ、又は他のファジーテストツールを用いてもよい。Angoraの主な目標は非記号実行の手段によってパス制約を解決することで、アクセスのコード被覆領域を増すことである。パス制約を効果的に解決するために、Angoraテストツールは主に、効率的なバイトレベル汚染点追跡、コンテキスト依存のパス分岐検出、勾配降下に基づく検索及び入力長さのインテリジェントな修正等といういくつかのキー技術を導入している。
【0036】
図2に示すように、グレイボックスファジーテストアルゴリズムに基づきテスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップは以下のステップを含む。
【0037】
ステップS201:リソーススケジューリングアルゴリズムを用いてテスト対象のコードにおけるファジーテストを行う条件文を選択する。グレイボックスファジーテストアルゴリズムを選択する場合、Angoraにおいてリソーススケジューリングアルゴリズムを使用してテスト対象のコードからファジーテストを行うコード文を選択することができる。すなわち、シードがどの条件文に入るかを選択する。リソーススケジューリングアルゴリズムを用いることにより、Angoraはテスト対象のコードにおいて新たな発見されていないコードブロックを最大確率で見つけることができる。具体的に、リソーススケジューリングアルゴリズムについて、従来の知られているアルゴリズムを選択して実現されてもよく、本発明の実施例はここで繰り返し説明しない。
【0038】
ステップS202:初期シードに対して汚染点追跡を行い、前記初期シードにおける条件文への入りに影響を与えるキーバイトを得る。具体的に、初期シードはグレイボックスファジーテストを行う前に予め決定されてもよい。コード文を選択した後、初期シードを入力し、その後汚染点追跡アルゴリズムを用いて初期シードにおける条件文への入りに影響を与えるキーバイトを得る。そのうち、分岐条件文はテスト対象のコードにおける判断文の判断条件であり、たとえばプログラムにおけるif、switch等である。汚染点追跡により初期シードにおける重要な部分のスクリーニングを実現することができ、具体的な汚染点追跡方法については従来の知られている方法を用いることができる。
【0039】
ステップS203:勾配降下アルゴリズムを用いて前記キーバイトに対して変異を行い、変異シードを得る。初期シードからスクリーニングされたキーバイトについては、勾配降下アルゴリズムを用いて変異を行って、変異シードを得ることができる。同様に、該勾配降下アルゴリズムは従来の知られているアルゴリズムを用いてもよい。
【0040】
ステップS204:テスト対象のコードにおける条件文に入ることができる解を得るまで、変異シードをテスト対象のコードに入力して実行する。そのうち、変異シードをテスト対象のコードに入力して実行し、条件文を実行した後にコードブロックが続くと条件文に入る解が見つけられる。該解は入力された変異シードである。
【0041】
ステップS205:得られる解をファジーテストを行うように選択された次の条件文に入力し、予め設定された時間内に異常なクラッシュをトリガーできなくなるまで、上記汚染点追跡、シード変異及び実行のプロセスを繰り返す。具体的に、対応する解を得た後、上記ステップを繰り返し続け、次のファジーテストを行う文を選択し、得られる解もしくは対応する変異シードを該文に入力し、上記ステップの汚染点追跡、シード変異及び解の取得のプロセスを繰り返し、その後、得られる解を次のファジーテストを行う文に入力し、上記プロセスを連続的に繰り返して、予め設定された時間内に異常なクラッシュをトリガーできなくなるまで、該プロセスを終了する。そのうち、該予め設定された時間は実際の状況に応じて決定される。
【0042】
一実施形態では、
図3に示すように、前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップは以下のステップを含む。
【0043】
ステップS301:コードブロックレベルにおけるコードブロックと類似コード情報におけるコードとの間の距離を計算する。具体的に、テスト対象のコードにおける異常なクラッシュの位置コードをより迅速に決定するために、指向性計算の方式で対応するプロセスを短縮することができる。先ず、上記切り分けられたコードブロックと決定された類似コード情報におけるコードとの間の距離を計算する。そのうち、該距離を計算する際に、静的処理プロセスで計算してもよく、すなわち、非実行プロセスで対応する距離を計算する。
【0044】
具体的に、上記切り分けられたコードブロックと決定された類似コード情報におけるコードとの間の距離はプログラム制御フローグラフにおける2つのコードブロックの間の距離によって決定される。そのうち、プログラム制御フローグラフは制御フローグラフとも呼ばれ、1つのプロセス又はプログラムの抽象的な表現であり、コンパイラに使用される抽象的なデータ構造であり、コンパイラにより内部にメンテナンスされており、1つのプログラムの実行中にトラバーサルするすべてのパスを表す。それはグラフの形態で1つのプロセス内のすべての基本ブロックが実行する可能性のある流れを表し、1つのプロセスのリアルタイム実行プロセスを反映することもできる。
【0045】
コードブロックレベルにおけるコードブロックと類似コード情報におけるコードとの間の距離は、コードブロックレベルの目標距離d
b(m,T
b)とも呼ばれ、1つのコードブロックmから類似コード情報におけるコードである目標コードブロック集合T
bまでの距離として定義され、その計算式は、
【数4】
で表される。
【0046】
【0047】
【0048】
【数5】
で表される(式中、R(n,T
f)は呼び出しグラフにおけるnから到達可能なすべての目標関数の集合である)。
【0049】
ステップS302:グレイボックスファジーテストにおける各シードが通ったコードブロックの対応する距離の平均値を計算する。上記ステップS201~ステップS205において、計算により複数の解もしくは複数の変異シードが得られており、これらの変異シードは上記ステップにおいてそれぞれテスト対象のコードに入力されて実行され、各変異シードがテスト対象のコードにおいて実行される時に通ったコードブロックをそれぞれ決定し、各コードブロックについてステップS301の計算により1つの距離を得ることができ、次に、各変異シードが通ったコードブロックの対応する距離に対して加算を行って平均値を求めることにより、各変異シードについて1つの距離値(対応する平均値)を得ることができる。
【0050】
【0051】
ステップS303:平均値が最も小さい場合の対応するシードを選択して変異を行った後にテスト対象のコードに入力してファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得る。具体的に、上記計算により各変異シードの対応する距離値を得て、その後、これらの距離値を比較して、距離値が最も小さい場合の対応する変異シードを選択し、該変異シードに対して変異を行った後に実行プログラムに入力することにより対応する目標コード箇所(類似コード情報)を位置決めすることができる。そのうち、変異際に勾配降下アルゴリズムを用いて実現されてもよく、その後、グレイボックスファジーテストアルゴリズムに基づき、変異シードを用いてテスト対象のコードに入力しファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得る。
【0052】
1つの実施形態では、
図4に示すように、コード類似性に基づく該ファジーテスト方法は以下のプロセスで実現される。初期シードに対して変異を行った後に被テスト又はテスト対象プログラムに入力してAngoraにおいてグレイボックスファジーテストを行い、その後、グレイボックスファジーテストで得られる異常なクラッシュの位置コードを類似度分析ツールで分析し、一部の類似コード情報を得、同時に、テスト対象プログラムをコード用切り分けツールで切り分けてマルチレベルのコードファイル(コードブロックレベルのコードファイル及びコード行レベルのコードファイルを含む)を得、切り分けられたマルチレベルのコードファイル及び予め設定された脆弱性データベースを同様に類似度分析ツールで分析し、一部の類似コード情報を得、切り分けられたマルチレベルのコードファイルに対して同様に類似コード情報に加えて完成した類似コード情報を得る。得られた類似コード情報に対して指向性計算(距離及び平均値を計算する)により、Angoraに基づいてファジーテストを行い、最終的にテスト対象のコードにおける異常なクラッシュの位置コードを得る。
【0053】
本発明の実施例はコード類似性に基づくファジーテスト装置をさらに提供し、
図5に示すように、該装置は、第1のテストモジュールと、類似分析モジュールと、第2のテストモジュールと、脆弱性決定モジュールとを含む。
【0054】
第1のテストモジュールは、テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るために用いられ、具体的な内容は上記方法実施例の対応する部分を参照でき、ここで繰り返し説明しない。
【0055】
類似分析モジュールは、類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するために用いられ、前記類似コード情報はテスト対象のコードにおける類似コード、異常なクラッシュの位置コードにおける類似コード及びテスト対象のコードにおける脆弱性データベースコードに類似したコードを含み、具体的な内容は上記方法実施例の対応する部分を参照でき、ここで繰り返し説明しない。
【0056】
第2のテストモジュールは、前記類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るために用いられ、具体的な内容は上記方法実施例の対応する部分を参照でき、ここで繰り返し説明しない。
【0057】
脆弱性決定モジュールは、前記テスト対象のコードにおける異常なクラッシュの位置コード及び類似コード情報における異常なクラッシュの位置コードに基づいて、テスト対象のコードにおける脆弱性情報を決定するために用いられる。具体的な内容は上記方法実施例の対応する部分を参照でき、ここで繰り返し説明しない。
【0058】
本発明の実施例に係るコード類似性に基づくファジーテスト装置は、類似コード情報をガイドとして、テスト対象のコードと類似コード情報に対してファジーテストを行い、そのうち、コード類似度分析が静的方法であり、ファジーテストが動的方法であり、該ファジーテスト装置は2つの方法を組み合わせたものであり、コード類似度の計算はファジーテストに目標を提供し、ファジーテストはコード類似度の計算にサンプルを提供し、2つの方法を組み合わせることにより、コードの再使用やコピーによって引き起こされる脆弱性を可能な限り見つけるという効果が実現される。そして、プログラムの作成者は大規模なプロジェクトのコードプログラムを作成する過程で、コードのコピーや再使用を行うことが多く、この現象はプログラムの安全性の問題をもたらしている。該装置はコード類似性を導入することにより、プログラムコードに対して多角度的な類似性研究を行い、そのうちの潜在的な隠れた危険コードを比較全面的に見つけ、ソフトウェア脆弱性を発見する可能性を大幅に向上させるとともに、ファジーテストの脆弱性発見の速度を加速させ、ファジーテストの効率は効果的に向上する。
【0059】
本発明の実施例に係るコード類似性に基づくファジーテスト装置の機能についての記述の細部は上記実施例におけるコード類似性に基づくファジーテスト方法についての記述を参照する。
【0060】
本発明の実施例は記憶媒体をさらに提供し、
図6に示すように、プロセッサにより実行されると上記実施例におけるコード類似性に基づくファジーテスト方法のステップを実現するコンピュータプログラム601が記憶されている。該記憶媒体にはオーディオ/ビデオストリームデータ、特徴フレームデータ、相互作用要求シグナリング、暗号化されたデータ及び予め設定されたデータの大きさ等が記憶されている。そのうち、記憶媒体は磁気ディスク、光ディスク、読み出し専用メモリ(Read-Only Memory、ROM)、ランダムアクセスメモリ(Random Access Memory、RAM)、フラッシュメモリ(Flash Memory)、ハードディスク(Hard Disk Drive、HDDと略される)又はソリッドステートドライブ(Solid-State Drive、SSD)等であってもよく、前記記憶媒体はさらに上記の種類のメモリの組み合わせを含んでもよい。
【0061】
当業者であれば、理解できるように、上記実施例の方法における全部又は一部のプロセスの実現は、コンピュータプログラムによって関連ハードウェアに命令を出して完成することができ、前記プログラムはコンピュータ可読記憶媒体等に記憶されてもよく、該プログラムが実行されるとき、上記各方法の実施例のプロセスを含んでもよい。そのうち、前記記憶媒体は磁気ディスク、光ディスク、読み出し専用メモリ(Read-Only Memory、ROM)、ランダムアクセスメモリ(Random AccessMemory、RAM)、フラッシュメモリ(Flash Memory)、ハードディスク(Hard Disk Drive、HDDと略される)又はソリッドステートドライブ(Solid-State Drive、SSD)等であってもよく、前記記憶媒体はさらに上記種類のメモリの組み合わせを含んでもよい。
【0062】
本発明の実施例は電子機器をさらに提供し、
図7に示すように、該電子機器はプロセッサ51及びメモリ52を含んでもよく、プロセッサ51及びメモリ52はバス又はその他の形態で接続されてもよく、
図7ではバスで接続されることを例にとる。
【0063】
プロセッサ51は中央プロセッサ(Central Processing Unit、CPU)であってもよい。プロセッサ51は更に他の汎用プロセッサ、デジタル信号プロセッサ(Digital Signal Processor、DSP)、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field-Programmable Gate Array、FPGA)又は他のプログラマブルロジックデバイス、ディスクリートゲート又はトランジスタ論理デバイス、ディスクリートハードウェア部品等のチップ、又は上記各種のチップの組み合わせであってもよい。
【0064】
メモリ52は非一時的コンピュータ可読記憶媒体として、非一時的ソフトウェアプログラム、非一時的コンピュータ実行可能プログラム及びモジュール、例えば本発明の実施例における対応するプログラム命令/モジュールを記憶するために用いることができる。プロセッサ51はメモリ52に記憶される非一時的ソフトウェアプログラム、命令及びモジュールを実行することにより、プロセッサの様々な機能アプリケーション及びデータ処理を実行し、すなわち上記方法実施例におけるコード類似性に基づくファジーテスト方法を実現する。
【0065】
メモリ52はプログラム記憶領域及びデータ記憶領域を含んでもよく、プログラム記憶領域はオペレーティング装置、少なくとも1つの機能に必要なアプリケーションプログラムを記憶してもよく、データ記憶領域はプロセッサ51が作成したデータ等を記憶してもよい。この他、メモリ52は高速ランダムアクセスメモリを含んでもよく、さらに非一時的メモリ、たとえば少なくとも1つの磁気ディスク記憶デバイス、フラッシュメモリデバイス、又はその他の非一時的ソリッドステートメモリデバイスを含んでもよい。いくつかの実施例では、選択的には、メモリ52はプロセッサ51に対して遠隔設置されたメモリを含み、これらの遠隔メモリはネットワークを介してプロセッサ51に接続され得る。上記ネットワークの実例はインターネット、イントラネット、ローカルエリアネットワーク、モバイル通信ネット及びこれらの組み合わせを含むが、これらに限らない。
【0066】
前記1つ又は複数のモジュールは前記メモリ52に記憶され、前記プロセッサ51によって実行されると、
図1~4に示される実施例におけるコード類似性に基づくファジーテスト方法を実行する。
【0067】
上記電子機器の具体的な細部は
図1~
図4に示される実施例における対応する関連記述及び効果を対応的に参照して理解することができ、ここで繰り返し説明しない。
【0068】
図面を参照しながら本発明の実施例を記述しているが、当業者であれば、本発明の精神及び範囲を逸脱することなく様々な修正や変形を行うことができ、このような修正や変形はいずれも添付の請求項によって限定される範囲内に属する。
【要約】 (修正有)
【課題】コンピュータセキュリティ技術分野に関し、コード類似性に基づくファジーテスト方法、装置及び記憶媒体を提供する。
【解決手段】方法は、テスト対象のコードから選択された文に対してファジーテストを行い、トリガーされた異常なクラッシュの位置コードを得るステップと、類似度分析に基づいて、テスト対象のコードにおける類似コード情報を決定するテップと、類似コード情報に基づきファジーテストを再び行い、類似コード情報における異常なクラッシュの位置コードを得るステップと、最終的にテスト対象のコードにおける脆弱性情報を決定するステップと、を含む。
【選択図】
図1