エンジニアまで道半ば

興味を持った技術についての備忘録

機械学習でマルウェア検出 ー安易な特徴量選択がもたらすリスクー

本稿はセキュリティキャンプ Advent Calendar 14日目の記事になります.

先日やっと論文を投稿できたので, 飛び入り参加ですがそれ関連の記事を書こうと思います.

Intro

機械学習マルウェア検出や異常検知などを行う研究が盛んに行われているかと思います.

検出・検知というと精度やTPR, FPRばかりに意識がいきがちですが, ことセキュリティに関してはRobustness(堅牢性)も重要になってきます.

ここでいう堅牢性とは, 学習データにない未知のデータに対する分類精度や, 汚染データによる分類モデルそのものへの攻撃に対する耐性などを指します.

今回は堅牢性を無視した分類モデルに対して実際に回避攻撃を行うことで, そのリスクを目の当たりにしようと思います.

 

コードはこちら

データセットやそれに付随するデータをアップロードすることができないため, 参考程度にしてください

マルウェア検出器の準備

堅牢性を無視した分類モデルとして, ファイルに使用されている(全ての)APIのみを特徴量としたマルウェア検出器を作成します.

データセットの都合上学習過程は省きますが, 訓練データのマルウェアと良性ファイル各3000個からAPIを抽出し, それら全てを特徴量に用いて学習させます.

今回は34499個(次元)の特徴量でロジスティック回帰(LR), ランダムフォレスト(RF), 多層パーセプトロン(MLP)で学習させました.

テストデータ(訓練データとは別の各3000個)に対し, 以下の結果が得られました.

  LR RF MLP
TPR(%) 93.9 91.8 93.9
FPR(%) 6.7 5.1 6.9

 

TPR: マルウェアの内, 正しくマルウェアと予測された割合

FPR: 良性ファイルの内, 誤ってマルウェアと予測された割合

※現実的にはこのFPRは高すぎます

マルウェア検出器の回避手法

作成したマルウェア検出器をどのように回避する(良性ファイルとして誤分類させる)のかというと, 一つの手段として, 攻撃者がマルウェアにダミーのコードを追加するかのごとく, 良性ファイルの特徴量をマルウェアの特徴量に加えるということが考えられます. これを実装したものにMalGANがあります.

 

MalGANはHuらが提案した, GANを応用した検出回避手法です. 要するにニューラルネットワークを攻撃に使用したものです.

Windows APIを特徴量としてマルウェア分類する検出器に対し, 以下の手順を繰り返すことで検出を回避するマルウェアの特徴量(APIリスト)を生成します.

  1. 生成器(Generator)による特徴量生成
  2. マルウェア検出器(Black-Box Detector)によるラベル付
  3. 代替識別器(Substitute Detector)によるマルウェア検出器の分類規則の学習
  4. 生成器による良性ファイル(Benign)生成の学習

f:id:phantasmagoria812:20181216195355p:plain

MalGAN (Huらの論文より引用)

実際の彼らのコードはこちらにあがっていますが, いろいろと突っ込みどころがあったので私なりに改良しています. また, 今回はデモ用にコードを多少簡素にしています.

今回改良したMalGAN

詳細な変更箇所は省略しますが, 改良したMalGANの構成は以下のようになっています.

f:id:phantasmagoria812:20181216201828p:plain

改良したMalGAN

まず, マルウェアに追加するためのAPIリストを作成します.

今回は検出器の学習には使われていない, 30個の良性ファイルから抽出された1799次元のAPIリストを作成しました.

改良したMalGANは, そのAPIリストに回避させたいマルウェアAPI(59次元)の重複しないものを追加した, 1807次元の特徴量からAPIリストを生成します.

 

いざ, LR検出器を回避

f:id:phantasmagoria812:20181216204932p:plain

0エポック目から回避できてますね...ガバガバすぎる...

しかし生成データのAPI数に制約をかけていないため,

f:id:phantasmagoria812:20181216205822p:plain

このとおり元のマルウェアに対し, 928-59=869個のAPIを追加したものが生成されてます. これでは使い物になりません.

そこで生成器に対し, 次のような損失を与えます.

f:id:phantasmagoria812:20181216212058p:plain

xハットは生成された特徴量, xはマルウェアの特徴量, mは次元数, nはバッチサイズです.

これを適用すると,

f:id:phantasmagoria812:20181216220219p:plain

