Submit Search
Jubatusでマルウェア分類
•
18 likes
•
5,427 views
Shuzo Kashihara
機械学習×プログラミング勉強会 2012年5月11日
Read less
Read more
1 of 32
Download now
Downloaded 62 times
More Related Content
Jubatusでマルウェア分類
1.
Jubatusでマルウェア分類 2012年5月11日@機械学習 プログラミング勉強会
株式会社Preferred Infrastructure 柏原秀蔵(@suma90h)
2.
Agenda • Jubatusとは • Jubatusでマルウェア分類してみる •
Jubatusを使う時に気を付けること • まとめ
3.
Jubatusとは
4.
Jubatusとは • 機械学習フレームワーク •
分散・並列実行できるオンライン機械学習 • サーバ/クライアント • 無料です! • OSS(LGPL)
5.
話さないこと • Jubatusの詳細 •
分散処理の仕組み • オンライン学習 • 内部のモジュール構成 • 機械学習のアルゴリズム
7.
Jubatusの提供する機能 •
機械学習(オンライン学習)のフレームワーク • classifier 多クラス分類器(Perceptron, AROW, NHERD, etc) • recommender レコメンド(Inverted Index, LSH) • regression 回帰 • fv_converter 特徴抽出、フィルタ、プラグイン機能
8.
詳しくは • search Jubatus •
http://www.slideshare.net/JubatusOfficial • http://www.slideshare.net/pfi
9.
Jubatus利用法 • 依存ライブラリの解決、ビルド、インストール • サーバを起動する •
クライアントを書き、サーバのRPCを叩く
10.
Jubatusを使おう
11.
悩んだ • Jubatusで何ができるの? • 機械学習の理論がよくわからない •
どんなアプリが作れるだろうか?
12.
機械学習を使う前に •
機械学習で分類させるには、ラベル付きデータが必要 • 卵が先か、鶏が先か... • 学習させるデータを特徴ベクトルに落とし込む必要がある • fv_converterが何とかしてくれる? • Jubatusは基本的には以下のデータ型を入力する • ペア<string, string> • ペア<string, double>
13.
そうだ、マルウェア を解析しよう
14.
ひらめきよりむしろ、 ラベル付きデータを発見!
15.
マルウェア分類を始めよう •
なぜJubatus? • 勉強会のネタ! 開発者としてJubatusに慣れるため...! • 実験に使ったデータを公開している論文を発見 • "Automatic Analysis of Malware Behavior using Machine Learning" [09 Konrad Rieck et al] • http://www.mlsec.org/malheur/ • A novel tool for malware analysis
16.
Malheurの手法 •
マルウェアの動的解析結果(CWSandbox)を用意 • 結果をMIST(数値)形式へ変換 • 数値の列を得る • MISTの結果をn-gramして特徴ベクトルとする
17.
MISTの中身 Figure.3 (p5) "Automatic
Analysis of Malware Behavior using Machine Learning" [09 Konrad Rieck et al]
18.
CWSandboxの XMLとMISTを見よう
19.
Jubatusで分類してみる •
Jubatusの分類器 • 多クラス分類 (スパム判定といった0/1も可能) • 公開されているデータ(Reference Datasets) • マルウェアの解析結果(XML, MIST) • ラベル, ファイルサイズ, ハッシュ • 論文はMISTのn-gramを特徴ベクトルとして分類していた
20.
クライアントを書く •
Rubyでclassifierクライアントを書く • 現状のクライアントはあまり使わないほうがいい, C++をオ ススメ • 型チェックがクライアント側にない • 使うRPC, やること • set_config:特徴ベクトルを設計して準備する • train:学習させる • classify:分類させる
21.
設定を書く •
アルゴリズムの選択(今回はAROW) • 特徴ベクトルの抽出方法を記述 • Jubatusで入力可能な特徴ベクトルはタプル • 海野さん(@unnonouno)さんに相談したらword単位で のn-gramするプラグインが社内にあった • これでMISTをn-gramできる!
22.
分類させてみる •
公開されているReference Datasetsを試した • ラベル数 24(のみ) • ラベル付きデータ 3133件 • 学習:300件 • 分類を試した数:2833件 • ラベルの一致:2719件
23.
精度と再現率 •
精度:分類器がどれくらい正しいかを示す値 • 予測(分類結果)して一致した数 / 全体の数 • 2719/2833 = 0.95 • 再現率:実際にラベルをカバーできているか示す値 • 予測して一致した数 /実際に存在する分類の数 • なるほどー(計測できていません)
24.
精度は大丈夫か? •
評価として大丈夫か? • Jubatusとの格闘で力尽きました • F値? 交差検定(Cross validation)? • λ.. 出直してきます 論文ではF値は載ってました • 論文ではReferenceDatasetで学習して、他に30,000件程度で実験していた • Known malware/Unknown malware の件数を数えたり • クラスタリングと分類
25.
以上作ってみた •
論文とラベル付きデータを利用しただけ • 特徴ベクトル等々は論文を参照して頂きたい • recommenderも試したかった • マルウェアのレコメンドとは...! 熱い!! • 分散もさせたかった...
26.
Jubatusハマりポイント (2012/05/11時点)
27.
ビルドでハマるポイント •
wafを使ったビルド時のリンクエラー • ./build/c4che/_cache.pyのLINKFLAGS = [ -lhogehoge ]とすれば直 る • CXXFLAGS= -I LIBRARY_PATH= ./waf configure • pficommon on Mac OS X • pkg-configの設定情報がバグっていてリンクフラグに何も指定されない • Mac OS XでJubatusをビルドする際にリンクエラーが発生する • 修正(pull requestをマージ予定)予定です
28.
クライアント開発時のポイント •
set_configすると謎のエラー • 設定情報が間違っていてもサーバ, クライアントはエ ラー箇所を指摘してくれない • コピペ駆動、サンプル駆動が望ましい • Ruby, Pythonクライアントなどで型を間違えるとエラー • C++を使う(それでもset_config問題は残る) • ライブラリの成熟を待つ(開発中です...)
29.
ライブラリはどこ? •
C++クライアント • include/jubatus/clientにヘッダ有り • Java, Ruby, Pythonなどが • https://github.com/jubatus/jubatus/downloads • 自動生成されたコードで、エラー処理は不親切かも
32.
まとめ •
マルウェア分類がJubatus(classifier)で出来た • 機械学習よくわからなくても、わかったこと • 特徴ベクトル抽出で第一歩 • ラベル付きデータ神 これがなければどうなっていたか • 実験・評価方法も勉強すべし(勉強会が終わってからが本番) • Jubatus • ハマり所の発見。持ち帰ってフィードバックします • クライアントライブラリは今後に期待 • 分散処理も実験したい
Download