IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ イファ ユニバーシティ−インダストリー コラボレーション ファウンデーションの特許一覧

特開2024-86585機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置
<>
  • 特開-機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置 図1
  • 特開-機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置 図2
  • 特開-機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置 図3
  • 特開-機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置 図4
  • 特開-機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置 図5
  • 特開-機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置 図6
  • 特開-機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置 図7
  • 特開-機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024086585
(43)【公開日】2024-06-27
(54)【発明の名称】機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置
(51)【国際特許分類】
   G06F 11/36 20060101AFI20240620BHJP
【FI】
G06F11/36 112
【審査請求】有
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023184710
(22)【出願日】2023-10-27
(31)【優先権主張番号】10-2022-0176168
(32)【優先日】2022-12-15
(33)【優先権主張国・地域又は機関】KR
(31)【優先権主張番号】10-2023-0007409
(32)【優先日】2023-01-18
(33)【優先権主張国・地域又は機関】KR
(71)【出願人】
【識別番号】518357128
【氏名又は名称】イファ ユニバーシティ-インダストリー コラボレーション ファウンデーション
【氏名又は名称原語表記】EWHA UNIVERSITY - INDUSTRY COLLABORATION FOUNDATION
【住所又は居所原語表記】52, Ewhayeodae-gil Seodaemun-gu Seoul 03760, Republic of Korea
(74)【代理人】
【識別番号】110000914
【氏名又は名称】弁理士法人WisePlus
(72)【発明者】
【氏名】チェ, ビョン ジュ
(72)【発明者】
【氏名】パク, ジ ヒョン
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042GA05
5B042HH42
5B042HH43
5B042MA08
5B042MA14
5B042MC13
5B042MC40
(57)【要約】
【課題】機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法および分析装置を提供する。
【解決手段】 機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法は、分析装置が分析対象であるプログラムのソースコードの入力を受ける段階、前記分析装置が前記ソースコードを実行しながら生成される実行ログのうち、呼び出し関数、変数名およびコールスタックの関数をそれぞれ一定の識別子で代替して前記実行ログを前処理する段階、前記分析装置が事前学習された第1学習モデルを利用して前記前処理された実行ログを分析して、グローバル変数と呼び出し関数の対それぞれが初期化位置であるかどうかを分類する段階、前記分析装置が事前学習された第2学習モデルを利用して前記前処理された実行ログを分析して、前記グローバル変数の変数値の最高値と最小値を予測する段階、および前記分析装置が前記第1学習モデルが出力する情報および前記第2学習モデルが出力する情報を基準として前記グローバル変数が脆弱であるかどうかを判断する段階を含む。
【選択図】なし

