JP2007052625A - ソースコード脆弱性検査装置 - Google Patents
ソースコード脆弱性検査装置 Download PDFInfo
- Publication number
- JP2007052625A JP2007052625A JP2005237124A JP2005237124A JP2007052625A JP 2007052625 A JP2007052625 A JP 2007052625A JP 2005237124 A JP2005237124 A JP 2005237124A JP 2005237124 A JP2005237124 A JP 2005237124A JP 2007052625 A JP2007052625 A JP 2007052625A
- Authority
- JP
- Japan
- Prior art keywords
- transition
- variable
- function
- vulnerability
- source code
- 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
Links
Images
Abstract
【解決手段】検査対象のソースコード208を構文解析手段201により解析して解析木210を構築する。脆弱性検出手段202は解析木210を辿り動的仮引数間遷移DB206を作製する。これと仮引数間遷移DB204から検査対象のソースコードにおける外部入力の遷移を追跡し、外部入力をパラメータとして使用すると脆弱な関数を登録した脆弱性データベース205の登録内容に合致する箇所を、脆弱性を有する箇所として警告する。
【選択図】図2
Description
情報処理振興事業協会セキュリティセンター:オープンソース・ソフトウェアのセキュリティ確保に関する調査報告書 第II部 オープンソース・ソフトウェアの効率的な検査技術の調査:平成15年2月、p.II-2〜II-4 情報処理振興事業協会セキュリティセンター:セキュア・プログラミング講座:平成14年3月、[1-2.]クロスサイトスクリプティング、他
手順307において、脆弱性検出手段202は、これまでに探索済みのノードの次から解析木210を所定の順序でたどり、最初に到達した関数定義ノードを頂点とする部分解析木を手順308〜312の処理の対象とする。この部分解析木で表されるユーザ定義関数を以下では対象関数と呼ぶ。
Claims (7)
- 検査対象のソースコードの脆弱性を検査するソースコード脆弱性検査装置であって、
前記検査対象のソースコードを解析して、外部入力がどのように遷移するかを求める手段と、
外部入力をパラメータとして使用すると脆弱な関数を登録した脆弱性データベースと、
前記検査対象のソースコードにおける外部入力の遷移を追跡し、前記脆弱性データベースの登録内容に合致する箇所を、脆弱性を有する箇所として警告する手段と
を備えることを特徴とするソースコード脆弱性検査装置。 - 検査対象のソースコードの脆弱性を検査するソースコード脆弱性検査装置であって、
検査対象ソースコードの構文の解析を行い、該検査対象のソースコードの解析木を構築する構文解析手段と、
前記検査対象ソースコード内で使用されているライブラリに含まれる関数について、内部での処理による仮引数間のデータ遷移を記述した仮引数間遷移データベースと、
前記検査対象ソースコード内で定義されているユーザ定義関数について、内部での処理による仮引数間のデータ遷移と、該検査対象ソースコードをコンパイルして作成されたプログラムの実行時に該プログラムの外部から与えられた入力データを受け取ることのある仮引数の位置とを、組にして登録するための動的仮引数間遷移データベースと、
前記検査対象ソースコード内で使用されている変数の保持する値の種類を、外部から与えられた入力データであるか否かを区別して、記録するための変数テーブルと、
前記解析木を辿りながら、ユーザ定義関数があれば、そのユーザ定義関数を分析対象である対象関数とし、その部分解析木を探索して仮引数とローカル変数の定義を前記変数テーブルに登録し、変数間のデータ遷移や変数の外部出力の箇所があれば、前記仮引数間遷移データベースと前記動的仮引数間遷移データベースと前記変数テーブルとを参照して更新し、前記対象関数の部分解析木の探索が終了したら、その対象関数について変数テーブルの内容に基づき前記動的仮引数間遷移データベースの内容を更新し、このような処理を繰り返すことにより、解析木を辿って変数間のデータ遷移を追跡できるようにする手段と、
外部入力をパラメータとして使用すると脆弱な関数を登録した脆弱性データベースと、
前記脆弱性データベースを読み込み、前記変数間のデータ遷移が該脆弱性データベースの登録内容に合致する箇所を、脆弱性を有する箇所として警告する手段と
を備えることを特徴とするソースコード脆弱性検査装置。 - 検査対象のソースコードの脆弱性を検査するソースコード脆弱性検査装置であって、
検査対象ソースコードの記述に用いたプログラミング言語の構文解析ルールに従って該検査対象ソースコードを構文解析して解析木を構築する構文解析手段と、
該検査対象ソースコード内で使用されているライブラリに含まれる関数について、内部での処理による仮引数間のデータ遷移を記述した仮引数間遷移データベースと、
該検査対象ソースコード内で定義されているユーザ定義関数について、内部での処理による仮引数間のデータ遷移と、該検査対象ソースコードをコンパイルして作成されたプログラムの実行時に該プログラムの外部から与えられた入力データを受け取ることのある仮引数の位置とを、組にして登録する動的仮引数間遷移データベースと、
該検査対象ソースコード内で使用されている変数の保持する値の種類を、該プログラムの外部から与えられた入力データであるか否かを区別して、記録する変数テーブルと、
プログラムの実行時に該プログラムの外部から与えられた入力データをある特定の仮引数で受け取って処理すると脆弱性を生じる可能性のある該ライブラリ内の関数と、該特定の仮引数の位置とを、組にして登録した脆弱性データベースと、
前記解析木のルートノードから該解析木の全体を所定の順序で繰り返し辿りながら、前記動的仮引数間遷移データベースと変数テーブルとを更新し、前記動的仮引数間遷移データベースに新たな更新がなくなった後に、再び該解析木のルートノードから該解析木の全体を所定の順序でたどりながら、前記仮引数間遷移データベースと前記動的仮引数間遷移データベースを参照して前記変数テーブルを更新し、さらに、前記脆弱性データベースを参照して、該脆弱性データベースに登録された関数が前記検査対象ソースコード内で呼び出される箇所において、該登録された関数と組の該特定の引数の位置で実引数として指定された変数について該変数テーブルに登録された該変数の保持する値の種類が該プログラムの外部からの入力データであれば、該箇所を脆弱性として脆弱性検査結果に出力する脆弱性検出手段と
を備え、
前記脆弱性検出手段は、前記解析木を所定の順序でたどって関数定義ノードに到達した時、該関数定義ノードの表すユーザ定義関数が前記動的仮引数間遷移データベースに登録されていなければ該ユーザ定義関数を登録し、
続いて該解析木の該関数定義ノードを頂点とする部分解析木を所定の順序でたどり、仮引数定義ノードに到達すれば、該仮引数ノードの表す該仮引数を前記変数テーブルに登録し、
また該ユーザ定義関数について該動的仮引数間遷移データベースに該仮引数が前記プログラムの外部からの入力データを受け取ることのある仮引数として登録されていれば、該変数テーブルに該仮引数の保持する値の種類として外部入力データを登録し、
また変数定義ノードに到達すれば、該変数定義ノードの表す変数を該変数テーブルに登録し、
また関数呼出しノードに到達すれば、該関数呼出しノードの表す関数について該仮引数間遷移DBまたは該動的仮引数間遷移データベースに登録された仮引数間のデータ遷移を参照し、該仮引数間のデータ遷移を構成する、遷移元仮引数の値の種類、および遷移先仮引数の値の種類を取得し、
該遷移元仮引数の値の種類が該関数呼出しノードの表す関数の第1の仮引数であれば、該部分解析木を所定の順序でたどって該第1の仮引数の位置に当たる第1の実引数ノードに到達し、該第1の実引数ノードの表す第1の変数について前記変数テーブルに記録された変数の保持する値の種類を新たな遷移先の値の種類として取得し、
該遷移元仮引数の値の種類が外部入力データであれば新たな遷移先の値の種類を外部入力データとし、
該遷移先仮引数の値の種類が該関数呼出しノードの表す関数の第2の仮引数であれば、該部分解析木を所定の順序でたどって該第2の仮引数の位置に当たる第2の実引数ノードに到達し、該第2の実引数ノードの表す第2の変数について前記変数テーブルに記録された変数の保持する値の種類として、該新たな遷移先の値の種類を登録し、
さらに該新たな遷移先の値の種類に外部入力データを含み、かつ該関数呼出しノードの表す関数が前記動的仮引数遷移データベースに登録されていれば、該関数呼出しノードの表す関数について該第1の仮引数が該プログラムの外部から入力データを受け取ることを該動的仮引数間遷移データベースに登録し、
さらに該新たな遷移先の値の種類に外部入力データを含み、かつ該関数呼出しノードの表す関数と該第1の仮引数の位置との組が前記脆弱性データベースに登録されていれば、前記検査対象ソースコード内での該第1の変数の記述位置を脆弱性が生じる可能性のある箇所として出力し、
そして該部分解析木を所定の順序でたどり終えたら、該仮引数ごとに、該変数テーブルに記録された該仮引数の保持する値の種類を遷移元仮引数の保持する値の種類、該仮引数自身を遷移先仮引数の保持する値の種類とする新たな仮引数間のデータ遷移を作成し、該動的仮引数間遷移データベースの該ユーザ定義関数についての仮引数間のデータ遷移を該新たな引数間のデータ遷移で上書きする
ことを特徴とするソースコード脆弱性検査装置。 - 請求項3に記載のソースコード脆弱性検査装置において、
前記脆弱性検出手段は、前記変数テーブルに記録される変数の保持する値の種類を、該変数について可能な間接参照の深さ毎に記録することを特徴とするソースコード脆弱性検査装置。 - 請求項3または4に記載のソースコード脆弱性検査装置において、
前記脆弱性検出手段は、前記解析木を所定の順序でたどり、変数の定義ノードに到達したときに該変数の定義ノードの表す変数および該解析木内での深さを該変数テーブルに登録し、
さらに該解析木を所定の順序でたどって到達したノードの該解析木内での深さが該変数の定義ノードの深さより浅くなったときに該変数についての登録データを該変数テーブルから削除する
ことを特徴とするソースコード脆弱性検査装置。 - 検査対象のソースコードの脆弱性を検査するソースコード脆弱性検査装置であって、
検査対象ソースコードの構文の解析を行う構文解析手段と、
ライブラリ関数に伴うデータ遷移をあらかじめ登録しておく固定関数遷移データベースと、
脆弱性の生じる可能性のある遷移先と、それを回避するための処理を経たことを表す値とを、あらかじめ登録しておく脆弱遷移先データベースと、
ソースコード内で定義される変数の種類と値とを記録する変数データベースと、
前記検査対象ソースコード内で定義した関数に伴うデータ遷移を記録する不定関数遷移データベースと、
前記検査対象ソースコードを辿りながら、前記固定関数遷移データベースと脆弱遷移先データベースとを参照し、前記変数データベースに前記検査対象ソースコード内で定義される変数の種類と値を記録し、前記不定関数遷移データベースを更新し、これによりデータ遷移を追跡できるようにし、脆弱性を回避する処理を受けていない外部入力値が、脆弱性の生じる可能性のある遷移先に遷移する、脆弱なデータ遷移が行われる関数呼び出し箇所を脆弱性として検出する脆弱性検出手段と
を備えることを特徴とするソースコード脆弱性検査装置。 - 請求項6に記載のソースコード脆弱性検査装置において、
前記検査対象ソースコード中で定義された関数のうち、その内部で呼ばれる関数が、ライブラリ関数または既に処理を終えデータ遷移を登録したプログラマ定義関数のみである関数定義から処理するように、処理対象関数を決める手段を備えることを特徴とするソースコード脆弱性検査装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005237124A JP4693044B2 (ja) | 2005-08-18 | 2005-08-18 | ソースコード脆弱性検査装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005237124A JP4693044B2 (ja) | 2005-08-18 | 2005-08-18 | ソースコード脆弱性検査装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2007052625A true JP2007052625A (ja) | 2007-03-01 |
JP4693044B2 JP4693044B2 (ja) | 2011-06-01 |
Family
ID=37917035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005237124A Expired - Fee Related JP4693044B2 (ja) | 2005-08-18 | 2005-08-18 | ソースコード脆弱性検査装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4693044B2 (ja) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008299723A (ja) * | 2007-06-01 | 2008-12-11 | Hitachi Systems & Services Ltd | プログラム検証方法、プログラム検証装置 |
WO2011122724A1 (ko) * | 2010-03-29 | 2011-10-06 | 주식회사 소프트 포 소프트 | 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템 |
EP2398256A2 (en) | 2010-06-18 | 2011-12-21 | Funai Electric Co., Ltd. | Television set and speaker system |
JP2012059221A (ja) * | 2010-09-13 | 2012-03-22 | Toshiba Corp | 情報処理装置、情報処理プログラム |
US8365280B2 (en) | 2009-06-30 | 2013-01-29 | International Business Machines Corporation | System, method, and program for determining validity of string |
US8468605B2 (en) | 2009-11-30 | 2013-06-18 | International Business Machines Corporation | Identifying security vulnerability in computer software |
US8528095B2 (en) | 2010-06-28 | 2013-09-03 | International Business Machines Corporation | Injection context based static analysis of computer software applications |
US8584246B2 (en) | 2009-10-13 | 2013-11-12 | International Business Machines Corporation | Eliminating false reports of security vulnerabilities when testing computer software |
WO2014021190A1 (ja) | 2012-08-01 | 2014-02-06 | 三菱電機株式会社 | プログラム実行装置及びプログラム解析装置 |
US9959191B2 (en) | 2012-11-23 | 2018-05-01 | Samsung Electronics Co., Ltd. | Dynamic library profiling method and dynamic library profiling system |
CN110162972A (zh) * | 2019-05-06 | 2019-08-23 | 武汉大学 | 一种基于语句联合编码深度神经网络的uaf漏洞检测方法 |
KR102026959B1 (ko) * | 2019-04-19 | 2019-09-30 | 한화시스템(주) | 보안 시스템 및 그 동작 방법 |
JP2019168753A (ja) * | 2018-03-22 | 2019-10-03 | 三菱電機株式会社 | ソースコード解析装置およびソースコード解析プログラム |
KR102067733B1 (ko) * | 2019-05-15 | 2020-01-17 | 세종대학교산학협력단 | 포맷 스트링 취약점 검출 방법 및 이를 수행하기 위한 장치 |
WO2020261430A1 (ja) * | 2019-06-26 | 2020-12-30 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
WO2023238239A1 (ja) * | 2022-06-07 | 2023-12-14 | 日本電信電話株式会社 | 修正装置、修正方法及び修正プログラム |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004171064A (ja) * | 2002-11-15 | 2004-06-17 | Mitsubishi Research Institute Inc | バッファオーバーフロー静的解析方法およびプログラム |
WO2004095176A2 (en) * | 2003-04-18 | 2004-11-04 | Ounce Labs, Inc. | Detecting vulnerabilities in source code |
WO2006087780A1 (ja) * | 2005-02-17 | 2006-08-24 | Fujitsu Limited | 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法 |
-
2005
- 2005-08-18 JP JP2005237124A patent/JP4693044B2/ja not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004171064A (ja) * | 2002-11-15 | 2004-06-17 | Mitsubishi Research Institute Inc | バッファオーバーフロー静的解析方法およびプログラム |
WO2004095176A2 (en) * | 2003-04-18 | 2004-11-04 | Ounce Labs, Inc. | Detecting vulnerabilities in source code |
JP2006523898A (ja) * | 2003-04-18 | 2006-10-19 | オンス ラブス,インク | ソースコードの脆弱点の検出法および検出システム |
WO2006087780A1 (ja) * | 2005-02-17 | 2006-08-24 | Fujitsu Limited | 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法 |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008299723A (ja) * | 2007-06-01 | 2008-12-11 | Hitachi Systems & Services Ltd | プログラム検証方法、プログラム検証装置 |
US8365280B2 (en) | 2009-06-30 | 2013-01-29 | International Business Machines Corporation | System, method, and program for determining validity of string |
US8584246B2 (en) | 2009-10-13 | 2013-11-12 | International Business Machines Corporation | Eliminating false reports of security vulnerabilities when testing computer software |
US8468605B2 (en) | 2009-11-30 | 2013-06-18 | International Business Machines Corporation | Identifying security vulnerability in computer software |
US8875110B2 (en) | 2010-03-29 | 2014-10-28 | Soft4Soft Co., Ltd. | Code inspection executing system for performing a code inspection of ABAP source codes |
WO2011122724A1 (ko) * | 2010-03-29 | 2011-10-06 | 주식회사 소프트 포 소프트 | 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템 |
EP2398256A2 (en) | 2010-06-18 | 2011-12-21 | Funai Electric Co., Ltd. | Television set and speaker system |
US8528095B2 (en) | 2010-06-28 | 2013-09-03 | International Business Machines Corporation | Injection context based static analysis of computer software applications |
US8650655B2 (en) | 2010-09-13 | 2014-02-11 | Kabushiki Kaisha Toshiba | Information processing apparatus and information processing program |
JP2012059221A (ja) * | 2010-09-13 | 2012-03-22 | Toshiba Corp | 情報処理装置、情報処理プログラム |
WO2014021190A1 (ja) | 2012-08-01 | 2014-02-06 | 三菱電機株式会社 | プログラム実行装置及びプログラム解析装置 |
US9507933B2 (en) | 2012-08-01 | 2016-11-29 | Mitsubishi Electric Corporation | Program execution apparatus and program analysis apparatus |
US9959191B2 (en) | 2012-11-23 | 2018-05-01 | Samsung Electronics Co., Ltd. | Dynamic library profiling method and dynamic library profiling system |
JP7068752B2 (ja) | 2018-03-22 | 2022-05-17 | 三菱電機株式会社 | ソースコード解析装置およびソースコード解析プログラム |
JP2019168753A (ja) * | 2018-03-22 | 2019-10-03 | 三菱電機株式会社 | ソースコード解析装置およびソースコード解析プログラム |
KR102026959B1 (ko) * | 2019-04-19 | 2019-09-30 | 한화시스템(주) | 보안 시스템 및 그 동작 방법 |
CN110162972A (zh) * | 2019-05-06 | 2019-08-23 | 武汉大学 | 一种基于语句联合编码深度神经网络的uaf漏洞检测方法 |
CN110162972B (zh) * | 2019-05-06 | 2022-11-18 | 武汉大学 | 一种基于语句联合编码深度神经网络的uaf漏洞检测方法 |
KR102067733B1 (ko) * | 2019-05-15 | 2020-01-17 | 세종대학교산학협력단 | 포맷 스트링 취약점 검출 방법 및 이를 수행하기 위한 장치 |
WO2020261430A1 (ja) * | 2019-06-26 | 2020-12-30 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
WO2023238239A1 (ja) * | 2022-06-07 | 2023-12-14 | 日本電信電話株式会社 | 修正装置、修正方法及び修正プログラム |
Also Published As
Publication number | Publication date |
---|---|
JP4693044B2 (ja) | 2011-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4693044B2 (ja) | ソースコード脆弱性検査装置 | |
CN108614707B (zh) | 静态代码检查方法、装置、存储介质和计算机设备 | |
US7958493B2 (en) | Type inference system and method | |
CN109857641B (zh) | 对程序源文件进行缺陷检测的方法及装置 | |
Bernardi et al. | Design pattern detection using a DSL‐driven graph matching approach | |
CN106371997B (zh) | 一种代码检查方法及装置 | |
CN112256271B (zh) | 一种基于静态分析的区块链智能合约安全检测系统 | |
US11262988B2 (en) | Method and system for using subroutine graphs for formal language processing | |
Dong et al. | Orplocator: Identifying read points of configuration options via static analysis | |
JP4951416B2 (ja) | プログラム検証方法、プログラム検証装置 | |
Kuramitsu | Nez: practical open grammar language | |
Lerner et al. | Combining form and function: Static types for JQuery programs | |
US20040010780A1 (en) | Method and apparatus for approximate generation of source code cross-reference information | |
Anderson et al. | Supporting analysis of SQL queries in PHP AiR | |
CN114489653A (zh) | 基于编译器的数据处理方法、装置以及可读存储介质 | |
CN114647439A (zh) | 一种代码扫描的方法、代码迁移的方法及相关装置 | |
Arusoaie et al. | Automating abstract syntax tree construction for context free grammars | |
Grigorev et al. | String-embedded language support in integrated development environment | |
JP2005056183A (ja) | ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム | |
Li et al. | Mapping Modern JVM Language Code to Analysis-Friendly Graphs: A Study with Kotlin | |
US20240184549A1 (en) | System and method for indexing source code | |
Zhang et al. | Propositional projection temporal logic specification mining | |
Khabibullin et al. | On development of static analysis tools for string-embedded languages | |
Negrini | A hybrid approach for automatic recognition of C++ objects in optimized binaries | |
CN116595533A (zh) | 一种针对Java Web应用的注入型漏洞检测方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080108 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20101124 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20101201 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110128 |
|
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: 20110217 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110217 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140304 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |