[論文ノート] GENDA: 暗号化アルゴリズムに関するグラフ組み込みネットワークベースの検出アプローチ

GENDA: バイナリプログラムの暗号化アルゴリズムに関するグラフ組み込みネットワークベースの検出アプローチ [JISA 2022]

Xiao Li School of Information Science Technology, Northwest University, Xi'an, China
Yuanhai Chang School of Information Science Technology, Northwest University, Xi'an, China

暗号化技術はソフトウェア保護に広く使用されています。ソフトウェアで使用されている暗号化アルゴリズムを効率的に検出する方法は、ソフトウェア保護の強度を評価する上で貴重かつ重要なタスクです。しかし、既存の暗号化アルゴリズム識別方法は高い誤検知率と低い効率という問題に直面しています。 , これらの方法は通常, 暗号化アルゴリズムのプログラム構造と意味論的特徴を完全に抽出することができないため. この論文では, 著者は, グラフ埋め込みネットワークのバイナリコードにおける暗号化アルゴリズムの識別に基づくGENDAと呼ばれるモデルを提案する.さまざまな暗号アルゴリズムの特性を分析してプログラムグラフ(プログラムグラフ)を構築し、プログラムグラフを基本単位としてグラフニューラルネットワークに再帰的に埋め込み、対応する暗号アルゴリズムグラフをベクトルで表現し、最終的に暗号アルゴリズムを決定します。オープンソースでは、コードベースの識別と暗号化アルゴリズムの実際の適用に関して、GENDA の精度は 92% に達し、他の方法と比較するとほとんどの方法を上回る可能性があります。ソータ。

一言で言えば: 暗号化アルゴリズムを識別するためのグラフ埋め込みネットワーク

序章

貢献

この論文の重要な貢献は、ニューラル ネットワークを使用した暗号化アルゴリズムの検出の実現可能性を実験的に検証したことです。この利点を利用して、ディープ ラーニング ニューラル ネットワークをエンドツーエンドでトレーニングし、複雑なバイナリ分析タスクを、少量のドメイン知識だけを必要とするトレーニング タスクに変換できます。暗号化アルゴリズムを特別な特性を持つコードとして扱うことにより、この問題はバイナリ コードの類似性検出問題に変換されます。この論文の貢献は次のとおりです。
(1) グラフ ニューラル ネットワークに基づく検出モデルを使用して暗号化アルゴリズムを特定することは、中国で最も初期の研究の 1 つです。検出モデルを構築するために、暗号化アルゴリズムのグラフ構造がベクトル構造に埋め込まれます。この埋め込みネットワークは、基本ブロック ノード間の機能にアクセスできます。最後に、暗号アルゴリズムグラフのすべての情報を含むベクトル構造が形成され、暗号関数ベクトル間の距離を比較することによって暗号アルゴリズムの種類が決定されます。
(2) 暗号化アルゴリズム グラフを構築する新しい方法を提供します。この目的を達成するために、GENDAはリバースツールを使用して関数ユニット内の関数フローチャート情報を抽出し、それをアセンブリ命令のオペコードとオペランドと組み合わせて、深層学習ニューラルネットワークの基本的な組み込みユニットとして新しい構造と暗号化アルゴリズムグラフを取得します。したがって、トレーニング中のより良い結果が保証されます。
(3) オープンソース プログラムおよび既存の手法から収集されたデータセットに対する広範な評価を利用します。実験結果は、既存の方法と比較して、GENDA アルゴリズムがより優れた総合的なパフォーマンスを達成できることを示しています。

関連事業

(1) 暗号文ベースの暗号検出
暗号アルゴリズムの特定は主に、この方法で暗号化された暗号文を解析することによって行われます。Souza et al. [16] の方法は、EBC モードと CBC モードの両方でブロック暗号の教師なし学習ベースの分類とクラスタリングを実行します。EBC モードでは、分類とクラスタリングの精度が 100% に達することがあります。残念ながら、CBC モードでは分類が失敗します。この問題を解決するために、Shivendra ら [17] は、ブロック長、トラフィック検出、エントロピー再生分析、決定木を組み合わせた方法を発明し、暗号文が AES に均等に分散されていることを発見しました。これにより、暗号文ケースのランダムな入力が完了します。Vina et al. [18] は、差分分析および線形分析のための暗号文暗号化検出に機械学習を適用し、意味情報回復に基づいて暗号化方法を分析しました。Vikas et al. [19] は、クラスタリング技術を通じて暗号文を個別に分析することによって暗号アルゴリズムを識別することを提案しました。

(2) バイナリベースの暗号アルゴリズムの検出
現在、暗号アルゴリズムの識別には逆コンパイル技術が主流となっています。この方法により、対象の暗号化アルゴリズムがバイナリコードに含まれているかどうかを効率的に解析できます。現在、この分野の分析は主にブロック暗号化アルゴリズムの普及、評価、テストの標準と方法に焦点を当てており、識別方法に応じて静的分析と動的分析に分けることができます。Li et al. [20] は、ベイズ分類モデルの高速かつ省スペースのオーバーヘッドという特性を利用し、アセンブリレベルの暗号化アルゴリズム ベクトルを使用してベイズ意思決定認識モデルを構築し、効果的な分析を実施しました。暗号化アルゴリズムは改善されていますが、精度はまだ向上する必要があります。Tieming et al. [21] は、トークン化された単語を照合することによって暗号化アルゴリズムを識別します。認識効率は高いですが、認識の誤報率は許容できません。この問題を解決するために、ビット操作命令 [22] や情報エントロピー [23] を検出して暗号アルゴリズムが使用されているかどうかを判定する研究も行われている。静的分析に基づく検出方法は実装が簡単で、優れたパフォーマンスを発揮します。ただし、未知の特性を使用する暗号化アルゴリズムは検出が困難です。

(3) ディープラーニングに基づく暗号化アルゴリズムの検出 ディープラーニングは、
パフォーマンスの最適化やコードの脆弱性検出などのコード関連のタスクをサポートする予測モデルを構築するための有望な手法になりつつあります [28, 29]。スケーラビリティと高精度を実現するために、一部の研究者は自然言語処理 (NLP) のアイデアを使用してバイナリ コード分析問題を解決しようとしています。アセンブリ命令を自然言語として扱うことで、テキスト埋め込みモデルをトレーニングし、感情分析やトピック モデリングなどの手法を使用してコードを分類またはクラスタリングします。ターゲットコードを特定するという目的を達成するため。

(4) コード クローンの検出
類似性検出のトピックについては、ソース コードに基づくものであっても、バイナリ システムの研究に基づくものであっても、その手法は多くの場所で一般的です。主流の考え方によれば、テキスト文字列検出 [33,34]、トークンベースの類似性検出 [35,36]、ツリーベースの検出 [10,37,38] に分類できます。

方法

概要

このセクションでは、バイナリの検出と認識のための GENDA について説明します。図 1 は、GENDA フレームワークの概要を示しています。

ここに画像の説明を挿入
オープンソース暗号化ライブラリのソース コードを取得した後の最初のステップは、さまざまなバージョン、最適化レベル、コンパイラ、および命令セットをデータ セットとして選択して、ソース コードをクロスコンパイルすることです。

暗号化アルゴリズムの特徴抽出

さまざまな種類の暗号化アルゴリズムには、その独自性により多くの異なる特性が含まれています。例えば、ブロック暗号化アルゴリズムには、多数の算術命令、ジャンプ命令、論理演算命令が含まれる。公開キー暗号化における命令の配布はより均一になります。
暗号化には、ブロック暗号化における行列定数の混合、ハッシュ アルゴリズムで暗号化された SHA-1 および MD5 の初期チェーン値など、大きな整数や大きな配列が含まれることがよくあります。整数因数分解、離散対数解、楕円曲線解のいずれを使用する場合でも、公開鍵暗号化では大きな素数が使用されることは避けられません。これらの一定の特性を区別することにより、暗号化アルゴリズムの分類を明確に区別できます。
その特殊性により、暗号化アルゴリズムには明らかな統計的特徴があります。まず、暗号化アルゴリズムの命令数は制限されています。暗号化または復号化機能を実現するには、命令の総数が少なくなりすぎることはありません。命令数が一定数以下の場合は考慮されない場合があります。暗号アルゴリズムの中核となる算術演算、論理演算、シフト演算の頻度は他の演算命令に比べて明らかに高い。ディスプレースメントテーブルの存在とブロック暗号サイクルのマルチラウンド演算の特性により、同じ構造のコードサイクルがより明確に現れます。図3は、200グループのブロック暗号化アルゴリズムの解析防止命令と統計の頻度分布を示しています。

ここに画像の説明を挿入

演算に関しては、前のセクションのブロック暗号の特性に従って、ほとんどの演算は、加算、減算、乗算、除算、および論理演算 XOR を含む、プロセッサ ALU によってサポートされる基本的な算術演算であると判断できます。公開キー暗号化アルゴリズムには多数のモジュロ演算が含まれており、これらの基本演算は削除されています。モジュロ演算は、固定された基本演算で構成できます。公開鍵暗号化で一般的に使用される基本公式me ( mod n ) m^e (mod\ n)メートルmod に示すような命令から構成され得るたとえば、コードにそのような操作が多数含まれているかどうかを特定することは、公開キー暗号化を判断するための重要な基礎となります。

非コマンド機能とは、特定のコマンドの内容には直接関係しないが、すべてのコマンドの一般的な特性に関連する機能を指します。非命令機能の最初のカテゴリは、機能基本ブロックの数/命令の総数/ローカル変数の数です。

暗号化アルゴリズムのグラフ構造

本論文では、暗号関数を基本ブロック特徴量をノード、呼び出し関係をエッジとしたグラフに変換した新たなデータ構造――暗号アルゴリズムグラフを構築し、ニューラルネットワークに埋め込む。この場合、ノードの内容はテキスト情報を保証し、エッジのフロー方向は構造情報を保証します。機能の集約に各基本ブロックを直接使用する場合と比較して、暗号化アルゴリズム グラフのフローチャート構造を使用すると、関数内の情報をより適切に保存できます。

ここに画像の説明を挿入

暗号化アルゴリズムのグラフの構造を図 5 に示します。ここでは、エッジがサフィックス ツリー表記で表されています。ツリー内の各ノードは、それに接続されている子ノードを順番に記録し、直接指す基本ブロック情報を表します。サフィックス ツリーを使用すると、最初のノードから始まる関数全体の完全なフロー図を構築できます。この時点で、ノードのセットとエッジのセットで構成されるデータ構造が取得されています。T = < V , E > T=<V, E>T=<V E>、ここでの頂点には、前のセクションで取得した 3 種類のデータも含まれています。

グラフ構築データ構造の選択

グラフを作成する場合は、成熟した複雑なネットワーク構築ツールである NetworkX を選択してください。さまざまなタイプの構造化グラフの作成、無向グラフ、有向グラフ、およびマルチグラフの構築をサポートします。機能特性に応じて、この論文では制御フローを表現できる有向グラフが必要です。プログラムの呼び出し時には「多方向」の状況が発生する可能性があるため、多方向のグラフが総合的に選択されます。グラフを作成するときは、ノード情報とネットワーク トポロジに注意する必要があります。明らかにスパースなグラフのストレージの場合は、辞書の辞書データ構造をストレージに使用する必要があります。その利点は、辞書の辞書構造により、スパース ストレージのスペース使用率が向上することです。また、重みなどの「エッジ」構造にデータを追加できます。さらに、エッジ関係は辞書テーブルを通じて簡単に照会でき、隣接関係を迅速に調べることができます。

ここに画像の説明を挿入

暗号アルゴリズムのフローチャート抽出処理には、ここではグラフの深さ優先トラバーサル(DFS)を採用しています。その中心的なアイデアは、抽出された制御フロー ブロックと各ノードの隣接行列に従って、制御フローの深さ優先シミュレーションを実行することです。制御フロー パス全体をたどり、毎回接続関係を記録します。すべての DFS が完了すると、NetworkX の複合モードを使用して、対応する重み付き有向グラフが生成されます。重みはまだ決定されておらず、属性のみが予約されています。コードはアルゴリズム 1 に示されています。

モデルのトレーニングと検出

ここに画像の説明を挿入

この記事の目的は、暗号化アルゴリズムが要件を満たしているかどうかをテストすることです。この目標を達成するために、コードの類似性分析と、標準暗号化アルゴリズム、検出されるアルゴリズム、および検出されるアルゴリズムの検出を実行しました。このタイプの問題には、通常 2 つのオプションがあります。
(1) 問題を分類問題として扱い、ターゲットの暗号化アルゴリズムを直接分類できるモデルをトレーニングします。
(2)類似性検出では、未知の種類のアルゴリズムと、ある種類の暗号化アルゴリズムとを比較し、これらの類似性を判断するモデルを学習する。

実験

暗号化アルゴリズム検出実験既知のオープンソース ライブラリまたはアルゴリズム ホスティング プラットフォーム上のオープンソース暗号化アルゴリズムを検出し、さまざまな暗号化アルゴリズムを正しく識別できるかどうかを検出します。
既存作品との比較実験関連分野の既存オープンソースツールと比較し、様々な比較実験を行います。

データセット

この評価は、GENDA が対象の暗号アルゴリズムを正しく識別できるかどうかを検証することを目的としています。インストルメントされるオブジェクトは、一部の暗号化機能を実装する完全な関数または関数のブロックです。この目的を達成するために、私たちはストリッピングおよびクロスコンパイル手法により、有名なオープンソース プロジェクトから合計 1835 個のコンパイル済み暗号化アルゴリズムを収集しました。具体的には、ブロック暗号は、CFB(Cipher Feedback Block)、OFB(Output Feedback Block)、CBC(Cipher Block Chain)、ECB(Electronic Code Book)に分類できます。
具体的な数量は次のとおりです。AES、445 コピー、DES、301 コピー、3DES、141 コピー、Blowfish、127 コピー、IDEA、86 コピー、CAST、218 コピー、RC2、178 コピー、RSA、145 コピー、DSA、194個々の暗号化アルゴリズムは、OpenSSL、Sodium、LibTomcrypt、Crypto++ などのオープン ソース暗号化ライブラリから削除されました。

ここに画像の説明を挿入

「類似度」の計算式はマハラノビス距離に基づいています。計算の便宜上、類似度はグラフ ベクトルの長さで除算されます。類似性の最終結果は 0% ~ 100% で固定されます。パーセンテージが大きいほど、2 つの関数は類似しています。実験の具体的な手順は次のとおりです。 オープンソースの暗号化ライブラリ Crypto++ から削除された暗号化アルゴリズム AES_128_CFB を例にとると、暗号化アルゴリズムは 14 個の関数で構成されます。ストリップされたデータはソース コード データであり、このシステムの予期される入力はバイナリ コードであるため、ランダムにコンパイルしてバイナリ データを取得し、IDA Pro を使用して逆コンパイルする必要があります。図 7 に示すように、指定されたエントリ ポイント (この例では 0x00401249) から開始して、グラフ構造生成モジュールを使用して処理します。グラフ構造生成モジュールは、IDA Python プラグインと NetworkX を利用して実行されます。基本ブロック内のオペレーションコードの特徴抽出やプログラムフローチャートの抽出・記録などの機能を実現します。このプロセス中に、AES を構成する関数ごとに個別のグラフ構造 (合計 14 個) が生成され、アルゴリズムは json ファイルに文書化されています。

ここに画像の説明を挿入

次にデータの前処理です。すべてのグラフ構造がトレーニングに必要なわけではありません。AES_gcm_init 関数を構成する 14 個の暗号化アルゴリズムの中には、暗号化自体と密接に関連していないアルゴリズムもいくつかあります。たとえば、ASN_STRING_print_ex 関数は文字列印刷機能を提供します。これらの暗号化に依存しない関数が類似性認識のモデル トレーニングに追加されると、最終結果に影響します。暗号化アルゴリズムの複雑さおよびその他の特性に従って、前処理ロジックが定式化されます。基本ブロック数が10未満または半分を超える基本ブロックを除外するアルゴリズムは、後続ノードを持たない。これにより、暗号化アルゴリズムの認識が最大限に高まります。処理後、AES_gcm_init 関数には 11 個の関数が残ります。
次のステップでは、生成された 11 個の EAG 構造を、検出対象の関数のベクトル セットとして十分にトレーニングされた深層学習モデルに埋め込みます。同時に、OpenSSL1.0.1 で事前に生成され削除された標準暗号化アルゴリズムが前処理されて埋め込まれ、標準暗号化ベクトル セットが生成されます。AES、DES、3DES、Blowfish などの 9 つの暗号化アルゴリズムの 97 個のグラフ埋め込み構造が含まれています。次に、ベクトル間の距離が順番に比較され、11 個のグラフ ベクトルが 9 つの標準暗号化アルゴリズムと比較され、最も近いベクトル距離が最終結果として採用されます図 8 から、AES_128_CFB の検出結果が AES アルゴリズムの sim 値に最も類似していることがわかり、検出が成功したと判断できます。

ここに画像の説明を挿入

より直観的には、図 9 から、埋め込み空間が 2 次元ベクトル空間であることがわかり、T-SNE 視覚化後、埋め込みベクトル間の距離関係が明確にわかります。図中のAES_128_CFBの分布は標準暗号アルゴリズムAESに最も近く、埋め込みベクトル距離も最も短いため、2つの関数が最も類似していると判断できます。

ここに画像の説明を挿入

検出

すべてのテスト ケースの結果を図 10 に示します。
ここに画像の説明を挿入

既存作品との比較実験

このペーパーでは、4 つの既存ツールを選択し、検出、精度、効率の 3 つの側面から比較的包括的な水平比較を行います。公平性を保つため、テストデータにはGENDAのトレーニングデータ(OpenSSLとCrypto)を比較対象として含めていません。Github、Googlecode、その他のプロジェクト ホスティング プラットフォームのマルチスター暗号化アルゴリズムとその他のオープンソース暗号化データベース データを使用して、新しいテスト データ セットを形成し、誤検知結果を回避します。

ここに画像の説明を挿入

図 11(a) と図 11(b) は、データセットがオープンソースの暗号化ライブラリまたはコード ホスティング プラットフォーム (Github など) である場合の各システムの精度パフォーマンスをそれぞれ示しています。CH1は「改良型暗号関数識別方式」、CH2は「バイナリコードレベルの暗号アルゴリズムサイクル特徴識別方式」です。図の情報から、Cryptgrep は署名に基づいて暗号化アルゴリズムを検出するため、Cryptgrep はオープンソースの暗号化ライブラリの検出に非常に優れたパフォーマンスを発揮し、基本的に完全な検出を達成できることがわかります。暗号化アルゴリズムが署名ライブラリに含まれている場合、それは簡単に検出できます。検出できて良かったです。

ここに画像の説明を挿入

各システムの実ソフトウェアのテスト結果を表 1 に示します。GENDA や SAFE などの類似性検出モデルの場合、検出の成功は、90% を超える類似性として定義されます。他の 3 方式については、対象の暗号アルゴリズムが正しく検出できるかどうかを直接判定します。結果は、類似性検出に基づく暗号アルゴリズム検出システムは広い検出範囲を有するが、静的分析またはアルゴリズム署名に基づくシステムは性能に限界があることを示した。

ここに画像の説明を挿入

図 12 は、さまざまなシステムのパフォーマンスを示しています。パフォーマンスは、同じ条件下で異なるシステムのバイナリ コードを入力して、システムが最終結果を得るまでにかかる時間として定義されます。このうち、T1 は暗号関数ライブラリから分離された独立した暗号アルゴリズムを検出対象とした場合の平均実行時間を表します。T2 は、検出対象がバイナリファイルの場合の平均実行時間を表します。単一の暗号化アルゴリズムの検出には、GENDA が最も効果的であり、コードが暗号化アルゴリズムであるかどうかを迅速に判断できることがわかります。しかし、ソフトウェア全体から判断すると、GENDA は暗号化アルゴリズム図に変換するために多くのバイナリ コードを必要とするため、効率は比較的低くなります。ソフトウェアのサイズが大きくなると、ほとんどすべてのユースケースが劣化します。GENDA のパフォーマンス損失は平均を下回り、許容範囲内です。

要約する

参考文献

[10] Yeo HS、Phang XS、Lee HJ、Lim H. クライアント側ストレージ技術を活用して、リソースに制約のあるモバイル デバイス上で複数の消費者向けクラウド ストレージ サービスの使用を強化します。J Netw Comput Appl 2014;43:142–56。
[15] Narayanan A、Chandramohan M、Venkatesan R、Chen L、Liu Y、Jaiswal S.graph2vec: グラフの分散表現の学習。2017、arXiv プレプリント arXiv:1707.05005。
[16] Augusto Rodrigues de Souza W、Alfredo Vidal de Carvalho L、Antonio Moreira Xexeo J. N ブロック暗号の識別。IEEE Lat Am Trans 2011;9(2):184–91。http://dx.doi.org/10.1109/TLA.2011.5765572。
[17] Mishra S、Bhattacharjya A. 暗号文のパターン分析: 組み合わせたアプローチ。開催日: 2013 年、情報技術の最近の傾向に関する国際会議。IEEE; 2013、p. 393-8。
[18] ロムテ VM、シンデ AD。ニューラル ネットワークを使用したブロック暗号を使用した新しい特徴的な攻撃のレビュー。Int J Sci Res 2014;3(8):2012–5。
[19] Tiwari V、Pradeepthi K、Saxena A. クラスタリング技術を使用した暗号アルゴリズムの特定。In: 計算知能と情報学に関する第 3 回国際会議の議事録。スプリンガー; 2020、p. 513-21。
[20] Ji-Zhong LI、Jiang LH、ying Q、Liu TM、Guo J. ベイズ意思決定に基づく暗号アルゴリズム認識テクノロジー。Comput Eng 2008;34(20):159–61。
[21] Liu TM、Jiang Lh、He Hq、Li Jz、Yu X。静的特性コードに基づく暗号アルゴリズム認識の研究。で: セキュリティ技術に関する国際会議。スプリンガー; 2009 年、p. 140-7。
[22] Maiorca D、Giacinto G、Corona I。悪意のある PDF ファイルを検出するためのパターン認識システム。開催日: パターン認識における機械学習とデータマイニングに関する国際ワークショップ。スプリンガー; 2012、p. 510-24。
[23] ツェルミアス Z、シキオタキス G、ポリクロナキス M、マルカトス EP。静的分析と動的分析を組み合わせて悪意のあるドキュメントを検出します。掲載: システム セキュリティに関する第 4 回欧州ワークショップの議事録。2011、p. 1~6。
[28] Ye G、Tang Z、Wang H、Fang D、Fang J、Huang S、他。マルチリレーショナルグラフベースの学習による詳細なプログラム構造モデリング。In: 並列アーキテクチャとコンパイル技術に関する ACM 国際会議の議事録。2020、p. 111-23。
[29] Wang H、Ye G、Tang Z、Tan SH、Huang S、Fang D、他。グラフベースの学習と自動データ収集を組み合わせて、コードの脆弱性を検出します。IEEE Trans Inf Forensics Secur 2020;16:1943–58。
[33] ベイカーBS。大規模なソフトウェア システムにおける重複および重複に近いものの発見について。In: リバース エンジニアリングに関する第 2 回ワーキング カンファレンスの議事録。IEEE; 1995 年、p. 86-95。
[34] Pewny J、Garmany B、Gawlik R、Rossow C、Holz T. バイナリ実行可能ファイルのクロスアーキテクチャバグ検索。IEEE コンピューティング Soc 2015;709–24。
[37] Jiang L、Misherghi G、Su Z、Glondu S. Deccard: コード クローンのスケーラブルで正確なツリーベースの検出。Proc Int Conf Software Eng 2007;96–105。
[38] クリジェフスキー A、スツケヴァー I、ヒントン GE。ディープ畳み込みニューラル ネットワークによる Imagenet 分類。Adv Neural Inf Process Syst 2012;25:1097–105。

洞察

(1) 情報エントロピーを利用して暗号化アルゴリズムを使用するかどうかを判断する。
(2) 暗号化または復号化機能を実現するには、総命令数が少なくなりすぎない。命令数が一定数以下の場合は考慮されない場合があります。暗号化アルゴリズムの中核機能における算術演算、論理演算、およびシフト演算の頻度は、他の演算命令に比べて著しく高い (3
) この論文は Where's Crypto の論文に比較的近いものである Where's は部分グラフ同型マッチングにウルマン アルゴリズムを使用している本稿はグラフニューラルネットワークにおけるベクトル距離を用いた暗号アルゴリズムの種類の判定です。

おすすめ

転載: blog.csdn.net/qq_33976344/article/details/126365507