このように回避に必要なAPI数を減らしていくことができるわけですね. ちなみに元のマルウェアの次元数に近づくような式にしてます.

しかしながら, API数を減らしていくということは回避もしにくくなるわけで, 学習も不安定になります. 途中からマルウェアと分類されるものしか生成できなることも多々あります.

またこの時, 検出器のアルゴリズムによって減らせるAPI数に差がでてきます.

今回の試行ではLRは約200, RFは約400, MLPは約230に収束しました.

この数値は分類モデルの堅牢性を示す上で重要になってきますね.

MalGANの使い道

堅牢性の検証に使えることは言わずもがなですが, それ以外だと訓練データの増幅に使えるのではないかと考えています. マルウェアの検体ともなると入手が困難ですから. ただし, 安易な増幅も誤検知をまねくのが機械学習検出の難しいところです.

終わりに

マルウェア検出器に対し回避攻撃を行うことで, 分類モデルにおける堅牢性の重要さを示しました.

今回はAPIのみを扱いましたが, その他生成しやすいパラメータを特徴量に用いている場合は注意が必要になると思います.

これを機に堅牢性について一考してもらえると幸いです.

NAIST受験とJAIST受験

はじめに

この度、NAIST(奈良先端科学技術大学院大学)とJAIST(北陸先端科学技術大学院大学)の平成31年度4月入学者用の選抜試験を受けてきました。

結果はまだですが、入試を受けるまでと入試当日について記しておきます。

