JP6966522B2 - 脆弱性分析装置 - Google Patents

脆弱性分析装置 Download PDF

Info

Publication number
JP6966522B2
JP6966522B2 JP2019191864A JP2019191864A JP6966522B2 JP 6966522 B2 JP6966522 B2 JP 6966522B2 JP 2019191864 A JP2019191864 A JP 2019191864A JP 2019191864 A JP2019191864 A JP 2019191864A JP 6966522 B2 JP6966522 B2 JP 6966522B2
Authority
JP
Japan
Prior art keywords
information
variable
actual value
unit
vulnerability
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
Application number
JP2019191864A
Other languages
English (en)
Other versions
JP2021068097A (ja
Inventor
陽介 前川
茂樹 佐野
弘章 佐治
洋一 小松
雄太郎 榎本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yazaki Corp
Original Assignee
Yazaki Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yazaki Corp filed Critical Yazaki Corp
Priority to JP2019191864A priority Critical patent/JP6966522B2/ja
Priority to US17/073,598 priority patent/US11657160B2/en
Priority to EP20202939.3A priority patent/EP3812940B1/en
Publication of JP2021068097A publication Critical patent/JP2021068097A/ja
Application granted granted Critical
Publication of JP6966522B2 publication Critical patent/JP6966522B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、プログラムにおける脆弱性を分析する脆弱性分析装置に関する。
従来から、コンピュータに組み込まれたプログラムに存在するセキュリティ上の脆弱性を検出する方法があり、特許文献1に記載された検出法が提案されている。
特許文献1では、遷移解析部、敵対者状態算出部、協力者状態算出部、および、不利状態算出部等の各要素が脆弱性を検出する手段として含まれる。遷移解析部では、評価対象のプログラムを解析して状態間の遷移関係を求める遷移解析処理を実行する。その際に、ファンクションを呼び出したユーザのユーザ種別に応じて、協力者によって生じる遷移と敵対者による遷移が区別される。次に到達可能性の判定が行われる。協力者による入力の前後には敵対者の任意回の入力が割り込みうる。区別された敵対者の遷移関係および協力者の遷移関係が交互に用いられ、評価条件を満たさない状態に達するか否かが判定される。このように、当該各要素は、入力とする条件や状態から、出力となる状態や状態の集合を算出している。
特開2018−156159号公報
しかし、上記従来技術の開示によれば、実際のプログラムにおける条件を示したとしても、状態の集合を算出するには膨大な計算が必要となり、セキュリティ上の脆弱性を検出することは現実的ではない。すなわち、不正な入力によって、プログラムが特定の不都合な状態に到達する可能性の有無を確認する具体的な方法を提供していないという課題があった。そこで、本発明はこのような課題を解決する手段を提供することを目的とする。
本発明の態様に係わる脆弱性分析装置は、評価対象となるプログラムの情報セキュリティ上の脆弱性の有無を評価する脆弱性分析装置であって、プログラム情報の脆弱性の存在の判定が可能なアタック判定位置からプログラム情報の開始位置までの経路情報であって、プログラム情報上の分岐によって分割して導出される経路の情報であり、プログラム情報の各処理を、処理順に保持する単一経路情報を導出する単一経路導出部と、前記単一経路情報を前記開始位置から前記アタック判定位置まで解析し、プログラム情報上の分岐条件と分岐結果の情報から実値の値域を限定する実値範囲情報を導出する変数解析部と、入力変数情報が指定されている場合に前記入力変数情報に対応する仮想アドレスおよび前記仮想アドレスに対応する入力フラグを設定し、前記入力変数情報の実値情報を前記仮想アドレスの実値フィールドに記憶し、および、前記変数解析部から通知された実値範囲情報に対応する仮想アドレスを取得し、前記仮想アドレスの実値範囲フィールドに前記実値範囲情報を記憶するメモリ編集部と、前記アタック判定位置におけるアタック成立条件において用いられている変数情報を抽出し、前記変数情報に対応する仮想アドレスを取得し、前記仮想アドレスに対応する実値情報および実値範囲情報を取得し、前記仮想アドレスに入力フラグが設定されている場合に、前記実値範囲情報によって実値情報を限定した限定入力実値情報を算出し、前記限定入力実値情報が前記アタック成立条件を満たしているか否かを判定し、前記仮想アドレスに入力フラグが設定されていない場合に、前記仮想アドレスに対応する実値情報が前記アタック成立条件を満たしているか否かを判定する脆弱性成立判定部を含むことが好ましい。
前記アタック成立条件は前記プログラム情報で用いられることが可能な変数情報を用いた論理式で表現されることが好ましい。
前記入力変数情報は、評価対象となるプログラムが、プログラムの外部から入力される情報を保持するための変数を含む変数情報であり、前記変数情報は、変数、直接的なメモリ上のアドレス値、共用体、構造体、配列を含む情報であることが好ましい。
前記メモリ編集部は、前記変数情報に対応する仮想アドレス領域の前後の仮想アドレスにnullフラグを設定することが好ましい。
前記脆弱性成立判定部は、前記アタック成立条件が満たされている場合に、入力フラグを持つすべての前記仮想アドレスを抽出し、前記仮想アドレスの実値フィールドの値を入力実値情報とし、前記入力実値情報に対応する実値範囲情報フィールドの値によって限定された値を限定入力実値情報とし、前記限定入力実値情報が前記実値フィールドの値に存在しない場合には、前記限定入力実値情報を出力しないことが好ましい。
前記脆弱性成立判定部において前記アタック成立条件が満たされていない場合には、前記変数解析部はその他の単一経路情報がある場合には前記その他の単一経路情報について解析を続行し、前記脆弱性成立判定部は解析された前記その他の単一経路情報について前記アタック成立条件が満たされているか否かを判定することが好ましい。
前記メモリ編集部は、前記実値範囲情報に使用される変数情報に対応する仮想アドレスに入力フラグが設定されていない場合には、前記変数情報を経路矛盾判定部(290)に通知し、前記経路矛盾判定部は、前記変数情報に対応する仮想アドレスを持つレコードの実値フィールドに含まれる実値情報が、当該仮想アドレスを持つレコードの実値範囲フィールドに含まれる実値範囲情報に含まれない場合には、論理的な矛盾があることを示す矛盾発生通知を前記変数解析部に通知し、前記変数解析部は論理的な矛盾がある単一経路情報の解析を停止し、他の単一経路情報がある場合には当該他の単一経路情報の解析を開始することが好ましい。
前記プログラム情報は、プログラムのソースコードまたは制御フローグラフを含むプログラムで実現する機能の処理ロジックおよび手順を含む情報であることが好ましい。
本発明によれば、不正な入力によって、プログラムが特定の不都合な状態に到達する可能性の有無を確認する具体的な方法を提供することが可能となる。
本実施形態に係わる脆弱性分析装置の構成の一例を示す図である。 本実施形態に係わる単一経路導出部の構成の一例を示す図である。 本実施形態に係わる脆弱性分析部の構成の一例を示す図である。 本実施形態に係わる単一経路導出部の動作の一例を示す図である。 本実施形態に係わる変数解析部の動作の一例を示す図である。 本実施形態に係わる変数解析部の図5AのステップS502の動作の一例を示す図である。 本実施形態に係わる変数解析部の図5AのステップS503の動作の一例を示す図である。 本実施形態に係わる変数解析部の図5AのステップS504の動作の一例を示す図である。 本実施形態に係わる変数解析部の図5AのステップS505の動作の一例を示す図である。 本実施形態に係わる変数解析部の図5AのステップS506の動作の一例を示す図である。 本実施形態に係わる変数解析部の図5AのステップS507の動作の一例を示す図である。 本実施形態に係わるメモリ編集部の動作の一例を示す図である。 本実施形態に係わるメモリ編集部の図6AのステップS602およびステップS603の動作の一例を示す図である。 本実施形態に係わるメモリ編集部の図6AのステップS604の動作の一例を示す図である。 本実施形態に係わるメモリ編集部の図6AのステップS605の動作の一例を示す図である。 本実施形態に係わるメモリ編集部の図6AのステップS606の動作の一例を示す図である。 本実施形態に係わるメモリ編集部の図6AのステップS607の動作の一例を示す図である。 本実施形態に係わるメモリ編集部の図6AのステップS608の動作の一例を示す図である。 本実施形態に係る変数等が直接的なメモリ上のアドレス値である場合について説明する模式図である。 本実施形態に係る変数等が変数である場合について説明する模式図である。 本実施形態に係る変数等が共用体である場合について説明する模式図である。 本実施形態に係る変数等が構造体である場合について説明する模式図である。 本実施形態に係る変数等が配列である場合について説明する模式図である。 本実施形態に係る脆弱性分析部に経路矛盾判定部が追加された一例を示す図である。 本実施形態に係る経路矛盾判定部が追加された場合のメモリ編集部の追加機能の一例を示す図である。 本実施形態に係る経路矛盾判定部の動作の一例を示す図である。 本実施形態に係る経路矛盾判定部の動作の一例を示す図である。
最初に、本実施形態において使用されるいくつかの技術用語および当該技術用語の意味について以下に説明する。
・経路情報:評価対象となるプログラムのソースコード、または、制御フローグラフ等のプログラム情報において、処理フローとして辿る手順と処理の情報。
・単一経路情報:プログラム情報の脆弱性の存在の判定が可能なアタック判定位置からプログラム情報の開始位置までの経路情報であって、プログラム情報上の分岐によって分割して導出される経路の情報であり、プログラム情報の各処理を、処理順に保持する情報。
・アタックポイント情報:以下に説明するアタック判定位置およびアタック成立条件を含む情報。
・アタック判定位置:プログラム情報において、脆弱性の存在の判定が可能な特定の位置。
・アタック成立条件:プログラム情報のアタック判定位置において、脆弱性の存在の有無を判定するための条件であって、プログラム情報において用いられている変数による論理式で表現される条件。
・入力変数:評価対象となるプログラムが実装されるシステムが、当該システムの外部から入力される情報を保持するための変数等。
・変数等:評価対象となるプログラムが情報を保持するためのものであって、変数、直接的なメモリ上のアドレス値、共用体、構造体、配列などが含まれる。
・仮想メモリマップ:プログラムを実行する上で確保する物理メモリへのデータ展開を、仮想的にシミュレートしたメモリ空間および付随情報を保持する情報。仮想メモリマップは、仮想アドレス、実値、実値範囲、物理アドレスなどの情報を有する。なお、仮想メモリマップは、1仮想アドレスにつき1レコードとして管理することが可能である。
・仮想アドレス:仮想メモリマップの一部として保持される情報であり、プログラムを実行する上で確保する物理メモリへのデータ展開を仮想的にシミュレートしたメモリ空間の特定領域を示すための情報。
・プログラム情報:プログラムのソースコード、或いは、制御フローグラフ等であって、プログラムで実現する機能の処理ロジックと手順を読み取ることが可能な情報。
・開始位置:プログラム情報における処理の起点となる位置。ユーザが指定することも可能であり、コンパイラやCPU(Central Processing Unit)が処理の起点として認識する位置を開始位置することも可能である。
・脱出条件:プログラムのループにおいて、ループを終了させ、ループ外に処理が遷移するための条件。
・分岐結果:プログラム情報における分岐箇所において、ある片方の分岐に処理が遷移するための成立条件のこと。例えば、正となる論理式の形で表現することが可能である。
・変数等のパラメータ情報:プログラムにおいて、変数等を取扱う上で必要となる情報。変数名、変数の型種別などの情報が含まれる。
・実値情報:仮想アドレスマップのレコードで記憶される情報であり、変数等が保持する値を示す情報。
・実値範囲情報:仮想アドレスマップのレコードで記憶される情報であり、プログラムの特定箇所に関連付けられる変数等の実値の閾値を表す情報。
(脆弱性分析装置の概要)
図1に、入力情報が限定される電子装置に実装されるプログラムを評価対象として、不正な入力情報に起因して、プログラムが特定の不都合な状態に到達する可能性があるか否かを判定する、本実施形態に係る脆弱性分析装置1000の一例を図示する。脆弱性分析装置1000には単一経路導出部100および脆弱性分析部200が含まれる。
図2に単一経路導出部100の一例を図示する。単一経路導出部100は、プログラム情報を読み込み、プログラム情報を解析し、アタック判定位置から開始位置までの経路であって、プログラム情報上の分岐によって分割して導出される経路である単一経路情報の全てを生成し、保持する機能を有する。上記機能を実現するために、単一経路導出部100には、プログラム情報が記憶されるプログラム情報記憶部110、単一経路情報の全てを生成する経路生成部120、および、生成された全ての単一経路情報を記憶する単一経路情報記憶部130が含まれる。
図4に単一経路導出部100の動作の一例を図示する。
ステップS401において、経路生成部120はプログラム情報記憶部110からプログラム情報を入力し、プログラム情報におけるアタック判定位置を特定する。次に、経路生成部120はステップS402に進む。
ステップS402において、経路生成部120はアタック判定位置を起点とし、プログラム情報における各処理を遡る形で各処理を順次読み込むと共に、読み込んだ処理を経路情報として、読み込んだ順に保持する。なお、後述するステップS403およびステップS404の処理順番は本実施形態に限定されるわけではなく、経路生成部120がプログラム情報上の各処理を遡る順番で実施することが可能である。
ステップS403において、経路生成部120は読み込んだプログラム情報における処理が2分岐である場合、分岐条件が成立する場合と成立しない場合を当該2分岐の分岐結果として持つ経路情報を二つ作成し、それぞれを独立した経路として扱う。また、分岐が3分岐以上の場合であっても、同様に分岐条件の結果を当該分岐における分岐結果として持つ経路情報として分岐結果の数だけ作成し、それぞれを独立した経路情報として扱う。分岐処理以降の遡る形での順次読み込みは、経路情報ごとに行う。
ステップS404において、経路生成部120は読み込んだプログラム情報における処理がループの終端である場合、ループ内における脱出条件の数だけ経路情報を作成する。経路生成部120は作成した経路情報に各脱出条件の成立条件を分岐結果として持たせた上で、それぞれを独立した経路情報として扱う。ループ処理以降の遡る形での順次読み込みは、経路情報ごとに行う。
ステップS405において、経路生成部120は読み込んだプログラム情報における処理がプログラムにおける開始位置である場合、当該経路情報を単一経路情報として保持する。単一経路情報になっていない経路情報がある場合は、全ての経路情報が単一経路情報となるまで、経路生成部120は単一経路情報の導出処理を続ける。
図3に脆弱性分析部200の一例を図示する。脆弱性分析部200は、単一経路導出部100によって生成された単一経路情報を取得し、ユーザによって指定された入力変数情報、ならびに、アタック判定位置情報およびアタック成立条件情報を含むアタックポイント情報を取得し、評価対象の逐次解析を行う。評価対象の逐次解析では、評価対象の各処理については、以下に詳述する。なお、脆弱性分析部200は、各処理を通知機能によって通知した後も、評価対象の逐次解析を継続する。
上記機能を実現するために、脆弱性分析部200には、ユーザによって指定された入力変数情報を記憶する入力変数情報記憶部210が含まれる。また、脆弱性分析部200には、アタック判定位置情報およびアタック成立条件情報を含むアタックポイント情報を記憶するアタックポイント情報記憶部220が含まれる。さらに、脆弱性分析部200には、変数解析部240、メモリ編集部250、仮想メモリマップ記憶部260、変数等テーブル記憶部270、脆弱性成立判定部230、脆弱性が存在する単一経路情報を記憶する脆弱性単一経路情報記憶部280が含まれる。各構成要素の動作は以下に詳述する、
図5Aに変数解析部240の動作の一例を図示する。
ステップS501において、変数解析部240は各単一経路情報の解析を開始する前に、メモリクリアが必要である旨を、メモリ編集部250に通知する。メモリクリアが必要である旨の通知は通知Aと称する場合がある。
ステップS502において、変数解析部240は単一経路情報を単一経路情報記憶部130から入力し、入力変数情報を入力変数情報記憶部210から入力する。変数解析部240は、単一経路情報を解析し、当該単一経路情報が持つ変数等の宣言を認識し、かつ、入力変数情報として当該変数等が指定されていない場合、指定されていない変数等が宣言された事実と変数等のパラメータ情報を、メモリ編集部250に通知する。指定されていない変数等が宣言された事実と変数等のパラメータ情報の通知は通知Bと称する場合がある。
メモリ編集部250は通知Bによって入力ではない変数等が正しく宣言されたことを認識することができる。また、メモリ編集部250は、正しい宣言に従って仮想メモリマップ上に仮想アドレス領域を確保する準備が整ったことを示すことが可能となる。
ステップS503において、変数解析部240は単一経路情報を解析し、当該単一経路情報が持つ変数等の宣言の記述を認識する。さらに、変数解析部240は入力変数情報として当該変数等が指定されている場合、入力変数情報に属する入力変数等が宣言された事実と変数等のパラメータ情報を、メモリ編集部250に通知する。入力変数情報に属する入力変数等が宣言された事実と変数等のパラメータ情報の通知を通知Cと称する場合がある。
メモリ編集部250は通知Cによって入力変数等が正しく宣言されたことを認識することができる。また、メモリ編集部250は、正しい宣言に従って仮想メモリマップ上に仮想アドレス領域を確保する準備が整ったことを示すことが可能となる。
ステップS504において、変数解析部240は単一経路情報を解析するにしたがって変化する、変数等と紐づけられているメモリ上の値の情報に変化が生じる都度、変化した事実と変化した変数名と変化後の値を、メモリ編集部250に通知する。変化した事実と変化した変数名と変化後の値の通知は通知Cと称する場合がある。
メモリ編集部250は通知Cによって単一経路情報におけるプログラム情報における処理フローにおいて、変数が変化していることを認識でき、また、変化後の値を保持する準備が整ったことを知ることが可能となる。
ステップS505において、変数解析部240は単一経路情報を解析する上で、変数等のメモリ領域が解放された場合、メモリ領域が解放された事実と解放された変数等の名前を、メモリ編集部250に通知する。メモリ領域が解放された事実と解放された変数等の名前の通知は通知Eと称する場合がある。
メモリ編集部250は、単一経路情報におけるプログラムフローにおいて、変数が不要であることを認識することができる。また、メモリ編集部250は、当該変数を削除する準備が整ったことを知ることが可能となる。
ステップS506において、変数解析部240は単一経路情報を解析する上で、変数等がプログラム情報上で分岐であった箇所の分岐条件に使われている場合、分岐条件と分岐結果の情報から実値の値域を限定する情報である実値範囲情報を導出する。変数解析部240は変数等によって分岐している事実、当該変数等の名前、および、実値範囲情報を、メモリ編集部250に通知する。変数等によって分岐している事実、当該変数等の名前、および、実値範囲情報の通知は通知Fと称する場合がある。実値範囲情報は、分岐条件が分岐結果となるような当該変数の範囲によって導出される情報である。なお、分岐条件として複数の変数等が用いられている場合には、各変数等について、上記処理が変数解析部240によって実行される。
メモリ編集部250は通知Fによって単一経路情報におけるプログラムフローにおいて、分岐が存在していることを認識できる。実値範囲情報によって当該変数が取り得る値の制限範囲を導出することが可能であり、また、メモリ編集部250は、当該変数の実値範囲を保持する準備が整ったことを知ることが可能となる。
ステップS507において、変数解析部240は単一経路情報の解析中に、アタック判定位置情報が示す箇所に至った場合、アタックポイント到達の事実および解析中の単一経路情報を特定するための情報を、脆弱性成立判定部230に通知する。アタックポイント到達の事実および解析中の単一経路情報を特定するための情報の通知は通知Gと称する場合がある。
脆弱性成立判定部230は通知Gによって、単一経路情報におけるプログラムフローにおいて、脆弱性を判定できる箇所に至ったことを認識できる。また、脆弱性成立判定部230は、当該単一経路情報において、脆弱性を判定するための準備が整ったことを知ることが可能となる。
図5BはステップS502の動作の概略を示す模式図である。変数解析部240には、変数抽出部241、変数チェック部242、通知部243が含まれる。変数抽出部241は、単一経路情報記憶部130から単一経路情報を入力し、単一経路情報に含まれる変数等の宣言を認識し、当該変数等を抽出し、変数チェック部242に出力する。変数チェック部242は、入力変数情報記憶部210から入力変数情報を入力する。変数チェック部242は、入力変数情報に当該変数等が指定されているか、指定されていないかをチェックする。入力変数情報に当該変数等が指定されていない場合には、変数チェック部242は、変数等が宣言された事実、および、変数等のパラメータ情報を、通知Bとして通知部243に出力する。通知部243は、変数チェック部242から入力した通知Bをメモリ編集部250に出力する。
図5CはステップS503の動作の概略を示す模式図である。変数抽出部241は、ステップS502における動作を示している。変数チェック部242は、入力変数情報に当該変数等が指定されているか、指定されていないかをチェックする。入力変数情報に当該変数等が指定されている場合には、変数チェック部242は、入力変数情報に属する入力変数等が宣言された事実、および、変数等のパラメータ情報を、通知Cとして通知部243に出力する。通知部243は、変数チェック部242から入力した通知Cをメモリ編集部250に出力する。
図5DはステップS504の動作の概略を示す模式図である。変数抽出部241は、単一経路情報を解析するにしたがって変化する、変数等と紐づけられているメモリ上の値の情報に変化が生じる都度、変化した事実を示す変数等の変化通知、変数等の新しい値、および、変化した変数名を通知Dとして通知部243に出力する。通知部243は、変数抽出部241から入力した通知Dをメモリ編集部250に出力する。
図5EはステップS505の動作の概略を示す模式図である。変数抽出部241は、単一経路情報を解析している場合に、変数等のメモリ領域が解放された場合、メモリ領域が解放された事実を示す変数等の解放通知および解放された変数等の名前を通知Eとして通知部243に出力する。通知部243は、変数抽出部241から入力した通知Eをメモリ編集部250に出力する。
図5FはステップS506の動作の概略を示す模式図である。分岐分析部244は、単一経路情報を解析している場合に、変数等がプログラム情報上で分岐である箇所の分岐条件に使われている場合、分岐結果および分岐箇所の分岐条件の情報を抽出する。また、実値範囲導出部245は、分岐分析部244から入力した分岐結果および分岐箇所の分岐条件の情報から、実値の値域を限定する実値範囲情報を導出する。実値範囲導出部245は、変数等を使用して分岐している事実を示す分岐通知、実値範囲情報、および、当該変数等の名前を通知Fとして通知部243に出力する。通知部243は、実値範囲導出部245から入力した通知Fをメモリ編集部250に出力する。なお、分岐条件として複数の変数等が用いられている場合には、各変数等について上記処理を同様に実行する。
図5GはステップS507の動作の概略を示す模式図である。変数抽出部241は、アタックポイント情報記憶部220からアタックポイント情報を入力する。変数抽出部241は、単一経路情報を解析している場合に、アタックポイント情報のアタック判定位置が示す箇所に至ったか否かを判定する。アタック判定位置が示す箇所に至った場合に、変数抽出部241は、アタックポイント到達の事実を示すアタックポイント到達通知、および、解析中の単一経路情報を特定するための特定情報を通知Gとして通知部243に出力する。通知部243は、変数抽出部241から入力した通知Gをメモリ編集部250に出力する。
図6Aにメモリ編集部250および脆弱性成立判定部230の動作の一例を図示する。
ステップS601において、メモリ編集部250は、変数解析部240からの通知Aに対応して、仮想メモリマップ記憶部260及び変数等テーブル記憶部270で保持している情報を全て削除する。上記処理を処理Hと称する場合がある。処理Hによって、仮想メモリマップ記憶部260及び変数等テーブル記憶部270は新たな単一経路情報の分析を開始するために必要な情報を確保することが可能となる。
ステップS602において、メモリ編集部250は、変数解析部240からの通知Bに対応して、変数等テーブル記憶部270に、各パラメータ情報を元にレコードを作成する。レコードを作成することによって、単一経路情報において、変化していく変数等の値を保持するための場所を作成することが可能となる。また、保持するための場所を作成していない変数等の名前の変数が不正に変化したり参照されたりする場合には、該当する場所が発見できないことで、不正を明らかにすることが可能となる。
ステップS603において、メモリ編集部250は、変数解析部240からの通知Bに対応して、仮想メモリマップ上に、当該変数等のパラメータ情報から導出可能なメモリ領域量の領域を割り振る。すなわち、メモリ編集部250は、上記レコードに仮想アドレスを持たせて、各領域にユニークかつ連続した仮想アドレスを割り当てる。このとき、当該仮想メモリマップ上の領域の前後に、仮想アドレスの1つ分の領域を空けるように割り当てる。割り振った仮想メモリマップ上の領域の前後に空けておいた仮想アドレスのレコードには、nul1フラグ情報を持たせる。確保した仮想アドレスの前後の仮想アドレスにnul1フラグを持たせて認識可能とすることで、仮に変数等と紐づけた仮想アドレスから逸脱した仮想アドレスへのアクセスがあった場合に、その逸脱した仮想アドレスであることの判別が可能となる。
変数等テーブル記憶部270において、変数等テーブルにおける当該変数等のレコードは、仮想メモリマップ上で割り当てた仮想アドレスのうちで、nu11を除いたもっとも小さい仮想アドレスの値を、先頭仮想アドレスとして保持する。nul1で囲まれた領域を1つの変数等と紐づけているため、当該変数等の情報が格納されている場所を一意に特定するための情報を先頭仮想アドレスとして変数等の名前と紐づけて保持することが可能となる。仮想メモリマップ上の領域確保方法、及び、変数等テーブルにおけるレコードの生成方法の例示については、後述する。なお、ステップS602およびステップS603の処理を処理Iと称する場合がある。
ステップS604において、メモリ編集部250は、変数解析部240からの通知Cに対応して、通知Cに含まれる変数等のパラメータ情報によって仮想メモリマップ上に割り振った仮想アドレスを持つレコードに対して以下の処理を実行する。すなわち、メモリ編集部250は、nu11フラグを持つ仮想アドレスをもつレコードを除くすべての仮想アドレスを持つレコードについて、入力フラグを持たせる。入力フラグを立てることで入力変数であることを特定でき、また、特定できることによって解析終了後に入力変数が持ちうる範囲を効率的に分析することが可能になる。なお、ステップS604の処理を処理Jと称する場合がある。
ステップS605において、メモリ編集部250は、変数解析部240からの通知Dに対応して、変数等テーブル記憶部270を参照し、通知Dに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握する。取得した仮想アドレスを持つレコードの実値フィールドの値として、通知Dに含まれる変数等の新しい値を仮想メモリマップにおいて保持する。単一経路情報において、変化していく変数等の値を変数等の名前と紐づけて保持することで、以降の解析で変数等の名前をキーとして参照することが可能になる。なお、ステップS605の処理を処理Kと称する場合がある。
ステップS606において、メモリ編集部250は、変数解析部240からの通知Eに対応して、変数等テーブル記憶部270を参照し、通知Eに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握する。メモリ編集部250は、取得した仮想アドレスを持つレコード、および、当該レコードの前後に存在するnu11フラグを持つレコードまでの間の全レコードを、nu11フラグを持つレコードを含めて削除する。ここで、間の全レコードとは、仮想アドレスの値を昇順に並べたときにnu11フラグを持つレコードで挟まれたレコードのすべてという意図である。プログラムにおける以降の処理で利用されないことが宣言された変数等に対して、消された事実を踏まえた処理が可能となる。なお、ステップS606の処理を処理Lと称する場合がある。
ステップS607において、メモリ編集部250は、変数解析部240からの通知Fに対応して、変数等テーブル記憶部270を参照し、通知Fに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握する。メモリ編集部250は、取得した仮想アドレスを持つ仮想メモリマップ上のレコードの実値範囲フィールドに、通知Fに含まれる実値範囲情報を追加保持する。実値範囲情報を設定することで、仮想メモリマップ上の当該レコードが示す仮想アドレスの値として、取り得る範囲を限定することが可能となる。なお、ステップS607の処理を処理Mと称する場合がある。
ステップS608において、脆弱性成立判定部230は、変数解析部240からの通知Gに対応して、アタックポイント情報記憶部220からアタックポイント情報を入力し、アタック成立条件を取得する。脆弱性成立判定部230は、アタック成立条件で用いられている変数等の名前を抽出し、各変数等の名前と紐つく先頭仮想アドレスを、変数等テーブル記憶部270から取得する。脆弱性成立判定部230は、先頭仮想アドレスと紐つく実値情報と実値範囲情報を、仮想メモリマップ記憶部260から取得する。脆弱性成立判定部230は、当該レコードが入力フラグを持つレコードである場合、当該レコードの実値情報を、当該レコードの実値範囲情報を用いて限定し、限定入力実値情報とする。脆弱性成立判定部230は、当該レコードが入力フラグを持つレコードである場合、限定入力実値情報がアタック成立条件を満たしているか否かを判定する。また、脆弱性成立判定部230は、当該レコードが入力フラグを持たないレコードである場合、実値情報がアタック成立条件を満たしているか否かを判定する。
なお、アタック成立条件の取得後から、アタック成立条件の判定までは、アタック成立条件で用いられている全ての変数等について脆弱性成立判定部230は処理を実施する。何れかの変数等でアタック成立条件を満たしている場合は、後述の「アタック成立条件を満たしている場合」の処理を行い、全ての変数でアタック成立条件を満たしていない場合は、後述の「アタック成立条件を満たしていない場合」の処理を行う。
(アタック成立条件を満たしている場合)
脆弱性成立判定部230は、仮想メモリマップ記憶部260からすべての入力フラグを持つレコードを抽出し、抽出したレコードの実値フィールドの値を入力実値情報として取得する。入力実値情報は、各入力実値情報と紐づけられるレコードの実値範囲フィールドから取得できる実値範囲情報を用いて値の範囲を限定し、限定入力実値情報とする。このとき、限定入力実値情報が示す値が、範囲が限定されることによって存在しない場合、或いは、仮想メモリマップ上に入力フラグを持つレコードが存在しない場合は、結果出力の際に、限定入力実値情報なしで出力する。なお、アタック成立条件に含まれる変数等と紐づけられた限定入力実値情報は既に前述処理で取得しているため、これ以外の入力フラグを持つレコードについてのみ本処理を実施してもよい。変数解析部240より通知された通知Gに含まれる単一経路情報特定情報、限定入力実値情報、および、脆弱性が存在する事実を、当該単一経路情報に関する分析結果として出力する。解析していない単一経路情報が存在する場合は、変数解析部240の解析を継続し、解析していない単一経路情報が存在しない場合は、解析を終了する。
(アタック成立条件を満たさない場合)
解析していない単一経路情報が存在する場合は、変数解析部240の解析を継続し、解析していない単一経路情報が存在しない場合は、解析を終了する。
図6BはステップS602およびステップS603の動作の概略を示す模式図である。変数解析部240は、変数等の宣言通知、および、宣言された変数等のパラメータ情報をメモリ編集部250に通知する。レコード編集部251は、変数等のパラメータ情報から変数等テーブル記憶部270に、各パラメータ情報を元にレコードを作成する。仮想メモリマップ編集部252は、仮想メモリマップ上に、当該変数等のパラメータ情報から導出可能なメモリ領域量の領域を割り振る。すなわち、仮想メモリマップ編集部252は、上記レコードに仮想アドレスを持たせて、各領域にユニークかつ連続した仮想アドレスを割り当てる。このとき、当該仮想メモリマップ上の領域の前後に、仮想アドレスの1つ分の領域を空けるように割り当てる。割り振った仮想メモリマップ上の領域の前後に空けておいた仮想アドレスのレコードには、nul1フラグ情報を持たせる。確保した仮想アドレスの前後の仮想アドレスにnul1フラグを持たせて認識可能とすることで、仮に変数等と紐づけた仮想アドレスから逸脱した仮想アドレスへのアクセスがあった場合に、その逸脱した仮想アドレスであることの判別が可能となる。仮想メモリマップ編集部252は、仮想メモリマップ記憶部260から変数等毎に先頭仮想アドレスを取得し、レコード編集部251は、当該先頭仮想アドレスを変数等テーブル記憶部270に記憶する。
図6CはステップS604の動作の概略を示す模式図である。メモリ編集部250は、変数解析部240からの通知Cに対応して、通知Cに含まれる入力変数等のパラメータ情報によって仮想メモリマップ上に割り振った仮想アドレスを持つレコードに対して以下の処理を実行する。すなわち、仮想メモリマップ編集部252は、nu11フラグを持つ仮想アドレスをもつレコードを除くすべての仮想アドレスを持つレコードについて、入力フラグを持たせて、仮想メモリマップ記憶部260に記憶する。入力フラグを立てることで入力変数であることを特定でき、また、特定できることによって解析終了後に入力変数が持ちうる範囲を効率的に分析することが可能になる。
図6DはステップS605の動作の概略を示す模式図である。メモリ編集部250は、変数解析部240からの通知Dに対応して、変数等テーブル記憶部270を参照し、通知Dに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握する。仮想メモリマップ編集部252は、取得した仮想アドレスを持つレコードの実値フィールドの値として、通知Dに含まれる変数等の新しい値を仮想メモリマップにおいて保持するように仮想メモリマップ記憶部260に記憶する。単一経路情報において、変化していく変数等の値を変数等の名前と紐づけて保持することで、以降の解析で変数等の名前をキーとして参照することが可能になる。
図6EはステップS606の動作の概略を示す模式図である。レコード編集部251は、変数解析部240からの通知Eに対応して、変数等テーブル記憶部270を参照し、通知Eに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ編集部252は、取得した仮想アドレスを持つレコード、および、当該レコードの前後に存在するnu11フラグを持つレコードまでの間の全レコードを、nu11フラグを持つレコードを含めて仮想メモリマップ記憶部260から削除する。ここで、間の全レコードとは、仮想アドレスの値を先頭仮想アドレスから昇順に並べたときにnu11フラグを持つレコードで挟まれたレコードのすべてという意図である。
図6FはステップS607の動作の概略を示す模式図である。レコード編集部251は、変数解析部240からの通知Fに対応して、変数等テーブル記憶部270を参照し、通知Fに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ編集部252は、取得した仮想アドレスを持つ仮想メモリマップ上のレコードの実値範囲フィールドに、通知Fに含まれる実値範囲情報を追加保持し、仮想メモリマップ記憶部260に記憶する。実値範囲情報を設定することで、仮想メモリマップ上の当該レコードが示す仮想アドレスの値として、取り得る範囲を限定することが可能となる。
図6GはステップS608の動作の概略を示す模式図である。脆弱性成立分析部234は、変数解析部240からの通知Gに対応して、アタックポイント情報記憶部220からアタックポイント情報を入力し、アタック成立条件を取得する。レコード編集部231は、アタック成立条件で用いられている変数等の名前を抽出し、各変数等の名前と紐つく先頭仮想アドレスを、変数等テーブル記憶部270から取得する。限定実値算出部233は、先頭仮想アドレスと紐つく実値情報と実値範囲情報を、仮想メモリマップ記憶部260から取得する。脆弱性成立分析部234は、当該レコードが入力フラグを持つレコードである場合、当該レコードの実値情報を、当該レコードの実値範囲情報を用いて限定し、限定入力実値情報とする。脆弱性成立分析部234は、当該レコードが入力フラグを持つレコードである場合、限定入力実値情報がアタック成立条件を満たしているか否かを判定する。また、脆弱性成立分析部234は、当該レコードが入力フラグを持たないレコードである場合、実値情報がアタック成立条件を満たしているか否かを判定する。
脆弱性成立分析部234がアタック成立条件を満たしていると判定した場合には、脆弱性成立判定部230は以下の処理を実施する。限定実値算出部233は、仮想メモリマップ記憶部260からすべての入力フラグを持つレコードを抽出し、抽出したレコードの実値フィールドの値を入力実値情報として取得する。入力実値情報は、各入力実値情報と紐づけられるレコードの実値範囲フィールドから取得できる実値範囲情報を用いて値の範囲を限定し、限定入力実値情報とする。このとき、限定入力実値情報が示す値が、範囲が限定されることによって存在しない場合、或いは、仮想メモリマップ上に入力フラグを持つレコードが存在しない場合は、結果出力の際に、限定入力実値情報なしで出力する。脆弱性成立分析部234は、変数解析部240より通知された通知Gに含まれる単一経路情報特定情報、限定入力実値情報、および、脆弱性が存在する事実を、当該単一経路情報に関する分析結果情報として出力部235に出力する。
図7Aは、本実施形態に係る変数等が直接的なメモリ上のアドレス値である場合について説明する模式図である。変数等が直接的なメモリ上のアドレス値である場合は、変数等テーブルを用いず、仮想メモリマップ上に仮想アドレスを割り振ると同時に、実アドレス値を仮想アドレスに紐づけて配置する。図7Aでは、実アドレスが「0xFF01」であり、実アドレス値が「60」である場合を示している。実アドレスである「0xFF01」に対応する先頭の仮想アドレスが「0x4001」の場合には、仮想アドレス「0x4000」および「0x4002」にnullフラグが設定される。
図7Bは、本実施形態に係る変数等が変数である場合について説明する模式図である。本実施形態に係る変数等が変数である場合は、変数等テーブルとして変数テーブルを用いる。変数テーブルには、変数の変数名、先頭の仮想アドレス、および、変数の型種別を持つレコードを持たせる。さらに、仮想メモリマップでは、変数の型種別と同量のメモリ領域量を確保する。図7Bでは、変数の変数名が「cData」であり、変数の型種別が「char」であるので、1バイトのメモリ領域量が確保されている。変数の変数名が「cData」の先頭の仮想アドレスが「0x0001」の場合には、仮想アドレス「0x0000」および「0x0002」にnullフラグが設定される。
図7Cは、本実施形態に係る変数等が共用体である場合について説明する模式図である。
本実施形態に係る変数等が共用体である場合は、変数等テーブルとして共用体テーブルを用いて、共用体テーブルに、共用体名を共通に持たせる。さらに、先頭の仮想アドレス、および、要素の型種別と要素の変数型を持つレコードを持たせる。さらに、仮想メモリマップでは、共用体が持つ要素の型種別のうちで、最大のメモリ領域量を確保する。図7Bでは、要素の型種別が「iValue」の場合の変数型が「int」であるので、4バイトのメモリ領域量が確保されている。共用体の先頭の仮想アドレスが「0x2001」の場合には、仮想アドレス「0x2000」および「0x2005」にnullフラグが設定される。
図7Dは、本実施形態に係る変数等が構造体である場合について説明する模式図である。
本実施形態に係る変数等が構造体である場合は、変数等テーブルとして構造体テーブルを用いて、構造体テーブルに、構造体名を共通に持たせる。さらに、先頭の仮想アドレス、および、要素の型種別と要素の変数型を持つレコードを持たせる。さらに、仮想メモリマップでは、構造体が持つ全要素の型種別から導出されるメモリ領域量の和で算出される総メモリ領域量を確保する。
図7Eは、本実施形態に係る変数等が配列である場合について説明する模式図である。
本実施形態に係る変数等が配列である場合は、変数等テーブルとして配列テーブルを用いて、配列テーブルに、配列の変数名、先頭の仮想アドレス、要素の型種別、および、配列の次元数を持つレコードを持たせる。さらに、仮想メモリマップでは、配列の要素の型種別から導出されるメモリ領域量と配列の次元数の積で算出される総メモリ領域量を確保する。
(変形例)
図8Aは、上述の実施形態に対する付加機能を示し、付加機能は経路矛盾判定部290を含む構成によって実現される。付加機能に係るメモリ編集部250、経路矛盾判定部290、および、変数解析部240の動作を以下に説明する。
図8Bは、図8Aの付加機能を実現するためのメモリ編集部250の追加機能を説明するための模式図である。
メモリ編集部250はステップS607の処理Mに追加して、以下の機能を実施する。
処理Mにおいては、レコード編集部251は、変数解析部240からの通知Fに対応して、変数等テーブル記憶部270を参照し、通知Fに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。追加する機能として、仮想メモリマップ編集部252は、取得した仮想アドレスを持つ仮想メモリマップ上のレコードが入力フラグを持たない場合、変数解析部240から通知された変数等の名前を、分岐通知に含ませて経路矛盾判定部290に通知する。変数情報によって分岐した通知である通知Fを発信した変数解析部240は、経路矛盾判定部290から通知があるまで評価対象のプログラム情報の逐次解析を停止する。
経路矛盾判定部290では、メモリ編集部250からの分岐通知を受信すると、以下の処理を実施する。
変数等テーブル読込部291は、メモリ編集部250からの分岐通知に対応して、変数等テーブル記憶部270を参照し、分岐通知に含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。経路矛盾判定部290は、仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握することが可能となる。
経路矛盾解析部293は、把握した仮想アドレスを持つレコードの実値フィールドに含まれる情報と、当該仮想アドレスを持つレコードの実値範囲フィールドに含まれる情報について、論理的な矛盾の有無を解析する。これは、実値が、実値範囲に含まれるか否かで矛盾を判定する。なお、実値範囲は複数の異なる分岐通知によって決定される場合がある。
矛盾が発見された場合は、矛盾発生の事実を、変数解析部240に矛盾発生通知を通知する(図8D)。解析中の単一経路情報は、当該単一経路情報で用いられる変数の情報と分岐経路が矛盾しているため、当該単一経路情報が示すプログラム上のフローは、現在までの解析以上は辿られることがないことが示されたと判断できる。
変数解析部240では、経路矛盾判定部290から矛盾発生通知を受け取った場合、現在解析している単一経路情報の解析を停止し、次の単一経路情報の解析に移行する。解析中の単一経路情報は、現在までの解析以上は辿られることができないと判断されたため、変数解析部240は無駄な解析を中止することが可能となる。
矛盾が発見されない場合には、矛盾未発見の事実を、変数解析部240に矛盾未発生通知を通知する(図8C)。解析中の単一経路情報は、当該単一経路情報で用いられる変数の情報と分岐経路になんら矛盾は生じていない。したがって、現在までの解析範囲において、当該単一経路情報が示すプログラム上のフローが辿られる可能性が存在することが示されたと判断できる。
変数解析部240では、経路矛盾判定部290から矛盾未発生通知を受け取った場合、現在解析している単一経路情報の解析を継続する。解析中の単一経路情報は、当該単一経路情報が示すプログラム上のフローを辿ることができる可能性が存在すると判断されたため、変数解析部240は解析の継続をすることが可能となる。
なお、脆弱性分析装置1000における動作のフローチャートの一例を示す処理手順は以下のように処理される。すなわち、脆弱性分析装置1000が有するコンピュータのROM(Read Only Memory)に格納されたプログラムにしたがいCPU(Central Processing Unit)が各処理を実行する。
なお、上述した処理手順の一部または全部は、例えば、DSP(Digital Signal Processor)やASIC(Application Specific Integrated Circuit)等のハードウェアにより実行させられる。但し本実施形態では、ROMのプログラムにしたがってCPUが実行する形態とした場合について説明した。
以上説明したように、本実施形態によれば、保護資産の保護状態が成立している状況を論理式で表現するために、保護資産の保護状態を侵害するケースに限定して脆弱性を見つけ出すことが可能になる。また、保護資産の保護状態が成立している状況は、プログラムにおいて発生しては困る処理に直結する状況を論理式で示せばよいので、セキュリティに関する知識を有していなくとも当該論理式を示すことが可能になる。
(比較例)
従来技術においては、評価対象となるプログラムにおいて特定の状態に至らないことを、あらゆる経路について網羅的に確認する構成が存在する。しかし、あらゆる経路について網羅的に確認することは非常に冗長であり、計算リソースと計算時間に大きな無駄が発生する。
しかし、本実施形態の脆弱性分析装置1000では、アタック判定位置と開始位置との間の経路について、脆弱性を確認するので、確認する必要がない評価対象のプログラムの処理を含むフロー上の経路を除外することが可能となる。その結果、計算リソースと計算時間に大きな無駄が発生せずに、効率的な脆弱性評価手段を提供することが可能となる。
また、従来技術においては、障害発生条件、不正なコマンドおよび不正なデータの特徴に対する一致度を確率的に算出し、評価対象となるプログラムの脆弱性を評価する構成が存在する。しかし、当該構成では、評価対象となるプログラムの脆弱性を確率的に評価するために、脆弱性評価に対する確実性および網羅性がないものとなる。
しかし、本実施形態の脆弱性分析装置1000では、アタック判定位置と開始位置との間のすべての経路について、アタック成立条件に基づいて脆弱性を確認するので、脆弱性評価に対する確実性および網羅性がある構成となる。このため、検出漏れも生じない。
さらに、従来技術においては、事前に用意したテストケースを用いて、評価対象となるプログラムに有効なテストケースを選択する構成がある。しかし、当該構成では、事前に用意した範囲を超える手段を用いた攻撃には対応できないために、脆弱性に対する検出漏れが発生する場合がある。
しかし、本実施形態の脆弱性分析装置1000では、ソースコード自体を解析し攻撃経路を抽出することが可能となり、攻撃経路を利用し得る入力値のすべてを導出することが可能になる。さらに、選択するべきテストケースを事前に用意する必要がない。
さらに、従来技術においては、評価対象となるプログラムの経路を選択する場合に、事前に指定したキーワードとの関連性を条件として選択する構成が存在する。しかし、評価対象となるプログラムにおいて、同一のキーワードが異なる意味を有する場合がある。また、評価対象となるプログラムにおいて、異なるキーワードが同一の情報を有する場合がある。このように、キーワードとの関連性を条件とすると、経路の選択が不完全な場合が発生する可能性があり、脆弱性の検出漏れが発生する場合がある。また、従来技術においては、ある特定状態における状態遷移の遷移条件を重複させない構成を提供している。しかし、特定状態における遷移条件に関係のないパラメータが異なるケースに、プログラムフローにおいて攻撃経路が存在する可能性が存在し得るため、脆弱性の検出漏れが発生する場合がある。
しかし、本実施形態の脆弱性分析装置1000では、確認する必要がない経路以外のすべての攻撃経路について解析を実施しているので、脆弱性評価に対する確実性および網羅性がある構成となる。このため、検出漏れも生じない。
さらに、従来技術においては、評価対象となるプログラムにおける異常点に至ることを確認することによって、バグが生じていることを判定している。しかし、脆弱性を評価するセキュリティにおいては、プログラムの正常点において異常な動作が発生することも検出する必要があるので、当該判定では、脆弱性の検出漏れが発生する場合がある。
しかし、本実施形態の脆弱性分析装置1000では、指定されたアタック判定位置において判定を実施し、アタック判定位置はプログラムにおけるいずれの位置においても指定可能な位置である。したがって、本実施形態の脆弱性分析装置1000では、プログラムにおける異常点である例外処理ではない、正常な経路上の脆弱性を検出することが可能である。
以下に、本実施形態の脆弱性分析装置1000の特徴について記載する。
本発明の第1の態様に係わる評価対象となるプログラムの情報セキュリティ上の脆弱性の有無を評価する脆弱性分析装置1000は、以下の処理を実施する単一経路導出部100を含む。当該単一経路導出部100はプログラム情報の脆弱性の存在の判定が可能なアタック判定位置からプログラム情報の開始位置までの経路情報であって、プログラム情報上の分岐によって分割して導出される経路の情報である単一経路情報を導出する。当該単一経路情報は、プログラム情報の各処理を、処理順に保持する。
また、第1の態様に係わる脆弱性分析装置1000は、単一経路情報を開始位置からアタック判定位置まで解析し、プログラム情報上の分岐条件と分岐結果の情報から実値の値域を限定する実値範囲情報を導出する変数解析部240を含む。
さらに、第1の態様に係わる脆弱性分析装置1000は、以下の処理を実施するメモリ編集部250を含む。当該メモリ編集部250は、入力変数情報が指定されている場合に入力変数情報に対応する仮想アドレスおよび仮想アドレスに対応する入力フラグを設定し、入力変数情報の実値情報を仮想アドレスの実値フィールドに記憶する。また、当該メモリ編集部250は、変数解析部240から通知された実値範囲情報に対応する仮想アドレスを取得し、仮想アドレスの実値範囲フィールドに実値範囲情報を記憶する。
さらに、第1の態様に係わる脆弱性分析装置1000は、以下の処理を実施する脆弱性成立判定部230を含む。当該脆弱性成立判定部230は、アタック判定位置におけるアタック成立条件において用いられている変数情報を抽出し、変数情報に対応する仮想アドレスを取得し、仮想アドレスに対応する実値情報および実値範囲情報を取得する。当該脆弱性成立判定部230は、仮想アドレスに入力フラグが設定されている場合に、実値範囲情報によって実値情報を限定した限定入力実値情報を算出し、限定入力実値情報がアタック成立条件を満たしているか否かを判定する。当該脆弱性成立判定部230は、仮想アドレスに入力フラグが設定されていない場合に、仮想アドレスに対応する実値情報がアタック成立条件を満たしているか否かを判定する。
上記構成によれば、不正な入力によって、プログラムが特定の不都合な状態に到達する可能性の有無を確認する具体的な方法を提供することが可能となる。
本発明の第2の態様に係わる脆弱性分析装置1000のアタック成立条件はプログラム情報で用いられることが可能な変数情報を用いた論理式で表現される。
上記構成によれば、保護資産の保護状態が成立していない状況を論理式で表現するために、保護資産の保護状態を侵害するケースに限定して脆弱性を見つけ出すことが可能になる。
本発明の第3の態様に係わる脆弱性分析装置1000の入力変数情報は、評価対象となるプログラムの外部から入力される情報を保持するための変数を含む変数情報である。また、変数情報は、変数、直接的なメモリ上のアドレス値、共用体、構造体、配列を含む情報である。
上記構成によれば、攻撃経路を成立させるために使用される情報としてプログラムに対する入力情報を指定することによって、脆弱性の評価に対する確実性および網羅性を満たし、検出漏れの発生を抑制することが可能になる。
本発明の第4の態様に係わる脆弱性分析装置1000のメモリ編集部250は、変数情報に対応する仮想アドレス領域の前後の仮想アドレスにnullフラグを設定する。
上記構成によれば、確保した仮想アドレスの前後の仮想アドレスにnul1フラグを持たせて認識可能とする。nul1フラグを認識可能とすることで、仮に変数等と紐づけた仮想アドレスから逸脱した仮想アドレスへのアクセスがあった場合に、その逸脱した仮想アドレスであることの判別が可能となる。
本発明の第5の態様に係わる脆弱性分析装置1000の脆弱性成立判定部230は、アタック成立条件が満たされている場合に、入力フラグを持つすべての仮想アドレスを抽出し、仮想アドレスの実値フィールドの値を入力実値情報とする。さらに、脆弱性成立判定部230は、入力実値情報に対応する実値範囲情報フィールドの値によって限定された値を限定入力実値情報とし、限定入力実値情報が実値フィールドの値に存在しない場合には、限定入力実値情報を出力しない。
上記構成によれば、存在し得ない限定入力実値情報を検出し、出力することを抑制することが可能になる。
本発明の第6の態様に係わる脆弱性分析装置1000の脆弱性成立判定部230においてアタック成立条件が満たされていない場合には、変数解析部240はその他の単一経路情報がある場合にはその他の単一経路情報について解析を続行する。脆弱性成立判定部230は解析されたその他の単一経路情報についてアタック成立条件が満たされているか否かを判定する。
上記構成によれば、確認する必要のない経路以外は、あらゆる経路について解析を実施しているので、脆弱性の評価に対する確実性および網羅性を満たし、検出漏れの発生を抑制することが可能になる。
本発明の第7の態様に係わる脆弱性分析装置1000のメモリ編集部250は、実値範囲情報に使用される変数情報に対応する仮想アドレスに入力フラグが設定されていない場合には、変数情報を経路矛盾判定部290に通知する。経路矛盾判定部290は、変数情報に対応する仮想アドレスを持つレコードの実値フィールドに含まれる実値情報が、当該仮想アドレスを持つレコードの実値範囲フィールドに含まれる実値範囲情報に含まれないか否かを判定する。経路矛盾判定部290は、実値情報が実値範囲情報に含まれない場合には、論理的な矛盾があることを示す矛盾発生通知を前記変数解析部240に通知する。変数解析部240は論理的な矛盾がある単一経路情報の解析を停止し、他の単一経路情報がある場合には他の単一経路情報の解析を開始する。
上記構成によれば、単一経路情報の解析において分岐処理があるごとに、論理的な矛盾がある単一経路情報の解析を中止することが可能になるので、脆弱性分析装置1000の分析処理を高速化することが可能になる。
本発明の第8の態様に係わる脆弱性分析装置1000のプログラム情報は、プログラムのソースコードまたは制御フローグラフを含むプログラムで実現する機能の処理ロジックおよび手順を含む情報である。
上記構成によれば、評価対象のプログラムのソースコードを対象とすることによって、攻撃判定位置から開始位置まで辿り解析を確実に実施することが可能になる。すなわち、攻撃判定位置にたどり着かない、確認する必要のない経路を除外して分析することが可能になるので、効率的な解析手段を提供することが可能になる。また、確認する必要のない経路以外は、あらゆる経路について解析を実施しているので、脆弱性の評価に対する確実性および網羅性を満たし、検出漏れの発生を抑制することが可能になる。
以上説明したように、本実施形態によれば、保護資産の保護状態が成立している状況を論理式で表現するために、保護資産の保護状態を侵害するケースに限定して脆弱性を見つけ出すことが可能になる。また、保護資産の保護状態が成立している状況は、プログラムにおいて発生しては困る処理に直結する状況を論理式で示せばよいので、セキュリティに関する知識を有していなくとも当該論理式を示すことが可能になる。
以上、さまざまな実施例を説明したが、それらの実施例の一部または全部を組み合わせて新たな実施例とすることもできる。
100 単一経路導出部
110 プログラム情報記憶部
120 経路生成部
130 単一経路情報記憶部
200 脆弱性分析部
210 入力変数情報記憶部
220 アタックポイント情報記憶部
230 脆弱性成立判定部
231 レコード編集部
232 仮想メモリマップ編集部
233 限定実値算出部
234 脆弱性成立分析部
235 出力部
240 変数解析部
241 変数抽出部
242 変数チェック部
243 通知部
244 分岐分析部
245 実値範囲導出部
250 メモリ編集部
251 レコード編集部
252 仮想メモリマップ編集部
253 通知部
260 仮想メモリマップ記憶部
270 変数等テーブル記憶部
280 脆弱性単一経路情報記憶部
290 経路矛盾判定部
291 変数等テーブル読込部
292 仮想メモリマップ読込部
293 経路矛盾解析部
294 通知部
1000 脆弱性分析装置

Claims (8)

  1. 評価対象となるプログラムの情報セキュリティ上の脆弱性の有無を評価する脆弱性分析装置であって、
    プログラム情報の脆弱性の存在の判定が可能なアタック判定位置からプログラム情報の開始位置までの経路情報であって、プログラム情報上の分岐によって分割して導出される経路の情報であり、プログラム情報の各処理を、処理順に保持する単一経路情報を導出する単一経路導出部と、
    前記単一経路情報を前記開始位置から前記アタック判定位置まで解析し、プログラム情報上の分岐条件と分岐結果の情報から実値の値域を限定する実値範囲情報を導出する変数解析部と、
    入力変数情報が指定されている場合に前記入力変数情報に対応する仮想アドレスおよび前記仮想アドレスに対応する入力フラグを設定し、前記入力変数情報の実値情報を前記仮想アドレスの実値フィールドに記憶し、および、前記変数解析部から通知された実値範囲情報に対応する仮想アドレスを取得し、前記仮想アドレスの実値範囲フィールドに前記実値範囲情報を記憶するメモリ編集部と、
    前記アタック判定位置におけるアタック成立条件において用いられている変数情報を抽出し、前記変数情報に対応する仮想アドレスを取得し、前記仮想アドレスに対応する実値情報および実値範囲情報を取得し、前記仮想アドレスに入力フラグが設定されている場合に、前記実値範囲情報によって実値情報を限定した限定入力実値情報を算出し、前記限定入力実値情報が前記アタック成立条件を満たしているか否かを判定し、前記仮想アドレスに入力フラグが設定されていない場合に、前記仮想アドレスに対応する実値情報が前記アタック成立条件を満たしているか否かを判定する脆弱性成立判定部を含む脆弱性分析装置。
  2. 前記アタック成立条件は前記プログラム情報で用いられることが可能な変数情報を用いた論理式で表現される請求項1に記載の脆弱性分析装置。
  3. 前記入力変数情報は、評価対象となるプログラムが、プログラムの外部から入力される情報を保持するための変数を含む変数情報であり、前記変数情報は、変数、直接的なメモリ上のアドレス値、共用体、構造体、配列を含む情報である請求項1または2に記載の脆弱性分析装置。
  4. 前記メモリ編集部は、前記変数情報に対応する仮想アドレス領域の前後の仮想アドレスにnullフラグを設定する請求項3に記載の脆弱性分析装置。
  5. 前記脆弱性成立判定部は、前記アタック成立条件が満たされている場合に、入力フラグを持つすべての前記仮想アドレスを抽出し、前記仮想アドレスの実値フィールドの値を入力実値情報とし、前記入力実値情報に対応する実値範囲情報フィールドの値によって限定された値を限定入力実値情報とし、前記限定入力実値情報が前記実値フィールドの値に存在しない場合には、前記限定入力実値情報を出力しない請求項1に記載の脆弱性分析装置。
  6. 前記脆弱性成立判定部において前記アタック成立条件が満たされていない場合には、前記変数解析部はその他の単一経路情報がある場合には前記その他の単一経路情報について解析を続行し、前記脆弱性成立判定部は解析された前記その他の単一経路情報について前記アタック成立条件が満たされているか否かを判定する請求項1から5のいずれか一項に記載の脆弱性分析装置。
  7. 前記メモリ編集部は、前記実値範囲情報に使用される変数情報に対応する仮想アドレスに入力フラグが設定されていない場合には、前記変数情報を経路矛盾判定部に通知し、前記経路矛盾判定部は、前記変数情報に対応する仮想アドレスを持つレコードの実値フィールドに含まれる実値情報が、当該仮想アドレスを持つレコードの実値範囲フィールドに含まれる実値範囲情報に含まれない場合には、論理的な矛盾があることを示す矛盾発生通知を前記変数解析部に通知し、前記変数解析部は論理的な矛盾がある単一経路情報の解析を停止し、他の単一経路情報がある場合には当該他の単一経路情報の解析を開始する請求項1から6のいずれか一項に記載の脆弱性分析装置。
  8. 前記プログラム情報は、プログラムのソースコードまたは制御フローグラフを含むプログラムで実現する機能の処理ロジックおよび手順を含む情報である請求項1から7のいずれか一項に記載の脆弱性分析装置。
JP2019191864A 2019-10-21 2019-10-21 脆弱性分析装置 Active JP6966522B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2019191864A JP6966522B2 (ja) 2019-10-21 2019-10-21 脆弱性分析装置
US17/073,598 US11657160B2 (en) 2019-10-21 2020-10-19 Vulnerability analyzer
EP20202939.3A EP3812940B1 (en) 2019-10-21 2020-10-21 Vulnerability analyzer

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019191864A JP6966522B2 (ja) 2019-10-21 2019-10-21 脆弱性分析装置

Publications (2)

Publication Number Publication Date
JP2021068097A JP2021068097A (ja) 2021-04-30
JP6966522B2 true JP6966522B2 (ja) 2021-11-17

Family

ID=73005339

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019191864A Active JP6966522B2 (ja) 2019-10-21 2019-10-21 脆弱性分析装置

Country Status (3)

Country Link
US (1) US11657160B2 (ja)
EP (1) EP3812940B1 (ja)
JP (1) JP6966522B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11275580B2 (en) * 2020-08-12 2022-03-15 Servicenow, Inc. Representing source code as implicit configuration items

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4501978B2 (ja) * 2007-09-18 2010-07-14 日本電気株式会社 データ処理装置、システム、プログラム、及び、方法
US8136158B1 (en) * 2008-07-21 2012-03-13 Google Inc. User-level segmentation mechanism that facilitates safely executing untrusted native code
US8949797B2 (en) * 2010-04-16 2015-02-03 International Business Machines Corporation Optimizing performance of integrity monitoring
US9135405B2 (en) * 2011-05-26 2015-09-15 Carnegie Mellon University Automated exploit generation
JP5941859B2 (ja) * 2013-03-05 2016-06-29 株式会社エヌ・ティ・ティ・データ 検証装置、検証方法、及びプログラム
JP2018156159A (ja) 2017-03-15 2018-10-04 株式会社東芝 解析装置、解析方法およびプログラム
KR101921052B1 (ko) * 2017-11-15 2018-11-22 한국인터넷진흥원 바이너리에 대한 보안 취약점 및 그 원인 위치의 식별 방법 및 그 장치

Also Published As

Publication number Publication date
EP3812940A1 (en) 2021-04-28
EP3812940B1 (en) 2021-08-25
US11657160B2 (en) 2023-05-23
US20210117550A1 (en) 2021-04-22
JP2021068097A (ja) 2021-04-30

Similar Documents

Publication Publication Date Title
JP6669156B2 (ja) アプリケーション自動制御システム、アプリケーション自動制御方法およびプログラム
JP5839967B2 (ja) マルウェア解析システム
JP2007148818A (ja) ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法
CN108108127A (zh) 一种文件读取方法及系统
CN105138916A (zh) 基于数据挖掘的多轨迹恶意程序特征检测方法
CN106980572B (zh) 分布式系统的在线调试方法和系统
JP7074739B2 (ja) 脆弱性評価装置
CN112711760B (zh) 检测智能合约恶意消除重入影响漏洞的检测方法和装置
JP6245006B2 (ja) テストケース生成装置、方法、及びプログラム
JP6966522B2 (ja) 脆弱性分析装置
CN103886258A (zh) 一种病毒检测方法及装置
CN115310087A (zh) 一种基于抽象语法树的网站后门检测方法和系统
CN111913878A (zh) 基于程序分析结果的字节码插桩方法、装置及存储介质
JP5014081B2 (ja) データ処理装置及びデータ処理方法及びプログラム
JP6632777B2 (ja) セキュリティ設計装置、セキュリティ設計方法およびセキュリティ設計プログラム
JP2006268775A (ja) ソフトウェア動作モデル化装置及びソフトウェア動作監視装置
CN115146263B (zh) 用户账号的失陷检测方法、装置、电子设备及存储介质
CN116074047A (zh) 基于事件上下文的sdn行为建模与异常检测方法及装置
WO2023067665A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
JP2016128941A (ja) 出力判定装置、出力判定方法、出力判定プログラム、及び、静的解析装置
KR102344496B1 (ko) 악성코드의 기능을 분석하는 방법 및 장치
KR20190090028A (ko) 공격ㆍ이상 검지 장치, 공격ㆍ이상 검지 방법, 및 공격ㆍ이상 검지 프로그램
JP7008879B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
EP1962168A1 (en) A method for detecting the operation behavior of the program and a method for detecting and clearing the virus program
US20090133124A1 (en) A method for detecting the operation behavior of the program and a method for detecting and clearing the virus program

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210119

TRDD Decision of grant or rejection written
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211013

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20211019

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211021

R150 Certificate of patent or registration of utility model

Ref document number: 6966522

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250