特許第6867066号(P6867066)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ ▲広▼州大学の特許一覧

特許6867066動的ステイン分析に基づくメモリ分析方法及び装置
<>
  • 特許6867066-動的ステイン分析に基づくメモリ分析方法及び装置 図000002
  • 特許6867066-動的ステイン分析に基づくメモリ分析方法及び装置 図000003
  • 特許6867066-動的ステイン分析に基づくメモリ分析方法及び装置 図000004
  • 特許6867066-動的ステイン分析に基づくメモリ分析方法及び装置 図000005
  • 特許6867066-動的ステイン分析に基づくメモリ分析方法及び装置 図000006
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】6867066
(24)【登録日】2021年4月12日
(45)【発行日】2021年4月28日
(54)【発明の名称】動的ステイン分析に基づくメモリ分析方法及び装置
(51)【国際特許分類】
   G06F 11/36 20060101AFI20210419BHJP
   G06F 21/56 20130101ALI20210419BHJP
【FI】
   G06F11/36 136
   G06F21/56 360
【請求項の数】10
【全頁数】14
(21)【出願番号】特願2020-153673(P2020-153673)
(22)【出願日】2020年9月14日
【審査請求日】2020年9月14日
(31)【優先権主張番号】201911152291.5
(32)【優先日】2019年11月20日
(33)【優先権主張国】CN
【早期審査対象出願】
(73)【特許権者】
【識別番号】519295166
【氏名又は名称】▲広▼州大学
(74)【代理人】
【識別番号】110000291
【氏名又は名称】特許業務法人コスモス国際特許商標事務所
(72)【発明者】
【氏名】田 志宏
(72)【発明者】
【氏名】魯 輝
(72)【発明者】
【氏名】孫 起
(72)【発明者】
【氏名】黄 冬秋
(72)【発明者】
【氏名】楊 佳庚
(72)【発明者】
【氏名】金 成杰
(72)【発明者】
【氏名】何 陸瀟涵
(72)【発明者】
【氏名】張 ▲シン▼国
(72)【発明者】
【氏名】孫 彦斌
(72)【発明者】
【氏名】蘇 申
【審査官】 石川 雄太郎
(56)【参考文献】
【文献】 特開2006−031718(JP,A)
【文献】 特開2006−172003(JP,A)
【文献】 特表2009−505275(JP,A)
【文献】 特表2018−507472(JP,A)
【文献】 米国特許出願公開第2016/0217029(US,A1)
【文献】 中国特許出願公開第107209825(CN,A)
【文献】 特表2018−508883(JP,A)
【文献】 米国特許出願公開第2016/0232346(US,A1)
【文献】 中国特許出願公開第107209827(CN,A)
【文献】 中国特許出願公開第105678169(CN,A)
【文献】 CAI, J., et al.,SwordDTA: A dynamic taint analysis tool for software vulnerability detection.,Wuhan University Journal of Natural Sciences.,2016年,Vol.21, No.1
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/07
G06F 11/28−11/36
G06F 21/56
(57)【特許請求の範囲】
【請求項1】
動的ステイン分析に基づくメモリ分析方法であって、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み込まれたデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録することと、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることと、
ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うこととを含む、ことを特徴とする動的ステイン分析に基づくメモリ分析方法。
【請求項2】
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることは、具体的には、 全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、
そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、
そうでない場合、前記ターゲットオペランドの汚染を浄化することである、ことを特徴とする請求項1に記載の動的ステイン分析に基づくメモリ分析方法。
【請求項3】
ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うことは、具体的には、
ret命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、
そうである場合、メモリにスタックオーバーフロー問題が生じると判定することである、ことを特徴とする請求項1に記載の動的ステイン分析に基づくメモリ分析方法。
【請求項4】
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を表示することと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているsetオブジェクトを表示することと、
前記メモリ影響範囲及び汚染済みデータを格納している前記setオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断することと、
そうである場合、前記ターゲットアドレスを制御されたアドレスとして判定することとをさらに含む、ことを特徴とする請求項1に記載の動的ステイン分析に基づくメモリ分析方法。
【請求項5】
動的ステイン分析に基づくメモリ分析装置であって、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み込まれたデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録するための汚染源マーキングモジュールと、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングするための汚染処理モジュールと、
ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うためのメモリ検出モジュールとを備える、ことを特徴とする動的ステイン分析に基づくメモリ分析装置。
【請求項6】
前記汚染処理モジュールは具体的には全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、そうでない場合、前記ターゲットオペランドを浄化するために使用される、ことを特徴とする請求項5に記載の動的ステイン分析に基づくメモリ分析装置。
【請求項7】
前記メモリ検出モジュールは具体的にはret命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、そうである場合、メモリにスタックオーバーフロー問題が生じると判定するために使用される、ことを特徴とする請求項5に記載の動的ステイン分析に基づくメモリ分析装置。
【請求項8】
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を表示するための範囲表示モジュールと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているsetオブジェクトを表示するためのアドレス表示モジュールと、
前記メモリ影響範囲及び汚染済みデータを格納している前記setオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断するためのターゲットクエリモジュールと、
前記ターゲットアドレスを制御されたアドレスとして判定するためのターゲット判定モジュールとをさらに備える、ことを特徴とする請求項5に記載の動的ステイン分析に基づくメモリ分析装置。
【請求項9】
動的ステイン分析に基づくメモリ分析端末機器であって、プロセッサ、メモリ、及び前記メモリに格納され且つ前記プロセッサによって実行されるように構成されたコンピュータプログラムを備え、前記メモリが前記プロセッサに結合され、且つ前記プロセッサが前記コンピュータプログラムを実行すると、請求項1〜4のいずれか一項に記載の動的ステイン分析に基づくメモリ分析方法が実現される、ことを特徴とする動的ステイン分析に基づくメモリ分析端末機器。
【請求項10】
前記コンピュータ可読記憶媒体は、コンピュータプログラムを記憶し、前記コンピュータプログラムが実行される時に、請求項1−4のいずれか一項に記載の動的ステイン分析に基づくメモリ分析方法を実行するように前記コンピュータ可読記憶媒体が配置されたデバイスを制御する、ことを特徴とするコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ技術分野に関し、特に動的ステイン分析に基づくメモリ分析方法、装置、端末機器及び読み取り可能な記憶媒体に関する。
【背景技術】
【0002】
プログラムの数が急速に増加しているため、手動プログラムテストはプログラムテストのニーズを満たすことが困難である。この問題に対処するために、いくつかの自動プログラムテストスキームが相次いで提案されている。プログラムが実際に実行されるか否かに応じて、自動プログラムテストスキームは静的分析と動的分析に分けられる。プログラムコードが実行されない場合、静的分析とは、字句分析、構文分析、制御フロー、データフロー分析などの技術により、プログラムコードをスキャンし、コードが仕様、安全性、信頼性、保守性などの指標を満たしているか否かを検証することを意味している。プログラムの動的分析とは、プログラムの実行に伴い、実行過程における、レジスタ情報、メモリ情報などを含むプログラムの情報を取得し、存在する可能性があるプログラムバグを探索することを意味している。一方で、ファジングテスト技術は近年急速な発展を遂げており、プログラムをクラッシュさせることができる入力を効果的に生成することができる。これらのクラッシュがプログラムの正常な実行に大きな影響を与えるか否かを評価するために、多くの人力が必要になる。どのようにファジングテストで得られたクラッシュ入力に基づいてプログラムの動的分析を行い、当該クラッシュがリスクの高いバグであるか否かを評価するかは、非常に意味がある挑戦である。
【0003】
プログラムが実行される時のメモリ情報を取得するために、最も一般的な操作は、コードをインストルメントし、コードインストルメントの実行により、その時のプログラムサイト情報を取得することである。アドレスサニタイザー(addresssanitizer)などのいくつかの従来技術では、プログラムのコンパイル中にインストルメントすることでメモリに関連する情報を取得する。別の方式は、類似するpin、qemuを使用してプログラム実行プロセスをシミュレートし、シミュレート過程にインストルメンテーション分析を行うことである。
【0004】
インストルメンテーションに基づき、プログラムに対してステイン分析を行うことができ、従来のステイン分析には、汚染源への定義、汚染タンクへの定義と汚染伝播の追跡の3つのステップが含まれる。ここで、汚染源は追跡しようとするデータのプログラム位置である。例えば、システムコール、関数エントリ、又はあるメモリ操作命令はすべて汚染源である可能性がある。汚染タンクがプログラムにおけるいくつかの位置を指し、これらの位置のいくつかのデータが汚染されているか否かを確認したい。例えば、プログラムの制御フローが入力の影響を受けるか否かをチェックするために、間接コール、間接ジャンプと戻り(return)命令の次の実行命令の位置が入力によって汚染されているか否かをチェックする可能性がある。汚染伝播はプログラム内の汚染源の伝播に対して指定されたルールである。たとえば、movのソースオペランドが汚染されている場合、ターゲットオペランドも汚染済みとしてマーキングされる。これにより、汚染されたデータは、汚染ソースから汚染タンクまで伝播される。
【0005】
従来技術のメモリ分析スキームは、プログラムソースコードに依存するため、ソースコードを取得しにくいプログラムを分析することができない。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】中国特許出願公開第107180188号明細書
【0007】
本発明は、動的ステイン分析に基づいて暗号化されたアプリケーションの平文を抽出するためのシステムを開示する。前記システムは、ステインデータソース位置決めモジュール、動的ステイン分析モジュール、命令分析モジュールとメモリ動作分析モジュールを備え、ここで、ステインデータソース位置決めモジュールがシステムコールで暗号化されたメッセージのメモリアドレスを取得し、ステインデータソースとしてマーキングするために使用され、動的ステイン分析モジュールがステインマークを付けたデータソースを追跡し、その中からそれを操作するための命令実行軌跡を逆方向に取得するために使用され、命令分析モジュールが命令軌跡を解析し、ステインデータのメッセージ復号段階とメッセージ処理段階を区別するために使用され、メモリ動作分析モジュールが、ステインデータがメッセージ複号段階で書き込まれ且つメッセージ処理段階で読み取られるメモリアドレスを取得し、当該メモリアドレスから復号された平文情報を抽出するために使用される。本発明は、復号されたアプリケーションから平文情報を抽出することにより、暗号化されたアプリケーションのセキュリティ監視を改善する。
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明の実施例が解決しようとする技術的問題は、ソースコードなしでプログラムを分析し、メモリオーバーフロー問題を検出することができ、それによってエクスプロイトを生成するために必要な主要な情報を抽出することができる、動的ステイン分析に基づくメモリ分析方法、装置、端末機器及び読み取り可能な記憶媒体を提供することにある。
【課題を解決するための手段】
【0009】
上記技術的問題を解決するために、本発明の実施例による動的ステイン分析に基づくメモリ分析方法は、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録することと、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることと、
ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うこととを含む。
【0010】
さらに、全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることは、具体的には、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、
そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、
そうでない場合、前記ターゲットオペランドの汚染を浄化することである。
【0011】
さらに、ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うことは、具体的には、
ret命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、
そうである場合、メモリにスタックオーバーフロー問題が生じると判定することである。
さらに、動的ステイン分析に基づくメモリ分析方法は、
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を印刷することと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているsetオブジェクトを印刷することと、
前記メモリ影響範囲及び汚染済みデータを格納している前記setオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断することと、
そうである場合、前記ターゲットアドレスを制御されたアドレスとして判定することとをさらに含む。
【0012】
同じ技術的問題を解決するために、本発明の実施例による動的ステイン分析に基づくメモリ分析装置は、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録するための汚染源マーキングモジュールと、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングするための汚染処理モジュールと、
ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うためのメモリ検出モジュールとを備える。
さらに、前記汚染処理モジュールは具体的には全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、そうでない場合、前記ターゲットオペランドを浄化するために使用される。
さらに、前記メモリ検出モジュールは具体的にはret命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、そうである場合、メモリにスタックオーバーフロー問題が生じると判定するために使用される。
【0013】
さらに、動的ステイン分析に基づくメモリ分析装置は、
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を印刷するための範囲印刷モジュールと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているsetオブジェクトを印刷するためのアドレス印刷モジュールと、
前記メモリ影響範囲及び汚染済みデータを格納している前記setオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断するためのターゲットクエリモジュールと、
前記ターゲットアドレスを制御されたアドレスとして判定するためのターゲット判定モジュールとをさらに備える。
【0014】
同じ技術的問題を解決するために、本発明はさらに、プロセッサ、メモリ、及び前記メモリに格納され且つ前記プロセッサによって実行されるように構成されたコンピュータプログラムを備え、前記メモリが前記プロセッサに結合され、且つ前記プロセッサが前記コンピュータプログラムを実行すると、いずれか一項に記載の動的ステイン分析に基づくメモリ分析方法が実現される、動的ステイン分析に基づくメモリ分析端末機器を提供する。
【0015】
同じ技術的問題を解決するために、本発明はさらに前記コンピュータ可読記憶媒体を提供する。前記前記コンピュータ可読記憶媒体は、コンピュータプログラムを記憶し、ここで、前記コンピュータプログラムが実行される時に、いずれか一項に記載の動的ステイン分析に基づくメモリ分析方法を実行するように前記コンピュータ可読記憶媒体が配置されたデバイスを制御する。
【0016】
従来技術と比較して、本発明は次の有益な効果を有する。
【0017】
本発明は、動的ステイン分析に基づくメモリ分析方法、装置、端末機器及び読み取り可能な記憶媒体を提供する。前記方法は、予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録することと、全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることと、ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うこととを含む。本発明は、ソースコードなしでプログラムを分析し、メモリオーバーフロー問題を検出し、それによってエクスプロイトを生成するために必要な主要な情報を抽出することができる。
【図面の簡単な説明】
【0018】
図1】本発明の一実施例による動的ステイン分析に基づくメモリ分析方法のフローチャートである。
図2】本発明の一つの実施例による動的バイナリインストルメンテーションエンジンの構造図である。
図3】本発明の一実施例による動的ステイン分析を応用するフローチャートである。
図4】本発明の一実施例によるメモリ分析の具体的な例の概略図である。
図5】本発明の一実施例による動的ステイン分析に基づくメモリ分析装置の構造図である。
【発明を実施するための形態】
【0019】
以下に本発明の実施例の図面と組み合わせて本発明の実施例における技術的解決手段を明確且つ完全に説明し、明らかに、説明される実施例は本発明の実施例の一部に過ぎず、全ての実施例ではない。本発明の実施例に基づき、当業者が創造的な労力を要さずに想到し得る他の実施例は、全て本発明の保護範囲に属する。
【0020】
図1に示すように、本発明の実施例による動的ステイン分析に基づくメモリ分析方法は、S1、S2、S3を含む。
【0021】
S1、予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録する。
【0022】
S2、全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングする。
【0023】
本発明の実施例では、さらに、ステップS2は具体的には、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、
そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、
そうでない場合、ターゲットオペランドの汚染を浄化することである。
S3、ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行う。
【0024】
本発明の実施例では、さらに、ステップS3は具体的には、
ret命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、
そうである場合、メモリにスタックオーバーフロー問題が生じると判定することである。
さらに、動的ステイン分析に基づくメモリ分析方法は、
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を印刷するステップS4と、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているsetオブジェクトを印刷するステップS5と、
メモリ影響範囲及び汚染済みデータを格納している前記setオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断するステップS6と、
そうである場合、前記ターゲットアドレスを制御されたアドレスとして判定するステップS7とをさらに含む。
【0025】
説明すべきこととして、従来技術では、アドレスサニタイザ(addresssanitizer)のようなメモリ分析スキームは、プログラムソースコードに依存するため、ソースコードのプログラムを取得しにくいプログラムを分析することができない。ステイン分析は、その本来の目的がプログラムのいくつかの主要な位置が汚染されているか否かを検出することであるため、その重点がプログラム全体の範囲での汚染済みデータの伝播を考慮することにある。
この場合、汚染済みデータ処理に係る命令のそれぞれがマーキングのために余分なスペースを開く必要がある可能性があるため、メモリのオーバーヘッドは非常に深刻な問題である。従来のステイン分析では、この点も考慮されるため、汚染伝播中に記録できる情報は非常に限られる。例えば、最も基本的なステイン分析では、1つのメモリ位置に対して、汚染されているか否かを1ビットだけでマーキングする。しかしながら、メモリ分析の場合、スタックのようなメモリ位置が繰り返して使用され、且つ関数が戻るにつれて関数の局部スタックのコンテンツが意味をなさなくなり、したがって、関数の内部で、ステイン分析の方式で局部スタック内の汚染状況を記録することができ、且つメモリのオーバーヘッドをあまり配心しないので、さらなるメモリ分析に対して、汚染源と汚染発生アドレスをマーキングするために、より多くのメモリ位置が実に必要である。
【0026】
本発明の目的は、ソースコードがない状況に対応し、動的インストルメント技術及びメモリ分析技術により、メモリオーバーフロー問題を検出し、エクスプロイトを生成するために必要な主要な情報を抽出することができる、動的ステイン分析に基づくメモリ分析方法を提供することにある。動的インストルメントプラットフォームを応用することにより、ソースコードなしでプログラムを分析し、関数コール中にメモリ情報を分析し、スタックオーバーフローが発生するか否かを検出し、エクスプロイトの生成に利用できる重要な情報を出力することができる。
【0027】
図2に示すように、本発明の実施例では、動的バイナリインストルメンテーションエンジンを使用することでメモリ分析を行う主な過程は、次のとおりである。
【0028】
1、バイナリインストルメンテーションエンジンはプロセスから一部のデータとコードを動的にキャプチャする。
【0029】
2、キャプチャされたコードは直接実行されず、ユーザーに定義されたインストルメントコードを挿入して実行され、インストルメントがプログラムのどの位置にインストルメントするかを指定するためのものであり、これにより、プログラムは指定された位置に実行されると、インストルメントコードによって分析コードにジャンプする。
【0030】
3、インストルメンテーションエンジンを通過したコードは、JITコンパイルされた後に実行可能コードになり、コードバッファーに入れられて実行される。
【0031】
4、バッファ内のコードは、実行をシミュレートするために1つずつエミュレータに入り、インストルメントコードが実行されると、動的情報を取得するために特定の分析コードが呼び出され、これらの動的情報には、ステイン分析をサポートする汚染伝播情報が含まれ、エクスプロイトを生成するための重要な情報も含まれる。
【0032】
5、バッファ内のコードが使い果たされると、スケジューラによりコードを取得し続け、上記のプロセスを繰り返す。
【0033】
ユーザーがまずインストルメンテーション関数と分析関数を定義する必要があることは理解できる。インストルメンテーション関数はプログラムにおけるインストルメント位置を示し、分析関数はインストルメント位置で実行する必要がある分析を規定し、これは後でプログラムの実行に影響する。バイナリインストルメンテーションエンジンでプログラムを実行すると、アプリケーションプログラムプロセスは直接実行されず、全てのインストルメントコードを含むコードキャッシュ内にコードが実行される。最初、コードキャッシュは空であり、インストルメンテーションエンジンはプロセスからコードグラバーを介して1つのコードブロックを取り出し、ユーザーに定義されたインストルメンテーション関数と分析関数の指導の下でこのコードブロックをインストルメントする。コードインストルメントが完了された後、ダイナミックバイナリインストルメンテーションエンジンは1つのJITコンパイラを使用してコンパイルし、これにより、インストルメント済みコードが再度最適化され、コンパイルされたコードはコードキャッシュに格納される。JITコンパイラーはさらに、制御フローの実行が動的バイナリインストルメンテーションエンジンに戻ることを確保し、プロセスがインストルメントされていないコードで実行され続けることを防止するために、制御フロー命令を書き換える。コードキャッシュ内のコードは、1つの制御フロー命令が新しいコードを取り戻すか、キャッシュ内の別のコードブロックを見つける必要があるまで1つずつ実行され、その後、全ての操作がスケジューラに渡され、上記の操作が繰り返される。
【0034】
一方で、実行時のC関数の特徴は次のとおりである。1つの関数コールが発生すると、まず現在の命令の次の項目をスタックにプッシュし、次に現在のスタックベースポインターをスタックに保存し、最後にスタックトップポインターをスタックベースレジスタに保存し、この後、スタックトップポインタがローカル変数を処理できる。局部変数が定義される前に局部スタックの長さが発生することに注意する必要があり、後続の書き込み操作が制限されていない場合、範囲外の書き込みが発生する可能性があり、スタックに保存されているスタックベースポインターと戻りアドレスに最終的に影響する。
【0035】
図3に示すように、動的バイナリインストルメンテーションエンジンによって取得された情報に基づいてステイン分析を応用し、スタックオーバーフローの利用に関する重要な情報を抽出するプロセスは、次のとおりである。
【0036】
動的ステイン分析の応用:
1、readなどの入力関数を汚染源として指定し、外部で読み取ったデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録し、レジスタの汚染状況を特定のデータ構造で記録する。
2、MOV、PUSH、POP、ADDを含む各メモリ操作命令をインストルメントし、毎回操作するする前にチェックし、ソースオペランドが汚染されている場合、ターゲットオペランドを汚染済みとしてマーキングし、ソースオペランドが汚染されていない場合、ターゲットオペランドが汚染されている場合、ターゲットオペランドの汚染を浄化する。
3、ret命令をインストルメントし、現在のスタックトップメモリが汚染されているか否かをチェックし、汚染されている場合、ユーザー入力がプログラム実行の制御フローに影響を与える可能性があることを示す。
【0037】
スタックオーバーフローの利用に関する重要な情報の抽出:
1、入力関数をインストルメントし、入力関数に影響されたメモリ範囲を印刷する。
2、関数が戻るときに、ユーザー入力がプログラム制御フローに影響を与えることができることを発見した場合、汚染済みデータを現在格納しているsetオブジェクトを印刷する。
3、いくつかのアドレスがある入力関数に影響されたメモリ範囲と、汚染済みデータを格納するsetオブジェクトの両方に同時に位置する場合、当該メモリアドレスは当該入力関数によって制御されることが初めて判定され、これにより、ユーザー入力のどのコンテンツを変更して制御フローに影響するかを計算できる。
【0038】
図4に示すように、本解決手段の1つの具体的な実施例は次のとおりである。
1、ある入力関数が44つの文字をメモリに読み込む。
2、関数が戻るとき、スタックトップのメモリアドレスが汚染されていることを発見する。
3、現在のスタックトップのメモリアドレスを記録し、入力関数をインストルメントして得られた情報を組み合わせて、現在のスタックトップアドレスが当該入力関数の41番目〜44番目の文字によって制御されることを計算する。
4、同時に、1番目〜40番目の文字の格納アドレスが汚染済みデータを格納しているsetと読み込まれた関数の範囲に同時に存在するため、この40つの文字の格納アドレスのコンテンツは、この入力関数を通じてユーザーに制御されてもよいことが初めて判定される。
【0039】
本発明の実施例は、動的プログラムを介して実行をシミュレートし、ある関数のうちの入力関数を実行する時に、メモリ内の入力に影響された位置を汚染済みとしてマーキングし、関数が戻るときに、戻りアドレスが入力によってハイジャックされるか否かをチェックする。
【0040】
また、本発明の実施例はさらに入力に影響されたメモリアドレスを取得し、プログラム戻りアドレスを影響されたメモリアドレスと比較することもできる。これにより、入力のうちのどのバイトがプログラムの制御フローに影響するかを計算する。
【0041】
説明すべきこととして、以上の方法又はプロセスの実施例に対して、簡単に説明するために、それらを一連の動作の組み合わせとして説明するが、本発明の実施例によれば、いくつかのステップが他の順番で又は又は同時に実行されてもよいため、本発明の実施例が説明される動作の順番の制限を受けないことは当業者が理解すべきである。次に、当業者であれば、明細書に説明される実施例はいずれも選択可能な実施例に属し、係る動作が必ず本発明の実施例に必要なものではないと理解すべきである。
【0042】
図5に示すように、同じ技術的問題を解決するために、本発明はさらに動的ステイン分析に基づくメモリ分析装置を提供する。前記装置は、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録するための汚染源マーキングモジュール1と、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングするための汚染処理モジュール2と、
ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うためのメモリ検出モジュール3とを備える。
【0043】
さらに、前記汚染処理モジュール2は具体的には全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、そうでない場合、前記ターゲットオペランドを浄化するために使用される。
【0044】
さらに、前記メモリ検出モジュール3は具体的にはret命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、そうである場合、メモリにスタックオーバーフロー問題が生じると判定するために使用される。
【0045】
さらに、動的ステイン分析に基づくメモリ分析装置は、
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を印刷するための範囲印刷モジュールと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているsetオブジェクトを印刷するためのアドレス印刷モジュールと、
前記メモリ影響範囲及び汚染済みデータを格納している前記setオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断するためのターゲットクエリモジュールと、
前記ターゲットアドレスを制御されたアドレスとして判定するためのターゲット判定モジュールとをさらに備える。
【0046】
上記装置の実施例が本発明の方法の実施例に対応することは理解でき、本発明の実施例による動的ステイン分析に基づくメモリ分析装置は、本発明のいずれかの実施例による動的ステイン分析に基づくメモリ分析方法を実現することができる。
【0047】
同じ技術的問題を解決するために、本発明はさらに、プロセッサ、メモリ、及び前記メモリに格納され且つ前記プロセッサによって実行されるように構成されたコンピュータプログラムを備え、前記メモリが前記プロセッサに結合され、且つ前記プロセッサが前記コンピュータプログラムを実行すると、いずれか一項に記載の動的ステイン分析に基づくメモリ分析方法が実現される、動的ステイン分析に基づくメモリ分析端末機器を提供する。
【0048】
前記動的ステイン分析に基づくメモリ分析端末機器は、デスクトップコンピュータ、ノートブック、パームトップコンピュータ及びクラウドサーバなどのコンピューティングデバイスであってもよい。前記プロセッサは中央処理ユニット(CPU:Central Processing Unit)であってもよく、また他の汎用プロセッサ、デジタル信号プロセッサ(DSP:(Digital Signal Processor)、専用集積回路(ASIC:Application Specific Integrated Circuit)、フィールドプログラマブルゲートアレイ(FPGA:Field Programmable Gate Array)又は他のプログラマブルロジックデバイス、ディスクリートゲート又はトランジスタロジックデバイス、ディスクリートハードウェアコンポーネントなどであってもよい。汎用プロセッサは、マイクロプロセッサであってもよく、又は任意の従来のプロセッサなどであってもよく、前記プロセッサは、前記動的ステイン分析に基づくメモリ分析端末機器の制御センターであり、様々なインタフェースと回線を使用して、前記動的ステイン分析に基づくメモリ分析端末機器全体の各部分を接続する。
【0049】
前記メモリは主にプログラム記憶領域とデータ記憶領域を含むことができ、ここで、プログラム記憶領域にはオペレーティングシステム、少なくとも一つの機能に必要なアプリケーションプログラムなどが記憶されてもよく、データ記憶領域には携帯電話の使用に応じて作成されたデータなどが記憶されてもよい。また、メモリは、高速ランダムアクセスメモリを含むことができ、さらにハードディスク、内部メモリ、プラグインハードディスクなどの不揮発性メモリ、スマートメディアカード(SMC:Smart Media Card)、セキュアデジタル(SD:Secure Digital)カード、フラッシュカード(Flash Card)、少なくとも1つの磁気ディスクストレージデバイス、フラッシュメモリデバイス、又は他の揮発性ソリッドステートストレージデバイスを含むことができる。
【0050】
同じ技術的問題を解決するために、本発明はさらに前記コンピュータ可読記憶媒体を提供する。前記前記コンピュータ可読記憶媒体は、コンピュータプログラムを記憶し、前記コンピュータプログラムが実行される時に、いずれか一項に記載の動的ステイン分析に基づくメモリ分析方法を実行するように前記コンピュータ可読記憶媒体が配置されたデバイスを制御する。
【0051】
前記コンピュータプログラムは、コンピュータ可読記憶媒体に格納されてもよく、当該コンピュータプログラムがプロセッサによって実行されるとき、上記の各方法の実施例のステップが実現されてもよい。ここで、前記コンピュータプログラムはコンピュータプログラムコードを含み、前記コンピュータプログラムコードがソースコード形態、オブジェクトコード形態、実行可能ファイル又は何らかの中間形態などであってもよい。前記コンピュータ可読記憶媒体は、コンピュータプログラムコードを含むことができるいずれかのエンティティ又はデバイス、記録媒体、USBフラッシュドライブ、モバイルハードディスク、磁気ディスク、光ディスク、コンピュータメモリ、読み取り専用メモリ(ROM:Read−Only Memory)、ランダムアクセスメモリ(RAM:Random Access Memory)、電気搬送波信号、通信信号及びソフトウェア配布媒体などを含むことができる。説明すべきこととして、前記コンピュータ可読媒体に含まれるコンテンツは、司法管轄区域内の法律及び特許実務の要件に応じて適切に追加又は削除されてもよく、例えば、いくつかの司法管轄区域において、法律及び特許実務に従って、コンピュータ可読媒体は電気搬送波信号と通信信号を含めない。
【0052】
説明すべきこととして、上述した装置の実施例は例示的なものだけでなく、ここで、分離部材として説明された前記ユニットが物理的に分離するものであってもよく又は物理的に分離するものでなくてもよく、ユニットとして表示された部材は物理ユニットであってもよく又は物理ユニットでなくてもよく、即ち一つの位置に配置されてもよく、又は複数のネットワークユニットに分布してもよい。実際のニーズに応じてそのうちの一部又は全てのモジュールを選択して本実施例の解決手段の目的を達成することができる。また、本発明による装置の実施例の図面では、モジュール間の接続関係はそれらが通信接続を有することを示し、これは、1本または複数本の通信バス又は信号線として具体的に実現されてもよい。当業者は創造的な労力を要せずに理解して実施することができる。
【0053】
以上に説明したものは本発明の好ましい実施形態であり、指摘すべきこととして、当業者であれば、本発明の原理を逸脱しない前提で、いくつかの改良および変更を行うことができ、これらの改良及び変更も本発明の保護範囲と見なされる。
【要約】      (修正有)
【課題】動的ステイン分析に基づくメモリ分析方法、装置、端末機器及び読み取り可能な記憶媒体を提供する。
【解決手段】メモリ分析方法は、予め設定された入力関数を汚染源として指定して、入力関数によって読み込まれたデータを汚染済みとしてマーキングし、汚染されたアドレスを1つのsetオブジェクトで記録する。次に、全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングする。また、ret命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行う。
【選択図】図1
図1
図2
図3
図4
図5