バイナリコードの類似性検出


タイトル:バイナリコード類似性検出
日:2021年1月25日

二进制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二进制)来分析应用程序的控制结构和运行方式,有助于信息安全从业人员更好地分析各种漏洞、病毒以及恶意软件,从而找到相应的解决方案。
  • バイナリプログラム機能の認識は、ソフトウェアの脆弱性の分析と修復、さらにはマルウェアの検出、プロトコルの逆転などに不可欠なバイナリ分析の基礎です。バイナリコードは高級言語プログラムの情報が不足しているため、関数を認識するのが難しいことがよくあります。既存の逆アセンブリ分析ツールには、認識精度が低いという欠点があります。

  • バイナリコードの類似性の概念は、ソフトウェア分析テクノロジに由来しており、標準的で信頼できる定義はありません。一般に、コードの一部が別のコードからコピーされたり、特定のルールによって変換されたりした場合、それは類似していると見なされます。

  • バイナリコードの類似性の研究対象は、ソースコードとバイナリコードに分けられます。

  • バイナリコードの類似性は、同じまたは類似のソースコードからコンパイルされた異なるバイナリコードが類似していることを意味します。
    ここに画像の説明を挿入

  • バイナリコードの類似性の検出は通常、コードに適用されますが、予測(つまり、既存のコードに基づいて可能なコードの変更と更新を予測し、コードテンプレートが推奨されます)、知的財産の保護(つまり、不正なコードの再利用で見つかったコード)に限定されません。また、クローニング、ソフトウェア所有者が知的財産権を保護したり、潜在的な侵害を回避したりするのを支援します)、脆弱性検索(脆弱なコード検索、ソフトウェア脆弱性の追跡や場所など)。

  • バイナリコードの類似性は、補助的な分析手法としてよく使用されます。コードの品質とコード分析の効率の向上に顕著な効果があるため、近年、学術界の研究のホットスポットになりつつあります。

以下に、バイナリコードの類似性検出テクノロジの分類を簡単に紹介します。

1.テキストベースの検出

  • テキストベースの検出技術は、最も長い歴史と最も単純な実装を持っており、それらのいくつかは、バイナリコードの単純な前処理のみを行います。たとえば、あるタイプのメソッドでは、最初にファジー一般レジスタ名とメモリアドレスを取得してから、命令のオペコードとオペランドを抽出するか、文字列を抽出して識別子シーケンスを生成し、最後にサブシーケンスマッチングを使用して異なるコードが類似しているかどうかを判断します。 。このタイプの方法はさらに可能です。識別子ベースの検出として要約されます。たとえば、有名な静的逆コンパイラIDAProのプラグインに一致するバイナリプログラムとしてのKartaは、最初に一意の数値定数と文字列識別子を使用してライブラリのアンカー関数を設定し、次にバイナリ内のアンカー関数を見つけて検索を絞り込みます。 file最後に、識別子は、静的にコンパイルされたオープンソースライブラリの正確なバージョンをさらに決定し、関数シンボルを照合するために使用されます。また、関数呼び出しリストを使用して、このステップで同様の関数のグループを照合することもできます。DarunGrim2は、指紋ハッシュマッチングに基づくバイナリファイル比較ツールであり、アセンブリコードのオペランドを無視し、プログラムの基本ブロックの命令シーケンスのハッシュ値を同様の機能として使用します。さらに、補助手段としてのプログラム内のシンボル名。バイナリコードを逆アセンブルせず、プログラムのバイナリバイトストリームが類似しているかどうかを直接比較する方法もあります。このタイプの方法は、バイトストリームベースの検出としてさらに要約できます。今日人気のあるニューラルネットワーク技術を使用するαDiffと呼ばれる検出方法は、2次元畳み込みニューラルネットワーク(Convolutional Neural Network、CNN)を使用して、プログラムのバイナリバイトを埋め込みます(埋め込みはプロセスを参照できます)。ニューラルネットワークは、他の形式の入力をベクトル形式の出力に変換します。また、ニューラルネットワークの出力、つまり高次元ベクトルを参照し、関数アクセスと呼び出しの統計的特性を統合することもできます。特徴ベクトルを構築するためのテーブル。プログラム間の距離は、プログラム間の類似性を測定します。この方法は良好な検出結果を達成していますが、この記事では、バイナリコードを線形バイトストリームとして扱うため、本質的にテキストベースの検出であると考えています。

  • テキストベースの検出では、プログラムの構文やセマンティクスなどの情報が考慮されないため、その原理と実装は他のテクノロジよりも単純であり、時間とスペースの複雑さも低くなります。このタイプの技術は、主に複雑な難読化方法を使用せずにコードの複製と再利用を目的としています。このタイプの検出方法は、対立検出を実装しやすいため、効率的な補助検出方法としてよく使用されます。

ここに画像の説明を挿入

2.属性測定に基づく検出

  • 属性測定に基づく検出技術は、プログラムアセンブリコード内の測定可能な属性と特徴に焦点を当て、属性と特徴の測定値を抽出して多次元ベクトルを形成します(このタイプの技術は、特徴ベクトルが異なる次元からコードセグメントを識別します。2つの間の距離は、コードセグメント間の類似性を測定するためのおおよそのものです。この種の方法では、最小検出粒度(基本ブロックや関数など)を決定し、最小粒度範囲内の属性と特徴をカウントして測定値を取得する必要があります。メトリック値は、特定の定数および命令の識別、関数の入力および出力などのオブジェクトの数である場合がありますが、これらに限定されません。たとえば、discovREシステムは、アーキテクチャ間の統計的特性に基づいて、類似した関数の検索範囲を狭めます。このメソッドは、最初に手動でスクリーニングされる特徴を介して関数の単純な特徴ベクトルを構築します(これらの特徴には、算術命令、関数呼び出し、リダイレクト、転送命令、ローカル変数、基本ブロック、インポートされた関数、すべての命令とパラメーター、およびその他のオブジェクトが含まれます。 )、kNN(k-Nearest Neighbors)アルゴリズムを使用して関数の類似距離を計算し、類似する可能性のある関数の事前スクリーニングを実現し、関数制御に基づく最大サブグラフ同形マッチング法のその後の計算を減らします。フローグラフ(コントロールフローグラフ、CFG)の量。BinDiffは、アセンブリコードの相違点と類似点をすばやく見つけるのに役立つバイナリファイル比較ツールです。BinDiffは、グラフィックスとフィンガープリント理論に基づいて開発されたIDAProプラグインです。その機能マッチングは、主にCFGから取得したNEC値、つまり基本ブロック(ノード)の数、エッジ(エッジ)の数、および呼び出しの数(呼び出し)。
  • 属性測定に基づく検出方法は、プログラムの論理構造を考慮していないため、統計的特徴は簡単に実装できますが、抽出する情報は非常に限られているため、補助的な方法としてよく使用されます。主な問題は、属性機能が人為的に設計および選択されていることです。各属性が異なる次元にあることを確認するのは困難です。異なる属性間でフィッティングの問題がある可能性があります。したがって、属性機能のタイプを盲目的に増やすと、効果的に失敗するだけではありません。検出を改善する精度は計算のオーバーヘッドを増加させます。

ここに画像の説明を挿入

3.プログラムロジックに基づく検出

  • リスト、ツリー、グラフィックスなどのデータ構造を使用して、プログラムのデータフローまたは制御フロー情報を記録および描写する、プログラムロジックに基づく検出テクノロジ(このタイプのテクノロジは、取得された中間表現が特定の文法的および意味的表現をキャプチャできると考えています。プログラム内の情報)、類似のシーケンス、ノードまたはエッジ、共通のサブツリーまたはサブグラフを照合することにより、類似のロジックまたは関数を持つプログラムの基本ブロックまたは関数を見つけることができます。
  • プログラムのデータロジックは、関数内のデータのフローと操作として具体化され、関数外の関数の入力と出力として具体化されます。たとえば、Multi-MHシステムは、基本ブロックの入力および出力動作を使用してそのセマンティクスを把握し、アーキテクチャ全体の署名を使用して、同様の動作を持つ脆弱なコードを見つけます。二分探索エンジンであるビンゴは、記号式から生成された入力サンプルと出力サンプルを使用して、意味的に類似した関数を照合します。
  • プログラムの制御ロジックは、関数間の関数呼び出しシーケンスで記述でき、CFGは関数内の記述に使用でき、ロジックツリーは基本ブロックレベルに使用できます。たとえば、ツールHAWKは、システムコール依存グラフ(SCDG)の誕生マークに基づく動的検出方法を実装します。Pewnyらによって提案されたTEDEM方法は、式ツリーの編集距離を使用して、基本ブロックレベルの類似性を測定します。 discovRE Geniusは、属性最適化CFGに基づくよく知られたバイナリ類似性検出システムであり、最適化されたグラフマッチングアルゴリズムを使用します。CFGに基づくEsh、BinHunt、iBinHuntなどのツールは、シンボリック実行を使用して基本ブロックまたは類似性を決定します。機能の。CFGは、プログラムの制御フロー情報を効果的に取得して表示できます。これは非常に抽象的なプログラムコードです。中間表現として、ソースコードとアセンブリコードの両方を表すために使用できます。ただし、その言語間の特性により、コードは依然としてバイナリコード類似性検出テクノロジであり、それらのほとんどは、中間表現としてCFG、特にクロスアーキテクチャバイナリコード検出に大きく依存しています。
  • プログラムロジックに基づく検出方法の利点は、高精度、さまざまなタスクに応じてさまざまなマッチングアルゴリズムと戦略を採用できること、および強力なスケーラビリティです。その欠点は、時間的および空間的な複雑さが高いことです。一方で、データストリームとCFG抽出プロセスは非常にコストがかかります。他方、類似性の尺度が依存するグラフマッチングアルゴリズムの時間の複雑さには、多項式解がありません。グラフマッチングアルゴリズムはほとんど2つです。2マッチングアルゴリズムは、したがって、大規模なクエリタスクに直面する場合、計算量はコードベースのサイズとともに指数関数的に増加します。
  • 上記の困難は、研究者がこの方向に突破口を開くことを妨げていません。この問題を解決するための1つのアプローチは、CFGの中間表現から始め、他の補助検出手法を使用してCFGの軽量で簡単に測定可能な属性を導入し、それによってCFGノードを単純化することです。たとえば、discovREは軽量の統計機能を使用して候補関数をフィルタリングし、グラフマッチングアルゴリズムのタスクを削減します。もう1つの方法は、グラフマッチングアルゴリズムから始めて、近似グラフマッチングアルゴリズムを使用して検出効率を向上させ、精度と速度をトレードオフすることですが、この方法はグラフマッチングアルゴリズムの効率と検出効率には限界があります。近年、研究者は、従来のグラフマッチングアルゴリズムが直面する効率のボトルネックを解決するために、分野を超えてこの分野にニューラルネットワーク技術を適用し始めています。最も代表的なものは、Qianらによって提案されたGeniusシステムです。このシステムは、機械学習のスペクトルクラスタリングアルゴリズムを使用して、関数のCFGを分類し、コードブックを生成してから、コードブックをエンコードし、同様の関数を組み合わせます。特徴エンコーディングの探索問題に変換されます。これにより、効率が大幅に向上し、結果の精度が考慮されます。これまでのところ、バイナリコードの類似性検出技術は、再びブレークスルーを達成し、新しい開発の方向性を切り開いてきました。関連する研究は、コード内のより高度でより複雑なセマンティック情報にますます焦点を合わせています。

ここに画像の説明を挿入

4.セマンティックベースの検出

  • 上記の方法は、主に中間表現の内容(伝達情報)とその形式(格納されたデータ構造)を組み合わせたものであり、意味検出にはグラフィック構造に基づく類似性検出技術が含まれています。この分類方法は、主にソースコードの類似性検出技術で使用されます。バイナリコードの類似性検出技術の分類には参照の重要性がありますが、この記事では、この方法では、バイナリコードの類似性検出の分野における最新の成果を十分にカバーできないと考えています。近年、この分野の開発動向を明確に反映することもできません。この記事で要約する理由は次のとおりです。(1)高レベルのデータ構造(ツリーやグラフの構造など)には、高レベルのプログラム情報を記述するための固有の利点がありますが、高レベルのデータ構造は分解できるため、2つを同一視することはできません。または、低レベルのデータ構造(リストや高次元ベクトルなど)に変換され、プログラムのセマンティクスやその他の高レベルの情報も低レベルのデータ構造で記述できます。(2)「セマンティクス」の概念は自然に由来します。アセンブリ言語の命令を「単語」と見なすと、基本ブロックは「文」と見なされ、バイナリコードの「字句」と「文法」の対応する概念が取得されます。関数は完全です。 「セマンティクス」ですが、CFGには主にプログラムの制御フロー情報が含まれており、関数にのみ含まれています。セマンティック情報の強化の一部。(3)マシン変換またはディープニューラルネットワークに基づくプログラムセマンティック類似性検出技術。近年登場したのは、関数の意味情報に直接焦点を当てた検出技術ですが、中間表現としてCFGを使用しているものもありますが、従来のCFGベースの検出方法と比較すると、本質的な違いがあります。新しい方法の検出速度は、従来の方法よりも数桁高速です。一部の方法では、前述の3つの基本的な検出手法を完全に放棄しています。
  • この記事で言及されているセマンティックベースの検出テクノロジは、プログラムアセンブリコードでセマンティック情報をキャプチャし、関数またはコンポーネントのセマンティックの違いを比較することにより、類似性の測定を実現します。このタイプの方法は通常、自然言語処理(NLP)、画像認識、またはその他の技術分野を利用し、ディープニューラルネットワークを使用してプログラムのセマンティック埋め込みを実現し、埋め込みベクトルまたはクエリ操作処理を比較することで大規模なタスクを実現します。バイナリコードの中間表現には、標準化されたアセンブリテキスト、他の中間言語、またはCFGが含まれます。ニューラルネットワークモデルは主にシャムアーキテクチャを使用し、プログラムコードの大規模な機能構築を使用してサンプルライブラリをトレーニングします。関連分野の専門家とパイオニア実験的な知識は必要ないかもしれません。Xuらは、2017年にニューラルネットワークによって生成された二項関数に基づく最初のCFG埋め込み方法を提案しました。これは、Geminiと呼ばれるシステムで改良されたStructure2vecモデルを使用します(Structure2vec構造認識モデルは、グラフィカルモデル推論アルゴリズムに触発されています。再帰的に集約します。グラフのトポロジ構造(頂点固有の特徴ベクトルを取得するため))を使用してシャムアーキテクチャネットワークを形成し、関数のCFGを高次元ベクトルに埋め込み、ベクトルの余弦距離を計算することによって関数間の類似性を測定します。Ding et al。によって提案されたAsm2vecモデルは、改良されたPV-DMモデルに基づくアセンブリコード表現学習モデルです(PV-DMニューラルネットワークモデルは、テキストデータおよびドキュメント内のロゴに基づく学習ドキュメント表現用に設計されています)。このモデルは、カスタム関数のインライン化とランダムウォークメカニズムを使用して、関数のCFGをアセンブリ命令の線形シーケンスとしてモデル化します。アセンブリテキストは、事前の知識がなくても入力として使用されます。命令のセマンティクスを学習し、命令埋め込みベクトルを構築します。 、そして最後に関数のセマンティック埋め込みベクトルを取得します。Asm2vecは、特徴ベクトルを構築するためのアセンブリコードとして特性学習を使用する最初のスキームであり、優れたアンチエイリアシングおよびアンチコンパイラ最適化特性を備えていますが、アーキテクチャ間の比較には使用できません。Lucaらによって提案されたSAFEネットワークは、最初にNLPのWord2vecモデル(Word2vecは2013年にGoogleが立ち上げたNLPツールであり、単語をベクトル化し、単語間の関係を定量的に測定することを特徴としています)を使用して、アセンブリ言語命令を実装します。埋め込みと再利用リカレントニューラルネットワーク(リカレントニューラルネットワーク、RNN)命令シーケンスのコンテキストをキャプチャし、最終的に関数の埋め込みを実現します。SAFEは中間表現としてCFGを放棄します。アセンブリコードのセマンティック情報は、ディープニューラルネットワークによって高次元ベクトルに直接埋め込まれます。時間のかかるCFGを節約します。抽出プロセスにより、人間のバイアスの導入が回避されます。SAFEモデルは、RNNネットワークを使用してシャムアーキテクチャを構築し、教師あり学習方法を使用してモデルをトレーニングします。プログラムによってランダムに正のサンプルペアとサブサンプルペアを自動的に構築できますが、アーキテクチャ間の検出タスクのトレーニングは次のとおりです。システムによってサポートされます。命令アーキテクチャのタイプの増加は、理論的には、トレーニングサンプルライブラリのサイズを異なるアーキテクチャの組み合わせに応じて2倍にする必要があり、モデルのスケーラビリティが制限されます。GeneDiffは、セマンティック表現モデルを使用してバイナリコード中間言語を学習し、アーキテクチャ間のクローン検出研究を実現する最初の方法です。動的分析VEXIR(VEX IRは動的分析フレームワークValgrindの中間言語であり、中間表現の2アドレス形式であり、複数の命令アーキテクチャをサポートします)を使用して、改善されたPV-DMモデルを通じて異なる命令アーキテクチャ間の違いを排除します。ベクトルを埋め込む関数のVEX-IRのセマンティクスを生成します。各アセンブリ命令は複数のVEX命令に変換されるため、モデルは、同じアセンブリ命令から変換された複数のVEX命令の組み合わせを単語、基本ブロックを文、関数を段落と見なします。ベクトル間の余弦距離関数間の類似性を測定します。IRは、動的分析フレームワークValgrindの中間言語であり、2つのアドレス形式の中間表現であり、複数の命令アーキテクチャをサポートします。中間言語は、異なる命令アーキテクチャ間の違いを排除し、改良されたPV-DMモデルを使用してVEXを機能させます。 -IRは、ベクトルを埋め込むためのセマンティクスを生成します。各アセンブリ命令は複数のVEX命令に変換されるため、モデルは、同じアセンブリ命令から変換された複数のVEX命令の組み合わせを単語、基本ブロックを文、関数を段落と見なします。ベクトル間の余弦距離関数間の類似性を測定します。IRは、動的分析フレームワークValgrindの中間言語であり、2つのアドレス形式の中間表現であり、複数の命令アーキテクチャをサポートします。中間言語は、異なる命令アーキテクチャ間の違いを排除し、改良されたPV-DMモデルを使用してVEXを機能させます。 -IRは、ベクトルを埋め込むためのセマンティクスを生成します。各アセンブリ命令は複数のVEX命令に変換されるため、モデルは、同じアセンブリ命令から変換された複数のVEX命令の組み合わせを単語、基本ブロックを文、関数を段落と見なします。ベクトル間の余弦距離関数間の類似性を測定します。
  • 検出速度と精度の向上に加えて、ニューラルネットワークを類似性検出タスクに適用する利点は、従来の検出方法で使用されるマッチングアルゴリズムが通常固定され、ニューラルネットワークをさまざまなタスク用に再トレーニングできることです。さらに、ニューラルネットワークは、それ自体で特徴を学習して選択するだけでなく、手動の方法では決定するのが難しいさまざまな特徴の重みを学習できるため、手動の設計やスクリーニングの特徴によって引き起こされるフィッティングを削減または回避することさえできます。このタイプの技術は、開発プロセスでもいくつかの困難に直面しています。(1)学際的な知識の相互適用は、検出技術のブレークスルーに新しいアイデアとインスピレーションをもたらし、同時に、より高い知識の蓄積と変革を提案しました。従来技術で使用されていたニューラルネットワークモデルのほとんどは、他の分野での成果から改善する必要があります。したがって、類似性検出には、独自の実際の基盤に基づいたより理論的な革新が必要です。(2)ニューラルネットワークトレーニングには、大量のトレーニングデータ、さまざまなタスクのための高品質のトレーニングセットの構築が依然として課題に満ちている方法;(3)ニューラルネットワークの出力、埋め込みベクトルの各次元の特定の意味、および結果象徴的な表現や定理によって証明することはできません。

ここに画像の説明を挿入

5.まとめ

|技術分類|関連情報|中間表現|長所|短所
||:------:|:------:|:------:|:------: |
|テキストに基づく|アセンブルされたテキスト、バイトストリーム|文字列、識別子シーケンス、高次元ベクトル|メソッドの実装は簡単で、検出時間とスペースの複雑さは低い|プログラムの構文とセマンティクスは考慮されていません。検出精度が低い
||属性ベースの測定|測定可能な属性|測定値、多次元ベクトル|シンプルな測定アルゴリズム、実装が簡単、高速検出速度|プログラムロジック情報を考慮しない;間にオーバーフィットの問題がある可能性があります異なる属性、および精度を保証することは困難です|
|プログラムロジックに基づく|制御フロー、データフロー|抽象構文ツリー、制御フローチャート、関数呼び出しグラフ、入力出力テーブル、データ依存グラフ|テキストに基づく検出よりも高い精度と属性メトリック;微妙な文法的変化を識別できる|中間表現変換プロセス複雑;マッチングアルゴリズムの高度な複雑
さ||セマンティクスに基づく|プログラムセマンティクス|属性制御フローグラフ、セマンティック埋め込みベクトル|プログラムセマンティックの違いを識別できる;機械学習はヒューマンバイアスの導入;さまざまなタスク要件に適応できる;高い検出効率|多くのセマンティクストレーニングサンプルが必要;セマンティック埋め込みベクトルの各次元の意味を説明できない|
ヒューマンバイアスの導入を回避する方法を学ぶ;さまざまなタスク要件に適応する;高い検出効率|多数のセマンティックトレーニングサンプルが必要です;セマンティック埋め込みベクトルの各次元の意味を説明できません|

おすすめ

転載: blog.csdn.net/cherrychen2019/article/details/113111093