(57)【特許請求の範囲】
【請求項１】
Mcsemaに基づくRemillスタック汚染分析方法であって、
コンピュータにて、
マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得ることと、
復号から得られたレジスタ名をremill基本ブロックの変数名に対応させるために、マシンコードデコーダを用いて前記高位命令データ構造を復号することと、
予め設定されたポップ関連命令のSEM解釈を修正することと、
SEM解釈が修正されたポップ関連命令の内容を、スタック汚染効果を有するツールに再コンパイルして、スタック汚染分析プロセスを完了することとを含み、
前記マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得ることでは、原始命令バイトを利用し、それらをより高位レベルの命令データ構造に変換するという命令のバイトを復号し、
前記予め設定されたポップ関連命令のSEM解釈を修正することは、具体的に
プログラム内容に対してビット数識別を行い、その識別結果に応じて前記ポップ関連命令に対して対応するSEM解釈修正を行い、ここで、前記プログラム内容のビット数は32ビットおよび64ビットを含むことを特徴とするMcsemaに基づくRemillスタック汚染分析方法。
【請求項２】
前記予め設定されたポップ関連命令は、pop命令、add命令、mov命令、leave命令、return命令のうちの１つまたは複数を含むことを特徴とする請求項１に記載のMcsemaに基づくRemillスタック汚染分析方法。
【請求項３】
Mcsemaに基づくRemillスタック汚染分析アプライアンスであって、
マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得るマシンコードブースティングモジュールと、
復号から得られたレジスタ名をremill基本ブロックの変数名に対応させるために、マシンコードデコーダを用いて前記高位命令データ構造を復号する命令復号モジュールと、
予め設定されたポップ関連命令のSEM解釈を修正する命令修正モジュールと、
SEM解釈が修正されたポップ関連命令の内容をスタック汚染効果を有するツールに再コンパイルして、スタック汚染分析プロセスを完了する再コンパイルモジュールとを含み、 前記マシンコードブースティングモジュールは、原始命令バイトを利用し、それらをより高位レベルの命令データ構造に変換するという命令のバイトを復号し、
前記命令修正モジュールは、具体的にプログラム内容に対してビット数識別用のものであり、その識別結果に応じて前記ポップ関連命令に対して対応するSEM解釈修正を行い、ここで、前記プログラム内容のビット数は32ビットおよび64ビットを含むことを特徴とするMcsemaに基づくRemillスタック汚染分析アプライアンス。
【請求項４】
前記予め設定されたポップ関連命令はpop命令、add命令、mov命令、leave命令、return命令のうちの１つまたは複数を含むことを特徴とする請求項３に記載のMcsemaに基づくRemillスタック汚染分析アプライアンス。
【請求項５】
Mcsemaに基づくRemillスタック汚染分析端末デバイスであって、
プロセッサと、メモリと、前記メモリに格納され、前記プロセッサによって実行されるように構成されたコンピュータプログラムとを備え、前記メモリは、前記プロセッサに結合され、前記プロセッサが前記コンピュータプログラムを実行する際に、請求項１、２のいずれか一項に記載のMcsemaに基づくRemillスタック汚染分析方法を実現することを特徴とするMcsemaに基づくRemillスタック汚染分析端末デバイス。
【請求項６】
コンピュータ可読記憶媒体であって、
コンピュータプログラムが記憶されており、
前記コンピュータプログラムは、その実行時に、前記コンピュータ可読記憶媒体が存在するアプライアンスを制御して、請求項１、２のいずれか一項に記載のMcsemaに基づくRemillスタック汚染分析方法を実行することを特徴とするコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ技術分野に関し、特に、Mcsemaに基づくRemillスタック汚染分析方法、アプライアンス、デバイス、および可読記憶媒体に関する。
【背景技術】
【０００２】
いくつかのオペレーティングシステムは、カーネルに対してデフォルトでAddress space layout randomizationを有効にし、ASLRと略称する。ASLRは、モジュールのロードベースアドレス、カーネルオブジェクトのアドレスなどをランダム化にし、バッファオーバフローに対するセキュリティ保護機能である。ヒープ、スタック、共有ライブラリマッピングなどの線形領域レイアウトをランダム化することにより、攻撃者が送信先アドレスを予測することを難しくすることで、攻撃者が攻撃コードの配置される位置を直接特定することを防ぎ、オーバフロー攻撃を阻止することを目的としている。研究によると、ASLRは、バッファオーバフロー攻撃の成功率を効果的に下げることができる。
【０００３】
その後、ASLRというセキュリティ特性はさらに強化された。
randomize_va_spaceを導入することにより、Low integrityのプログラムがモジュールベースアドレス、カーネルオブジェクトアドレスなどのキー情報を漏洩するおそれがある関数を呼び出すことを阻止する。しかしながら、integrityがmedium以下のプログラムに対しては、Linuxシステムでの呼び出しに失敗する可能性がある。研究から明らかなように、ASLRはコードセグメントやデータセグメントのランダム化を担当しておらず、該作業はPIEが担当しているが、ASLRをオンにした後にのみPIEが有効であることが分かった。理論的には、32ビットのシステムがASLRに提供できるエントロピーは64ビットシステムよりも少ない。しかしながら、メモリレイアウトに関連する要素のようなエントロピーの数にも影響を与える他の制約条件もある。一例を挙げると、スタックがメモリの高位アドレスからヒープ存在の低位アドレスへ継続的に増えることを可能にするために、スタックのアドレス最上位ビットはランダム化されないことが多い。あるシーンでは、32ビットシステムのmmap()のエントロピーを単に16ビットに制限し、PAX 外付けコネクターは、エントロピーを24ビットに向上させるために使用することができる。
【０００４】
ASLRを有効にするために、プロセスのメモリ空間のすべてのセグメントをランダム化される必要があることは明らかである。メモリ領域が1つだけ完全にランダム化されていなくてもASLRの目標に反して、攻撃者がそのランダム化されていないメモリ領域を利用して価値のあるgadgetsを特定し、一回の成功エクスプロイトを実現できるためである。WindowsによるASLRの実現機構では、この問題が何度も発生しているが、第三者のソフトウェア(多くの場合、Windowsソフトウェアである)にはASLRを有効にしていないDLLが含まれているため、これらのライブラリを介してボードとして一次エクスプロイトを構築することは容易になる。
【０００５】
一方、ASLRは、プロセスごとに強制的にオンされているが、すべての実行可能ファイルに対して、ランダム化されていないメモリ領域がまだ存在する。例えば、コードセグメント(またはテキストセグメント；.textとも呼ばれる)は、実行可能ファイルが位置独立実行可能ファイル(PIE)にコンパイルされた場合にのみランダムアドレスにマッピングされる。PIEにコンパイルされた実行可能ファイルは、修正することなく、メモリ内の任意の場所にマッピングすることができ、これは、絶対アドレスではなく相対アドレスを利用することによって実現される。すべての共有オブジェクト(.so,libraries)がPIEにコンパイルされることは、それらの作業に強制的に必要であるため、ASLRがオンになると、常にランダムなメモリアドレスにある。
【０００６】
以上の情報に基づき、Linuxシステムにおける実行可能ファイルがPIEにコンパイルされていなければ、ASLRクラスが2(完全ランダム化)に設定されていてもASLRによって効率的に保護されることができない。したがって、攻撃者はASLRをオンにしたシステム上で、1つの非PIE実行可能ファイルに対して、そのコードセグメントおよびOT/PLTテーブルなど他のメインセグメントに位置する領域をボードとして利用して、一回の成功エクスプロイトを構築することができる。その結果、いずれの非PIE実行可能ファイルもreturn-2-plt/GOTおよびリターン指向プログラミング(ROP)攻撃への突破口を開けたが、PIEにコンパイルしても指向性の命令レベルブースティング攻撃方法もある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】中国特許出願公開第105678168号明細書
【０００８】
本発明は、コンピュータ分野に関し、特にスタック異常に基づくshellcodeの検出方法および装置に関する。この方法は、指定された各API関数に基づいて対応するスタック・フレームの連鎖をそれぞれ生成し、各スタック・フレームの連鎖中の各スタックフレームをそれぞれ順次に検出することである。全ての異常なスタックフレームをスクリーニングする方法であって、1つのスタックフレームを検出する際に、前記1つのスタックフレームの要素指標が予め設定の条件に適合しているか否かを検出するステップと、予め設定条件を満たしていないと判定した場合には、前記1つのスタックフレームが異常であると判定するステップと、を含んだ。ここで、要素指標は、スタックフレームの長さ、スタックフレームEBPアドレス、およびスタックフレームリターンアドレスのうちの1つまたは任意の組み合わせを含んだ。このように、指定されたAPI関数に対応するスタック・フレームの連鎖のみを検出することにより、すべての関数を盲目的に検出することを避け、システム性能オーバヘッドを減少し、また、スタックフレームの要素指標に直接基づいて異常スタックフレームを抽出し、システムの検出性能を向上させ、誤報率を減少させる。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明が解決しようとする技術問題は、Mcsemaに基づくRemillスタック汚染分析方法、アプライアンス、デバイスおよび可読記憶媒体を提供することである。
【課題を解決するための手段】
【００１０】
上記の技術的問題を解決するために、本発明は、
マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得ることと、  復号から得られたレジスタ名をremill基本ブロックの変数名に対応させるために、マシンコードデコーダを用いて前記高位命令データ構造を復号することと、
予め設定されたポップ関連命令のSEM解釈を修正することと、
修正されたポップ関連命令の内容を再コンパイルして、スタック汚染プロセスを完了することとを含むMcsemaに基づくRemillスタック汚染分析方法を提供する。
【００１１】
さらに、前記予め設定されたポップ関連命令のSEM解釈を修正することは、具体的に
プログラム内容に対してビット数識別を行い、その認識結果に応じて前記ポップ関連命令に対して対応するSEM解釈修正を行い、ここで、前記プログラム内容のビット数は32ビットおよび64ビットを含んだ。
【００１２】
さらに、前記予め設定されたポップ関連命令はpop命令、add命令、mov命令、leave命令、return命令のうちの1つまたは複数を含んだ。
【００１３】
同じの技術的問題を解決するために、本発明は、
マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得る用マシンコードブースティングモジュールと、
復号から得られたレジスタ名をremill基本ブロックの変数名に対応させるために、マシンコードデコーダを用いて前記高位命令データ構造を復号する用命令復号モジュールと、
予め設定されたポップ関連命令のSEM解釈を修正する用命令修正モジュールと、
修正されたポップ関連命令の内容を再コンパイルして、スタック汚染プロセスを完了するスタック汚染モジュールとを含むMcsemaに基づくRemillスタック汚染分析アプライアンスをさらに提供する。
【００１４】
さらに、前記命令修正モジュールは、具体的にプログラム内容に対してビット数識別用ものであり、その認識結果に応じて前記ポップ関連命令に対して対応するSEM解釈修正を行い、ここで、前記プログラム内容のビット数は32ビットおよび64ビットを含んだ。
【００１５】
さらに、前記予め設定されたポップ関連命令はpop命令、add命令、mov命令、leave命令、return命令のうちの1つまたは複数を含んだ。
【００１６】
同じの技術的問題を解決するために、本発明は、
プロセッサと、メモリと、前記メモリに格納され、前記プロセッサによって実行されるように構成されたコンピュータプログラムとを備え、前記メモリは、前記プロセッサに結合され、前記プロセッサが前記コンピュータプログラムを実行する際に、いずれか一項に記載のMcsemaに基づくRemillスタック汚染分析方法を実現するMcsemaに基づくRemillスタック汚染分析端末デバイスをさらに提供する。
【００１７】
同じの技術的問題を解決するために、本発明は、また、前記コンピュータプログラムの実行時に、前記コンピュータ可読記憶媒体が存在するアプライアンスを制御して、いずれか一項に記載のMcsemaに基づくRemillスタック汚染分析方法を実行するコンピュータプログラムが記憶されたコンピュータ可読記憶媒体をさらに提供する。
【発明の効果】
【００１８】
本発明は、従来技術に比べて、以下の有益な効果を有する。
本発明は、マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得、復号から得られたレジスタ名をremill基本ブロックの変数名に対応させるために、マシンコードデコーダを用いて前記高位命令データ構造を復号し、予め設定されたポップ関連命令のSEM解釈を修正し、修正されたポップ関連命令の内容を再コンパイルして、スタック汚染プロセスを完了することを含むMcsemaに基づくRemillスタック汚染分析方法、アプライアンス、デバイスおよび可読記憶媒体を提供する。本発明は、ポップ関連命令のSEM解釈をブースティング過程にて修正することにより、従来技術におけるバイナリプログラムの複数のコールスタックに関する制約条件を突破し、さらに、所要スタック空間オブジェクトに対して知能化、ロスレス化のスタック汚染分析を実現することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施の形態におけるMcsemaに基づくRemillスタック汚染分析方法のフローチャートである。
【図２】本発明の実施の形態における汚染所要スタック空間オブジェクトの方法設計理念の概略図である。
【図３】本発明の実施の形態におけるブースティング過程にて命令復号化の流れを示す模式図である。
【図４】本発明の実施の形態における復号化および分析ステップの流れを示す模式図である。
【図５】本発明の実施の形態におけるプログラム基本ブロックデータ構造の概略図である。
【図６】本発明の実施の形態におけるMcsemaに基づくRemillスタック汚染分析アプライアンスの構造概略図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照しながら本発明の実施形態に係る技術的手段をより完全、詳しく説明する。明らかに、ここに記載された実施形態は、本発明の一部の実施形態に過ぎず、全ての実施形態ではない。本発明の実施形態を基に、当業者が創造的な労働を行わない前提で得た全ての他の実施形態は、いずれも本発明の保護範囲内に含まれる。
【００２１】
なお、図２はウイルス化或いは汚染に所要のスタック空間オブジェクト方法の設計理念のよく見られる考え方である。ネットワークの攻撃・保護には、ARPおよびDNSキャッシュのウイルス投入もある。Mcsema-liftツールの実行中に、２つのスタックが生成され、１つは実行スタック、もう１つはモックスタックである。スタックの重要な役割の１つは、関数の呼び出しおよびリターンアドレスの探しであるため、この論理を破壊することはできないが、汚染が元のリターンアドレスの位置をカバーすることが要求される。本発明では、ポップを実行する時に、命令pop esp,leave,add esp…、mov esp…のSEM解釈を修正する考え方を採用している。
【００２２】
図１を参照し、本発明のMcsemaに基づくRemillスタック汚染分析方法の一具体例の実施形態について述べる。
S1、マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得るステップ
本発明の実施形態では、ステップS1は、マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得たことである。なお、“スタック汚染”の前提条件は、ROP利用緩和策が宣言されたことであり、ブースティングされたbitcode(すなわち、モックスタック中の中間コード)がモックされたリターンアドレスを無視し、自体の実行スタックに格納されているリターンアドレスを“信頼”するためである。また、ブースティングされbitcodeもモックスタック上のアロケーション変数をモックした。図３に示すように、このブースティング過程における最初のステップは、最初に原始命令バイトを利用し、それらをより高位レベルの命令データ構造に変換するという命令のバイトを復号することである。このデータ構造はマシンコード命令の論理オペランドを表示する。これらのオペランドは、語義関数に伝えたパラメータと１対１で対応する(いずれのパラメータも無視しない)。図４は、復号および分析ステップの流れを示す模式図である。
なお、SEM解釈とはMcsemaにおいて命令に対応する語義関数テンプレートである。
図５を参照し、一例として“MOV_GPRv_IMMv_32”のように、Mov語義関数のSEM解釈定義であり、汎用レジスタとイミディエートオペランドとの間に何らかの動作関係が発生したことをこのフォーマットに基づいて記録され、ここで、write_opは、32ビットレジスタEAXを書き込むことような書き込み箇所であり、read_opは、イミディエートオペランド0x1を読み出すことのような読み出し箇所である。
【００２３】
S2、復号から得られたレジスタ名をremill基本ブロックの変数名に対応させるために、マシンコードデコーダを用いて前記高位命令データ構造を復号するステップ
なお、本発明の実施形態では、図５に示すような基本ブロックでは、デコーダはこのeaxがレジスタであることを理解する。驚くべきことに、Remillのブースタはeaxに対してあまり概念がない(すなわち、プログラマが“伝える”ブースタを定義する必要がある)。RemillライブラリのMcsema-liftツールは、任意のマシンコードをLLVM bitcode(bitcodeはLLVMによって導入された中間コード(Intermediate Representation、IRと略す)に変換することを目的とし、ソースコードがバイナリマシンコードにコンパイルされる過程における中間表現形態であり、ソースコードでもマシンコードでもない。コード組織構造から見ると、マシンコードに近いが、関数や命令レベルでは高水準言語の特性が多く用いられている。そのため、ある“汎用言語”が必要であり、すなわち、アーキテクチャ中立のLLVM側である--これは“特定のアーキテクチャの語義関数”と“機械命令デコーダ”の両方が協調変換の過程に利用できるものである。そのような汎用言語は__remill_basic_block(remill基本ブロック)関数中の変数名である。命令デコーダは、復号されたレジスタ名が__remill_basic_blockに定義された変数(すなわち、rdxが&RDXに対応する)に対応することを保証する。復号された命令データ構造からLLVMbitcodeへの変換過程において、このような対応関係が常に存在すると仮定しているため、この段階での機器命令の復号を開始することができる。
【００２４】
S3、予め設定されたポップ関連命令のSEM解釈を修正するステップ
さらに、ステップS3は具体的には、
プログラム内容に対してビット数識別を行い、その認識結果に応じて前記ポップ関連命令に対して対応するSEM解釈修正を行い、ここで、前記プログラム内容のビット数は32ビットおよび64ビットを含んだ。
【００２５】
さらに、前記予め設定されたポップ関連命令はpop命令、add命令、mov命令、leave命令、return命令のうちの1つまたは複数を含んだ。
【００２６】
本発明の実施形態では、“スタック開放空間から関数呼び出し完了まで正常に戻る”というプロセス全体に影響を与えないように、pop esp、leave、add esp…、mov esp…、retという５つの命令のSEM解釈を修正することにより“スタック汚染分析”の効果を実現する。これらの命令は、ポップする際に必要ないくつかの動作であり、異なるプログラムにてそのうちの１つまたは２つが利用される可能性があることを理解されたい。
具体的には、
Pop命令について：pop ebp命令の方式、popの命令本来の操作は、現在のスタック・トップの値を目的レジスタに与え、その中でのebpレジスタに書き込み動作の位置を解析し、その後にカスタマイズされた翻訳内容を挿入することができる。
add命令について：add ebp,0xN命令の方式、addの命令は、レジスタの値をイミディエートオペランドに加算し、その後、この和を元のレジスタに入れ、ebpレジスタへの書き込み動作が存在し、その後にカスタマイズされた解釈内容を挿入することができる。
mov命令について：mov esp,ebp命令の方式、mov命令は、右オペランドレジスタの内容をオペランドレジスタに移行し、espレジスタへの書き込み動作過程が存在するが、ここでは、mov命令にカスタマイズされた翻訳を追加するだけではなく、操作レジスタespに対して判断を行う必要がある。その理由は、バイナリプログラム中に幾千幾万個のmov命令があり、mov全体に対してカスタマイズされた解釈内容を追加することは明らかに好ましくないためである。ここで、本手法では、レジスタの前後の値を選別する方法を採用し、ブースティングされる前に１回の値をとり、ブースティング操作終了後に得られた値がこの前の値と異なる場合、espレジスタの内容が変更されていることを示し、esp操作の発生が証明できる。
leave命令について：leave；ret命令の方式、leave命令の効果はmov esp,ebp；pop ebpに等しいため、この原理は上記のmovとpopと同様にレジスタへの書き込み操作命令を行った後にカスタマイズされた解釈内容を加える。
return命令について：return命令の方式、return命令の効果はpop eip；jump、に等しいため、この原理はpopと同様にeipに対して書き込み操作を行った後にカスタマイズされた解釈内容を加える。
なお、上記の命令分析方法は、いずれも32ビットと64ビットの違いを判断する必要がある。32ビットプログラムは4バイト記憶、64ビットは8バイト記憶である。本手法は、メモリ容量表示関数sizeofを用いて１つの設定されたフラグビットを測定することで行い、フルバイト分析が必要な場合には、ビット数の差を判別し、かつ、0xdeadbeefまたは0xdeadbeefdeadbeefを選択する必要がある。Sizeofオペレータはそのオペランドのメモリサイズをバイト形式で与えていることが理解できる。オペランドは、１つの式または括弧内に囲まれたタイプ名であってもよい。オペランドのメモリサイズはオペランドのタイプによって決定されるため、あるフラグビットのメモリサイズを検出することで、どのタイプのプログラムであるかを判断する。Sizeofを利用した理由は、その検出の簡便さ、１つのメモリステップサイズの大きさでプログラムのタイプを識別することができ、複雑なアルゴリズムまたは内容判断が不要になる。
【００２７】
S4、SEM解釈が修正されたポップ関連命令の内容を再コンパイルして、スタック汚染分析プロセスを完了するステップ
本発明の実施形態では、Mcsema-liftツールをSEMにおいて、異なる命令特性に応じて追加されたスタック空間に0xdeadbeef充填に関するコンテンツを“スタック汚染効果を有する”ツールに再コンパイルさせる。ここで、SEMでは異なる命令特性に応じて追加されたスタック空間に0xdeadbeef充填に関するコンテンツは、特定のレジスタ認識、ステップサイズを指定する循環汚染などがあることを含んだ。
【００２８】
なお、Mcsemaは、POP命令に対してレジスタに書き込むか読み出すかを確定するだけで、操作対象および演算子を再決定することができ、最後にプログラムのタイプに応じてオペランド内容を指定して、対応する位置にフォーマットによって書き込むことで、スタックに我々の特殊な内容0xdeadbeefを書き込むことができる豊富な書き込み方法を提供している。したがって、本発明の方法は、ネイティブのMcsema書き込み方法を使用することで、我々の操作の複雑さを大幅に簡略化し、多くのタイプを補強強調し、タイプのエラーによるいくつかのセキュリティ問題を回避することができる。
【００２９】
本発明の実施形態では、1つの好ましい実施態様として、ADD命令に対するテスト過程中に、幾千幾万個add命令からポップ時刻のADD命令を一意に識別するために、我々は、研究対象をレジスタに移行し、操作前にレジスタXSP(スタックポインタ)の値(Oldとして格納される)を一回読み出し、その後、add命令をRemillによりブースティングさせた後、再びレジスタXSP値を一回読み出し、この前のOldと比較する。明らかに、比較が等しい場合には、このADD命令は我々が関心を持ちたいものではないことを示し、これに対し、XSPレジスタにコンテンツ上の変動が発生していることを示しているので、このADD命令はポップに関する命令であると考えることができる。
本発明の実施形態では、1つの好ましい実施態様として、関数呼び出しの複雑さの上昇および再帰的関数の頻繁な呼び出すほど、パラメータまたはデータの規模が段階的に上昇し、この場合では、すでに数行のコードで解決できる問題ではなくなる。スタックはプログラムのビット数に応じてステップサイズを決定するメモリデータ構造であるため、循環的方法によりこの問題を解決することを選択した。
【００３０】
なお、本発明はMcsemaに基づくRemillライブラリツールにより現段階のバイナリプログラムにおける複数のコールスタックに関する制約条件を突破し、知能化、ロスレス化の命令レベルスタック空間分析(“スタック汚染分析”)方法を設計された。詳細説明は、以下のとおりである。
【００３１】
実行可能権限とメモリレイアウトランダム化の２つのスタック空間制約条件を無視または低減できるようにする技術ために、スタックを命令レベル層で直接ブースティングすること(スタック命令の語義解釈を修正すること、Mcsema-liftツールによって命令をLLVM中間言語にブースティングすることを含む)、およびポップ過程において所望のデータをカスタマイズ可能にスタックに入力することにより、他の利用可能な関数アドレスを探す悩みや、保護機構を迂回するのにかかるより多くの時間オーバーヘッドを避けることができる(我々のテスト結果によれば、制御プログラム一致の場合、80%の時間を節約することができることが分かった)。
１．Mcsema-liftツールのブースティングの過程におけるモックスタック(実数スタックの操作と一致し、最後にデータを実数スタックに転送する)の語義解釈定義の制御可能な性質を修正することで“バッファオーバーフローホールの利用”、“バッファ入力可能長さ固定”、“プログラムに相互入力関数無し可能”などの制限条件を達成した。
２．解析チェーンを丹念に構築する必要があることで知られたROP技術の操作の難しさは、スタック空間を解析するすべての手法のうちで最も難しく、また、オーバフロー長さが不十分な場合には、スタック遷移などの操作も考慮しなければならない。スタック空間分析の過程を簡略化、洗練化するために、“スタック汚染分析”技術は、命令レベル層からスタック空間に関するオペランド情報を取得し、スタック空間サイズの知能化検出を実現する手段である。
３．既存の操作命令の正常操作語義解釈を修正せず、研究所要(例えば、説明を簡単にするために、本出願では、パディングバイナリ特殊定義バイト0xdeadbeefを使用する)の語義解釈内容を増加させることで、制御変数法を用いてプログラム制御フローおよびデータストリームを基本的に不変に維持することができるロスレス化分析手段である。
【００３２】
本発明は、従来技術に比べて、以下の有益な効果を有する。
32ビットおよび64ビットバイナリプログラムに対する正確なポップ時刻分析効果を実現することができる。本発明の方法によれば、Linuxシステムにおける32ビットおよび64ビットプログラムの汎用的なスタック汚染分析方法を実現することができ、リターンアドレスの正常な作用に影響を与えることなく、かつ、一定の独創性を有する。また、プログラムのビット数を自動的に識別することで、異なる充填汚染方式を分析することができるとともに、精度が100%に達することができる。
１．命令レベルにてやりたい具体的なカスタマイズされた翻訳操作を任意に書き込むことができる。Remillライブラリに基づくマシンコードおよびその命令レベル翻訳のブースティング段階におけるカスタム書き換え技術後置を後置ということは、ユーザの視点から見ると、相対的にリーズナブルで、ハードルが低く、C言語で書かれ、レジスタの判断に結合するおよびレジスタの内容を格納すると、いくつかの通常の汚染分析操作を行うことができる。
２．命令レベルの挿入および特殊なHook効果を実現することができる。バイナリプログラムコード自体の論理を変更することなく、一連のスタックへの汚染分析操作を完了し、かつ、汚染分析だけでなく、スタイルが多く指令レベルのHookと挿入を完成することができ、実現コストが低く、効率が高く、後続の拡張性が高いことを説明した。
３．循環分析、長さ制御可能、内容制御可能を実現することができ、スタックセキュリティホールの分析に良好な研究環境を提供した。
４．規定レジスタを識別することで具体的な操作を実現し、汚染分析を盲目的に行わず、精度が100%に近くなった。
なお、本発明は、プログラムがASLRおよびPIE保護をオンにした上で、スタック汚染の研究分析方法を提供し、他の方法は、この点であまり及ばない。潜在意識では、この２つの保護がスタックセキュリティホールの大部分を実質的に緩和していると感じているからである。さらに、マシンコードおよび命令レベルのブースティング翻訳後部分段階において、ユーザがカスタマイズしてスタック空間のパディング内容を書き換えることができ、アドレスランダム化を迂回するというROP技術よりも多くの時間を節約することができる。同時に、本発明を実施することは、プログラムコード自体の論理を変更することなく、ポップする際に鍵役割を果たす命令SEM解釈層から着手し、コンピュータに正常な命令として認識させる。
【００３３】
説明を簡単化にするために、上述した方法または実施例フローが、一連の行為として示され述べられるが、一部の行為が、1つまたは複数の態様に従って、異なる順序で、かつ／または、本明細書で示し述べる行為以外の行為と同時に起こり得るため、方法または実施例フローが行為の順序によって制限されないことは理解し認識することができる。本明細書に記載の実施形態は例示的なものに過ぎず、限定的なものではなく、また実施形態の中で説明されている特徴の組合せの全てが発明の解決手段に必須であるとは限らない。
【００３４】
図６を参照し、同じ技術的問題を解決するために、本発明は、マシンコードおよびその命令レベルをブースティングさせて高位命令データ構造を得るマシンコードブースティングモジュール１と、
復号から得られたレジスタ名をremill基本ブロックの変数名に対応させるために、マシンコードデコーダを用いて前記高位命令データ構造を復号する命令復号モジュール２と、  予め設定されたポップ関連命令のSEM解釈を修正する命令修正モジュール３と、
SEM解釈が修正されたポップ関連命令の内容を再コンパイルして、スタック汚染分析プロセスを完了する再コンパイルモジュール４とを含むMcsemaに基づくRemillスタック汚染分析アプライアンスをさらに提供する。
【００３５】
さらに、前記命令修正モジュール3は、具体的にプログラム内容に対してビット数識別用ものであり、その認識結果に応じて前記ポップ関連命令に対して対応するSEM解釈修正を行う。ここで、前記プログラム内容のビット数は32ビットおよび64ビットを含んだ。
【００３６】
さらに、前記予め設定されたポップ関連命令はpop命令、add命令、mov命令、leave命令、return命令のうちの1つまたは複数を含んだ。
【００３７】
上述したアプライアンス項の実施形態は、本発明の方法項の実施形態に対応したものであり、本発明の実施形態が提供するMcsemaに基づくRemillスタック汚染分析アプライアンスは、本発明のいずれか方法項の実施形態によって提供されるMcsemaに基づくRemillスタック汚染分析方法を実現することができることを理解されたい。
【００３８】
同じの技術的問題を解決するために、本発明は、プロセッサと、メモリと、前記メモリに格納され、前記プロセッサによって実行されるように構成されたコンピュータプログラムとを備え、前記メモリは、前記プロセッサに結合され、前記プロセッサが前記コンピュータプログラムを実行する際に、いずれか一項に記載のMcsemaに基づくRemillスタック汚染分析方法を実現するMcsemaに基づくRemillスタック汚染分析端末デバイスをさらに提供する。
【００３９】
前記Mcsemaに基づくRemillスタック汚染分析端末デバイスは、デスクトップ・コンピュータ、ノートパソコン、パームトップパソコン、およびクラウドサーバなどの計算装置であってもよい。前記プロセッサは、中央処理装置(CentralProcessing Unit、CPU)であってもよいし、他の汎用プロセッサ、デジタル信号プロセッサ(Digital SignalProcessor、DSP)、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field-Programmable Gate Array、FPGA)、またはプログラマブル論理デバイス、ディスクリートまたはトランジスタ論理、ディスクリートハードウェア部品などであってもよい。汎用プロセッサは、マイクロプロセッサであってもよいし、または任意の従来のプロセッサなどであってもよい。前記プロセッサは、前記Mcsemaに基づくRemillスタック汚染分析端末デバイスの制御センタであり、Mcsemaに基づくRemillスタック汚染分析端末デバイスの様々な部分を様々なインターフェースおよび回線により接続されている。
前記メモリは、主にプログラム記憶領域およびデータ記憶領域を含むことができ、ここで、プログラム記憶領域は、オペレーティングシステム、少なくとも1つの機能所要アプリケーションなどを記憶することができる。データ記憶領域は、携帯電話の使用に基づいて作成されたデータなどを記憶することができる。さらに、メモリは、高速ランダムアクセスメモリを含むことができ、ハードディスク、メモリ、 外付けコネクターハードディスク、スマート メディア カード(Smart Media Card、SMC)、セキュリティデジタル(Secure Digital)カード、フラッシュカード(Flash Card)、少なくとも1つのディスク記憶装置、フラッシュメモリデバイスなどの不揮発性メモリ、または他の揮発性固体記憶装置を含むことができる。
【００４０】
同じの技術的問題を解決するために、本発明は、前記コンピュータプログラムの実行時に、前記コンピュータ可読記憶媒体が存在する装置を制御して、いずれか一項に記載のMcsemaに基づくRemillスタック汚染分析方法を実行するコンピュータプログラムが記憶されたコンピュータ可読記憶媒体をさらに提供する。
【００４１】
前記コンピュータプログラムは、プロセッサによって実行されるときに、上述した様々な方法の実施形態のステップを実現することができるコンピュータ可読記憶媒体に記憶することができる。ここで、前記コンピュータプログラムは、コンピュータプログラムコードを備え、前記コンピュータプログラムコードは、ソースコード、オブジェクトコード、実行可能ファイル、またはいくつかの中間形などであってもよい。
前記コンピュータ可読媒体は、コンピュータプログラムコードを携帯できる任意のエンティティまたはデバイス、記録媒体、USBメモリ、ポータブルハードディスク、磁気ディスク、光ディスク、コンピュータメモリ、読み取り専用メモリ(ROM、Read-Only Memory)、ランダムアクセスメモリ(RAM、Random Access Memory)、電気搬送信号、電気通信信号およびソフトウェア配信媒体などを含むことができる。前記コンピュータ可読媒体に含まれる内容は、例えば、いくつかの司法管轄区域において、立法および特許実施に基づいて、コンピュータ可読媒体は、電気搬送信号および電気通信信号を含まないように、司法管轄区域内の立法および特許実践の要件に応じて適切に増減することができることに留意されたい。
【００４２】
なお、上述したアプライアンスの実施形態は、単に例示的なものに過ぎない。前記分離部として示されるユニットが物理的に分離されてもよいし、非物理的に分離されてもよいし、ユニット表示部として部分が物理的ユニットであってもよいし、非物理的ユニットであってもよい、すなわち、1つの場所に配置されてもよいし、複数のネットワーク要素の上に分散されてもよい。実際の必要に応じて、ここでのモジュールの一部または全部を選択することで本実施形態の目的を実現することができる。さらに、本発明が提供するアプライアンスの実施形態の添付図において、モジュール間の接続関係は、それらの間に通信接続を有することを示し、具体的には、1つまたは複数の通信バスまたは信号線として実現することができる。当業者は、創造的な労働をせずに実施することができることは理解されるであろう。
【００４３】
上記実施例は、本発明の好ましい実施例であるが、本発明の実施例は、上記実施例により制限されず、本発明の趣旨及び原理を逸脱することなく行われる他の変更、修正、置換、組み合わせや簡略化は、すべて均等な置換方式であり、いずれも本発明の特許範囲に含まれる。
【図１】
0006941897.tif 000002
【図２】
0006941897.tif 000003
【図３】
0006941897.tif 000004
【図４】
0006941897.tif 000005
【図５】
0006941897.tif 000006
【図６】
0006941897.tif 000007