IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ ブラックベリー リミテッドの特許一覧

<>
  • 特開-クローン探索のための方法および装置 図1
  • 特開-クローン探索のための方法および装置 図2
  • 特開-クローン探索のための方法および装置 図3
  • 特開-クローン探索のための方法および装置 図4
  • 特開-クローン探索のための方法および装置 図5
  • 特開-クローン探索のための方法および装置 図6
  • 特開-クローン探索のための方法および装置 図7
  • 特開-クローン探索のための方法および装置 図8
  • 特開-クローン探索のための方法および装置 図9
  • 特開-クローン探索のための方法および装置 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024059586
(43)【公開日】2024-05-01
(54)【発明の名称】クローン探索のための方法および装置
(51)【国際特許分類】
   G06F 21/56 20130101AFI20240423BHJP
【FI】
G06F21/56 330
【審査請求】未請求
【請求項の数】19
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023176507
(22)【出願日】2023-10-12
(31)【優先権主張番号】63/417,204
(32)【優先日】2022-10-18
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】500043574
【氏名又は名称】ブラックベリー リミテッド
【氏名又は名称原語表記】BlackBerry Limited
【住所又は居所原語表記】2200 University Avenue East, Waterloo ON N2K 0A7, Canada
(74)【代理人】
【識別番号】100107489
【弁理士】
【氏名又は名称】大塩 竹志
(72)【発明者】
【氏名】ソン ジジョウ
(72)【発明者】
【氏名】ディン ホンフイ
(72)【発明者】
【氏名】ユアン ティアン
(72)【発明者】
【氏名】リー タオ リー
(72)【発明者】
【氏名】オウ ウェイハン
(57)【要約】      (修正有)
【課題】コードが難読化されているコードクローンを探索するための方法及び装置を提供する。
【解決手段】方法は、コードシード101が、ブロック104においてベクトル表現に変換され、コードシードベクトル105を生じる。コード宛先102は、最初に、ブロック103において抽象化され、次いで、ブロック104においてベクトル表現に変換され、コード宛先ベクトル106を生じる。コードシードベクトル105およびコード宛先ベクトル106は、次いで、ブロック107において比較される。
【選択図】図1
【特許請求の範囲】
【請求項1】
悪性ソフトウェアを識別するためのコンピューティングデバイスにおける方法であって、
a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成するステップと、
b)マルウェアファイルのデータベースからマルウェアファイルを選択するステップと、
c)前記エンコーダモデルを使用して、前記マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成するステップと、
d)前記第1のエンコードされたベクトルと前記第2のエンコードされたベクトルとの間のコサイン類似度を算出するステップと、
e)前記コサイン類似度に基づいて、前記第1のソフトウェアファイルが前記マルウェアファイルのクローンであるかどうかを決定するステップと
を含む、方法。
【請求項2】
前記データベースからの各ファイルを用いて、ステップb)、c)、d)、およびe)を繰り返すステップをさらに含む、請求項1に記載の方法。
【請求項3】
前記データベースからの前記ファイルのうちのいずれも、前記第1のソフトウェアファイルのクローンであると決定されないとき、前記第1のソフトウェアファイルを安全なものとしてタグ付けするステップをさらに含む、請求項2に記載の方法。
【請求項4】
前記データベースからの前記ファイルのうちの少なくとも1つが、前記第1のソフトウェアファイルのクローンであると決定されるとき、前記第1のソフトウェアファイルを危険なものとしてタグ付けするステップをさらに含む、請求項2に記載の方法。
【請求項5】
前記コサイン類似度は、以下に基づいて算出され、
【数1】
cos_simは、前記コサイン類似度を表し、
【数2】
は、前記第1のエンコードされたベクトルを表し、
【数3】
は、前記第2のエンコードされたベクトルを表す、請求項1に記載の方法。
【請求項6】
ステップa)に先立って、抽象化モデルを使用して、前記第1のソフトウェアファイルを抽象化するステップをさらに含む、請求項1に記載の方法。
【請求項7】
ステップe)は、前記コサイン類似度を閾値と比較する、請求項1に記載の方法。
【請求項8】
前記エンコーダモデルは、訓練データを用いて訓練され、前記訓練データは、複数の宛先ファイルと、複数のシードファイルと、前記宛先ファイルのうちのいずれが前記シードファイルのうちのいずれのクローンであるかのインジケーションとを備える、請求項1に記載の方法。
【請求項9】
前記抽象化モデルは、訓練データを用いて訓練され、前記訓練データは、複数の宛先ファイルと、複数のシードファイルと、前記宛先ファイルのうちのいずれが前記シードファイルのうちのいずれのクローンであるかのインジケーションとを備える、請求項6に記載の方法。
【請求項10】
悪性ソフトウェアを識別するためのコンピューティングデバイスであって、
プロセッサと、
メモリと
を備え、
前記プロセッサおよび前記メモリは、
a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成することと、
b)マルウェアファイルのデータベースからマルウェアファイルを選択することと、
c)前記エンコーダモデルを使用して、前記マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成することと、
d)前記第1のエンコードされたベクトルと前記第2のエンコードされたベクトルとの間のコサイン類似度を算出することと、
e)前記コサイン類似度に基づいて、前記第1のソフトウェアファイルが前記マルウェアファイルのクローンであるかどうかを決定することと
を行うように協働する、コンピューティングデバイス。
【請求項11】
前記プロセッサおよび前記メモリはさらに、前記データベースからの各ファイルを用いて、ステップb)、c)、d)、およびe)を繰り返すように協働する、請求項10に記載のコンピューティングデバイス。
【請求項12】
前記プロセッサおよび前記メモリはさらに、
前記データベースからの前記ファイルのうちのいずれも、前記第1のソフトウェアファイルのクローンであると決定されないとき、前記第1のソフトウェアファイルを安全なものとしてタグ付けする
ように協働する、請求項11に記載のコンピューティングデバイス。
【請求項13】
前記プロセッサおよび前記メモリはさらに、
前記データベースからの前記ファイルのうちの少なくとも1つが、前記第1のソフトウェアファイルのクローンであると決定されるとき、前記第1のソフトウェアファイルを危険なものとしてタグ付けする
ように協働する、請求項11に記載のコンピューティングデバイス。
【請求項14】
前記コサイン類似度は、以下に基づいて算出され、
【数4】
cos_simは、前記コサイン類似度を表し、
【数5】
は、前記第1のエンコードされたベクトルを表し、
【数6】
は、前記第2のエンコードされたベクトルを表す、請求項10に記載のコンピューティングデバイス。
【請求項15】
前記プロセッサおよび前記メモリはさらに、ステップa)に先立って、抽象化モデルを使用して、前記第1のソフトウェアファイルを抽象化するように協働する、請求項10に記載のコンピューティングデバイス。
【請求項16】
ステップe)は、前記コサイン類似度を閾値と比較する、請求項10に記載のコンピューティングデバイス。
【請求項17】
前記エンコーダモデルは、訓練データを用いて訓練され、前記訓練データは、複数の宛先ファイルと、複数のシードファイルと、前記宛先ファイルのうちのいずれが前記シードファイルのうちのいずれのクローンであるかのインジケーションとを備える、請求項10に記載のコンピューティングデバイス。
【請求項18】
前記抽象化モデルは、訓練データを用いて訓練され、前記訓練データは、複数の宛先ファイルと、複数のシードファイルと、前記宛先ファイルのうちのいずれが前記シードファイルのうちのいずれのクローンであるかのインジケーションとを備える、請求項15に記載のコンピューティングデバイス。
【請求項19】
コンピュータ可読媒体であって、前記コンピュータ可読媒体は、コンピューティングデバイスのプロセッサによる実行のための前記コンピュータ可読媒体上に記憶される実行可能コードを有し、前記実行可能コードは、
a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成することと、
b)マルウェアファイルのデータベースからマルウェアファイルを選択することと、
c)前記エンコーダモデルを使用して、前記マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成することと、
d)前記第1のエンコードされたベクトルと前記第2のエンコードされたベクトルとの間のコサイン類似度を算出することと、
e)前記コサイン類似度に基づいて、前記第1のソフトウェアファイルが前記マルウェアファイルのクローンであるかどうかを決定することと
を行うための命令を備える、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コードクローンを探索するための方法に関する。より具体的には、本開示は、コードが難読化されているコードクローンを探索するための方法に関する。
【背景技術】
【0002】
背景説明は、本発明の主題を理解する際に有用であり得る情報を含む。本明細書に提供される情報のうちのいずれかが、従来技術または出願人が認めた従来技術である、または本請求される発明の主題に関連すること、または具体的または暗示的に参照される任意の刊行物が、従来技術または出願人が認めた従来技術であることを認めるものではない。
【0003】
ソフトウェア工学は、オープンソースプロジェクトを広く採用し、典型的には、公開パッケージ管理システムに依拠する。しかしながら、そのようなコードは、特に、コードの有効性および完全性が検証されないとき、悪性コードを備え得る。セキュリティが重要である一般的なリポジトリ、例えば、オペレーティングシステムまたはデータベースリポジトリであっても、それらのプル要求(PR)は、PRの複雑性および投稿者の信用に起因して、常に精査されるわけではない。結果として、単純なプル要求を通して悪性コードを忍ばせ得る。
【0004】
加えて、殆どのソフトウェアプロジェクト管理サイトは、無料の継続的インテグレーションおよび継続的デプロイ(CI/CD)ツールを有し、これもまた、悪用され得る。例えば、無料のCI/CDツールである、GitHub Actionsは、コミットおよびフォークを介した暗号通貨のマイニングのために攻撃者によって悪用されており、これは、コンピューティングリソースの有意な損失を引き起こしている。加えて、npmパッケージリポジトリに対する最近の攻撃は、暗号通貨において1,300万米ドルの被害をもたらした。ソフトウェア開発における別の広く制御不可能な慣行である、インターネットからのコピーアンドペーストのコードスニペットが、状況をさらに悪化させる。
【0005】
しかしながら、これらの攻撃における悪性コードは、いくつかの因子に起因して検出することが困難であり、最も重要なことは、悪性コードが良性コードの大きいトランクの中に注入されることであり、そのようなコードは、そのコンテキストの意味を不明瞭にするために、さらに難読化され得る。
【0006】
難読化技法は、オーサーシップおよびリバースエンジニアリングを保護するために広く使用されている。他方、難読化されたコードは、セキュリティエンジニアが知的財産の侵害を発見し、良性コードの中に混在された悪性コードを検出することをより困難にする。
【0007】
多くのタイプの難読化技法が、存在する。変数リネーミング、文字列分割、またはスペーシングのようなそれらのうちのいくつかは、コード構造に対する影響が少ない。アレイ回転、ラッピング、制御フロー平坦化、またはデッドコード注入等のその他は、コード構造に対して有意な影響を及ぼし得る。いくつかの動的型付け言語またはスクリプト言語に関して、難読化は、文字列および16進数の置換のように、ノードプロパティさえも改変することができる。
【0008】
JavaScript(登録商標)は、動的型付けのインタープリタ型プログラミング言語である。その柔軟な構文は、開発の速度および新しい要件への適合を向上させ、したがって、これは、あらゆるブラウザを横断して広く使用されている。経時的に、何百万ものJavaScript(登録商標)ライブラリが、開発され、無料使用のためにアップロードされている。実践では、JavaScript(登録商標)コードは、多くの場合、ソフトウェア開発者および脅威行為者によってより不明瞭な形態に難読化され、意味のある関数および変数識別子をランダムに見える文字列と置換することによって、その目的を隠蔽する。
【0009】
下記に示されるように、電子メールおよびパスワードをアップロードするための単純なJavaScript(登録商標)コードスニペットが、かなり複雑なものに難読化される。これらの2つのコードスニペットは、同一の機能を実施するが、それらは、相互に完全に異なるように見え、難読化されたコードは、元のコードのクローンとして容易に認識されない。
【化1】
【0010】
コードクローン探索のために活用され得る、様々な既存のツールが、存在する。そのようなツールは、例えば、S. H. Ding, B. C. Fung, およびP. Charland, Kam1n0: Mapreduce-based assembly clone search for reverse engineering, Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, ページ461-470, 2016; S. H. Ding, B. C. Fung, およびP. Charland, Asm2vec: Boosting static representation robustness for binary clone search against code obfuscation and compiler optimization, 2019 IEEE Symposium on Security and Privacy (SP), ページ472-489, IEEE, 2019; L. Jiang, G. Misherghi, Z. Su, およびS. Glondu. Deckard: Scalable and accurate tree-based detection of code clones, 29th International Conference on Software Engineering (ICSE’07), ページ96-105, IEEE, 2007; S. Ndichu, S. Kim, S. Ozawa, T. Misu, およびK. Makishima, A machine learning approach to detection of javascript-based attacks using ast features and paragraph vectors, Applied Soft Computing, 84:105721, 2019; H. Sajnani, V. Saini, J. Svajlenko, C. K. Roy, およびC. V. Lopes, Sourcerercc: Scaling code clone detection to big-code, Proceedings of the 38th International Conference on Software Engineering, ページ1157-1168, 2016(参照することによって本明細書に組み込まれる)に説明されている。
【0011】
これらのツールは、フィンガープリンティングまたはハッシング、トークンベースの比較、ツリーベースの比較、および2つのコードスニペットの間の構文的または意味論的な類似度を捕捉するための16進差異等の異なるタイプの技法を利用する。しかしながら、殆どのクローン対は、構文的に異なり、コードの長いシーケンス間に散在する。
【0012】
加えて、また、A. Fass, M. Backes, およびB. Stock. Hidenoseek: Camouflaging malicious javascript in benign asts, Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security, ページ1899-1913, 2019; A. KulkarniおよびR. Metta, A code obfuscation framework using code clones, Proceedings of the 22nd International Conference on Program Comprehension, ページ295-299, 2014; A. KulkarniおよびR. Metta, A new code obfuscation scheme for software protection, 2014 IEEE 8th International Symposium on Service Oriented System Engineering, ページ409-414. IEEE, 2014; T. LaszloおよびA . Kiss, Obfuscating c++ programs via control flow flattening, Annales Universitatis Scientarum Budapestinensis de RolandoEotvos Nominatae, Sectio Computatorica, 30(1):3-19, 2009(参照することによって本明細書に組み込まれる)等、既存のクローン探索ツールを突破し得る難読化技法の考案に焦点を当てる研究が、存在する。
【0013】
要約すると、既存のソリューションは、コード難読化に対する構文的変動を軽減し、元のコードと難読化されたものとの間の意味論的つながりを識別することができない。
【先行技術文献】
【非特許文献】
【0014】
【非特許文献1】Kam1n0: Mapreduce-based assembly clone search for reverse engineering, Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, ページ461-470, 2016
【非特許文献2】Hidenoseek: Camouflaging malicious javascript in benign asts, Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security, ページ1899-1913, 2019
【発明の概要】
【課題を解決するための手段】
【0015】
本開示の少なくとも1つの実施形態によると、悪性ソフトウェアを識別するためのコンピューティングデバイスにおける方法が提供され、該方法は、a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成するステップと、b)マルウェアファイルのデータベースからマルウェアファイルを選択するステップと、c)エンコーダモデルを使用して、マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成するステップと、d)第1のエンコードされたベクトルと第2のエンコードされたベクトルとの間のコサイン類似度を算出するステップと、e)コサイン類似度に基づいて、第1のソフトウェアファイルがマルウェアファイルのクローンであるかどうかを決定するステップとを含む。
【0016】
本開示の少なくとも別の実施形態によると、悪性ソフトウェアを識別するためのコンピューティングデバイスが提供され、該コンピューティングデバイスは、プロセッサと、メモリとを備え、プロセッサおよびメモリは、a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成し、b)マルウェアファイルのデータベースからマルウェアファイルを選択し、c)エンコーダモデルを使用して、マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成し、d)第1のエンコードされたベクトルと第2のエンコードされたベクトルとの間のコサイン類似度を算出し、e)コサイン類似度に基づいて、第1のソフトウェアファイルがマルウェアファイルのクローンであるかどうかを決定するように協働する。
【0017】
本開示のまた別の実施形態によると、コンピュータ可読媒体が提供され、該コンピュータ可読媒体は、コンピューティングデバイスのプロセッサによる実行のためのその上に記憶される実行可能コードを有し、実行可能コードは、a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成し、b)マルウェアファイルのデータベースからマルウェアファイルを選択し、c)エンコーダモデルを使用して、マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成し、d)第1のエンコードされたベクトルと第2のエンコードされたベクトルとの間のコサイン類似度を算出し、e)コサイン類似度に基づいて、第1のソフトウェアファイルがマルウェアファイルのクローンであるかどうかを決定するための命令を備える。
本発明は、例えば、以下の項目を提供する。
(項目1)
悪性ソフトウェアを識別するためのコンピューティングデバイスにおける方法であって、
a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成するステップと、
b)マルウェアファイルのデータベースからマルウェアファイルを選択するステップと、
c)上記エンコーダモデルを使用して、上記マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成するステップと、
d)上記第1のエンコードされたベクトルと上記第2のエンコードされたベクトルとの間のコサイン類似度を算出するステップと、
e)上記コサイン類似度に基づいて、上記第1のソフトウェアファイルが上記マルウェアファイルのクローンであるかどうかを決定するステップと
を含む、方法。
(項目2)
上記データベースからの各ファイルを用いて、ステップb)、c)、d)、およびe)を繰り返すステップをさらに含む、上記項目に記載の方法。
(項目3)
上記データベースからの上記ファイルのうちのいずれも、上記第1のソフトウェアファイルのクローンであると決定されないとき、上記第1のソフトウェアファイルを安全なものとしてタグ付けするステップをさらに含む、上記項目のいずれか1項に記載の方法。
(項目4)
上記データベースからの上記ファイルのうちの少なくとも1つが、上記第1のソフトウェアファイルのクローンであると決定されるとき、上記第1のソフトウェアファイルを危険なものとしてタグ付けするステップをさらに含む、上記項目のいずれか1項に記載の方法。
(項目5)
上記コサイン類似度は、以下に基づいて算出され、
【数1】
cos_simは、上記コサイン類似度を表し、
【数2】
は、上記第1のエンコードされたベクトルを表し、
【数3】
は、上記第2のエンコードされたベクトルを表す、上記項目のいずれか1項に記載の方法。
(項目6)
ステップa)に先立って、抽象化モデルを使用して、上記第1のソフトウェアファイルを抽象化するステップをさらに含む、上記項目のいずれか1項に記載の方法。
(項目7)
ステップe)は、上記コサイン類似度を閾値と比較する、上記項目のいずれか1項に記載の方法。
(項目8)
上記エンコーダモデルは、訓練データを用いて訓練され、上記訓練データは、複数の宛先ファイルと、複数のシードファイルと、上記宛先ファイルのうちのいずれが上記シードファイルのうちのいずれのクローンであるかのインジケーションとを備える、上記項目のいずれか1項に記載の方法。
(項目9)
上記抽象化モデルは、訓練データを用いて訓練され、上記訓練データは、複数の宛先ファイルと、複数のシードファイルと、上記宛先ファイルのうちのいずれが上記シードファイルのうちのいずれのクローンであるかのインジケーションとを備える、上記項目のいずれか1項に記載の方法。
(項目10)
悪性ソフトウェアを識別するためのコンピューティングデバイスであって、
プロセッサと、
メモリと
を備え、
上記プロセッサおよび上記メモリは、
a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成することと、
b)マルウェアファイルのデータベースからマルウェアファイルを選択することと、
c)上記エンコーダモデルを使用して、上記マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成することと、
d)上記第1のエンコードされたベクトルと上記第2のエンコードされたベクトルとの間のコサイン類似度を算出することと、
e)上記コサイン類似度に基づいて、上記第1のソフトウェアファイルが上記マルウェアファイルのクローンであるかどうかを決定することと
を行うように協働する、コンピューティングデバイス。
(項目11)
上記プロセッサおよび上記メモリはさらに、上記データベースからの各ファイルを用いて、ステップb)、c)、d)、およびe)を繰り返すように協働する、上記項目のいずれか1項に記載のコンピューティングデバイス。
(項目12)
上記プロセッサおよび上記メモリはさらに、
上記データベースからの上記ファイルのうちのいずれも、上記第1のソフトウェアファイルのクローンであると決定されないとき、上記第1のソフトウェアファイルを安全なものとしてタグ付けする
ように協働する、上記項目のいずれか1項に記載のコンピューティングデバイス。
(項目13)
上記プロセッサおよび上記メモリはさらに、
上記データベースからの上記ファイルのうちの少なくとも1つが、上記第1のソフトウェアファイルのクローンであると決定されるとき、上記第1のソフトウェアファイルを危険なものとしてタグ付けする
ように協働する、上記項目のいずれか1項に記載のコンピューティングデバイス。
(項目14)
上記コサイン類似度は、以下に基づいて算出され、
【数4】
cos_simは、上記コサイン類似度を表し、
【数5】
は、上記第1のエンコードされたベクトルを表し、
【数6】
は、上記第2のエンコードされたベクトルを表す、上記項目のいずれか1項に記載のコンピューティングデバイス。
(項目15)
上記プロセッサおよび上記メモリはさらに、ステップa)に先立って、抽象化モデルを使用して、上記第1のソフトウェアファイルを抽象化するように協働する、上記項目のいずれか1項に記載のコンピューティングデバイス。
(項目16)
ステップe)は、上記コサイン類似度を閾値と比較する、上記項目のいずれか1項に記載のコンピューティングデバイス。
(項目17)
上記エンコーダモデルは、訓練データを用いて訓練され、上記訓練データは、複数の宛先ファイルと、複数のシードファイルと、上記宛先ファイルのうちのいずれが上記シードファイルのうちのいずれのクローンであるかのインジケーションとを備える、上記項目のいずれか1項に記載のコンピューティングデバイス。
(項目18)
上記抽象化モデルは、訓練データを用いて訓練され、上記訓練データは、複数の宛先ファイルと、複数のシードファイルと、上記宛先ファイルのうちのいずれが上記シードファイルのうちのいずれのクローンであるかのインジケーションとを備える、上記項目のいずれか1項に記載のコンピューティングデバイス。
(項目19)
コンピュータ可読媒体であって、上記コンピュータ可読媒体は、コンピューティングデバイスのプロセッサによる実行のための上記コンピュータ可読媒体上に記憶される実行可能コードを有し、上記実行可能コードは、
a)エンコーダモデルを使用して、第1のソフトウェアファイルをエンコードし、第1のエンコードされたベクトルを作成することと、
b)マルウェアファイルのデータベースからマルウェアファイルを選択することと、
c)上記エンコーダモデルを使用して、上記マルウェアファイルをエンコードし、第2のエンコードされたベクトルを作成することと、
d)上記第1のエンコードされたベクトルと上記第2のエンコードされたベクトルとの間のコサイン類似度を算出することと、
e)上記コサイン類似度に基づいて、上記第1のソフトウェアファイルが上記マルウェアファイルのクローンであるかどうかを決定することと
を行うための命令を備える、コンピュータ可読媒体。
(摘要)
悪性コードを識別するための方法および装置が提供される。本方法は、機械学習を使用し、新しいコードセグメントを悪性コードの既知のコードセグメントと比較する。コードセグメントは、ベクトルに変換され、2つのベクトルのコサイン類似度が、クローンを識別するために使用される。非常に長いコードシーケンスおよび難読化された悪性コードを取り扱うためのニューラルネットワークを訓練するための技法が、使用される。
【図面の簡単な説明】
【0018】
本開示は、図面を考慮してより深く理解されるであろう。
【0019】
図1図1は、本開示の少なくとも1つの実施形態による、方法のフロー図である。
【0020】
図2図2は、本開示の少なくとも1つの実施形態による、コードスニペットをベクトルに変換するためのフロー図である。
【0021】
図3図3は、本開示の少なくとも1つの実施形態による、コードセグメントをより短いコードセグメントに抽象化するためのフロー図である。
【0022】
図4図4は、本開示の少なくとも1つの実施形態による、抽象化プロセスの間に計算されるようなトークン毎の確率のグラフ表現である。
【0023】
図5図5は、本開示の少なくとも1つの実施形態による、抽象化層を訓練する方法を図示する、フロー図である。
【0024】
図6図6は、本開示の少なくとも1つの実施形態による、抽象化モデルを精緻化する方法を図示する、フロー図である。
【0025】
図7図7は、本開示の少なくとも1つの実施形態による、コードセグメントをベクトルにエンコードする方法を図示する、フロー図である。
【0026】
図8図8は、本開示の少なくとも1つの実施形態による、エンコーダモデルを訓練する方法を図示する、フロー図である。
【0027】
図9図9は、本開示の少なくとも1つの実施形態による、悪性コードファイルを識別するためのプロセスのフロー図である。
【0028】
図10図10は、本明細書に開示される方法を実施するためのコンピューティングデバイスのブロック図である。
【発明を実施するための形態】
【0029】
図面の詳細な説明
本開示は、クローンコードスニペットを識別するための方法を対象とする。クローンコードスニペットは、同一の機能性を有するコードスニペットであるが、それらは、相互に異なるように見え得る。本方法は、既知の悪性コードの断片に基づいて難読化されている悪性コードを識別する際に有用である。
【0030】
例えば、悪意のある行為者が、一式のソフトウェアの中に悪性コードを導入することを所望し得る。導入されるべき悪性コードが既知であり、種々の悪性コードデータベースにおいて見出される範囲内で、そのような悪性コードは、容易に識別および除去され得る。しかしながら、悪性コードを難読化することによって、悪意のある行為者は、これが従来的な技法によって認識されないように、悪性コードを偽装し得る。
【0031】
本開示は、難読化されたコードを認識するための方法を提供し、それによって、ソフトウェアの中に挿入された悪性の難読化されたコードの認識を促進する。本開示は、JavaScript(登録商標)を参照してそのような方法を議論するであろうが、他のプログラミング言語も、本開示の範囲内である。
【0032】
特に、本開示は、クローン探索に関する3つの主要な問題に対処することを目標とする。
【0033】
極めて長いシーケンス:コードクローン対のソースまたは標的のいずれかは、任意の典型的なニューラルシーケンス学習ベースの方法が取り扱い得るものよりもはるかに長くあり得る。一般的に利用可能な現在のハードウェアおよびモデルサイズでは、長短期記憶(LSTM)およびトランスフォーマ等のモデルは、典型的には、入力シーケンスを512個のトークンに限定する。
【0034】
コード混在:悪意のある行為者は、悪性シードコードを良性コードまたはデッドコードのより大きいフラグメントの中に混在させている。これらの場合では、学習モデルは、2つのスクリプトを相関させ、クローンを識別するために共通の意味論を見出す必要がある。
【0035】
コード難読化:混在後、コードは、典型的には、パックまたは難読化され、合致のために非常に限定されたリテラル情報を提供する、クローン対における2つのコードの断片をもたらす。
【0036】
これらの課題に対処するために、コード混在およびコード難読化に対するロバストなソリューションを提供する、効率的かつ効果的なクローン探索のための類似度学習ベースのモデルが、提供される。具体的には、本ソリューションは、類似度学習のためのコード選択および抽象化層を伴う。順次エンコーダと組み合わせられる、コード選択および抽象化層は、極めて長い難読化されたコードシーケンスを取り扱うことが可能である。
【0037】
具体的には、類似度学習のためのコード選択および抽象化層が、提供される。順次エンコーダと組み合わせられると、これは、極めて長い難読化されたコードシーケンスを取り扱うことが可能である。コード選択および抽象化プロセス自体は、微分可能ではない。典型的な勾配降下オプティマイザを使用する代わりに、選択および抽象化プロセスは、観察されたコードを前提として実行可能な解を返すポリシー関数として使用される。報酬関数が、ポリシー関数を訓練するために使用される。
【0038】
したがって、本開示は、大きいコードベースから効果的に所与のコードスニペットに関する意味論的クローンを識別するための方法を提供することを目標とする。本方法は、入力スニペットが極めて長くあり得、シードコードが標的スニペット内の他のコードと混在され、シードスクリプトおよび探索プール内のファイルが難読化される状況においてロバストであり、使用することが可能である。
【0039】
具体的には、類似度学習のためのコード選択および抽象化層が、提供される。順次エンコーダと組み合わせられると、これは、極めて長い難読化されたコードシーケンスを取り扱うことが可能である。
既存のソリューション
【0040】
概して、クローンの4つの認識されるカテゴリが、存在する。
・タイプ1:コードフラグメントは、スペースおよびタブを除いて構文的に同じである。
・タイプ2:タイプ1のクローンの差異に加えて、識別子または関数名が、修正される。
・タイプ3:タイプ2のクローンの差異に加えて、構文的に類似するコードフラグメントは、文レベルにおいて異なる。いくつかの一般的な実施例は、if文がswitch文に変更される、またはforループがwhileループに変更されることである。しかしながら、コードフラグメントは、構造または抽象構文木(AST)の観点から依然として類似する。タイプ3のクローンは、類似度のレベルに基づいて、さらに細分化され得る。
・タイプ4:通常、構文またはさらにはASTにおいて完全に類似しないが、コード対は、同一の意味論を有する。
【0041】
殆どの既存のコード探索技法は、トークンの70~90%が元のコードに類似する、タイプ3のクローンに焦点を当てている。S. Ndichu, S. Kim, S. Ozawa, T. Misu, およびK. Makishima. A machine learning approach to detection of javascript-based attacks using ast features and paragraph vectors, Applied Soft Computing, 84:105721, 2019(参照することによって本明細書に組み込まれる)におけるもの等のいくつかの方法が、全てのレベルのコードクローンに適応することができる。
【0042】
クローン探索研究は、とりわけ、トークンベース、ツリーベース(AST)、データフローまたは制御フローベースである、コードファイルの異なる粒度に焦点を当てる異なる技法を提案している。ハッシング、インデックス化、ベクトル表現、機械学習、またはハイブリッド方法のような様々な技法が、提案されている。
【0043】
殆どの従来技術のクローン探索方法は、コードフラグメント全体が別のもののクローンであると仮定し、これは、悪性シードが良性コードに難読化される上記に説明されるいくつかのシナリオに適用可能ではない。その上、殆どのクローン探索ツールは、C、C++、およびJava(登録商標)のようなプログラミング言語のために設計されており、コードファイルは、関数によってコードフラグメントに分解されることがより容易であり、これは、JavaScript(登録商標)のようなスクリプト言語に関して実現可能ではない。
【0044】
JavaScript(登録商標)コードクローンに焦点を当てる研究は、いくつかのみしか存在しない。例えば、P. Likarish, E. Jung, およびI. Jo. Obfuscated malicious javascript detection using classification techniques, 2009 4th International Conference on Malicious and Unwanted Software (MALWARE), ページ47-54. IEEE, 2009およびNdichu et al.はまた、難読化された悪性JavaScript(登録商標)データセットに取り組んでいるが、それらの実験は、クローン探索の代わりに、悪性ファイル分類についてのものである。それらはまた、SVMおよびDoc2Vecのような古典的な機械学習アプローチを使用する。
難読化方法
【0045】
リネーミングは、標的の意味論的な意味を偽装するために、変数または方法をリネーミングするための一般的な技法である。値の変換は、リテラルおよび数字を16進数と置換する。
【0046】
オブジェクトキー変換は、オブジェクト要素への後の参照が、リネーミングされたものを使用するであろうように、JavaScript(登録商標)オブジェクトにおけるキーをリネーミングすることを伴う、JavaScript(登録商標)のための特別な難読化である。
【0047】
文字列分割および回転は、文字列を異なるトランクに分割し、リテラルをアレイにおいて設置し、アレイをさらに回転させる。
【0048】
デッドコード注入は、非機能性コードの断片を元のJavaScript(登録商標)スクリプトの中に注入する。
【0049】
制御フロー平坦化は、元のコードの複雑性を5倍増加させる、難読化の強力な手段である。平坦化アルゴリズムは、最初に、コードセグメントを異なるブロックに分解する。次いで、これらのブロックは、同一のレベルで編成される。例えば、変数宣言が、先頭に設置され、ネスト化されたブロックが、親ブロックとともに設置される。各平坦化されたブロックは、各ブロックの実行の順序が、これらの状態によって制御されるように、新しい状態によって規則化される。さらに、これらの規則化されたブロックは、switch状態、if-elseチェーン、または同等物のような所定の構造に適合される。制御フロー平坦化は、ASTのサイズが150%~300%増加し得るように、元のコードの構造を大いに改変することができる。
難読化のレベル
【0050】
文献では、コード難読化に関するいかなる広く受け入れられる数値スケールも、存在しない。C. Collberg, C. Thomborson, およびD. Low, A taxonomy of obfuscating transformations, Technical report, Citeseer, 1997(参照することによって本明細書に組み込まれる)は、難読化を測定するための3つの基準、すなわち、有効性、復元力、および費用を定義している。
【0051】
有効性は、殆どの難読化に関する基本的な基準であり、復元力と費用との間のトレードオフが、存在する。制御フロー平坦化のように、より復元力のある難読化の大部分は、より高い費用を有する。
【0052】
Deckardによって定義されたアプローチに従って、
【化2】
および
【化3】
によって表される2つのファイルのトークンとASTとの間のレーベンシュタイン編集距離が、計算される。難読化されたファイルの複雑性レベルは、以下の2つのメトリックによって定義されることができる。
【化4】
式中、
【化5】
であり、xは、入力ファイルのトークンまたはASTである。複雑性の値は、コードフラグメントに関するトークンまたはノードの数のパーセンテージにおけるトークンまたはASTの1つのセットを別のものに更新するために要求されるステップの数を示す。例示するために、
【化6】
である場合、これは、トークンの10%が、難読化されたファイルにおいて(同一の順序で)持続することを意味する。
【化7】
ある場合、これは、元のASTにおけるノードの全てが、更新または除去されることを要求され、ノードの別の20%が、追加されることを意味する。
ニューラルシーケンス学習モデル
【0053】
ニューラルシーケンスモデルは、センテンス等の順次データをモデル化するためのニューラルネットワークである。リカレントニューラルネットワーク(RNN)ベースのモデル等の典型的なシーケンスモデルは、それらが、テキスト、例えば、センテンスの分散ベクトル表現を学習することができるため、多くの自然言語処理(NLP)用途において大きな成功を収めている。シーケンスツーシーケンス(Seq2seq)モデルは、入力として順次データをとり、出力として順次データを生成する別のタイプのシーケンスモデルであり、機械翻訳、テキスト要約、およびテキスト生成のようなタスクにおいて広く使用されている。テキストに対して適用されることに加えて、シーケンスモデルはまた、ソースコードをモデル化するために適用されている。
【0054】
RNNベースのモデルは、いくつかの欠点を有する。第1に、予測出力は、固定長を有する。第2に、モデルは、訓練データの分布に対してのみ訓練され、これは、露出バイアスと名付けられる。第3に、損失関数は、BLEUのようなベンチマークメトリックに一致しない。また、そのようなメトリックは、連続的ではなく、したがって、微分可能ではない。第4に、順次データが、長い場合、RNNモデルは、多くの場合、隠されたスタットのチェーンがより長くなるにつれて、遠くのユニットが容易に忘れられている場合があるため、収束することが困難である。
【0055】
最近では、テキスト生成のための言語モデル化は、ポリシー勾配法によって最適化され得る、字句トークンを選ぶためのマルコフ決定プロセスと見なされることができるため、強化学習の概念が、NLP研究に持ち込まれている。
問題の定義
【0056】
本開示は、大きいコードベースから効果的に所与のコードスニペット(すなわち、シードスクリプト)に関する意味論的クローンを識別するための方法を提供することを目標とする。本明細書に説明されるソリューションは、入力スニペットが極めて長くあり得、シードコードが標的スニペット内の他のコードと混在され、シードスクリプトおよび探索プール内のファイルが可能性として難読化される状況においてロバストであり、使用することが可能である。
【0057】
殆どの従来技術の方法は、クローン対が同一の意味論を有すると仮定するため、4つの新しい難読化方法が、考慮される。
・M1:シードファイルは、いかなる修正も伴わずにベースファイルの中に注入されており、したがって、
【化8】
である。
・M2:宛先ファイルは、シードファイルの難読化されたバージョンであり、したがって、
【化9】
である。
・M3:難読化されたシードファイルは、ベースファイルの中に注入されており、したがって、
【化10】
である。
・M4:シードファイルは、ベースファイルの中に注入されており、細工されたファイル全体が、宛先ファイルとして難読化されており、したがって、
【化11】
であり、ある場合には、細工されたファイルは、いかなる機能性も有していないデッドコードと混在され得、したがって、
【化12】
である。
【0058】
上記では、
【化13】
演算子は、連結または注入だけではなく、また、宛先ファイルにおけるシードファイルの散在を示すために使用される。
【0059】
M1に関して、単純なテキスト探索が、クローンを識別するために十分である。殆どの従来技術の方法は、コードファイルを関数または小さい断片にセグメント化するDeckardにおけるもの等、タイプ2およびタイプ3のクローンシードを伴うM2およびM3に焦点を当てている。しかしながら、M3およびM4が、最も一般的なユースケースである。
【0060】
スクリプトファイルを関数のセグメントに分割することは、理想的ではないため、本開示は、これがまた、考慮される全ての他のシナリオを網羅するであろうため、タイプ3およびタイプ4のクローンを伴うM4のためのソリューションを提供する。デッドコードを伴うM4は、実世界では一般的な事例ではないが、これは、長いシーケンスが取り扱われ得ることを示すために使用される。
【0061】
概して、コードスニペットCが、x∈Γに関してC={x,x,…,x}であるように、順序付けられた字句トークンのシーケンスとして記述されることができ、Γは、プログラミング言語に関する全てのトークンのセットである。
【0062】
スニペットCは、C’=fobs(C)であるように、難読化関数fobfによって難読化されることができ、C’は、Cの難読化されたバージョンを表す。CおよびC’は、意味論的に同一に機能するが、
【化14】
であるように、トークンの異なるセットを伴う。
【0063】
クローン探索関数は、以下のように定義される。
【化15】
【0064】
式中、Cseedは、既知のコードスニペットを表し、Cdestは、未知であり、δは、コードスニペットの入力ベクトル表現として取り込まれる比較関数を表し、φは、コードスニペットをベクトル表現に変換する関数であり、πは、大きいコードスニペットの機能性を抽象化する関数である。本方程式は、図1に関して図示される。
【0065】
図1に示されるように、コードシード101は、ブロック104においてベクトル表現に変換され、コードシードベクトル105を生じる。コード宛先102は、最初に、ブロック103において抽象化され、次いで、ブロック104においてベクトル表現に変換され、コード宛先ベクトル106を生じる。コードシードベクトル105およびコード宛先ベクトル106は、次いで、ブロック107において比較される。
【0066】
ブロック107における比較の出力は、バイナリである。具体的には、比較の出力は、Cdestが、Cseedと意味論的に同じであるトークンのサブセット[x;xm+1,…xm+k]を有する場合かつその場合にのみ、1である。そうでなければ、比較の出力は、0である。
主要構造
【0067】
上記の問題に対処するために、入力シーケンスを固定長の特性ベクトルにエンコードし、シードおよび宛先ファイルから生成されたベクトルを比較するためのニューラルネットワークモデルが、提供される。さらに、モデルは、強化学習アプローチを使用し、シードファイルと比較されるべき長いシーケンスの宛先データからのトークンを抽象化する。簡潔に言えば、エンコーダモデルは、入力トークンのシーケンス[x;x;…x]をベクトル表現
【化16】
に低減させる。次いで、モデルは、クローン探索のための評価スコアとして
【化17】

【化18】
との間のコサイン類似度を計算する。加えて、シーケンスが、長すぎる場合、本発明者らは、本発明者らが入力長をさらに短縮し得るように、シーケンス全体の一般的な意味論を表し得るトークンを選択するための強化学習アプローチである、抽象化を使用する。
【0068】
一般的なアーキテクチャは、入力対の意味論的類似度スコアを生成する、Siameseモデルである。抽象化プロセスは、入力として埋込ベクトルをとり、ポリシーとして確率を生成し、ポリシーに基づいてトークンを選択し、連結されたシーケンスを出力する。最終的な報酬は、類似度スコアによって達成され、損失は、報酬および結合確率下で条件付けられる。
【0069】
抽象化プロセスは、長いシーケンスおよびコード混在の問題に対処するように設計される。抽象化のもつれ解除規則化はさらに、長いシーケンスに起因する問題を軽減する。最後に、シーケンスエンコーダは、深層ニューラルネットワークを使用し、入力の難読化を解除する。
入力前処理および埋込
【0070】
ここで、コードスニペットをベクトル表現に変換するためのプロセスを図示する、図2が、参照される。プロセスは、ブロック210において開始され、ブロック220に進み、コードスニペットは、トークン化される。
【0071】
トークン化は、コードから関連しない要素を除去し、コードを別個のトークンに分割する。トークナイザは、コードスニペット全体を通して横断し、全てのキーワード、リテラル、および変数を保全し、コメントのような雑音を除去する。例えば、以下のコードスニペット
【化19】
は、トークン化後、以下に変換されるであろう。
【化20】
【0072】
プロセスは、次いで、ブロック230に移り、トークン化されたコードスニペットは、別個のトークンに分割される。
【0073】
プロセスは、次いで、ベクトル化ステップのためにブロック240に移り、トークンは、数値にマッピングされる。例えば、上記のコードスニペットは、以下にマッピングされ得る。
【化21】
式中、「$」は、1にマッピングされ、「.」は、2にマッピングされ、「ajax」は、3にマッピングされ、「(「and」)」は、4にマッピングされ、「{「and」}」は、5にマッピングされ、「url」は、6にマッピングされ、「:」は、7にマッピングされ、「SomeUrl」は、-1にマッピングされ、「,」は、8にマッピングされる。
【0074】
ベクトル化は、キーワードおよび他の一般的に使用される単語に関するマッピングを含有する辞書を利用してもよい。辞書がいかなるエントリも含有しない単語は、上記の「SomeUrl」の場合におけるように、-1にマッピングされる。
【0075】
プロセスは、次いで、埋込のためにブロック250に進み、そこで、数値は、ベクトルにマッピングされる。例えば、上記のコードスニペットは、埋込ステップの間に以下に変換され、各数値は、対応するベクトルにマッピングされる。
【化22】
【0076】
埋込ステップ250は、動作に先立って訓練データセットを用いて訓練される、埋込層によって実施される。訓練の間、各対応するベクトルは、各単語の間の意味論的関係を示すように精緻化される。通常の言語に関して、意味論的関係の使用は、性能を大いに改良する。例えば、JavaScript(登録商標)プログラミング言語では、トークンvarに、名前トークンが続き、新しい変数がインスタンス化されていることを示す。
【0077】
少なくとも1つの実施形態によると、これらの数値ベクトルの長さは、6kであるが、しかしながら、本開示は、そのように限定されない。したがって、埋込後、ベクトルは、所望の長さを達成するために、ブロック260においてパディングされる、または切り詰められる。上記の実施例に関して、結果として生じるベクトルは、下記に示されるようなものであろう。
【化23】
【0078】
プロセスは、次いで、ブロック270に進み、終了する。
抽象化
【0079】
抽象化は、プログラミング言語に関する広く採用される設計パターンである。プログラマが、ますます複製されたコードを記述するとき、プログラマは、繰り返しパターンを単一のベースクラスまたはテンプレートに抽象化する傾向がある。リカレントニューラルネットワーク(RNN)は、長いシーケンスデータに関する勾配の消失に悩まされ得、これは、難読化されたコンテンツからコンテキストの意味を抽出するための不良な性能につながる。本開示の少なくとも1つの実施形態によると、以下の抽象化プロセスは、入力のサイズを低減させるために使用される。
【0080】
概して、抽象化プロセスは、コードフラグメント全体を横断し、これが後のシーケンスの意味論を表すことができるかどうかのトークン毎の確率を計算する。確率に基づいて、コード全体が、異なる断片に切り詰められる。全ての断片は、次いで、ともに集められ、新しい抽象化を生成する。
【0081】
調整可能なパラメータが、抽象化プロセスにおいて使用される。具体的には、大きいコードセグメント(上記に議論されるように、一連のベクトルによって表されるような)を分割するとき、抽象化プロセスは、それぞれ、所定の長さlenを有する、いくつかのトランク(すなわち、コードセグメントのサブセグメント)を生じるであろう。トランクの数は、モデルのフィルタの数tに等しいであろう。例えば、1,000個のトークンを有するコードセグメントが、長さ20の10個のトランクに抽象化され得、これは、次いで、長さ200のコードセグメントに再組み合わせされる。実験を通して、抽象化されるコードセグメントの長さに応じて、良好な結果を達成するために、フィルタの数が、4~8に設定され得、長さが、256または512に設定され得ることが見出された。
【0082】
そのようなプロセスは、図3に関して図示される。具体的には、図3では、プロセスは、ブロック310において開始され、ブロック320に進み、1次元畳み込みニューラルネットワークが、テキストシーケンス内のトークン毎にロジットを生成するために使用される。とりわけ、本ステップに関する入力は、1次元畳み込みニューラルネットワークが、より高い次元内に埋込される空間情報から利益を享受し得るように、埋込ベクトルである。本ステップは、元のコードセグメントのトークン毎にロジットを生成する。
【0083】
プロセスは、次いで、ブロック330に進み、t回反復する。ブロック330から、反復の数が、t未満である場合、プロセスは、ブロック340に移り、そこで、確率が、サブセグメントのトークン毎に計算される。本開示の少なくとも1つの実施形態によると、本ステップは、関数softmaxによって実施されてもよい。
【0084】
ブロック340の出力は、図4に関して図示される。図4に見られるように、トークンz,…,z毎に、確率(すなわち、0~1または0~100の数)が、存在する。図4の実施例では、最も高い確率は、ベクトルzに関して見出される。
【0085】
プロセスは、次いで、ブロック350に進み、そこで、最も高い確率を伴うトークンが、選択される。具体的には、i番目の反復において、i番目に高い確率を伴うトークンが、選択される。新しいトランクが、次いで、ブロック360において構築され、ステップ350において選択されたトークンから開始され、lenの後続トークンが続く。これは、長さlen+1のトランクを生じる。
【0086】
プロセスは、次いで、次の反復のためにブロック330に戻る。全ての反復が、実施された場合、プロセスは、ブロック340からブロック370に進み、そこで、全てのトランクが、組み合わせられる。プロセスは、次いで、ブロック380に進み、終了する。
【0087】
畳み込みニューラルネットワークは、データのサイズに対してスケーラブルであり、各フィルタは、並列に算出され、それによって、長いシーケンス問題に対するソリューションを提供することができる。
【0088】
図3に図示される抽象化アルゴリズムはまた、以下のように表されてもよい。
【化24】
抽象化ポリシー勾配
【0089】
本開示は、リカレントニューラルネットワーク(RNN)を使用するエンコーダモデルおよびエンコードされたベクトルとコサイン類似度との比較を提供する。また、クローン探索ツールはまた、対を効率的に探索する必要がある。シードトークンは、宛先トークン間にランダムに分散されることができるが、スクリプトファイルを異なる断片にパーティション化することは、実行可能ではない。したがって、宛先トークンの全てのトランクを走査し、シードトークンの分布を予測する必要性が、生じる。
【0090】
本問題は、古典的な確率問題に同化されることができ、3つのボールを含有する袋が存在し、各ボールが黄色または赤色のいずれかであり得ると仮定する。ボールが、一度に1つ選択される場合、それらのうちの何個が赤色であり、それらのうちの何個が黄色であるか?本質問に答えるために、下記の方程式2によって定義される、最大尤度推定(MLE)が、使用されてもよい。
【化25】
【0091】
単一のコードセグメントが、n個の順序付けられたコード断片のセットC={x,x,…,x}として表される。真の確率分布π(C)を推定するために、本開示の少なくとも1つの実施形態によると、Cdestからトークンを抽出するためのパラメトリック関数近似πθ(Cdest)が、提供され、パラメータθは、観察されるデータの確率を最良に近似させることができる。したがって、θは、Cdestと同一の空間にわたってあるべきである。最大尤度は、πθ(x)の積であり、結合確率を表す。しかしながら、深層ニューラルネットワークが収束することを困難にもする、数値オーバーフローまたは消失を回避するために、本発明者らは、対数確率の和を使用する。また、対数尤度を最大限にすることは、交差エントロピまたはKL発散を等しく最小限にする。
【0092】
destが細工された宛先コード断片であり、Cseedがシードトークンであり、T={t,t,…,t}が抽象化されたトークンであると仮定して、本発明者らは、したがって、以下の条件付けられたMLEを有する。
【化26】
【0093】
ニューラルネットワークの訓練の間の目的は、ニューラルネットワークの算出から受け取られる報酬を最大限にすることである。これは、損失関数に基づいて達成され得、報酬を最大限にすることは、損失関数を最小限にすることに対応する。本開示の少なくとも1つの実施形態によると、損失関数および損失関数の導関数は、以下の通りである。
【化27】
式中、
【化28】
は、期待値を表し、tは、抽象化されたトランクであり、r(T)は、抽象化されたトークンをシードトークンと比較することによって受け取られる単一の報酬である。
【0094】
ここで、上記に基づく抽象化モデルのための訓練プロセスを図示する、図5が、参照される。図5のプロセスは、複数の訓練データファイルを用いて、収束まで、すなわち、損失関数が最小限にされるまで実施されてもよい。
【0095】
訓練データファイルのセット毎に、それぞれ、シードコードセグメントおよび宛先コードセグメントに対応する、CseedおよびCdestが、存在する。
【0096】
プロセスは、ブロック510において開始され、ブロック520に進み、そこで、Cseedが、図3に関して上記に説明されるプロセスに従って抽象化される。これは、抽象化されたコードセグメントTseedを生じる。
【0097】
プロセスは、次いで、ブロック530に進み、そこで、Tseedは、ベクトル化され、ベクトルVseedを生じる。これは、すでに訓練されているエンコーダに基づいて実施される。
【0098】
プロセスは、次いで、ブロック540に進み、そこで、Cdestが、図3に関して上記に説明されるプロセスを使用して抽象化される。これは、抽象化されたコードセグメントTdestを生じる。
【0099】
プロセスは、次いで、ブロック550に進み、そこで、Tdestは、ベクトル化され、ベクトルVdestを生じる。これは、すでに訓練されているエンコーダに基づいて実施される。
【0100】
次いで、ブロック560において、VseedおよびVdestが、コサイン類似度を使用して比較される。これは、訓練データであるため、CseedおよびCdestがクローンであるかどうかは、既知である。プロセスが、正しい答えを生じた場合、すなわち、VseedおよびVdestが、それらが実際に合致するときに合致することが見出される場合、報酬が、ブロック570において支給される。そうでなければ、プロセスが、誤った答えを生じた場合、ペナルティ(すなわち、負の報酬)が、ブロック570において適用される。
【0101】
プロセスは、次いで、ブロック580において終了する。
【0102】
1次元畳み込みニューラルネットワークを訓練する本方法は、これが離散的シーケンスを取り扱い得る一方、他の深層学習モデルが離散的シーケンスから収束することができないであろう点において有用である。
【0103】
報酬に基づいて、最大尤度確率が、抽象化モデルに関する損失として計算される。値は、離散的であるため、期待値は、対数確率に報酬を乗算したものの和である。
【0104】
要約すると、抽象化アルゴリズムは、トークン毎のポリシーによって難読化された宛先ファイルからトークンを抽出する。次いで、訓練アルゴリズムは、抽象化とシードトークンとの間のコサイン類似度スコアに基づいて、報酬を割り当てる。次いで、ポリシーは、方程式4によって更新される。
抽象化のもつれ解除
【0105】
いかなるグリーディポリシーも、図5に関して上記に説明される抽象化訓練方法において使用されないため、抽象化モデルは、容易に過剰適合され得る。例えば、難読化されたシードに関する共通のパターンが、存在する場合、全てのフィルタは、コードトランクのそのパターンに集中され得る。生成された分布をさらに正規化するために、本発明者らは、フィルタ毎の確率を比較するために、カルバック-ライブラー発散を使用する。カルバック-ライブラー発散は、T. Van ErvenおよびP. Harremos. Renyi divergence and kullback-leibler divergence, IEEE Transactions on Information Theory, 60(7):3797-3820, 2014(参照することによって本明細書に組み込まれる)に議論されている。
【0106】
本プロセスは、抽象化プロセスが、コードセグメントを横断して分散されるコードトランクを選択することを確実にする。以下の方程式が、使用され得る。
【化29】
式中、pおよびpは、図3のステップ340において算出されるような2つのフィルタに関する統計分布を表す。
【0107】
負のカルバック-ライブラー発散が、コードセグメントの同一の区分から選択される多くのコードトランクを有する代わりに、コードセグメントからコードトランクのより平衡された分布を提供するために使用される。
【0108】
したがって、本開示の少なくともいくつかの実施形態によると、抽象化モデルは、図6に図示される方法に基づいてさらに精緻化される。
【0109】
図6に見られるように、プロセスは、ブロック610において開始され、ブロック620に進み、そこで、コードセグメントが、訓練された抽象化モデルを使用して抽象化される。少なくともいくつかの実施形態によると、抽象化モデルは、図5の方法を使用して訓練される。また、少なくともいくつかの実施形態によると、コードセグメントは、図3に図示される方法を使用して抽象化される。
【0110】
プロセスは、次いで、ブロック630に進み、そこで、抽象化モデルにおいて使用されるフィルタのセットからのフィルタの各同じではない対が、それを通して反復される。ブロック640において、抽象化モデルからの2つの同じではないフィルタが、選択される。プロセスは、次いで、ブロック650に進み、そこで、カルバック-ライブラー発散が、計算される。少なくともいくつかの実施形態によると、これは、上記の方程式6に従って実施される。
【0111】
図3に関して見られるように、ステップ340は、確率の計算を伴う。これらの確率分布は、2つの選択されたフィルタのそれぞれに対応する、pおよびpとして方程式6にフィードされる。
【0112】
プロセスは、次いで、ブロック660に進み、そこで、報酬が、カルバック-ライブラー発散に基づいて支給される。報酬は、損失関数に基づき得、最小限にされた損失は、最大限にされた報酬と同等であると見なされる。
【0113】
報酬は、次いで、抽象化モデルを調節し、コードセグメントからのコードトランクのより平衡された分布を提供するために使用される。
エンコーダ
【0114】
エンコーダは、コードトークンを、抽象構文木(AST)のトークンまたはノードの数よりも少ない次元を伴う固定長の特徴ベクトルに直列化する。本開示のエンコーダモデルは、2つまたはそれを上回るRNN層と、1つまたはそれを上回る完全に接続されたフィードフォワード層とを含有する。RNNは、事前のコンテキストの意味を後の状態に繰り越すことができ、これは、コードの意図が、コンテキスト全体でのみ表され、難読化が、元のコードの構造をさらに改変し得るため、モデルにとって有益である。各隠れRNN層はまた、双方向性であり、これは、タイムスタンプ毎に前方および後方状態を連結する。RNN層は、比較されるべきベースラインとして注意エンコーダと置換される。最後の層は、隠れ状態を最終ベクトルにマッピングする、完全に接続された層である。
【0115】
ここで、本開示の少なくとも1つの実施形態による、コードセグメントをエンコードするための方法を図示する、図7が、参照される。本方法のパラメータは、双方向性ニューラルネットワークに関する隠れ層の数Nと、埋込次元と、ニューラルネットワークに関するセルの数とを含む。
【0116】
プロセスは、ブロック710において開始され、ブロック720に進み、そこで、コードセグメントが、埋込され、ベクトルを生じる。プロセスは、次いで、ブロック730に進み、隠れ層毎に1回ずつ、N回通して反復する。
【0117】
ブロック740において、ベクトルは、ニューラルネットワークを通して処理される。とりわけ、ベクトルは、最初の反復において、ブロック720において生じたベクトルが使用され、その後、各後続反復において、事前の反復によって生じたベクトルが使用されるように、各反復において更新される。
【0118】
いったんベクトルが、双方向性ニューラルネットワークを通してN回実行されると、各反復からの全てのベクトルは、ブロック750において、多層パーセプトロン(MLP)を通して組み合わせられ、最終ベクトルを生じる。プロセスは、次いで、ブロック760において終了する。
【0119】
トランスフォーマアーキテクチャが、より良好な性能のために一般的に使用されるが、本願では、トランスフォーマアーキテクチャのエンコーダ部分のみが、これが既存のアルゴリズムによって探索され得るように、スクリプトを代表的ベクトルにエンコードするために必要とされる。m個のシードファイルおよびn個の難読化されたファイルを比較するためにエンコーダおよびデコーダアーキテクチャを使用することは、O(mnt)かかり、tは、トランスフォーマニューラルネットワークに関する動作である。
類似度学習
【0120】
いったん字句トークンが、特性ベクトルに変換されると、異なるベクトルの間のコサイン類似度が、計算されることができる。本開示の少なくともいくつかの実施形態によると、本計算は、以下の方程式に基づく。
【化30】
【0121】
ユークリッド距離に優るコサイン類似度が提供する1つの利点は、コサイン類似度の値が、[-1;1]の範囲内であり、機械学習モデルが標識を用いて損失を容易に計算し得るように、全ての場所で連続的であることである。エンコーダモデルに関する訓練プロセスは、図8に関して説明される。コサイン類似度は、標識との一貫性のために[0;1]の範囲にスケーリングされる。バイナリ交差エントロピは、勾配降下に関する損失関数として使用される。
【0122】
図8のプロセスは、複数のシードファイルと、複数の宛先ファイルと、任意の2つのファイルが相互のクローンであるかどうかを示すデータとを備える、訓練データをフィードされる。図8のプロセスが実施される度に、選択された宛先ファイルおよび選択されたシードファイル、およびファイルの本対がクローンであるかどうかの知識が、入力として提供される。
【0123】
図8のプロセスは、ブロック810において開始され、ブロック820に進み、そこで、宛先ファイルは、訓練中のエンコーダを使用してエンコードされる。プロセスは、次いで、ブロック830に進み、そこで、シードファイルは、訓練中のエンコーダを使用してエンコードされる。少なくともいくつかの実施形態によると、ブロック820および830におけるエンコーダは、上記に説明される図7による方法を使用する。
【0124】
プロセスは、次いで、ブロック840に進み、そこで、ブロック820および830においてエンコードされたベクトルの間のコサイン類似度が、計算される。少なくともいくつかの実施形態によると、コサイン類似度は、上記の方程式7に従ってエンコードされる。
【0125】
コサイン類似度は、次いで、ブロック850において報酬を支給するために使用され、プロセスは、ブロック860において終了する。報酬は、損失関数に基づき得、例えば、バイナリ交差エントロピが、損失関数として使用され得る。バイナリ交差エントロピを算出するために、コサイン類似度は、以下の公式に基づいて、[0;1]の範囲にスケーリングされる。
【化31】
式中、yは、[-1;1]の範囲を有するコサイン類似度であり、yscaledは、[0;1]の範囲を有するスケーリングされたコサイン類似度である。バイナリ交差エントロピは、次いで、以下の方程式を使用して算出され得る。
【化32】
式中、
【化33】
は、2つのファイルの間の既知の関係を表し、yは、スケーリングされたコサイン類似度である。
【0126】
エンコーダは、次いで、損失関数に従って更新され、図8のプロセスは、エンコーダが収束するまで、異なる入力ファイルを用いて繰り返されてもよい。
悪性ソフトウェアの識別
【0127】
本開示の少なくともいくつかの実施形態によると、図9に関して図示されるように、悪性ソフトウェアを識別するための方法が、提供される。少なくともいくつかの実施形態によると、図9の方法において使用されるエンコーダは、上記に議論される図7の方法に従って動作し、上記に議論される図8の方法に従って訓練されている。既知の悪性ソフトウェアファイルを備えるデータベースが、新しいソフトウェアファイルを試験するために使用される。既知の悪性ソフトウェアファイルは、Cseedとして識別され、新しいソフトウェアファイルは、Cdestとして識別される。
【0128】
プロセスは、ブロック910において開始され、ブロック920に進み、そこで、Cdestは、抽象化される。上記に議論されるように、抽象化プロセスは、宛先ファイルのサイズをエンコーダによって適切に取り扱われ得るサイズまで低減させるために使用される。したがって、いくつかの実施形態によると、本ステップは、宛先ファイルのサイズが閾値を下回る場合、省略されてもよい。
【0129】
少なくともいくつかの実施形態によると、使用される抽象化モデルは、上記に議論される図3に従って動作し、上記に議論される図5に従って訓練されている。また、少なくともいくつかの実施形態では、抽象化モデルは、上記に議論される図6に従って精緻化されている。
【0130】
プロセスは、次いで、ブロック930に進み、そこで、宛先ファイルは、ベクトルにエンコードされる。少なくともいくつかの実施形態によると、使用されるエンコーダは、上記に議論される図7に従って動作し、上記に議論される図8に従って訓練されている。
【0131】
プロセスは、次いで、ブロック940に進み、そこで、既知のマルウェアファイルが、既知のマルウェアファイルのデータベースから選択される。プロセスは、次いで、ブロック950に進み、そこで、既知のマルウェアファイルは、ブロック930におけるものと同一のエンコーダを使用して、ベクトルにエンコードされる。
【0132】
プロセスは、次いで、ブロック960に進み、そこで、宛先ファイルに関するベクトルおよび既知のマルウェアファイルに関するベクトルのコサイン類似度が、算出される。次いで、算出されたコサイン類似度に基づいて、宛先ファイルが既知のマルウェアファイルのクローンであるかどうかが、決定される。少なくともいくつかの実施形態によると、コサイン類似度は、宛先ファイルが既知のマルウェアファイルのクローンであるかどうかを決定するために、閾値と比較される。
【0133】
2つのファイルが、クローンである場合、プロセスは、ブロック980において終了する。アクションが、既知のマルウェアファイルのクローンとして識別された宛先ファイルに対して行われてもよい。例えば、宛先ファイルは、破棄される、または悪性ソフトウェアとしてタグ付けされてもよい。
【0134】
2つのファイルが、クローンではない場合、プロセスは、ブロック940において開始されて繰り返される。全ての既知の悪性ソフトウェアファイルが、宛先ファイルと比較された場合、プロセスは、ブロック980において終了する。この場合では、既知の悪性ソフトウェアファイルのうちのいずれも、宛先ファイルのクローンであると見出されなかった。アクションが、いかなるクローンも見出されなかった宛先ファイルに対して行われてもよい。例えば、宛先ファイルは、ホワイトリストに追加される、または使用が安全なものとしてタグ付けされてもよい。少なくともいくつかの実施形態では、宛先ファイルは、ソフトウェアプロジェクトに追加される。
例示的ハードウェア
【0135】
上記の機能性は、コンピューティングデバイスのうちのいずれか1つまたは組み合わせ上で実装されてもよい。図10は、本明細書に開示されるデバイスおよび方法を実装するために使用され得る、コンピューティングデバイス1000のブロック図である。具体的デバイスは、示されるコンポーネントの全てまたはコンポーネントのサブセットのみを利用してもよく、統合のレベルは、デバイス毎に変動してもよい。さらに、デバイスは、複数の処理ユニット、プロセッサ、メモリ等のコンポーネントの複数のインスタンスを含有してもよい。コンピューティングデバイス1000は、中央処理ユニット(CPU)1010と、メモリ1020と、大容量記憶デバイス1040と、周辺機器1030とを備えてもよい。周辺機器1030は、とりわけ、スピーカ、マイクロホン、マウス、タッチスクリーン、キーパッド、キーボード、プリンタ、ディスプレイ、ネットワークインターフェース、および同等物等の1つまたはそれを上回る入/出力デバイスを備えてもよい。CPU1010と、メモリ1020と、大容量記憶デバイス1040と、周辺機器1030との間の通信は、1つまたはそれを上回るバス1050を通して行われてもよい。
【0136】
バス1050は、メモリバスまたはメモリコントローラ、周辺バス、ビデオバス、または同等物を含む、任意のタイプのいくつかのバスアーキテクチャのうちの1つまたはそれを上回るものであってよい。CPU1010は、任意のタイプの電子データプロセッサを備えてもよい。メモリ1020は、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、同期DRAM(SDRAM)、読取専用メモリ(ROM)、それらの組み合わせ、または同等物等の任意のタイプのシステムメモリを備えてもよい。ある実施形態では、メモリ1020は、起動時の使用のためのROMと、プログラムを実行する間の使用のためのプログラムおよびデータ記憶のためのDRAMとを含んでもよい。
【0137】
大容量記憶デバイス1040は、データ、プログラム、および他の情報を記憶し、データ、プログラム、および他の情報をバスを介してアクセス可能にするように構成される、任意のタイプの記憶デバイスを備えてもよい。大容量記憶デバイス1040は、例えば、ソリッドステートドライブ、ハードディスクドライブ、磁気ディスクドライブ、光学ディスクドライブ、または同等物のうちの1つまたはそれを上回るものを備えてもよい。
【0138】
コンピューティングデバイス1000はまた、イーサネット(登録商標)ケーブルまたは同等物等の有線リンクおよび/またはノードまたは異なるネットワークにアクセスするための無線リンクを備え得る、1つまたはそれを上回るネットワークインターフェース(図示せず)を含んでもよい。ネットワークインターフェースは、処理ユニットがネットワークを介して遠隔ユニットと通信することを可能にする。例えば、ネットワークインターフェースは、1つまたはそれを上回る送信機/送信アンテナおよび1つまたはそれを上回る受信機/受信アンテナを介して無線通信を提供してもよい。ある実施形態では、処理ユニットは、データ処理および他の処理ユニット、インターネット、遠隔記憶設備、または同等物等の遠隔デバイスとの通信のために、ローカルエリアネットワークまたは広域ネットワークに結合される。
【0139】
先述の実施形態の説明を通して、本開示の教示は、ハードウェアのみを使用することによって、またはソフトウェアおよびハードウェアの組み合わせを使用することによって実装されてもよい。1つまたはそれを上回る実施形態またはその1つまたはそれを上回る部分を実装するためのソフトウェアまたは他のコンピュータ実行可能命令は、任意の好適なコンピュータ可読記憶媒体上に記憶されてもよい。コンピュータ可読記憶媒体は、光学(例えば、CD、DVD、Blu-Ray(登録商標)等)、磁気、ハードディスク、揮発性または不揮発性、ソリッドステート、または当技術分野で公知の任意の他のタイプの記憶媒体等の有形または一過性/非一過性媒体であってもよい。
【0140】
実験
【0141】
上記を試験するために、新しい試験データセットが、長いシーケンスデータをサポートするために文献において一般的に使用されるベースラインを含む、オープンソースリポジトリからJavaScript(登録商標)ファイルを収集することによって生成された。実験および結果の詳細が、付録A:Leo Song, Steven Ding, Yuan Tian, Li Tao Li, Weihan Ou, Philippe Charland, Andrew Walenstein, Cybertron: Towards a Robust JavaScript Clone Search System against Code Obfuscation through Reinforcement Subsequence Learningに提供されている。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
【外国語明細書】