【特許請求の範囲】
【請求項1】
分析装置が分析対象であるプログラムのソースコードの入力を受ける段階;
前記分析装置が前記ソースコードを実行しながら生成される実行ログのうち、呼び出し関数、変数名およびコールスタックの関数をそれぞれ一定の識別子で代替して前記実行ログを前処理する段階;
前記分析装置が事前学習された第1学習モデルを利用して前記前処理された実行ログを分析して、グローバル変数と呼び出し関数の対それぞれが初期化位置であるかどうかを分類する段階;
前記分析装置が事前学習された第2学習モデルを利用して前記前処理された実行ログを分析して、前記グローバル変数の変数値の最高値と最小値を予測する段階;および
前記分析装置が(i)前記第1学習モデルの分類結果により決定される前記グローバル変数の初期化の有無または初期化位置および(ii)前記第2学習モデルが出力する情報を基準として前記グローバル変数が脆弱であるかどうかを判断する段階を含む、機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法。
【請求項2】
前記分析装置は前記第2学習モデルが出力する情報を基準として変数の使用の有無または変数値の変化趨勢を決定し、
前記初期化の有無、初期化位置、前記変数の使用の有無および前記変数値の変化趨勢のうち少なくとも一つを利用して前記グローバル変数が脆弱であるかどうかを判断する、請求項1に記載の機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法。
【請求項3】
前記分析装置は前記グローバル変数脆弱点を(i)変数の使用途中初期化、(ii)許容範囲を逸脱する変数値および(iii)初期化されなかった変数使用のうちいずれか一つと判断する、請求項1に記載の機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法。
【請求項4】
前記分析装置は前記実行ログの前処理前に前記ソースコードに対する静的解析を遂行して変数の初期値、関数リストおよび関数間呼び出し関係を抽出する段階をさらに含む、請求項1に記載の機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法。
【請求項5】
前記分析装置は前記グローバル変数の初期値が存在するが実行途中で初期値が変更され、前記初期値を変更した関数が初期化関数ではない場合、前記グローバル変数の使用途中初期化欠陥と判断する、請求項1に記載の機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法。
【請求項6】
前記分析装置は実行中前記グローバル変数の変数値が前記グローバル変数の資料型の最高値または最小値を逸脱する場合に欠陥と判断する、請求項1に記載の機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法。
【請求項7】
前記分析装置は前記グローバル変数が初期化されなかった状態で、初期化関数ではない他の関数によって使われる場合に欠陥と判断する、請求項1に記載の機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法。
【請求項8】
分析対象であるプログラムのソースコードの入力を受けるインターフェース装置;
グローバル変数の初期化位置を分類する第1学習モデルおよびグローバル変数の最高値と最小値を予測する第2学習モデルを保存する保存装置;および
前記ソースコードを実行しながら生成される実行ログのうち、呼び出し関数、変数名およびコールスタックの関数をそれぞれ一定の識別子で代替して前記実行ログを前処理し、
前記前処理された実行ログを前記第1学習モデルに入力して決定される前記実行ログに含まれたグローバル変数の初期化の有無または初期化位置および
前記前処理された実行ログを前記第2学習モデルに入力して決定される情報を基準として前記グローバル変数が脆弱であるかどうかを判断する演算装置を含む、ソフトウェアの変数脆弱点を探知する分析装置。
【請求項9】
前記演算装置は前記第2学習モデルが出力する情報を基準として変数の使用の有無または変数値の変化趨勢を決定し、
前記初期化の有無、初期化位置、前記変数の使用の有無および前記変数値の変化趨勢のうち少なくとも一つを利用して前記グローバル変数が脆弱であるかどうかを判断する、請求項8に記載のソフトウェアの変数脆弱点を探知する分析装置。
【請求項10】
前記演算装置は前記グローバル変数脆弱点を(i)変数の使用途中初期化、(ii)許容範囲を逸脱する変数値および(iii)初期化されなかった変数使用のうちいずれか一つと判断する、請求項8に記載のソフトウェアの変数脆弱点を探知する分析装置。

