マルウェアに対する機械学習の利用

#目的
マルウェアの解析にはどのようなものがあるのか？
マルウェアに使用されている技術にはどのようなものがあるのか？
機械学習はどのように利用されているかを知る。

#参考
・[Zero-day malware detection using transferred generative
adversarial networks based on deep autoencoders](http://sclab.yonsei.ac.kr/publications/Papers/IJ/2018_IS_JYK.pdf)
をもとに記述していく。
・[初めてのマルウェア解析](https://www.oreilly.co.jp/books/9784873119298/)
・[STAMINA:Scalable Deep Learning Approach for Malware Classification](https://www.intel.com/content/www/us/en/artificial-intelligence/documents/stamina-deep-learning-for-malware-protection-whitepaper.html)

#背景・既存の検査手法
論文中の記載によれば、
>The Symantec Intelligent organization stored 44 million new samples just in 2015

とあり、日々新しいマルウェアが生み出されている。



[サイバー攻撃の最近の動向等について](https://www.soumu.go.jp/main_content/000722477.pdf)の中では国内のサイバー攻撃の例が挙げられている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/64620080-65cd-af4a-34f3-8d87bfb74ed4.png)

このような攻撃から我々のPCをどのようにセキュリティーソフトは守っているいのか？
##①静的解析
ファイルを実行させずに分析する手法。
メリット:高速
デメリット:亜種に対応できない可能性がある

・ファイル形式の判別
Windows実行ファイル.exe .dll .com .drv .sys（PEファイルという）かどうかを判別する。拡張子は変更して見た目をだますことが可能であるため、ファイルシグニチャと呼ばれるファイルの最初の2バイトにMZ（AD 5A)がついているかを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/dea855b8-209a-222b-fc05-f7622f3d41ae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/6e4073a4-35c2-d883-5a0a-ad122b5305a6.png)

・文字列の抽出
攻撃者がファイルを作成したり、ドメイン名を変更、どこかへ接続を試みるなどをしている場合は、文字列としてファイル名、ドメイン名、URL,IPアドレス、攻撃コマンド、などが文字列として含まれている可能性があるため文字列の抽出を試みる。

・ハッシュ値の計算
既存のマルウェアの場合、ファイルの内容からハッシュ値が算出されている。それらのハッシュ値と検査対象のファイルのハッシュ値が同じかどうかを判定する。別の場所に自分自身を別の名前でコピーしたりするマルウェアが存在するため、名前は違うが同じ動作をするものの特定に役立つ。MD5,SHA1,SHA256などがデファクトスタンダード。

典型的な１２個のマルウェアのパターン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/9a72ac1e-e454-c0b3-79d8-d0a6a93eafaa.png)


・ファジーハッシュ
類似したマルウェアには屡次したハッシュ値が計算されるため類似したマルウェアの特定に利用する。

・インポートハッシュ
ライブラリ、使用しているAPIの名前などでハッシュ値を計算する.関連したマルウェアが特定できる。

##②動的解析
仮想環境や閉鎖環境でファイルの動作を監視して見分ける方法。
メリット：シグネチャ（特有のコードやハッシュなど）を変えたり、暗号化して検知から逃れているが、ウイルスの最終動作は変わらないため実行させればウイルスかどうか分かる。

デメリット：時間がかかる、リソースを消費する

#難読化手法
・シーザー暗号
単純にある値分増減させる手法
赤線で囲われた箇所が+2や-2されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/b586b832-02a0-0967-c172-0745c34f6b56.png)


