(57)【特許請求の範囲】
【請求項１】
動的ステイン分析に基づくメモリ分析方法であって、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み込まれたデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録することと、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることと、
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うこととを含む、ことを特徴とする動的ステイン分析に基づくメモリ分析方法。
【請求項２】
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることは、具体的には、 全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、
そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、
そうでない場合、前記ターゲットオペランドの汚染を浄化することである、ことを特徴とする請求項１に記載の動的ステイン分析に基づくメモリ分析方法。
【請求項３】
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うことは、具体的には、
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、
そうである場合、メモリにスタックオーバーフロー問題が生じると判定することである、ことを特徴とする請求項１に記載の動的ステイン分析に基づくメモリ分析方法。
【請求項４】
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を表示することと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているｓｅｔオブジェクトを表示することと、
前記メモリ影響範囲及び汚染済みデータを格納している前記ｓｅｔオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断することと、
そうである場合、前記ターゲットアドレスを制御されたアドレスとして判定することとをさらに含む、ことを特徴とする請求項１に記載の動的ステイン分析に基づくメモリ分析方法。
【請求項５】
動的ステイン分析に基づくメモリ分析装置であって、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み込まれたデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録するための汚染源マーキングモジュールと、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングするための汚染処理モジュールと、
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うためのメモリ検出モジュールとを備える、ことを特徴とする動的ステイン分析に基づくメモリ分析装置。
【請求項６】
前記汚染処理モジュールは具体的には全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、そうでない場合、前記ターゲットオペランドを浄化するために使用される、ことを特徴とする請求項５に記載の動的ステイン分析に基づくメモリ分析装置。
【請求項７】
前記メモリ検出モジュールは具体的にはｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、そうである場合、メモリにスタックオーバーフロー問題が生じると判定するために使用される、ことを特徴とする請求項５に記載の動的ステイン分析に基づくメモリ分析装置。
【請求項８】
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を表示するための範囲表示モジュールと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているｓｅｔオブジェクトを表示するためのアドレス表示モジュールと、
前記メモリ影響範囲及び汚染済みデータを格納している前記ｓｅｔオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断するためのターゲットクエリモジュールと、
前記ターゲットアドレスを制御されたアドレスとして判定するためのターゲット判定モジュールとをさらに備える、ことを特徴とする請求項５に記載の動的ステイン分析に基づくメモリ分析装置。
【請求項９】
動的ステイン分析に基づくメモリ分析端末機器であって、プロセッサ、メモリ、及び前記メモリに格納され且つ前記プロセッサによって実行されるように構成されたコンピュータプログラムを備え、前記メモリが前記プロセッサに結合され、且つ前記プロセッサが前記コンピュータプログラムを実行すると、請求項１〜４のいずれか一項に記載の動的ステイン分析に基づくメモリ分析方法が実現される、ことを特徴とする動的ステイン分析に基づくメモリ分析端末機器。
【請求項１０】
前記コンピュータ可読記憶媒体は、コンピュータプログラムを記憶し、前記コンピュータプログラムが実行される時に、請求項１−４のいずれか一項に記載の動的ステイン分析に基づくメモリ分析方法を実行するように前記コンピュータ可読記憶媒体が配置されたデバイスを制御する、ことを特徴とするコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ技術分野に関し、特に動的ステイン分析に基づくメモリ分析方法、装置、端末機器及び読み取り可能な記憶媒体に関する。
【背景技術】
【０００２】
プログラムの数が急速に増加しているため、手動プログラムテストはプログラムテストのニーズを満たすことが困難である。この問題に対処するために、いくつかの自動プログラムテストスキームが相次いで提案されている。プログラムが実際に実行されるか否かに応じて、自動プログラムテストスキームは静的分析と動的分析に分けられる。プログラムコードが実行されない場合、静的分析とは、字句分析、構文分析、制御フロー、データフロー分析などの技術により、プログラムコードをスキャンし、コードが仕様、安全性、信頼性、保守性などの指標を満たしているか否かを検証することを意味している。プログラムの動的分析とは、プログラムの実行に伴い、実行過程における、レジスタ情報、メモリ情報などを含むプログラムの情報を取得し、存在する可能性があるプログラムバグを探索することを意味している。一方で、ファジングテスト技術は近年急速な発展を遂げており、プログラムをクラッシュさせることができる入力を効果的に生成することができる。これらのクラッシュがプログラムの正常な実行に大きな影響を与えるか否かを評価するために、多くの人力が必要になる。どのようにファジングテストで得られたクラッシュ入力に基づいてプログラムの動的分析を行い、当該クラッシュがリスクの高いバグであるか否かを評価するかは、非常に意味がある挑戦である。
【０００３】
プログラムが実行される時のメモリ情報を取得するために、最も一般的な操作は、コードをインストルメントし、コードインストルメントの実行により、その時のプログラムサイト情報を取得することである。アドレスサニタイザー（ａｄｄｒｅｓｓｓａｎｉｔｉｚｅｒ）などのいくつかの従来技術では、プログラムのコンパイル中にインストルメントすることでメモリに関連する情報を取得する。別の方式は、類似するｐｉｎ、ｑｅｍｕを使用してプログラム実行プロセスをシミュレートし、シミュレート過程にインストルメンテーション分析を行うことである。
【０００４】
インストルメンテーションに基づき、プログラムに対してステイン分析を行うことができ、従来のステイン分析には、汚染源への定義、汚染タンクへの定義と汚染伝播の追跡の３つのステップが含まれる。ここで、汚染源は追跡しようとするデータのプログラム位置である。例えば、システムコール、関数エントリ、又はあるメモリ操作命令はすべて汚染源である可能性がある。汚染タンクがプログラムにおけるいくつかの位置を指し、これらの位置のいくつかのデータが汚染されているか否かを確認したい。例えば、プログラムの制御フローが入力の影響を受けるか否かをチェックするために、間接コール、間接ジャンプと戻り（ｒｅｔｕｒｎ）命令の次の実行命令の位置が入力によって汚染されているか否かをチェックする可能性がある。汚染伝播はプログラム内の汚染源の伝播に対して指定されたルールである。たとえば、ｍｏｖのソースオペランドが汚染されている場合、ターゲットオペランドも汚染済みとしてマーキングされる。これにより、汚染されたデータは、汚染ソースから汚染タンクまで伝播される。
【０００５】
従来技術のメモリ分析スキームは、プログラムソースコードに依存するため、ソースコードを取得しにくいプログラムを分析することができない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】中国特許出願公開第１０７１８０１８８号明細書
【０００７】
本発明は、動的ステイン分析に基づいて暗号化されたアプリケーションの平文を抽出するためのシステムを開示する。前記システムは、ステインデータソース位置決めモジュール、動的ステイン分析モジュール、命令分析モジュールとメモリ動作分析モジュールを備え、ここで、ステインデータソース位置決めモジュールがシステムコールで暗号化されたメッセージのメモリアドレスを取得し、ステインデータソースとしてマーキングするために使用され、動的ステイン分析モジュールがステインマークを付けたデータソースを追跡し、その中からそれを操作するための命令実行軌跡を逆方向に取得するために使用され、命令分析モジュールが命令軌跡を解析し、ステインデータのメッセージ復号段階とメッセージ処理段階を区別するために使用され、メモリ動作分析モジュールが、ステインデータがメッセージ複号段階で書き込まれ且つメッセージ処理段階で読み取られるメモリアドレスを取得し、当該メモリアドレスから復号された平文情報を抽出するために使用される。本発明は、復号されたアプリケーションから平文情報を抽出することにより、暗号化されたアプリケーションのセキュリティ監視を改善する。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の実施例が解決しようとする技術的問題は、ソースコードなしでプログラムを分析し、メモリオーバーフロー問題を検出することができ、それによってエクスプロイトを生成するために必要な主要な情報を抽出することができる、動的ステイン分析に基づくメモリ分析方法、装置、端末機器及び読み取り可能な記憶媒体を提供することにある。
【課題を解決するための手段】
【０００９】
上記技術的問題を解決するために、本発明の実施例による動的ステイン分析に基づくメモリ分析方法は、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録することと、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることと、
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うこととを含む。
【００１０】
さらに、全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることは、具体的には、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、
そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、
そうでない場合、前記ターゲットオペランドの汚染を浄化することである。
【００１１】
さらに、ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うことは、具体的には、
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、
そうである場合、メモリにスタックオーバーフロー問題が生じると判定することである。
さらに、動的ステイン分析に基づくメモリ分析方法は、
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を印刷することと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているｓｅｔオブジェクトを印刷することと、
前記メモリ影響範囲及び汚染済みデータを格納している前記ｓｅｔオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断することと、
そうである場合、前記ターゲットアドレスを制御されたアドレスとして判定することとをさらに含む。
【００１２】
同じ技術的問題を解決するために、本発明の実施例による動的ステイン分析に基づくメモリ分析装置は、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録するための汚染源マーキングモジュールと、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングするための汚染処理モジュールと、
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うためのメモリ検出モジュールとを備える。
さらに、前記汚染処理モジュールは具体的には全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、そうでない場合、前記ターゲットオペランドを浄化するために使用される。
さらに、前記メモリ検出モジュールは具体的にはｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、そうである場合、メモリにスタックオーバーフロー問題が生じると判定するために使用される。
【００１３】
さらに、動的ステイン分析に基づくメモリ分析装置は、
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を印刷するための範囲印刷モジュールと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているｓｅｔオブジェクトを印刷するためのアドレス印刷モジュールと、
前記メモリ影響範囲及び汚染済みデータを格納している前記ｓｅｔオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断するためのターゲットクエリモジュールと、
前記ターゲットアドレスを制御されたアドレスとして判定するためのターゲット判定モジュールとをさらに備える。
【００１４】
同じ技術的問題を解決するために、本発明はさらに、プロセッサ、メモリ、及び前記メモリに格納され且つ前記プロセッサによって実行されるように構成されたコンピュータプログラムを備え、前記メモリが前記プロセッサに結合され、且つ前記プロセッサが前記コンピュータプログラムを実行すると、いずれか一項に記載の動的ステイン分析に基づくメモリ分析方法が実現される、動的ステイン分析に基づくメモリ分析端末機器を提供する。
【００１５】
同じ技術的問題を解決するために、本発明はさらに前記コンピュータ可読記憶媒体を提供する。前記前記コンピュータ可読記憶媒体は、コンピュータプログラムを記憶し、ここで、前記コンピュータプログラムが実行される時に、いずれか一項に記載の動的ステイン分析に基づくメモリ分析方法を実行するように前記コンピュータ可読記憶媒体が配置されたデバイスを制御する。
【００１６】
従来技術と比較して、本発明は次の有益な効果を有する。
【００１７】
本発明は、動的ステイン分析に基づくメモリ分析方法、装置、端末機器及び読み取り可能な記憶媒体を提供する。前記方法は、予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録することと、全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングすることと、ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うこととを含む。本発明は、ソースコードなしでプログラムを分析し、メモリオーバーフロー問題を検出し、それによってエクスプロイトを生成するために必要な主要な情報を抽出することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の一実施例による動的ステイン分析に基づくメモリ分析方法のフローチャートである。
【図２】本発明の一つの実施例による動的バイナリインストルメンテーションエンジンの構造図である。
【図３】本発明の一実施例による動的ステイン分析を応用するフローチャートである。
【図４】本発明の一実施例によるメモリ分析の具体的な例の概略図である。
【図５】本発明の一実施例による動的ステイン分析に基づくメモリ分析装置の構造図である。
【発明を実施するための形態】
【００１９】
以下に本発明の実施例の図面と組み合わせて本発明の実施例における技術的解決手段を明確且つ完全に説明し、明らかに、説明される実施例は本発明の実施例の一部に過ぎず、全ての実施例ではない。本発明の実施例に基づき、当業者が創造的な労力を要さずに想到し得る他の実施例は、全て本発明の保護範囲に属する。
【００２０】
図１に示すように、本発明の実施例による動的ステイン分析に基づくメモリ分析方法は、Ｓ１、Ｓ２、Ｓ３を含む。
【００２１】
Ｓ１、予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録する。
【００２２】
Ｓ２、全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングする。
【００２３】
本発明の実施例では、さらに、ステップＳ２は具体的には、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、
そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、
そうでない場合、ターゲットオペランドの汚染を浄化することである。
Ｓ３、ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行う。
【００２４】
本発明の実施例では、さらに、ステップＳ３は具体的には、
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、
そうである場合、メモリにスタックオーバーフロー問題が生じると判定することである。
さらに、動的ステイン分析に基づくメモリ分析方法は、
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を印刷するステップＳ４と、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているｓｅｔオブジェクトを印刷するステップＳ５と、
メモリ影響範囲及び汚染済みデータを格納している前記ｓｅｔオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断するステップＳ６と、
そうである場合、前記ターゲットアドレスを制御されたアドレスとして判定するステップＳ７とをさらに含む。
【００２５】
説明すべきこととして、従来技術では、アドレスサニタイザ（ａｄｄｒｅｓｓｓａｎｉｔｉｚｅｒ）のようなメモリ分析スキームは、プログラムソースコードに依存するため、ソースコードのプログラムを取得しにくいプログラムを分析することができない。ステイン分析は、その本来の目的がプログラムのいくつかの主要な位置が汚染されているか否かを検出することであるため、その重点がプログラム全体の範囲での汚染済みデータの伝播を考慮することにある。
この場合、汚染済みデータ処理に係る命令のそれぞれがマーキングのために余分なスペースを開く必要がある可能性があるため、メモリのオーバーヘッドは非常に深刻な問題である。従来のステイン分析では、この点も考慮されるため、汚染伝播中に記録できる情報は非常に限られる。例えば、最も基本的なステイン分析では、１つのメモリ位置に対して、汚染されているか否かを１ビットだけでマーキングする。しかしながら、メモリ分析の場合、スタックのようなメモリ位置が繰り返して使用され、且つ関数が戻るにつれて関数の局部スタックのコンテンツが意味をなさなくなり、したがって、関数の内部で、ステイン分析の方式で局部スタック内の汚染状況を記録することができ、且つメモリのオーバーヘッドをあまり配心しないので、さらなるメモリ分析に対して、汚染源と汚染発生アドレスをマーキングするために、より多くのメモリ位置が実に必要である。
【００２６】
本発明の目的は、ソースコードがない状況に対応し、動的インストルメント技術及びメモリ分析技術により、メモリオーバーフロー問題を検出し、エクスプロイトを生成するために必要な主要な情報を抽出することができる、動的ステイン分析に基づくメモリ分析方法を提供することにある。動的インストルメントプラットフォームを応用することにより、ソースコードなしでプログラムを分析し、関数コール中にメモリ情報を分析し、スタックオーバーフローが発生するか否かを検出し、エクスプロイトの生成に利用できる重要な情報を出力することができる。
【００２７】
図２に示すように、本発明の実施例では、動的バイナリインストルメンテーションエンジンを使用することでメモリ分析を行う主な過程は、次のとおりである。
【００２８】
１、バイナリインストルメンテーションエンジンはプロセスから一部のデータとコードを動的にキャプチャする。
【００２９】
２、キャプチャされたコードは直接実行されず、ユーザーに定義されたインストルメントコードを挿入して実行され、インストルメントがプログラムのどの位置にインストルメントするかを指定するためのものであり、これにより、プログラムは指定された位置に実行されると、インストルメントコードによって分析コードにジャンプする。
【００３０】
３、インストルメンテーションエンジンを通過したコードは、ＪＩＴコンパイルされた後に実行可能コードになり、コードバッファーに入れられて実行される。
【００３１】
４、バッファ内のコードは、実行をシミュレートするために１つずつエミュレータに入り、インストルメントコードが実行されると、動的情報を取得するために特定の分析コードが呼び出され、これらの動的情報には、ステイン分析をサポートする汚染伝播情報が含まれ、エクスプロイトを生成するための重要な情報も含まれる。
【００３２】
５、バッファ内のコードが使い果たされると、スケジューラによりコードを取得し続け、上記のプロセスを繰り返す。
【００３３】
ユーザーがまずインストルメンテーション関数と分析関数を定義する必要があることは理解できる。インストルメンテーション関数はプログラムにおけるインストルメント位置を示し、分析関数はインストルメント位置で実行する必要がある分析を規定し、これは後でプログラムの実行に影響する。バイナリインストルメンテーションエンジンでプログラムを実行すると、アプリケーションプログラムプロセスは直接実行されず、全てのインストルメントコードを含むコードキャッシュ内にコードが実行される。最初、コードキャッシュは空であり、インストルメンテーションエンジンはプロセスからコードグラバーを介して１つのコードブロックを取り出し、ユーザーに定義されたインストルメンテーション関数と分析関数の指導の下でこのコードブロックをインストルメントする。コードインストルメントが完了された後、ダイナミックバイナリインストルメンテーションエンジンは１つのＪＩＴコンパイラを使用してコンパイルし、これにより、インストルメント済みコードが再度最適化され、コンパイルされたコードはコードキャッシュに格納される。ＪＩＴコンパイラーはさらに、制御フローの実行が動的バイナリインストルメンテーションエンジンに戻ることを確保し、プロセスがインストルメントされていないコードで実行され続けることを防止するために、制御フロー命令を書き換える。コードキャッシュ内のコードは、１つの制御フロー命令が新しいコードを取り戻すか、キャッシュ内の別のコードブロックを見つける必要があるまで１つずつ実行され、その後、全ての操作がスケジューラに渡され、上記の操作が繰り返される。
【００３４】
一方で、実行時のＣ関数の特徴は次のとおりである。１つの関数コールが発生すると、まず現在の命令の次の項目をスタックにプッシュし、次に現在のスタックベースポインターをスタックに保存し、最後にスタックトップポインターをスタックベースレジスタに保存し、この後、スタックトップポインタがローカル変数を処理できる。局部変数が定義される前に局部スタックの長さが発生することに注意する必要があり、後続の書き込み操作が制限されていない場合、範囲外の書き込みが発生する可能性があり、スタックに保存されているスタックベースポインターと戻りアドレスに最終的に影響する。
【００３５】
図３に示すように、動的バイナリインストルメンテーションエンジンによって取得された情報に基づいてステイン分析を応用し、スタックオーバーフローの利用に関する重要な情報を抽出するプロセスは、次のとおりである。
【００３６】
動的ステイン分析の応用：
１、ｒｅａｄなどの入力関数を汚染源として指定し、外部で読み取ったデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録し、レジスタの汚染状況を特定のデータ構造で記録する。
２、ＭＯＶ、ＰＵＳＨ、ＰＯＰ、ＡＤＤを含む各メモリ操作命令をインストルメントし、毎回操作するする前にチェックし、ソースオペランドが汚染されている場合、ターゲットオペランドを汚染済みとしてマーキングし、ソースオペランドが汚染されていない場合、ターゲットオペランドが汚染されている場合、ターゲットオペランドの汚染を浄化する。
３、ｒｅｔ命令をインストルメントし、現在のスタックトップメモリが汚染されているか否かをチェックし、汚染されている場合、ユーザー入力がプログラム実行の制御フローに影響を与える可能性があることを示す。
【００３７】
スタックオーバーフローの利用に関する重要な情報の抽出：
１、入力関数をインストルメントし、入力関数に影響されたメモリ範囲を印刷する。
２、関数が戻るときに、ユーザー入力がプログラム制御フローに影響を与えることができることを発見した場合、汚染済みデータを現在格納しているｓｅｔオブジェクトを印刷する。
３、いくつかのアドレスがある入力関数に影響されたメモリ範囲と、汚染済みデータを格納するｓｅｔオブジェクトの両方に同時に位置する場合、当該メモリアドレスは当該入力関数によって制御されることが初めて判定され、これにより、ユーザー入力のどのコンテンツを変更して制御フローに影響するかを計算できる。
【００３８】
図４に示すように、本解決手段の１つの具体的な実施例は次のとおりである。
１、ある入力関数が４４つの文字をメモリに読み込む。
２、関数が戻るとき、スタックトップのメモリアドレスが汚染されていることを発見する。
３、現在のスタックトップのメモリアドレスを記録し、入力関数をインストルメントして得られた情報を組み合わせて、現在のスタックトップアドレスが当該入力関数の４１番目〜４４番目の文字によって制御されることを計算する。
４、同時に、１番目〜４０番目の文字の格納アドレスが汚染済みデータを格納しているｓｅｔと読み込まれた関数の範囲に同時に存在するため、この４０つの文字の格納アドレスのコンテンツは、この入力関数を通じてユーザーに制御されてもよいことが初めて判定される。
【００３９】
本発明の実施例は、動的プログラムを介して実行をシミュレートし、ある関数のうちの入力関数を実行する時に、メモリ内の入力に影響された位置を汚染済みとしてマーキングし、関数が戻るときに、戻りアドレスが入力によってハイジャックされるか否かをチェックする。
【００４０】
また、本発明の実施例はさらに入力に影響されたメモリアドレスを取得し、プログラム戻りアドレスを影響されたメモリアドレスと比較することもできる。これにより、入力のうちのどのバイトがプログラムの制御フローに影響するかを計算する。
【００４１】
説明すべきこととして、以上の方法又はプロセスの実施例に対して、簡単に説明するために、それらを一連の動作の組み合わせとして説明するが、本発明の実施例によれば、いくつかのステップが他の順番で又は又は同時に実行されてもよいため、本発明の実施例が説明される動作の順番の制限を受けないことは当業者が理解すべきである。次に、当業者であれば、明細書に説明される実施例はいずれも選択可能な実施例に属し、係る動作が必ず本発明の実施例に必要なものではないと理解すべきである。
【００４２】
図５に示すように、同じ技術的問題を解決するために、本発明はさらに動的ステイン分析に基づくメモリ分析装置を提供する。前記装置は、
予め設定された入力関数を汚染源として指定して、前記入力関数によって読み取られたデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録するための汚染源マーキングモジュール１と、
全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングするための汚染処理モジュール２と、
ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行うためのメモリ検出モジュール３とを備える。
【００４３】
さらに、前記汚染処理モジュール２は具体的には全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、前記ソースオペランドが汚染されているか否かを判断し、そうである場合、前記ターゲットオペランドを汚染済みとしてマーキングし、そうでない場合、前記ターゲットオペランドを浄化するために使用される。
【００４４】
さらに、前記メモリ検出モジュール３は具体的にはｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、前記スタックトップメモリが汚染されているか否かを判断し、そうである場合、メモリにスタックオーバーフロー問題が生じると判定するために使用される。
【００４５】
さらに、動的ステイン分析に基づくメモリ分析装置は、
前記予め設定された入力関数をインストルメントし、前記入力関数のメモリ影響範囲を印刷するための範囲印刷モジュールと、
スタックオーバーフロー問題が生じる場合、汚染済みデータを現在格納しているｓｅｔオブジェクトを印刷するためのアドレス印刷モジュールと、
前記メモリ影響範囲及び汚染済みデータを格納している前記ｓｅｔオブジェクトに同時に位置するターゲットアドレスが存在するか否かを判断するためのターゲットクエリモジュールと、
前記ターゲットアドレスを制御されたアドレスとして判定するためのターゲット判定モジュールとをさらに備える。
【００４６】
上記装置の実施例が本発明の方法の実施例に対応することは理解でき、本発明の実施例による動的ステイン分析に基づくメモリ分析装置は、本発明のいずれかの実施例による動的ステイン分析に基づくメモリ分析方法を実現することができる。
【００４７】
同じ技術的問題を解決するために、本発明はさらに、プロセッサ、メモリ、及び前記メモリに格納され且つ前記プロセッサによって実行されるように構成されたコンピュータプログラムを備え、前記メモリが前記プロセッサに結合され、且つ前記プロセッサが前記コンピュータプログラムを実行すると、いずれか一項に記載の動的ステイン分析に基づくメモリ分析方法が実現される、動的ステイン分析に基づくメモリ分析端末機器を提供する。
【００４８】
前記動的ステイン分析に基づくメモリ分析端末機器は、デスクトップコンピュータ、ノートブック、パームトップコンピュータ及びクラウドサーバなどのコンピューティングデバイスであってもよい。前記プロセッサは中央処理ユニット（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であってもよく、また他の汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ：（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、専用集積回路（ＡＳＩＣ：Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ：Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）又は他のプログラマブルロジックデバイス、ディスクリートゲート又はトランジスタロジックデバイス、ディスクリートハードウェアコンポーネントなどであってもよい。汎用プロセッサは、マイクロプロセッサであってもよく、又は任意の従来のプロセッサなどであってもよく、前記プロセッサは、前記動的ステイン分析に基づくメモリ分析端末機器の制御センターであり、様々なインタフェースと回線を使用して、前記動的ステイン分析に基づくメモリ分析端末機器全体の各部分を接続する。
【００４９】
前記メモリは主にプログラム記憶領域とデータ記憶領域を含むことができ、ここで、プログラム記憶領域にはオペレーティングシステム、少なくとも一つの機能に必要なアプリケーションプログラムなどが記憶されてもよく、データ記憶領域には携帯電話の使用に応じて作成されたデータなどが記憶されてもよい。また、メモリは、高速ランダムアクセスメモリを含むことができ、さらにハードディスク、内部メモリ、プラグインハードディスクなどの不揮発性メモリ、スマートメディアカード（ＳＭＣ：Ｓｍａｒｔ  Ｍｅｄｉａ  Ｃａｒｄ）、セキュアデジタル（ＳＤ：Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）カード、フラッシュカード（Ｆｌａｓｈ  Ｃａｒｄ）、少なくとも１つの磁気ディスクストレージデバイス、フラッシュメモリデバイス、又は他の揮発性ソリッドステートストレージデバイスを含むことができる。
【００５０】
同じ技術的問題を解決するために、本発明はさらに前記コンピュータ可読記憶媒体を提供する。前記前記コンピュータ可読記憶媒体は、コンピュータプログラムを記憶し、前記コンピュータプログラムが実行される時に、いずれか一項に記載の動的ステイン分析に基づくメモリ分析方法を実行するように前記コンピュータ可読記憶媒体が配置されたデバイスを制御する。
【００５１】
前記コンピュータプログラムは、コンピュータ可読記憶媒体に格納されてもよく、当該コンピュータプログラムがプロセッサによって実行されるとき、上記の各方法の実施例のステップが実現されてもよい。ここで、前記コンピュータプログラムはコンピュータプログラムコードを含み、前記コンピュータプログラムコードがソースコード形態、オブジェクトコード形態、実行可能ファイル又は何らかの中間形態などであってもよい。前記コンピュータ可読記憶媒体は、コンピュータプログラムコードを含むことができるいずれかのエンティティ又はデバイス、記録媒体、ＵＳＢフラッシュドライブ、モバイルハードディスク、磁気ディスク、光ディスク、コンピュータメモリ、読み取り専用メモリ（ＲＯＭ：Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ランダムアクセスメモリ（ＲＡＭ：Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、電気搬送波信号、通信信号及びソフトウェア配布媒体などを含むことができる。説明すべきこととして、前記コンピュータ可読媒体に含まれるコンテンツは、司法管轄区域内の法律及び特許実務の要件に応じて適切に追加又は削除されてもよく、例えば、いくつかの司法管轄区域において、法律及び特許実務に従って、コンピュータ可読媒体は電気搬送波信号と通信信号を含めない。
【００５２】
説明すべきこととして、上述した装置の実施例は例示的なものだけでなく、ここで、分離部材として説明された前記ユニットが物理的に分離するものであってもよく又は物理的に分離するものでなくてもよく、ユニットとして表示された部材は物理ユニットであってもよく又は物理ユニットでなくてもよく、即ち一つの位置に配置されてもよく、又は複数のネットワークユニットに分布してもよい。実際のニーズに応じてそのうちの一部又は全てのモジュールを選択して本実施例の解決手段の目的を達成することができる。また、本発明による装置の実施例の図面では、モジュール間の接続関係はそれらが通信接続を有することを示し、これは、１本または複数本の通信バス又は信号線として具体的に実現されてもよい。当業者は創造的な労力を要せずに理解して実施することができる。
【００５３】
以上に説明したものは本発明の好ましい実施形態であり、指摘すべきこととして、当業者であれば、本発明の原理を逸脱しない前提で、いくつかの改良および変更を行うことができ、これらの改良及び変更も本発明の保護範囲と見なされる。
【要約】      （修正有）【課題】動的ステイン分析に基づくメモリ分析方法、装置、端末機器及び読み取り可能な記憶媒体を提供する。【解決手段】メモリ分析方法は、予め設定された入力関数を汚染源として指定して、入力関数によって読み込まれたデータを汚染済みとしてマーキングし、汚染されたアドレスを１つのｓｅｔオブジェクトで記録する。次に、全てのメモリ操作命令をインストルメントしてメモリ操作をチェックし、ソースオペランドの汚染状況に応じてターゲットオペランドをマーキングする。また、ｒｅｔ命令をインストルメントしてスタックトップメモリをチェックし、現在のスタックトップメモリの汚染状況に応じてスタックオーバーフロー検出を行う。【選択図】図１【図１】
0006867066.tif 000002
【図２】
0006867066.tif 000003
【図３】
0006867066.tif 000004
【図４】
0006867066.tif 000005
【図５】
0006867066.tif 000006