【発明の詳細な説明】
【技術分野】
【0001】
以下で説明する技術はソフトウェアの変数脆弱点を探知する技法に関する。
【0002】
この研究は、韓国政府(MSIT)の情報通信技術企画評価院(IITP)が研究費を支援して遂行されました(No.RS-2022-00155966、人工知能融合イノベーション人材開発院(梨花女子大学)、NTIS No..:1711174090)。
【背景技術】
【0003】
4次産業時代の到来とともに多様な産業分野でソフトウェアの重要性が台頭している。ソフトウェアは設計または具現過程で欠陥が発生する可能性がある。CWE(Common Weakness Enumeration)はソフトウェアで発生し得る脆弱点の識別に使われる。ソフトウェアの脆弱点は変数に関連した脆弱点が多くある。
【0004】
ソフトウェアで誤った変数の使用は誤動作を誘発し得る。ローカル変数は変数の値を初期化せずに使う場合、コンパイル段階で欠陥が検出される。しかし、グローバル変数は初期化コードがなくてもコンパイラで初期化させるので欠陥として検出されない。問題状況は特定の初期値があるにも関わらずコンパイラで誤った値で初期化したり、プログラム実行途中で初期化となったりなってはならないのにもかかわらず反対に動作する場合である。CWEによると、このような変数による脆弱点リストが増加し続けている。
【発明の概要】
【発明が解決しようとする課題】
【0005】
従来のソフトウェアの脆弱点探知道具はソースコードに対する静的解析を遂行する。静的解析で探知されるランタイムエラーは実際の実行に基づいて探知されるものではないので、静的解析は実際の欠陥ではないにもかかわらず欠陥として探知する場合が多い。ソフトウェアの欠陥探知の正確性を高めるためには、実際の実行に基づいた欠陥探知および動的検証が必要である。しかし、動的検証は欠陥探知のための情報収集や実行追跡によりオーバーヘッドが大きい。特に変数による欠陥を探知する場合、該当変数が使われる位置をすべてモニタリングしなければならないので実行オーバーヘッドが非常に大きい。ひいては、従来技法は欠陥が存在しても実行されないと欠陥として探知され難いという根本的な問題点がある。
【課題を解決するための手段】
【0006】
機械学習モデルを利用したソフトウェアの変数脆弱点を探知する方法は、分析装置が分析対象であるプログラムのソースコードの入力を受ける段階、前記分析装置が前記ソースコードを実行しながら実行ログを抽出する段階、前記分析装置が前記実行ログのうち呼び出し関数、変数名およびコールスタックの関数をそれぞれ一定の識別子で代替して前記実行ログを前処理する段階、前記分析装置が事前学習された第1学習モデルを利用して前記前処理された実行ログを分析して、グローバル変数と呼び出し関数の対それぞれが初期化位置であるかどうかを分類する段階、前記分析装置が事前学習された第2学習モデルを利用して前記前処理された実行ログを分析して、前記グローバル変数の変数値の最高値と最小値を予測する段階、および前記分析装置が前記第1学習モデルが出力する情報および前記第2学習モデルが出力する情報を基準として前記グローバル変数が脆弱であるかどうかを判断する段階を含む。
【0007】
ソフトウェアの変数脆弱点を探知する分析装置は、分析対象であるプログラムのソースコードの入力を受けるインターフェース装置、グローバル変数の初期化位置を分類する第1学習モデルおよびグローバル変数の最高値と最小値を予測する第2学習モデルを保存する保存装置、および前記ソースコードを実行しながら生成される実行ログのうち、呼び出し関数、変数名およびコールスタックの関数をそれぞれ一定の識別子で代替して前記実行ログを前処理し、前記前処理された実行ログを前記第1学習モデルに入力して決定される前記実行ログに含まれたグローバル変数の初期化の有無または初期化位置および前記前処理された実行ログを前記第2学習モデルに入力して決定される情報を基準として前記グローバル変数が脆弱であるかどうかを判断する演算装置を含む。
【図面の簡単な説明】
【0008】
図1】ソフトウェアの変数脆弱点を探知するシステムに対する例である。
図2】分析モデルの学習過程に対する例である。
図3】変数の初期化位置を推論する第1学習モデルの性能を評価した結果である。
図4】変数の最高値および最小値を推論する第2学習モデルの性能を評価した結果である。
図5】ソフトウェアの変数脆弱点を探知する推論過程に対する例である。
図6】分析装置で分析モデルを利用して欠陥を分析する時に使う変数に対する情報の例である。
図7】ターゲットプログラムの変数情報を利用して脆弱点による欠陥を判断する過程の例である。
図8】ソフトウェアの変数脆弱点を探知する分析装置に対する例である。
【発明を実施するための形態】
【0009】
以下で説明する技術は、ソフトウェアで変数値による欠陥可能性乃至脆弱点を探知する技法である。
【0010】
以下、ソフトウェアの変数脆弱点を探知する装置を分析装置と命名する。分析装置は入力されるソフトウェアコードを分析して欠陥を探知する装置であって、多様な形態で具現され得る。例えば、分析装置はサーバー、PC、スマート機器、脆弱点探知のためのプログラムがエンベッディングされたチップセットなどの多様な形態であり得る。
【0011】
分析装置は機械学習モデルを利用して変数脆弱点を探知する。機械学習は人工知能の一分野で、コンピュータが学習できるようにアルゴリズムを開発する分野を意味する。機械学習モデルはデシジョンツリー、ランダムフォレスト(random forest)、KNN(K-nearest neighbor)、ナイーブベイズ(Naive Bayes)、SVM(support vector machine)、人工ニューラルネットワーク(artificial neural network)などの多様な類型のモデルがある。
【0012】
以下、ソフトウェアの変数脆弱点を探知する機械学習モデルを分析モデルと命名する。分析モデルは多様な機械学習方法論のうちいずれか一つで具現され得る。
【0013】
図1は、ソフトウェアの変数脆弱点を探知するシステム100に対する例である。図1で分析装置130、150が変数脆弱点を探知する。図1で、分析装置はサーバー130およびコンピュータ端末150の形態で図示した。
【0014】
ソースコード提供装置110は開発者がコーディングした特定プログラムのソースコードを提供する。ソースコード提供装置110は開発者端末またはソースコードを保存するデータベース乃至サーバーのような装置であり得る。
【0015】
実行ログ提供装置120は、プログラムソースコードの伝達を受けて該当プログラムを実行しながら実行ログを生成する。実行ログ提供装置120は該当プログラムが動作する環境を提供して実行時間により実行ログを生成する。
【0016】
分析装置130、150はソースコード提供装置110から分析対象であるプログラムのソースコードの入力を受ける。分析装置130、150は実行ログ提供装置120から分析対象であるプログラムの実行ログの入力を受ける。
【0017】
分析装置130、150はソースコードおよび実行ログを分析して変数脆弱点を探知する。分析装置130、150は分析モデルを活用して一定の変数情報を抽出する。変数情報は変数初期化位置、実行過程中の変数の最高値および最小値などを含む。分析装置130、150は抽出した変数情報を基準として分析対象であるプログラムで変数脆弱点乃至欠陥可能性を導き出す。分析装置130、150は分析した変数脆弱点を出力したり、他の端末に伝達することができる。
【0018】
以下、研究者が変数脆弱点を探知する分析モデルを構築した過程を説明する。
【0019】
研究者は誤った変数値の使用による脆弱点を分類して欠陥の類型を下記の表1のように定義した。
【0020】
【表1】
【0021】
F01 UINIT_VARは初期化されなかった変数を使用して発生する欠陥である。初期化されなかったローカル変数はほとんどコンパイラで探知され、グローバル変数はコンパイラで初期化される。したがって、UINIT_VAR欠陥はローカル変数やグローバル変数が正しい値で初期化されなかった場合の欠陥である。またUINIT_VAR欠陥は、グローバル変数の初期化コードが存在しても関数の呼び出し順序が間違うなどのように、初期化される前に使われる場合の欠陥も含む。F02 INVALID_INITは、変数の初期化関数ではない他の関数で変数を使用していた途中で変数の値が初期値に変更される欠陥である。F03 OUT_OF_BOUNDは、変数の値が許容された範囲を逸脱する欠陥である。この時の許容範囲は変数の資料型による範囲だけでなく、ソースコードの分析時に抽出される変数の許容範囲を含む。
【0022】
分析モデルの構築過程を説明する。分析モデル学習は学習装置が遂行すると説明する。学習装置はデータ処理および機械学習モデルの学習過程の遂行が可能なコンピュータ装置を意味する。
【0023】
研究者は分析モデルの学習のために学習データを設けた。学習データは特定の同一プログラムに対して設けられ得る。すなわち、分析モデルは特定プログラムに特異的に設けられ得る。学習データはプログラムに対するソースコードおよび実行ログを含むことができる。
【0024】
脆弱点を探知しようとする対象はプログラムで使われるローカル変数とグローバル変数をすべて含む。表1で定義した欠陥を探知するために、各変数に対して(i)変数の最高値および最小値、(ii)初期値および(iii)初期値に変更するようにする初期化関数が定義されなければならない。
【0025】
図2は、分析モデルの学習過程200に対する例である。
【0026】
学習装置は学習のためのプログラムに対して静的解析(static analysis)を遂行する(210)。学習装置はプログラムのソースコードを静的解析して変数に対する情報を抽出する。
【0027】
学習装置は学習のためのプログラムのソースコードを静的解析して、変数リスト、各変数の初期値、最高値、最小値を変数情報として抽出する。また、学習装置は実行分析のために変数を使用する関数リストと関数間呼び出し関係を抽出する。静的解析で定義されなかった変数の最高値、最小値および初期化関数リストは実行ログを学習する時に定義される。
【0028】
以後、学習装置はプログラムを実行して収集された実行ログを利用した動的検証を遂行する(220)。動的検証は実行ログを基準として変数脆弱点を探知する分析モデルを構築する過程である。分析モデルは脆弱点探知対象である初期化関数の位置を判定するモデルと関数で使われる変数値を推論するモデルを含む。
【0029】
学習装置は、静的解析後にはプログラムを実行して実行ログを収集する(221)。学習装置はプログラムが実行される間、モニタリング対象変数に接近して呼び出し関数の位置、変数名、接近前/後の変数値、コールスタックを抽出して実行ログとして収集する。
【0030】
実行ログは学習に直接利用するのが難しいローデータ(raw date)であるので、一定の前処理が必要である。学習装置は収集した実行ログを学習に活用できるデータに前処理(一般化)する(222)。前処理過程で、学習装置は初期実行ログで呼び出し関数、変数名およびコールスタックの関数をそれぞれ関数IDおよび変数IDで代替する。
【0031】
変数の初期化に関連した脆弱点を判定するための基準は、変数の初期化の有無、変数の値の変更および呼び出し関数と関連がある。研究者は変数を使用中の関数(呼び出し関数)が変数の値を初期化させる関数(初期化関数)であるかどうかを判断するために、機械学習モデル(第1学習モデル)を利用した。第1学習モデルは{グローバル変数、呼び出し関数}の対が初期化関数であるか否かを分類する。
【0032】
学習装置は前処理された実行ログを利用して、変数の初期化に関連した脆弱点判断のための初期化関数の有無を推論する第1学習モデルの学習を遂行する(223)。第1学習モデルは前処理された実行ログの入力を受けて{グローバル変数、呼び出し関数}の対が初期化関数であるかどうかを分類する。これを通じて第1学習モデルは変数の初期化位置を推論する。
【0033】
研究者は第1学習モデルでデシジョンツリー技法を使った。デシジョンツリー技法はID3、C4.5、CART、アンサンブルアルゴリズムなどの多様なアルゴリズムがある。
【0034】
研究者は初期化関数の予測と類似するデータセットであるNASA Nearest Objectデータセットを利用して第1学習モデルの性能を評価した。研究者は多様な類型のデシジョンツリーを構築して性能を評価した。
【0035】
図3は、変数の初期化位置を推論する第1学習モデルの性能を評価した結果である。図3のように、研究者が構築したモデルのうちRF(RandomForest)技法が最も高い性能を見せた。このため、研究者は第1学習モデルとしてRFを使った。ただし、第1学習モデルはデシジョンツリーの他に、他の類型の学習モデルが活用されてもよい。
【0036】
また、研究者は変数値が適切であるかを判定するために、変数値許容範囲の有無を判定する別途の機械学習モデル(第2学習モデル)を構築した。第2学習モデルは特定変数の最高値および最小値を導き出す。
【0037】
学習データは実行ログで変数値の変化情報である。学習装置は前処理された実行ログを利用して、第2学習モデルが特定変数の変化推移を推論して該当変数の最高値および最小値を導き出すように学習過程を遂行する(224)。研究者は第2学習モデルとして回帰分析技法を利用した。回帰基盤学習技法は線形回帰(linear)、リッジ回帰(ridge)。ロジスティック回帰(logistic)、多項式回帰(polynomial)のような多様な技法がある。
【0038】
研究者は多様な回帰分析モデルを構築して性能を評価した。図4は、変数の最高値および最小値を推論する第2学習モデルの性能を評価した結果である。図4のように、多項式回帰分析の性能が最も高かった。研究者は第2学習モデルとして多項式回帰分析を使った。研究者はscikit-learnのpolynomialFeaturesクラスにデータ変換後、LinearRegressionを適用して第2学習モデルを構築した。
【0039】
図5は、ソフトウェアの変数脆弱点を探知する推論過程300に対する例である。
【0040】
分析装置は分析対象であるターゲットプログラムのソースコードの入力を受ける(310)。
【0041】
分析装置はソースコードで分析に不要なコード(annotations、blank lineなど)を除去することができる。
【0042】
分析装置はターゲットプログラムに対して静的解析を遂行できる(320)。分析装置はターゲットプログラムのソースコードを静的解析して変数リストを抽出することができる。また、分析装置は実行分析のために変数を使用する関数リストと関数間呼び出し関係を抽出することができる。一方、ターゲットプログラムが学習過程で使われたプログラムと同じプログラムであれば、学習過程で導き出した静的解析結果を活用してもよい。この場合、分析装置が別途に静的解析を遂行しなくてもよい。すなわち、分析装置がターゲットプログラムのソースコードとともに変数リスト、関数リストおよび関数間呼び出し関係の入力を受けてもよい。
【0043】
分析装置はプログラムを実行して収集された実行ログを利用した動的検証を遂行する(330)。分析装置はプログラムを実行しながら実行ログを収集する(331)。分析装置はプログラムが実行される間、モニタリング対象変数に接近して呼び出し関数の位置、変数名、接近前/後の変数値、コールスタックを抽出して実行ログとして収集する。分析装置は収集した実行ログを学習に活用できるデータに前処理(一般化)する(332)。前処理過程で学習装置は初期実行ログで呼び出し関数、変数名およびコールスタックの関数をそれぞれ関数IDおよび変数IDで代替する。
【0044】
分析装置は事前に学習された第1学習モデルを利用して前処理された実行ログを分析して、変数が正しい位置で初期化されたかを判断することができる(333)。分析装置は第1学習モデルの分類結果を基準として特定変数(グローバル変数)の初期化の有無または/および初期化位置を決定することができる。
【0045】
分析装置は事前に学習された第2学習モデルを利用して実行過程で変数の値が変数の最高値と最小値以内の範囲に該当するかを判断する(334)。分析装置は第1学習モデルの出力結果を基準として変数の使用の有無、変数値が許容範囲に属するのか、変数値の変化の趨勢などを決定することができる。
【0046】
分析装置は変数初期化位置、初期化情報、変数使用情報、変数値変化情報、変数の許容範囲などを基準として特定変数脆弱点の有無を分析する。これを通じて分析装置はターゲットプログラムで欠陥の探知を遂行する(335)。具体的な欠陥探知の例は後述する。
【0047】
前述した過程を通じて、分析装置はターゲットプログラムのソースコードおよび実行ログを分析して変数に対する情報を導き出す。図6は、分析装置で分析モデルを利用して欠陥を分析する時に使う変数に対する情報の例である。
【0048】
分析モデルを利用して導き出す変数に対する情報に対する例である。図6は、多数のフラグ(flag)で構成された変数情報に対する例である。変数情報は(i)初期化情報、(ii)変数使用情報、(iii)変数値変化趨勢情報および(iv)変数値増減パターン情報を含む。初期化情報はコンパイラで初期化の有無、初期化関数で初期化の有無および変数宣言時の初期値存在の有無などを含むことができる。変数使用情報は変数の使用の有無、使われる変数の使用目的(read、writeまたはread & write)等を含むことができる。変数値変化趨勢情報は変数値の変化の有無、変数値の増減の有無などを含むことができる。変数値増減パターン情報はパターンの変化の有無、変数値の継続した増加、変数値の継続した減少、一定区間で変数値の波動(fluctuation)の変化などを含むことができる。
【0049】
分析装置はターゲットプログラムでターゲットプログラムのソースコードを分析した結果およびターゲットプログラムの実行ログを利用して抽出した変数情報を利用して変数脆弱点を探知する(335)。分析装置はターゲットプログラムの実行開始から終了まで変数が実行される時に残した実行ログから継続して変数情報を抽出してこれを基準として変数脆弱点を探知することができる。
【0050】
図7は、ターゲットプログラムの変数情報を利用して脆弱点による欠陥を判断する過程の例である。分析装置が判断する変数脆弱点類型は(i)変数の使用途中で初期化、(ii)許容範囲を逸脱する変数値および(iii)初期化されなかった変数使用のうちいずれか一つである。
【0051】
分析装置は変数の初期値が存在するがグローバル変数の使用途中で変更された値が初期値であり、呼び出した関数が初期化関数ではない場合にはグローバル変数の使用途中の初期化欠陥と判断する。
【0052】
欠陥探知対象を抽出する時、グローバル変数の名前と資料型、初期値を抽出するが、分析装置は実行中変数値が抽出された資料型の最高値/最小値を逸脱する場合には変数の範囲を逸脱した欠陥と判断する。また、分析装置はグローバル変数の値が継続して増加あるいは減少のみしながら第2学習モデルから導き出された変数の最高値と最小値範囲を逸脱する場合にも変数の範囲を逸脱した欠陥と判断する。
【0053】
分析装置はすべての実行が完了した以後にもグローバル変数の変数値増減パターン情報が継続して増加または減少に設定されているのであれば、変数の使用途中初期化がされていないものと見ることができ、長時間使用時変数の値の範囲を逸脱する可能性があるので、これを変数の範囲を逸脱した欠陥の候補と判断する。
【0054】
分析装置は変数の値が宣言と同時に初期化がされていない状態で、初期化関数ではない他の関数によって使われた時を初期化していない変数使用欠陥と判断することができる。分析装置は最初に使われた位置が変数に対する値を読み取っていく(read)場合には、すぐに初期化していない変数使用欠陥と判断する。分析装置は変数に値を書き込む(write)場合には該当変数に値を書き込んだ関数が初期化関数として学習され得るため、初期化していない変数使用欠陥候補と判断する。
【0055】
研究者はC言語とパイソンを利用して前述した分析モデルを構築した。研究者は構築した分析モデルおよび変数脆弱点探知の性能を検証した。
【0056】
検証実験に使われたアプリケーションは下記の表2の通りである。研究者はリナックス(登録商標)で広く知られている7個のアプリケーションを対象に実験した。学習に使われた実行ログは、各アプリケーションに対してリナックス(登録商標)マニュアルページのサンプルスクリプトとSARD(Software Assurance Reference Dataset)で提供するテストケース、Linux(登録商標) Test Project(LTP)のテストケースを動作させて収集した。
【0057】
【表2】
【0058】
研究者は変数による脆弱点を探知するために、アプリケーションに人為的に欠陥を注入した。研究者は従来研究clang-sfi(Gabor et al、「High-Accuracy Software Fault Injection in Source Code with Clang.「 In 2019 IEEE 24th Pacific Rim International Symposium on Dependable Computing(PRDC)、pp.75-7509.)で活用されたデータを利用した。clang-sfiで注入可能な欠陥のうち研究者が提案した方式に関連した変数脆弱点に対する欠陥の類型は下記の表3の通りである。
【0059】
【表3】
【0060】
研究者は表2のアプリケーションでローカル変数とグローバル変数をそれぞれ抽出し、抽出された各位置に表3の欠陥の類型を注入した。WVAV(Wrong value assigned to variable)欠陥の類型はclang-sfiでBooleanタイプである場合にトグルさせ、その他の場合には0xFF値をエラー値として注入する。しかし、より多様な場合を検証するために研究者はclang-sfiで注入する類型をWVAV_1にし、該当変数のタイプに対する最高値と最小値を注入する場合をWVAV_2にし、該当変数が有することができる値でランダムに選択した値で注入する場合をWVAV_3と定義した。
【0061】
研究者は提案した分析モデル基盤の変数脆弱点を探知技法(提案技術)の性能を従来分析道具の性能と比較した。比較に使った従来分析道具は下記の表4の通りである。
【0062】
【表4】
【0063】
研究者は特に変数脆弱点を探知する性能を比較した。研究者はコード類似性を比較して脆弱点を探知する技法とパターン基盤で脆弱点を探知する技法を利用した道具VUDDY、SySeVR、CppCheck、ControlFlagに対して実験を進めてその結果を比較した。VUDDYとCppCheckはAI/ML技法が適用されていない道具であり、SySeVRとControlFlagはAI/ML基盤道具である。性能検証結果は下記の表5のように示された。
【0064】
【表5】
【0065】
研究者は欠陥の類型別に偽陽性率、正確度、精密度、変数脆弱点探知率を評価した。提案技術は偽陽性率、正確度、精密度および変数脆弱点探知率がそれぞれ0%、77.55%、100%および77.55%と示された。残りの道具は変数脆弱点探知率が6%~18.5%であり、提案技術より低く示された。
【0066】
図8は、ソフトウェアの変数脆弱点を探知する分析装置400に対する例である。分析装置400は図1の分析装置(130または150)に該当する装置である。分析装置400は前述した分析モデルを利用してソフトウェアの変数欠陥を探知する。分析装置400は物理的に多様な形態で具現され得る。例えば、分析装置400はPC、スマート機器、ネットワーク上のサーバー、データ処理専用チップセットなどの形態を有することができる。
【0067】
分析装置400は保存装置410、メモリ420、演算装置430、インターフェース装置440、通信装置450および出力装置460を含むことができる。
【0068】
保存装置410は前述した分析モデルを保存することができる。分析モデルは変数初期化位置を判定する第1学習モデルおよび実行過程で変数値(最高値および最小値)を予測する第2学習モデルを含む。前述した通り、第1学習モデルは変数を使用中の関数が変数の値を初期化させる関数(初期化関数)であるかどうかを分類することができる。第2学習モデルはグローバル変数の変数値に対する最高値および最小値を出力することができる。
【0069】
保存装置410は分析対象であるターゲットプログラムのソースコードを静的解析するプログラム乃至コードを保存することができる。
【0070】
保存装置410はソースコードに対する実行ログを生成するプログラム乃至コードを保存することができる。
【0071】
保存装置410は実行ログを一定に前処理するプログラム乃至コードを保存することができる。
【0072】
保存装置410は分析モデルの出力情報(初期化位置、変数値情報など)を基準として変数欠陥乃至欠陥候補を判定するプログラム乃至コードを保存することができる。この過程は図7で説明した通りである。
【0073】
保存装置410はターゲットプログラムのソースコードを保存することができる。
【0074】
保存装置410はターゲットプログラムの実行ログを保存することができる。
【0075】
メモリ420は分析装置400がターゲットプログラムの変数脆弱点を探知する過程で生成されるデータおよび情報などを保存することができる。
【0076】
インターフェース装置440は外部から一定の命令およびデータの入力を受ける装置である。
【0077】
インターフェース装置440は物理的に連結された入力装置または外部保存装置からターゲットプログラムのソースコードの入力を受けることができる。
【0078】
インターフェース装置440はソース装置からソースコードの入力を受けることができる。ソース装置はソースコードが実行され得るコンピューティング装置または分析対象であるソースコードを保存する別途の保存装置であり得る。
【0079】
インターフェース装置440はターゲットプログラムの実行ログの入力を受けることもできる。インターフェース装置440はソース装置から実行ログの入力を受けることができる。インターフェース装置440はソースコードを実行するソース装置から実行ログの入力を受けることができる。
【0080】
通信装置450は有線または無線ネットワークを通じて一定の情報を受信し伝送する構成を意味する。
【0081】
通信装置450は外部客体からターゲットプログラムのソースコードを受信することができる。通信装置450はソース装置からソースコードを受信することができる。
【0082】
通信装置450はターゲットプログラムの実行ログを受信することができる。
【0083】
通信装置450はソース装置から実行ログを受信することができる。通信装置450はソースコードを実行するソース装置から実行ログを受信することができる。
【0084】
通信装置450はターゲットプログラムに対する変数脆弱点探知結果を外部客体に送信することができる。
【0085】
さらに、インターフェース装置440は通信装置450から受信するデータの伝達を受ける構成であってもよい。
【0086】
出力装置460は一定の情報を出力する装置である。出力装置460はデータ処理過程に必要なインターフェース、分析結果などを出力することができる。出力装置460は欠陥探知結果を出力することができる。
【0087】
演算装置430はターゲットプログラムのソースコードに対する静的解析を遂行できる。これを通じて演算装置430は脆弱点探知対象である変数リスト、関数リスト、関数の呼び出し関係を抽出することができる。
【0088】
演算装置430はターゲットプログラムのソースコードを実行しながら実行ログを抽出することができる。
【0089】
演算装置430はターゲットプログラムが実行される間、モニタリング対象変数に接近して呼び出し関数の位置、変数名、接近前/後の変数値、コールスタックを抽出して実行ログとして収集する。
【0090】
演算装置430は収集した実行ログを学習に活用できるデータに前処理することができる。前処理は実行ログで呼び出し関数、変数名およびコールスタックの関数をそれぞれ関数IDおよび変数IDで代替する過程である。欠陥探知過程の前処理は学習過程の前処理と同一に進行される。
【0091】
演算装置430は第1学習モデルを利用して前処理された実行ログを分析する。演算装置430は第1学習モデルを通じて変数初期化位置を判断することができる。第1学習モデルは特定変数の初期化の有無乃至初期化位置を出力することができる。第1学習モデルは前処理された実行ログの入力を受けて実行ログのうち{グローバル変数、呼び出し関数}の対それぞれが初期化関数であるかどうかを分類する。
【0092】
演算装置430は第2学習モデルを利用して前処理された実行ログを分析する。演算装置430は第2学習モデルを通じて実行過程で特定変数の最高値および最小値を抽出することができる。演算装置430は第2学習モデルが出力する情報を基準として変数の使用の有無または変数値の変化趨勢を決定することができる。
【0093】
第1学習モデルと第2学習モデルを利用して抽出する情報は実行ログで抽出した変数情報である。実行ログで抽出した変数情報は(i)初期化情報、(ii)変数使用情報、(iii)変数値変化趨勢情報および(iv)変数値増減パターン情報を含むことができる。
【0094】
演算装置430は実行ログで抽出した変数情報を基準として変数脆弱点を判断することができる。判定過程は図7で説明した通りである。
【0095】
演算装置430はグローバル変数脆弱点を(i)変数の使用途中初期化、(ii)許容範囲を逸脱する変数値および(iii)初期化されなかった変数使用のうちいずれか一つと判断することができる。
【0096】
演算装置430はデータを処理し、一定の演算を処理するプロセッサ、AP、プログラムがエンベデッドされたチップのような装置であり得る。
【0097】
また、前述したようなプログラム変数脆弱点乃至欠陥探知方法は、コンピュータで実行され得る実行可能なアルゴリズムを含むプログラム(またはアプリケーション)で具現され得る。前記プログラムは一時的または非一時的読み取り可能媒体(non-transitory computer readable medium)に保存されて提供され得る。
【0098】
非一時的読み取り可能媒体とは、レジスタ、キャッシュ、メモリなどのように、短い瞬間の間データを保存する媒体ではなく半永久的にデータを保存し、機器によって読み取り(reading)が可能な媒体を意味する。具体的には、前述した多様なアプリケーションまたはプログラムはCD、DVD、ハードディスク、ブルーレイディスク、USB、メモリカード、ROM(read-only memory)、PROM(programmable read only memory)、EPROM(Erasable PROM、EPROM)またはEEPROM(Electrically EPROM)またはフラッシュメモリなどのような非一時的読み取り可能媒体に保存されて提供され得る。
【0099】
一時的読み取り可能媒体はスタティックラム(Static RAM、SRAM)、ダイナミックラム(Dynamic RAM、DRAM)、シンクロナスディーラム(Synchronous DRAM、SDRAM)、2倍速SDRAM(Double Data Rate SDRAM、DDR SDRAM)、増強型SDRAM(Enhanced SDRAM、ESDRAM)、同期化DRAM(Synclink DRAM、SLDRAM)および直接ラムバスラム(Direct Rambus RAM、DRRAM)のような多様なRAMを意味する。
【0100】
本実施例および本明細書に添付された図面は前述した技術に含まれる技術的思想の一部を明確に示しているものに過ぎず、前述した技術の明細書および図面に含まれた技術的思想の範囲内で当業者が容易に類推できる変形例と具体的な実施例はすべて前述した技術の権利範囲に含まれるのが自明であると言える。
図1
図2
図3
図4
図5
図6
図7
図8