・Base64
Asciiコードを二進数に直して、特定bit数ずつ対応するテーブルの文字に置き換える
取得した情報が何かを暗号化したりするのにも使う。
[Base64](https://ja.wikipedia.org/wiki/Base64)

・XORエンコーディング
あるキー（1～255）とXORをとりエンコード
元2： 0000 0010
key4:  0000 0100
　　   0000 0110

・マルチバイトXORエンコーディング
キーがマルチバイトになるため全探索が厳しくなる

・パッカー
プログラムを圧縮し、難読化する。
シグネチャとして特定されやすいコードの部分を圧縮し難読化することで検出から逃れる。
実行段階で圧縮箇所を解凍し正常に実行するようにしている。
実行フローが変わる。
[コード難読化コンパイラツール](https://engineering.linecorp.com/ja/blog/ork-vol-1/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/ad4a5d10-34aa-acc1-5b38-8e01883b4516.png)

サブルーチンの並び替え
実行処理部分のアドレスを変えることで検出を逃れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/8e93c363-f9cb-3d90-e989-0259c1c92793.png)

#ゼロデイ攻撃
>「ゼロデイ攻撃」とは、新たな脆弱性（セキュリティホール）が発見されたときに、問題の公表や修正プログラムが提供される前に行われるサイバー攻撃のことです。対策を取られる日を1日目（ワンデイ）と考え、それより前に行われるので0日目＝ゼロデイと呼ばれています。

ゼロデイ攻撃の多くが既存マルウェアをウイルスソフトに検知されないように改変されたものである。
ゼロデイ攻撃に対しては既存のウイルスソフトでは対応できないため、ゼロデイ攻撃に対す防御が必要になる。


#tDCGANを利用したゼロデイマルウェアの検知
##data
Kaggle Microsoft Malware Classification Challengeのデータを使用
バーナリーデータを二値化画像としてとらえる
k: データサイズ　C:列、R：行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/db34efa4-5351-17f6-0baa-a244a4db653e.png)

マルウェアのType毎に画像を表示
	赤：1　青：0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/28a60c8c-a3c2-deb3-1e63-13f66a07f964.png)

Train 9720
Test  1080
合計　10,800

##DCGANの構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/96e9e02b-7416-dcb7-a59a-f4bce0206418.png)
[UNSUPERVISED REPRESENTATION LEARNING
WITH DEEP CONVOLUTIONAL
GENERATIVE ADVERSARIAL NETWORKS](https://arxiv.org/pdf/1511.06434.pdf)

[GANについて概念から実装まで　～DCGANによるキルミーベイベー生成～](https://qiita.com/taku-buntu/items/0093a68bfae0b0ff879d)

##tDCGANの構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/2f89eba1-5f89-ff7f-bfb4-fd13aeaf535c.png)

通常GANの学習ではgeneratorの学習とdiscriminatorの学習が必要になる。そのため、時間がかかる。
本論文ではDeep Autoencoder(DAE)を学習した後に（マルウェア画像を別の形式で表現するような状態）、encoder DAEをDCGANのgenerator として使用している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/8857bcfe-4c9f-5c02-2c49-33052c30c528.png)


##結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/f3556551-856a-1135-667d-fa89b4b15517.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/8509db5c-15f7-ae47-53de-3e292665d85e.png)

似た特徴を持つファミリーは誤判定してしまうことがある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/bcbd74e7-ed77-d3a9-5c4e-ce2017b985fa.png)

特徴量をt-SNEアルゴリズムで分類。
Raw dataの時よりも明確に分類できるように特徴量を抽出できている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/d84af5c8-bf5b-bb91-6c64-8b4bbaa963a4.png)

###ゼロデイ攻撃に対して
マルウェア画像に対してノイズを加え、見破れるかを評価する。
ノイズはSSIMに従って加える。
SSIMは変化前後の画像がどれだけ似ているかの指標で
・画素値の変化
・コントラストの変化
・構造の変化
を見ている。SSIの値が大きいほど類似。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/e2276539-6d3b-cf04-0eea-09d251af85e4.png)

Fig. 13.のようにマルウェア画像にノイズを加える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/bf593df7-3841-aa97-f27b-9378a29de4e1.png)

tDCGANのAccuracyが一番高いとされている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/41c09d21-52d7-195c-21e1-22428f5e3523.png)