機械学習を使っているアンチウイルスを機械学習を使ってバイパスする「gym-malware」の紹介

マルウェアの分類のために使われている機械学習のblind spotを潰すために、機械学習を使っているアンチウイルス機械学習を使ってバイパスする研究が最近活発になってきている。 この記事では、black hat USA 2017で発表されたBot-Vs-Bot-Evading-Machine-Learning-Malware-Detectionとその関連研究を紹介する。これは、情報セキュリティ系論文紹介 Advent Calendar 2017 - Adventarの18日目の記事である。

背景

機械学習マルウェアファミリを一般化できるので、シグネイチャを持たない未知のマルウェアの検出に利用されているが、機械学習のモデルには盲点(blind spot)があり、それにより誤認識を引き起こす。機械学習を用いた画像認識が、ノイズを混ぜられた画像を誤認識することは以前話題になった。

f:id:TAKEmaru:20171218164343p:plain
バスの画像をダチョウと認識している。https://www.popsci.com/byzantine-science-deceiving-artificial-intelligence

画像認識と同じくアンチウイルスも誤認識をすることがあり、それによってアンチウイルスをバイパスされてしまう。

関連研究

当然ながら、機械学習をバイパスするにはモデルの情報を知っているほうが楽で、モデルに関する情報がなければ難易度が上がる。しかしアンチウイルスソフトの開発時にどのようなモデルを使っているか知る術はない。

f:id:TAKEmaru:20171218180411p:plain
https://www.blackhat.com/docs/us-17/thursday/us-17-Anderson-Bot-Vs-Bot-Evading-Machine-Learning-Malware-Detection.pdfより引用

ターゲットとなる機械学習のモデルを知っている状態でそれをバイパスする研究には、Androidマルウェア向けのAdversarial Perturbations Against Deep Neural Networks for Malware ClassificationマルウェアのC2サーバーとの通信を確立するDGA(domain generation algorithms)の検出/生成を目的としたDeepDGAがある。

また、ターゲットとなる機械学習のモデルが未知の状態でBlack-Box Attackを行う先行研究には、PDFマルウェアをターゲットとしたuvasrg/EvadeML: An evolutionary framework for evading machine learning-based malware classifiers.、 GANでPEバイナリの生成を試みるGenerating Adversarial Malware Examples for Black-Box Attacks Based on GANがある。Generating Adversarial Malware Examples for Black-Box Attacks Based on GANでは実行ファイルとしてのフォーマットを保つことは出来ていない。

gym-malware

この研究では、OpenAI gymという強化学習を行うプラットフォームの上にマルウェアを生み出す環境をgym-malwareとして実装することでアンチウイルスをバイパスするPEバイナリを作り出している。

github.com

OpenAI gymは強化学習におけるAction、Reward、Stateを以下のように定義している。

f:id:TAKEmaru:20171218200452p:plain
https://www.blackhat.com/docs/us-17/thursday/us-17-Anderson-Bot-Vs-Bot-Evading-Machine-Learning-Malware-Detection.pdfより引用

Action

  • 使用されないIATに関数を追加する
  • 既存のセクション名を操作する
  • 新しい(未使用の)セクションを作成する
  • セクションの最後の余分なスペースにバイト列を追加する
  • 元のエントリポイントにただジャンプするだけの新しいエントリポイントを作成する
  • 署名を操作する(中断する)
  • デバッグ情報を操作する
  • バイナリをパックまたはアンパックする
  • PEヘッダのチェックサムを変更する
  • PEファイルの最後にバイト列を追加する

ここでのPEフォーマットに関する操作にはLIEF - Library to Instrument Executable Formatsが用いられている。

Reward

ここでのアンチウイルスには、10万個のマルウェアと良性のバイナリを訓練し、受信者動作特性スコア(ROC AUC)が0.96になる勾配ブーストされた自前の決定ツリーモデルが用いられている。

State

以下のような静的なPEバイナリの属性を2350次元に圧縮している。

  • 一般的なファイル情報(サイズ)
  • ヘッダー情報
  • セクション特性
  • インポート/エクスポートされた関数
  • 文字列
  • ファイルバイトとエントロピーヒストグラム

実験結果

VirusShareで配布されているマルウェアを用いて、15時間で100K回の試行を行った。 black box attackにより生み出されたマルウェアの非検出率(16%)がscore-based attack (機械学習モデルがスコアを返す)のもの(14%)よりも高かった。

また、生成した20個のサンプルバイナリをVirusTotalにアップロードし、検出率の中央値が31/63から18/63に下がったことを確認した。

今後

機械学習を用いられているセキュリティ製品は増えてきており、機械学習のモデルのblind spotを探す研究動向は今後注視していきたい。

おまけ1

上のツイートではマルウェアのPEヘッダの実行に影響しない部分を変更しバイパスを試みているがCylanceは検出している。 こういうケースにはシグネイチャベースより機械学習を使う方が有用そう。

おまけ2

Fully undetectable backdooring PE file

上のリンクでは適当なバイナリ(ここでは7zip)に新しくセクション作ってshellcode置いて、そこに飛ぶようにパッチ当ててもアンチウイルスは検知しないという実験をしている。いい話。