JP7075011B2 - 情報処理装置、パッチ適用確認システム、パッチ適用確認方法、およびパッチ適用確認プログラム - Google Patents
情報処理装置、パッチ適用確認システム、パッチ適用確認方法、およびパッチ適用確認プログラム Download PDFInfo
- Publication number
- JP7075011B2 JP7075011B2 JP2018135851A JP2018135851A JP7075011B2 JP 7075011 B2 JP7075011 B2 JP 7075011B2 JP 2018135851 A JP2018135851 A JP 2018135851A JP 2018135851 A JP2018135851 A JP 2018135851A JP 7075011 B2 JP7075011 B2 JP 7075011B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- patch
- instruction type
- sequence
- type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Description
記憶部は、一部の命令列を修正命令列に変更するパッチの適用対象であるソースファイルを記憶する。処理部は、修正命令列を含むパッチファイルに基づいて、修正命令列内の各命令の命令種別を示すパッチ命令種別情報を生成する。次に処理部は、ソースファイル内の各命令の命令種別を示すソース命令種別情報を生成する。さらに処理部は、パッチ命令種別情報とソース命令種別情報とに基づいて、ソースファイルから、修正命令列と命令種別の並びが一致する種別一致命令列を抽出する。そして処理部は、種別一致命令列と修正命令列との、変数名と関数名とを除外した記述内容に基づいて、ソースファイルにパッチが適用されているか否かを判定する。
〔第1の実施の形態〕
まず第1の実施の形態について説明する。
処理部12は、修正命令列1aを含むパッチファイル1に基づいて、修正命令列1a内の各命令の命令種別を示すパッチ命令種別情報3を生成する。例えばパッチファイル1には、ソースファイル2のどの命令を削除して、どのような命令を追加するのかが定義されている。処理部12は、パッチファイル1を解析することで、パッチ適用後に、ソースファイル2内のパッチにより修正された部分が、どのような命令列になるのかを判断し、その命令列を修正命令列1aとする。また処理部12は、ソースファイル2内の各命令の命令種別を示すソース命令種別情報4を生成する。命令種別には、変数型を定義する「宣言」や、処理の実施条件を定義する「条件」や、変数または配列の要素に値を設定する「代入」などがある。
次に第2の実施の形態について説明する。第2の実施の形態は、OSSを利用しているコンピュータにおける修正パッチの適用状況を可視化するものである。
図4は、修正パッチ適用可視化機能の一例を示すブロック図である。コンピュータ100は、導入されているOSSの修正パッチを、サーバ200が有するリポジトリ210から取得し、取得した修正パッチの適用の有無を可視化することができる。修正パッチの適用の有無を可視化するために、コンピュータ100は、図4に示す各要素を有する。すなわちコンピュータ100は、ソースファイル記憶部110、固定キーワード辞書記憶部120、類似度閾値記憶部130、ソースコード取得部141、命令種別判定部142、命令種別記憶部143、パッチ導入箇所推定部144、パッチ導入推定箇所記憶部145、マッチング処理部146、マッチング結果記憶部147、類似度算出部148、類似度記憶部149、結果出力部150、およびパッチ適用情報記憶部151を有する。
パッチ導入箇所推定部144は、修正パッチのソースコードとOSSのソースコードとの行ごとの命令種別に基づいて、OSSのソースコード内のパッチ導入推定箇所を特定する。パッチ導入推定箇所は、OSSのソースコードのうち、修正パッチに基づいて修正されている可能性がある部分である。パッチ導入箇所推定部144は、パッチ導入推定箇所を示す情報を、パッチ導入推定箇所記憶部145に格納する。
マッチング処理部146は、固定キーワード辞書を参照し、パッチ導入推定箇所の各行の固定キーワードを、修正パッチの修正用ソースコードの各行の固定キーワードと比較し、行ごとの一致・不一致を判断する。マッチング処理部146は、一致・不一致の判断結果(マッチング結果)を、マッチング結果記憶部147に格納する。
類似度算出部148は、マッチング結果に基づいて、パッチ導入推定箇所と修正パッチとの類似度を算出する。そして類似度算出部148は、算出した類似度に基づいて、類似度のランク分けを行う。例えば類似度算出部148は、パッチ導入推定箇所の類似度が100%一致の場合、そのパッチ導入推定箇所について完全一致と判定する。また類似度算出部148は、類似度閾値記憶部130に格納されている類似度の閾値に基づいて、パッチ導入推定箇所の類似度が閾値以上の場合、そのパッチ導入推定箇所について類似度高(部分一致)と判定する。また類似度算出部148は、パッチ導入推定箇所の類似度が閾値未満の場合、そのパッチ導入推定箇所について不一致と判定する。類似度算出部148は、算出した類似度と、類似度のランクとを、類似度記憶部149に格納する。
結果出力部150は、類似度記憶部149に格納されたパッチ導入推定箇所の類似度に基づいて、OSSのソースファイルごとに、そのソースファイルへの修正パッチの適用状況を示すパッチ適用情報を生成する。さらに結果出力部150は、パッチ導入推定箇所のソースコードと修正パッチの修正用ソースコードとの比較情報を生成してもよい。そして結果出力部150は、パッチ適用情報またはソースコードの比較情報を、パッチ適用情報記憶部151に格納する。また結果出力部150は、パッチ適用情報またはソースコードの比較情報を、モニタ21に表示させることもできる。
図5は、修正パッチの一例を示す図である。リポジトリ210には、複数の修正パッチ211,212,・・・が格納されている。修正パッチ211,212,・・・には、OSSのソースファイルの修正内容を示す修正用ソースコードが記述されている。修正パッチ211,212,・・・において、先頭の文字が「+」の行は、その行の「+」に続く文字列を、ソースファイルに追加することを示している。また、修正パッチ211,212,・・・において、先頭の文字が「-」の行は、その行の「-」に続く文字列に対応する行を、ソースファイルから削除することを示している。
図6は、ソースファイルの一例を示す図である。ソースファイル記憶部110には、複数のソースファイル111,112,・・・が格納されている。各ソースファイル111,112,・・・に記述されているソースコードは、一般に配布されているオリジナルのソースファイルに対して、変数名や関数名の書き換えが行われている可能性がある。例えばソースファイル111の「int」は、オリジナルのソースファイルにおける「short」から書き換えられたものである。
図7は、固定キーワード辞書の一例を示す図である。固定キーワード辞書121は、例えば表形式のデータ構造となっている。固定キーワード辞書121の各行の第0列には、ソースコードに用いられる単語(記号を含む)の種別(単語種別)が設定されている。例えば「変数型」、「算術演算子」、「関係演算子」、「条件演算子」、「記号・引用符」、「その他」などの単語種別がある。固定キーワード辞書121の各行の第2列以降の各列には、その行に設定された単語種別に該当する単語が設定されている。
単語種別「算術演算子」は、算術演算を示す単語であり、例えば「+」、「-」、「*」、「/」、「%」などの記号が該当する。
単語種別「条件演算子」は、処理の分岐条件を定義するのに用いる単語であり、例えば「if」、「while」、「for」などの単語が該当する。
単語種別「その他」は、上記の単語種別以外の固定キーワードであり、例えば「(」、「)」などの記号が該当する。
命令種別判定部142は、編集後の修正パッチ211aに含まれるソースコードの各行について、固定キーワード辞書121に基づいて、以下のような基準で命令種別の判定を行う。修正パッチ211aの各行の先頭に示されている数字は、命令種別判定対象の行の行番号であり、説明のために付与したものである。
(判定#2)命令種別判定部142は、固定キーワード辞書121に登録されている単語種別(変数型、算術演算子など)を参照し、行頭の単語が「変数型」に登録されている単語と一致した場合は、該当行の命令種別を「宣言」と判定する。
これにより、修正パッチ211aに対応する命令種別情報31が生成される。命令種別判定部142は、生成した命令種別情報31を、命令種別記憶部143に格納する。例えば命令種別判定部142は、命令種別記憶部143内に設けられたパッチ意味用配列143aの要素として、各行の命令種別を格納する。
図10は、ソースファイルに対する命令種別判定の一例を示す図である。命令種別判定部142は、ソースファイル記憶部110から判定対象のソースファイル111を取得し、ソースファイル111内のソースコードについて、1行ごとに命令種別を判定する。なおソースファイル111の各行の先頭に示されている数字は、命令種別判定対象の行の行番号であり、説明のために付与したものである。
図13は、マッチング処理の一例を示す図である。マッチング処理部146は、固定キーワード辞書記憶部120内の固定キーワード辞書121を参照し、パッチ導入推定箇所111aと修正パッチ211aとに含まれる単語を、可変キーワードと固定キーワードとに分類する。すなわちマッチング処理部146は、固定キーワード辞書121に示されている単語を固定キーワードと判断し、それ以外の単語を可変キーワードと判断する。
図13の例では、1行目は「一致」、2行目は「不一致」、3行目は「一致」となる。
なおマッチング処理部146は、マッチング処理では、可変キーワードの変換前と変換後との対応関係を、メモリ102などに記憶しておくことができる。記憶した対応関係は、以後の可変キーワードの特定に利用することができる。
図17は、類似度算出処理の一例を示す図である。類似度算出部148は、パッチ導入推定箇所111aと修正パッチ211aとの行単位での比較結果に基づいて、一致する行の割合(一致率)を、類似度として計算する。図17の例では、8行のうちの7行で一致しており、類似度は87.5%である。
図18は、パッチ適用情報の一例を示す図である。パッチ適用情報151aには、ソースファイルのファイル名が示された列の各行に、その行に対応する修正パッチのソースファイルへの適用状況が示されている。図18の例では、ソースファイル内のパッチ導入推定箇所の類似度が100%の場合(完全一致)、二重丸が設定される。またソースファイル内のパッチ導入推定箇所の類似度が100%未満でかつ閾値以上の場合(類似度高)、丸印が設定される。さらにソースファイル内のパッチ導入推定箇所の類似度が閾値未満の場合(不一致)、ばつ印が設定される。なお、1つのソースファイルについて、パッチ導入推定箇所が複数検出された場合、パッチ導入推定箇所ごとの適用状況がパッチ適用情報151aに設定される。
図20は、修正パッチ適用可視化処理の手順の一例を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。
図21は、命令種別判定処理の手順の一例を示すフローチャートである。以下、図21に示す処理をステップ番号に沿って説明する。
[ステップS113]命令種別判定部142は、修正パッチとOSSのソースファイルとのそれぞれについて、命令種別情報取得処理を行う。命令情報取得処理の詳細は、図22、図23を参照して説明する。
[ステップS121]命令種別判定部142は、配列のインデックスの値を示す変数iに初期値「0」を設定する。
[ステップS124]命令種別判定部142は、選択した行から単語を抽出し、作業用配列に格納する。
[ステップS127]命令種別判定部142は、選択した行が空白行またはコメント行であるか否かを判断する。例えば命令種別判定部142は、「#」で始まる行をコメント行と判断する。命令種別判定部142は、空白行またはコメント行の場合、処理をステップS123に進める。また命令種別判定部142は、空白行およびコメント行のいずれでもなければ、処理をステップS128に進める。
[ステップS131]命令種別判定部142は、選択した行の先頭に、固定キーワード辞書121において「変数型」とされている単語があるか否かを判断する。行の先頭の単語が「int」や「short」などの変数型を指定する単語の場合、その行は、変数型を宣言する命令文であると考えられる。命令種別判定部142は、先頭の単語が変数型の場合、処理をステップS132に進める。また命令種別判定部142は、先頭の単語が変数型でなければ、処理をステップS133に進める。
[ステップS141]パッチ導入箇所推定部144は、修正パッチの修正用ソースコードとOSSのソースコードとの行単位の命令種別情報を取得する。
図25は、マッチング処理の手順の一例を示すフローチャートである。以下、図25に示す処理をステップ番号に沿って説明する。
[ステップS153]マッチング処理部146は、ソースマッチ用配列とパッチマッチ用配列とに単語を格納する。
[ステップS156]マッチング処理部146は、固定キーワードが一致すると判定した行の可変キーワードの対応関係を、メモリ102に保存する。
図26は、類似度算出処理の手順の一例を示すフローチャートである。以下、図26に示す処理をステップ番号に沿って説明する。
[ステップS162]類似度算出部148は、類似度閾値記憶部130から類似度閾値131(図17参照)を取得する。
類似度が算出されると、結果出力部150により、結果出力処理が行われる。
[ステップS171]結果出力部150は、類似度情報とパッチ導入推定箇所情報とを取得する。また結果出力部150は、ソースコード取得部141から、取得した修正パッチのパッチ名と、取得したソースファイルのファイル名とを取得する。
[ステップS173]結果出力部150は、類似度情報とパッチ導入推定箇所情報に基づいて、パッチ適用情報151aを更新する。例えば結果出力部150は、パッチ名とソースファイル名との組に対応付けて、類似度情報とパッチ導入推定箇所情報とを、パッチ適用情報151aに格納する。また結果出力部150は、パッチ適用情報151aをモニタ21に表示することもできる。
第2の実施の形態では、OSSに修正パッチを適用する場合を想定しているが、第2の実施の形態に示したパッチ適用確認方法は、OSS以外のソフトウェアにも適用可能である。
1a 修正命令列
2 ソースファイル
2a 種別一致命令列
10 情報処理装置
11 記憶部
12 処理部
Claims (7)
- 一部の命令列を修正命令列に変更するパッチの適用対象であるソースファイルを記憶する記憶部と、
前記修正命令列を含むパッチファイルに基づいて、前記修正命令列内の各命令の命令種別を示すパッチ命令種別情報を生成し、前記ソースファイル内の各命令の命令種別を示すソース命令種別情報を生成し、前記パッチ命令種別情報と前記ソース命令種別情報とに基づいて、前記ソースファイルから、前記修正命令列と命令種別の並びが一致する種別一致命令列を抽出し、前記種別一致命令列と前記修正命令列との、変数名と関数名とを除外した記述内容に基づいて、前記ソースファイルに前記パッチが適用されているか否かを判定する処理部と、
を有する情報処理装置。 - 前記処理部は、変数名と関数名とを除外した前記種別一致命令列の記述内容と、変数名と関数名とを除外した前記修正命令列の記述内容との類似度を算出し、前記類似度に基づいて、前記ソースファイルに前記パッチが適用されているか否かを判定する、
請求項1記載の情報処理装置。 - 前記処理部は、前記種別一致命令列と前記修正命令列とのそれぞれの命令行に先頭から順に行番号を付与し、同じ行番号の行同士の記述の同一性を判定し、一致すると判定した行の割合を前記類似度とする、
請求項2記載の情報処理装置。 - 前記記憶部は、行間の同一性の判定において比較対象とする単語のリストを含むキーワード辞書をさらに記憶し、
前記処理部は、前記種別一致命令列の第1の行内の前記キーワード辞書に含まれる単語と、前記修正命令列における、前記第1の行と同じ行番号の第2の行内の前記キーワード辞書に含まれる単語との比較結果に基づいて、同じ行番号の行同士の同一性を判定する、
請求項3記載の情報処理装置。 - 一部の命令列を修正命令列に変更するパッチ用の、前記修正命令列を含むパッチファイルを配布するサーバと、
前記パッチの適用対象であるソースファイルを記憶する記憶部と、前記サーバから前記パッチファイルを取得し、前記パッチファイルに基づいて、前記修正命令列内の各命令の命令種別を示すパッチ命令種別情報を生成し、前記ソースファイル内の各命令の命令種別を示すソース命令種別情報を生成し、前記ソース命令種別情報と前記パッチ命令種別情報とに基づいて、前記ソースファイルから、前記修正命令列と命令種別の並びが一致する種別一致命令列を抽出し、前記種別一致命令列と前記修正命令列との、変数名と関数名とを除外した記述内容に基づいて、前記ソースファイルに前記パッチが適用されているか否かを判定する、処理部と、を有する情報処理装置と、
を有するパッチ適用確認システム。 - コンピュータが、
一部の命令列を修正命令列に変更するパッチ用の、前記修正命令列を含むパッチファイルに基づいて、前記修正命令列内の各命令の命令種別を示すパッチ命令種別情報を生成し、
前記パッチの適用対象であるソースファイル内の各命令の命令種別を示すソース命令種別情報を生成し、
前記パッチ命令種別情報と前記ソース命令種別情報とに基づいて、前記ソースファイルから、前記修正命令列と命令種別の並びが一致する種別一致命令列を抽出し、
前記種別一致命令列と前記修正命令列との、変数名と関数名とを除外した記述内容に基づいて、前記ソースファイルに前記パッチが適用されているか否かを判定する、
パッチ適用確認方法。 - コンピュータに、
一部の命令列を修正命令列に変更するパッチ用の、前記修正命令列を含むパッチファイルに基づいて、前記修正命令列内の各命令の命令種別を示すパッチ命令種別情報を生成し、
前記パッチの適用対象であるソースファイル内の各命令の命令種別を示すソース命令種別情報を生成し、
前記パッチ命令種別情報と前記ソース命令種別情報とに基づいて、前記ソースファイルから、前記修正命令列と命令種別の並びが一致する種別一致命令列を抽出し、
前記種別一致命令列と前記修正命令列との、変数名と関数名とを除外した記述内容に基づいて、前記ソースファイルに前記パッチが適用されているか否かを判定する、
処理を実行させるパッチ適用確認プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018135851A JP7075011B2 (ja) | 2018-07-19 | 2018-07-19 | 情報処理装置、パッチ適用確認システム、パッチ適用確認方法、およびパッチ適用確認プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018135851A JP7075011B2 (ja) | 2018-07-19 | 2018-07-19 | 情報処理装置、パッチ適用確認システム、パッチ適用確認方法、およびパッチ適用確認プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2020013385A JP2020013385A (ja) | 2020-01-23 |
JP7075011B2 true JP7075011B2 (ja) | 2022-05-25 |
Family
ID=69169884
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018135851A Active JP7075011B2 (ja) | 2018-07-19 | 2018-07-19 | 情報処理装置、パッチ適用確認システム、パッチ適用確認方法、およびパッチ適用確認プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP7075011B2 (ja) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010086072A (ja) | 2008-09-29 | 2010-04-15 | Toshiba Corp | コンピュータシステムおよび修正パッチ確認/適用方法 |
WO2017061270A1 (ja) | 2015-10-09 | 2017-04-13 | 日本電信電話株式会社 | 脆弱性発見装置、脆弱性発見方法、および、脆弱性発見プログラム |
-
2018
- 2018-07-19 JP JP2018135851A patent/JP7075011B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010086072A (ja) | 2008-09-29 | 2010-04-15 | Toshiba Corp | コンピュータシステムおよび修正パッチ確認/適用方法 |
WO2017061270A1 (ja) | 2015-10-09 | 2017-04-13 | 日本電信電話株式会社 | 脆弱性発見装置、脆弱性発見方法、および、脆弱性発見プログラム |
Also Published As
Publication number | Publication date |
---|---|
JP2020013385A (ja) | 2020-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10540350B2 (en) | Source code search engine | |
US10585780B2 (en) | Enhancing software development using bug data | |
US10169347B2 (en) | Layer identification and dependency analysis for management of images | |
US8181171B2 (en) | Method and apparatus for analyzing large scale program and generation of code from degenerated program dependence graph | |
WO2011119940A1 (en) | Detection of global metamorphic malware variants using control and data flow analysis | |
RU2716553C1 (ru) | Устройство создания сигнатуры, способ создания сигнатуры, носитель записи, в котором записана программа создания сигнатуры, и система определения программного обеспечения | |
CN113760891A (zh) | 一种数据表的生成方法、装置、设备和存储介质 | |
Thung et al. | Recommending code changes for automatic backporting of Linux device drivers | |
US20170140010A1 (en) | Automatically Determining a Recommended Set of Actions from Operational Data | |
Levin et al. | Towards software analytics: Modeling maintenance activities | |
US20210064697A1 (en) | List-based entity name detection | |
US20140324411A1 (en) | Translation validation | |
EP3818437B1 (en) | Binary software composition analysis | |
US11922230B2 (en) | Natural language processing of API specifications for automatic artifact generation | |
CN117493169A (zh) | 一种Java依赖库版本间API行为不兼容性检测方法、装置、设备及介质 | |
JP7075011B2 (ja) | 情報処理装置、パッチ適用確認システム、パッチ適用確認方法、およびパッチ適用確認プログラム | |
US9817659B2 (en) | Artifact normalization | |
JP6447111B2 (ja) | 共通化情報提供プログラム、共通化情報提供方法、および共通化情報提供装置 | |
US11461672B2 (en) | Plug-and-ingest framework for question answering systems | |
Asaduzzaman et al. | LHDiff: tracking source code lines to support software maintenance activities | |
KR102382017B1 (ko) | 악성코드 진화관계를 분석하는 장치 및 방법 | |
EP4310670A1 (en) | Information processing program, information processing method, and information processing device | |
JP2001312419A (ja) | ソフトウェア重複度評価装置およびソフトウェア重複度評価プログラムを記録した記録媒体 | |
Robati Shirzad | WasmWalker: Path-based Code Representations for Improved WebAssembly Program Analysis | |
Singh et al. | A Novel Composite Approach for Software Clone Detection |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20210408 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20210413 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20210413 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20220309 |
|
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: 20220412 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20220425 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7075011 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |