こんにちは。明治大学総合数理学部現象数理学科3年の鈴木です。2016年度からWeb Engineerはじめて、現在はPlaid, incでインターン中です!
今回は、DeepSign: Deep Learning for Automatic Malware Signature Generation and Classificationを読んでみたので、軽く紹介しようと思います。マルウェアに関しての知識はなく、その分野を自身の研究にするわけでもありませんが、なんとなく気になったので。この論文を読んで、セキュリティ方面の知識をすこしつけられた気がします。
この記事では、論文のexperimental resultについては述べません。
DeepSign
事前知識
用語 | |
---|---|
マルウェア | 悪意のあるやつ |
signature | マルウェアを検知するバイトコード。ブラックリスト的なアプローチ。 |
semantic-aware | 意味論的な検知。人間と同じような感じでマルウェア動作の意味を認識して検知する。ポリモーフィック的なアプローチ。 |
zero-day attacks | ある脆弱性に対してまだパッチが出てない状態で、その脆弱をつくattackのこと |
invariant representation | 不変な表現。つまり、インプットの些細な変化に強い特徴量の事。ノイズ除去の意味合いが入っている。 |
Abstract
深層学習を使ったマルウェアシグネチャの生成と分類を行います。Deep Stack of Denoising Autoencoderを使って、マルウェアの動作の圧縮された不変な特徴量を生成し、それをマルウェアを検知するためのシグネチャとして使用します。
Intro
ほぼ指数的に増え続けるマルウェアに対し、そのマルウェアに対するメソッドのほとんどに変化はありません。アンチ・ウイルスソフトはマルウェアを検知、分析し、マニュアルでシグネチャを生成します。そして、そのアンチ・ウイルスソフトを使用するクライアントにソフトの自動アップデートをリリースします。こういったマニュアルな方法は多くの時間を必要とするため、その間に新しい検知されていないマルウェアによってコンピュータが感染する恐れがあります。また、検知されたとしても、検知から逃れるために、マルウェアの作成者はそのマルウェアのコードを僅かに変更を加えることが普通です。つまり、現在のマルウェアシグネチャ生成法ではマルウェアの僅かな変化に対してロバストではないということです。
自動マルウェアシグネチャ生成法は幾つか提案されていますが、これらの多くは、マルウェアのある特定の性質を利用したものなので、マルウェアコードの少しの変更に対して強くありません。そこで、コードの変更に強いシグネチャ生成法に深層学習を用いることで、以上の問題の解決をしようとしました。それこそがDeepSignです。
Related Works
Autograph
外部のネットワークからの接続があったときの、そのソースと場所を記録します。その外部ネットワークのIPアドレスからの接続回数が、事前に設定された数より多かった場合、そのネットワークをScannerとします。つまり、Scannerとは潜在的にマルウェアであると考えます。Autographは、そのネットワークの最も頻出なByte Sequenceを選択し、それをSigunatureとして使うことでマルウェア検知をします。しかし、そのbyte sequenceに修正を加えることでautographによってマークされたmalwareは検知から逃れることができます。
Honeycomb
Autographと似たような方法です。これは、honeypotのトラフィックを分析する手法です。HoneycombはLargest Common Substrings (LTS)というものをシグネチャとして使い、Packet PayloadsにあるSimilaritiesを測るのに利用します。The PAYL Sensorはネットワーク上の情報の流れをモニターし、Anomaly Detectionでmalicious attackを検知します。また、ゼロデイ攻撃のパケットが普通のトラフィックとの区別を推測します。
僕には、よくわかりませんでした。
Nemean Architecture
これは、Semantic-aware Network intrusion Detection System (NIDS) らしいです。ネットワークの侵入をセマンティックに検知するシステムということです(まんま)。これは、ネットワーク上のそれぞれのセッションからくるパケットをノーマライズし、意味論的なコンテクストをレンダーする手法で、似たセッションをクラスタ化し、それぞれのクラスタに対しシグネチャを生成します。
その他
- Amd
- Polygraph
- Early Bird
- Netspy
これらの手法は
マルウェアの特定の性質または動作に頼ったマルウェア検知手法です。そのため、新しいマルウェアを検知することができません。
Proposed Signature Generation Method
問
Is it possible to generate a signature for a program that represents its behavior, and is invariant to small scale changes?
訳
のマルウェアの動作を検知する、僅かな変化に対して不変なシグナチャを生成できるのでしょうか?
目的
僅かな変化に対して不変な特徴量を生成することです。
ソリューション
Deep Stacked Denoising Autoencoderを使うことです。
Program Behavior as Binary Vector
マルウェアの動作のログを取り、そのログを分析します。テキストファイルとして出力されるログをstringとして見たとき、そのstringの長さを固定する必要があります。それは、入力の次元を揃えるためです。よく使われる方法に N-gram extractionというものがあります。N-gramとは簡単にいえば、「ある文字列の中で、N個の文字列または単語の組み合わせが、どれぐらい出現するか」です。ログの前処理は以下の手順です。
- それぞれのログから、全てのUnigramと抽出します。
- 全てのログに含まれるUnigramは除外します。
- それぞれのUnigramの現れた数を数えます。
- 最も出現するUnigramの上位20000個を選択します。
- 全てのログを、unigramがそのログに含まれているか否かで、20000の長さのbit stringに変換します。
- これをDatasetとします
Training Stacked Denoising AE
Binary Vectorを入力としてDenoising AEを学習させていきます。
Encoder層の結合荷重を$W$、Decoder層の結合荷重を$W'$とし、$W'=W^T$と設定します。これはつまり、結合荷重のシェアです。Denoising AEのイメージは次の図になります。
Image From DeepSign Paper
ここで、Corrupted sampleとはノイズが加われたデータのことを指します。マルウェアで言えば、マルウェアの僅かな変化をノイズとして考えているということです。ノイズが加わったBinary Vectorを入力、ノイズの加わっていない元のBinary Vectorを出力としたAEを学習することが目的です。ただ、学習する際に、Stacked AEと同じ手法を用います。学習のイメージとネットの構造は次のような図となります。
Image From DeepSign Paper
Implement and Experimental results
論文参照
Concluding Remarks
深層学習の教師なし学習はマルウェアのhigh level invariant representationを生成するのに強いです。