(マルウェア解析系の記事は数学やってたら時間がなくなってしまったため受験までに間に合いませんでしたが、継続して書いていきます。

入試を受けるまで

February 24, 2018

NAISTオープンキャンパス in 奈良

大学院の説明を受けたり、各研究室を周って研究内容や雰囲気を知る

(過去の小論文や、論文添削を請け負っていただける先輩の連絡先を入手できるとgood

February 26-27, 2018

NAISTスプリングセミナー in 奈良

2~3日間のセミナー。各研究室ごとにテーマがあり、やりたいものに事前応募する。この年はオープンキャンパスと日が近く、非常に良かった。セミナーの内容自体も技術的で面白く、とても良いものだった

March 10, 2018

JAIST説明会 in 東京

大学院の説明会。JAISTオープンキャンパスの情報や募集要項が出るのが遅いので参加するのもあり。この時期は頻繁に開催されている。オープンキャンパスでも同じようなことを説明されるので、オープンキャンパスに行くと決めてる人は必要ないかもしれない

April 24, 2018

NAISTいつでも見学会 in 奈良

見学したい研究室の教授にお願いをして見学しにいく。私はオープンキャンパスだけでは時間が足りず、その後も質問事項がいくつかできたため、いつでも見学会を利用した

May 26, 2018

JAISTオープンキャンパス in 石川

NAISTオープンキャンパスは午前中から好きな時に研究室を周れるが、JAISTは午後からという縛りがある。ただし、JAISTは交通費補助(QUOカード)を出してくれる。私はこの日、目当ての先生があるプロジェクトで大半の研究生と一緒に外部の方に出払ってしまっていたため、お会いすることが出来なかった

June 12, 2018

NAIST, JAIST願書出願

高専編入者は高専時代の成績証明書が必要になるため、あらかじめ用意しておこう。小論文はこの時に提出する。NAISTの出願期間は3日間しかないため注意しよう

July 7, 2018

JAIST入試 in 東京

試験地は東京か石川で選べる。(希望に添えない場合もあり)

July 9, 2018

NAIST入試 in 東京

試験地は東京か奈良で選べる。(希望に添えない場合もあり)

試験勉強について

小論文

小論文はNAISTのいつでも見学会が終わったころから書き始めました。第一志望がNAISTだったことから、NAISTの小論文から書き始め、最終的に計3回の添削をお願いしました。その際、志望研究室の多くの方に添削していただけたので大変感謝しております。JAISTの小論文については、どちらの大学院に行っても同じ研究を行いたかったので、同じテーマで書きました。気が向いたら書いた小論文を公開します。

ちなみに、NAISTの試験は小論文(面接)とTOEICと数学(面接)。JAISTの試験は小論文(面接)だけです。

TOEIC

TOEICは630点が平均と言われています。学部3年生の頃からコツコツTOEICを受け、公式問題集やPodcastなどで勉強し続けていれば600点はいくと思います。

数学

数学は小論文を書く合間に勉強し、願書を出願し終えた後は本格的にシフトしました。

参考書はマセマの「大学数学キャンパス・ゼミ」シリーズの微分積分線形代数統計学常微分方程式を使用しました(統計学については結局テスト範囲ではなかったけれど)。常微分方程式については最後の方までやる必要はないと思います。線形代数については年によっては最後の方にでてくるジョルダン標準形も問題として出ているので、やっておいた方が良いと思います。

あとはネット上にあった過去問やオープンキャンパスで教えていただいた過去問を解きました。解いたものをLaTeXにまとめてpdf化したので公開します。

NASIT数学問題&解答例まとめ

今年の問題については一応まだ伏せておきます。

試験当日

JAIST

JAISTの面接はまずOHP(プリントをスクリーンに映すやつ)を使って7分間小論文についてのプレゼンをします、その後23分間の質問を受けます。面接官は3人でした。質問内容としては機械学習についての研究を行う場合、以下のようにちゃんと理解しているか聞かれます。

  • プレゼンにてわからなかったこと、伝わらなかったこと、疑問点
  • データセットはどうするのか
  • 機械学習の代数的な意味(行列計算)や偏微分について理解しているか
  • 固有値の定義、ラグランジュの未定乗数法を書け
  • 機械学習に関する式を何か書け
  • 機械学習の環境は何を使っているか
  • プログラミング言語は何が書けるか
  • システムプログラミングの経験はあるか
  • UNIX系のOSの使用経験はどのくらいか
  • キーワード用紙に書いた科目について、科目名から察せないものについてはどのような内容か聞かれる
  • 英語はできるか
  • なぜJAIST、なぜその研究室か

NAIST

NAISTは数学の問題を閲覧するのに10分、数学の面接官の前で解くのに12分。別の部屋で小論文についてのプレゼンに3分、質問に9分です。数学の面接官は2人、プレゼンの面接官は3人でした。数学がある分、プレゼンの時間も質問の時間も非常に短く、すべてを伝えることは難しいです。また、機械学習についての研究を行う場合はやはりその点について聞かれます。

  • データセットはどうするのか
  • 提案手法で用いた技術はどこから知り得たのか
  • 現在までに自分が頑張ったこと
  • プログラミング言語は何が書けるか、どのくらい書いたか
  • 英語はできるか
  • オープンキャンパスやいつでも見学会の旅費はどうしたのか
  • 機械学習の環境は何を使っているか
  • 趣味はあるか

数学については解析学の方は問題なかったのですが、線形代数の問題が例年よりも特殊で、しっかり勉強したつもりでも一部しか解けませんでした。

おわりに

以上が私が受験までに行ったことと、受験で体験したことです。少しでも両大学院を目指す方々の参考になれば幸いです。私はこれらのことを全うするために4月に入ってからは卒業研究と併せ、2日に1回以上は徹夜する日々でした。その努力が実ることを信じています。

追記1

JAISTは合格してました。NAISTは発表がまだです。

追記2

NAISTも合格してました!

マルウェア解析について -マルウェア収集編-

はじめに

この章では, マルウェアを扱う上で留意しておかなければならない法律を紹介し, マルウェアの検体(サンプル)の収集方法を紹介する.

マルウェアに関する法律

不正指令電磁的記録に関する罪

不正指令電磁的記録作成・提供罪 (刑法第168条の2第1項)

正当な理由がないのに, 人の電子計算機における実行の用に供する目的で, 次に掲げる電磁的記録その他の記録を作成し, 又は提供した者は, 3年以下の懲役又は50万円以下の罰金に処する.

  1. 人が電子計算機を使用するに際してその意図に沿うべき動作をさせず, 又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録
  2. 前号に掲げるもののほか, 同号の不正な指令を記述した電磁的記録その他の記録
不正指令電磁的記録供用・同未遂罪 (刑法第168条の2第2項・第3項)

正当な理由がないのに, 人の電子計算機における実行の用に供する目的で, 次に掲げる電磁的記録その他の記録を作成し, 又は提供した者は, 3年以下の懲役又は50万円以下の罰金に処する(項目は作成・提供罪の1.2.と同じ).

不正指令電磁的記録取得・保管罪 (刑法第168条の3)

正当な理由がないのに, 前条第1項の目的(人の電子計算機における実行の用に供する目的)で, 同項各号に掲げる電磁的記録その他の記録を取得し, 又は保管した者は, 2年以下の懲役又は30万円以下の罰金に処する.

引用元:いわゆるコンピュータ・ウィルスに関する罪について 法務省

いくつか補足事項を述べる.

“正当な理由”に該当するもの

  • ウィルス対策ソフトの開発・試験等を行う場合
  • ウィルスを発見した人がウィルスを研究機関等に提供する場合

“人の電子計算機における実行の用に供する”とは

  • プログラムがウィルスであることを知らない人のコンピュータ上に, そのプログラムが実行できる状態に置くこと. 実行できる状態については, アイコンのダブルクリック等の行為が必要であるか否かは問わない

“意図に沿うべき動作をさせず”に該当しないもの

  • プログラムのバグは, ウィルスに当たらない
  • 例えば, ハードディスク内のファイルを全消去するプログラムが, その機能を適切に説明したうえで公開されており, 使用者の意図に沿って動作する場合は処罰対象とはならない

“同号の不正な指令を記述した電磁的記録その他の記録”とは

マルウェアの検体の収集方法

注意:検体を収集する場合は, その危険性を把握し, 自己責任で行ってください

Webサイトからのダウンロード

検体を公開しているサイトには以下のようなサイトがある.

 

ハニーポットを運用する

ハニーポットとは, 脆弱性を装うことで攻撃を誘い込み, 侵入方法の解析やマルウェアの収集を実現するものである.

ハニーポットの構築方法について(後日編集)

Dockerでハニーポットを運用しよう(後日編集)

セキュリティ系のイベントに参加する

セキュリティ系のイベント等に参加することで検体を入手するという手法もある. 検体を配布しているイベントは, 以下のものが挙げられる. ただし, 検体を扱うにあたり契約が必要な場合がある.

  • マルウェア対策研究人材育成ワークショップ MWS
  • SecHack365

マルウェア解析について -環境構築編-

はじめに

マルウェア解析のための環境構築には、 物理環境と仮想環境(サンドボックス環境)の2種類の方法がある。

動的解析を行う場合はマルウェアを実際に動作させるため、どちらの環境でも学内ネットワークや社内ネットワークから隔離して行わなければならない。

物理環境

解析用に新しくハードウェアやネットワーク機器を用意する方法である。昨今のマルウェアは仮想環境を検知して自身を消去したりダミーの動作をしたりするものが多いが、物理環境ではそれらの仮想環境検知を回避できるため、難しいことを一つ考えなくて済む。ただし、元の感染前の状態に戻すのに手間がかかる。

仮想環境

仮想化ソフトウェア(VMware WorkstationやVirtualBox, KVM, QEMU, Hyper-Vなど)を使用して、物理環境をエミュレートする方法である。スナップショット機能により、感染状態からの復旧が速い。

スナップショット

特定時点におけるVMディスクファイルをコピーしたもので、Windowsの復元ポイントによく似ている。スナップショットを作成すると、元のVMディスクファイルへの書き込みができなくなり、すべての新しい書き込みがVMのスナップショット版に対して行われることにより、元のVMディスクファイルが保持される。

VMware環境で仮想マシンのスナップショットを活用する

ここで、仮想環境上のOS(ゲストOS)に感染したマルウェアが、仮想環境を動作させているOS(ホストOS)に影響を及ぼさないのかと疑問に思うかもしれない。それについては次項に示す。


以下に物理環境と仮想環境の長所と短所を示す。現在のところ、仮想環境の利便性の方が高く主流である。

各解析プロセスの長所と短所
 
長所
短所
物理環境
  • 感染端末として完全に再現できる
  • 仮想環境対策の対策を考える必要がない
  • 感染した環境を元の状態に復旧するのに時間がかかる
  • 新しく機器を用意するためのコストがかかる
仮想環境
  • スナップショットにより復旧が速い
  • 無料の仮想化ソフトウェアを使えば費用は格段に安くなる
  • 解析環境対策への対策が必要になる
  • 仮想マシンを動作させるために、ある程度PCのスペックが必要(特にRAM)

仮想マシンの仕組み

まず、仮想マシンにはホスト型とハイパーバイザー型の2種類がある。詳しくは下記を参照。

ホスト型とハイパーバイザー型の違いは何?VMware vSphere Hypervisor の概要

ここで、ホスト型においてゲストOSは仮想化ソフトウェアによって、ホストOSから分離して稼働していることがわかる。これにより、一般的にはゲストOS上のマルウェアはホストOSに影響を及ぼすことができない。ただし、過去にはVENOMといったホストOSにアクセスできてしまう仮想化ソフトウェアの脆弱性が存在しており、ソフトウェアを最新の状態に保つことが重要となる。

仮想マシンに使用するOS

SyncerのOSのシェアの統計情報からも世界ではWindowsのシェアが圧倒的に多く、攻撃者は利益をより多く得るために、Windows用のマルウェアを作成する傾向が強い。そのため、動的解析を行う場合はWindowsを使用することが主である。Windows仮想マシンを作成する場合は、OSのイメージを購入するか、グレーだが、Microsoft Edgeのテスト用のディスクイメージを使用する方法がある。

大学ではよくMicrosoft ImagineでWindowsのISOファイルを入手できるが、これを仮想マシンに使うことは規約に違反するため、注意しなければならない。

動的解析を行わない場合は、Kali LinuxBackBoxといった様々なセキュリティツールが積まれたプラットフォームを用いると良い。

マルウェア解析について -概略編ー

はじめに

弊学の学生の頑張りを見て、自分も何か記事を残さないとなと思い、ブログをはじめていこうと思います。

h0r4k.hatenadiary.jp/entry/2018/05/19/215518

今回は手始めに卒業研究で扱うマルウェア解析について、数回に分けて書いていきます。

マルウェア解析の概略

マルウェア解析は以下のステップで行う。

f:id:phantasmagoria812:20180521142136p:plain

  1. 環境構築
    マルウェアが端末に感染してもいいように、普段用とは別に解析専用の環境を用意する。
  2. マルウェア収集
    マルウェアの検体を有志で配布してくれるWebサイトからダウンロードしたり、ハニーポットやハニークライアントを設置したり、マルウェア解析のコンペティションに参加したりすることによって解析対象のマルウェア(マルウェア検体)を手に入れる。
  3. 表層解析
    ファイルが悪性であるかの情報収集やファイルのメタ情報を収集する。ファイルタイプや動作するCPUアーキテクチャの情報、ハッシュ値などをもとに、既知のマルウェアかどうかを判定する。実際にマルウェアを動作させたりマルウェア内のプログラムコードを分析したりはしない。
  4. 動的解析(ブラックボックス解析)
    解析専用環境でマルウェアを動作させ、感染動作を記録する。マルウェアが行うレジストリファイルシステムの変更、発生させる通信(宛先のIPやドメイン, URL, 通信ペイロード)などを確認する。動的解析では、プログラムコードを詳細には分析しない。
  5. アンパッキング
    マルウェアは、静的解析を妨げる“パッカー”と呼ばれるソフトウェアによって圧縮されていることが多い。そのため、パッキングを解く必要がある。
  6. 静的解析(ホワイトボックス解析)
    アセンブラやデバッガを使用してコードを分析する。動的解析だけではわからない、マルウェア潜在的な機能を調査したり、特徴的なバイト列が収集したりする。アセンブリコードを読み解くスキルが要求される。

以下に表層解析、動的解析、静的解析の長所と短所を示す。

各解析プロセスの長所と短所
 
長所
短所
表層解析
  • 短時間に解析結果を取得できる
  • 解析者に要求されるスキルレベルは高くない
  • 得られる情報が限定的である
  • 難読化されたマルウェアからは十分な解析結果が得られない
動的解析
  • 解析者に要求されるスキルレベルは高くない
  • 難読化されたマルウェアからも解析結果を取得できる
  • 短時間で解析結果を取得できる
  • 安全な解析環境を構築する必要がある
  • 解析妨害機能を有する検体を十分に解析できないことがある
  • 解析時に実行されなかったコードの振る舞いはわからない
静的解析
  • 動的解析で実行されないコードの動作を把握できる
  • 具備された機能の詳細なアルゴリズムを解明できる
  • 解析者に要求されるスキルレベルが高い
  • 詳細な解析結果を取得するのに時間がかかる
出典元:実践サイバーセキュリティモニタリング, 八木 毅 他

おわりに

マルウェア解析を語るにあたって、文献を頼りになるべく間違いがないようにまとめていきますが、もし間違っていた場合はお知らせください。