SlideShare a Scribd company logo
Jubatusでマルウェア分類
2012年5月11日@機械学習 プログラミング勉強会
    株式会社Preferred Infrastructure
         柏原秀蔵(@suma90h)
Agenda

• Jubatusとは
• Jubatusでマルウェア分類してみる
• Jubatusを使う時に気を付けること
• まとめ
Jubatusとは
Jubatusとは
• 機械学習フレームワーク
 • 分散・並列実行できるオンライン機械学習
 • サーバ/クライアント
• 無料です!
 • OSS(LGPL)
話さないこと
• Jubatusの詳細
 • 分散処理の仕組み
 • オンライン学習
 • 内部のモジュール構成
• 機械学習のアルゴリズム
Jubatusでマルウェア分類
Jubatusの提供する機能

•   機械学習(オンライン学習)のフレームワーク

    •   classifier      多クラス分類器(Perceptron, AROW, NHERD, etc)

    •   recommender    レコメンド(Inverted Index, LSH)

    •   regression     回帰

    •   fv_converter   特徴抽出、フィルタ、プラグイン機能
詳しくは

• search Jubatus
• http://www.slideshare.net/JubatusOfficial
• http://www.slideshare.net/pfi
Jubatus利用法

• 依存ライブラリの解決、ビルド、インストール
• サーバを起動する
• クライアントを書き、サーバのRPCを叩く
Jubatusを使おう
悩んだ

• Jubatusで何ができるの?
• 機械学習の理論がよくわからない
• どんなアプリが作れるだろうか?
機械学習を使う前に
•   機械学習で分類させるには、ラベル付きデータが必要

    •   卵が先か、鶏が先か...

•   学習させるデータを特徴ベクトルに落とし込む必要がある

•   fv_converterが何とかしてくれる?

    •   Jubatusは基本的には以下のデータ型を入力する

        •   ペア<string, string>

        •   ペア<string, double>
そうだ、マルウェア
 を解析しよう
ひらめきよりむしろ、
ラベル付きデータを発見!
マルウェア分類を始めよう
•   なぜ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
Malheurの手法

•   マルウェアの動的解析結果(CWSandbox)を用意

•   結果をMIST(数値)形式へ変換

    •   数値の列を得る

•   MISTの結果をn-gramして特徴ベクトルとする
MISTの中身




Figure.3 (p5) "Automatic Analysis of Malware Behavior
using Machine Learning" [09 Konrad Rieck et al]
CWSandboxの
XMLとMISTを見よう
Jubatusで分類してみる

•   Jubatusの分類器

    •   多クラス分類 (スパム判定といった0/1も可能)

•   公開されているデータ(Reference Datasets)

    •   マルウェアの解析結果(XML, MIST)

    •   ラベル, ファイルサイズ, ハッシュ

•   論文はMISTのn-gramを特徴ベクトルとして分類していた
クライアントを書く
•   Rubyでclassifierクライアントを書く

    •   現状のクライアントはあまり使わないほうがいい, C++をオ
        ススメ

    •   型チェックがクライアント側にない

•   使うRPC, やること

    •   set_config:特徴ベクトルを設計して準備する

    •   train:学習させる

    •   classify:分類させる
設定を書く
•   アルゴリズムの選択(今回はAROW)

•   特徴ベクトルの抽出方法を記述



•   Jubatusで入力可能な特徴ベクトルはタプル

    •   海野さん(@unnonouno)さんに相談したらword単位で
        のn-gramするプラグインが社内にあった

    •   これでMISTをn-gramできる!
分類させてみる
•   公開されているReference Datasetsを試した

•   ラベル数 24(のみ)

•   ラベル付きデータ 3133件




•   学習:300件

•   分類を試した数:2833件

•   ラベルの一致:2719件
精度と再現率
•   精度:分類器がどれくらい正しいかを示す値

    •   予測(分類結果)して一致した数 / 全体の数

    •   2719/2833 = 0.95

•   再現率:実際にラベルをカバーできているか示す値

    •   予測して一致した数 /実際に存在する分類の数

    •   なるほどー(計測できていません)
精度は大丈夫か?
•   評価として大丈夫か?

    •   Jubatusとの格闘で力尽きました

    •   F値? 交差検定(Cross validation)?

    •   λ.. 出直してきます 論文ではF値は載ってました

•   論文ではReferenceDatasetで学習して、他に30,000件程度で実験していた

    •   Known malware/Unknown malware の件数を数えたり

    •   クラスタリングと分類
以上作ってみた
•   論文とラベル付きデータを利用しただけ

•   特徴ベクトル等々は論文を参照して頂きたい



•   recommenderも試したかった

    •   マルウェアのレコメンドとは...! 熱い!!

•   分散もさせたかった...
Jubatusハマりポイント
  (2012/05/11時点)
ビルドでハマるポイント
•   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をマージ予定)予定です
クライアント開発時のポイント

•   set_configすると謎のエラー

    •   設定情報が間違っていてもサーバ, クライアントはエ
        ラー箇所を指摘してくれない

    •   コピペ駆動、サンプル駆動が望ましい

•   Ruby, Pythonクライアントなどで型を間違えるとエラー

    •   C++を使う(それでもset_config問題は残る)

    •   ライブラリの成熟を待つ(開発中です...)
ライブラリはどこ?

•   C++クライアント

    •   include/jubatus/clientにヘッダ有り

•   Java, Ruby, Pythonなどが

    •   https://github.com/jubatus/jubatus/downloads

    •   自動生成されたコードで、エラー処理は不親切かも
Jubatusでマルウェア分類
Jubatusでマルウェア分類
まとめ
•   マルウェア分類がJubatus(classifier)で出来た

•   機械学習よくわからなくても、わかったこと

    •   特徴ベクトル抽出で第一歩

    •   ラベル付きデータ神 これがなければどうなっていたか

    •   実験・評価方法も勉強すべし(勉強会が終わってからが本番)

•   Jubatus

    •   ハマり所の発見。持ち帰ってフィードバックします

    •   クライアントライブラリは今後に期待

    •   分散処理も実験したい

More Related Content

Jubatusでマルウェア分類

  • 2. Agenda • Jubatusとは • Jubatusでマルウェア分類してみる • 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
  • 12. 機械学習を使う前に • 機械学習で分類させるには、ラベル付きデータが必要 • 卵が先か、鶏が先か... • 学習させるデータを特徴ベクトルに落とし込む必要がある • fv_converterが何とかしてくれる? • Jubatusは基本的には以下のデータ型を入力する • ペア<string, string> • ペア<string, double>
  • 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]
  • 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も試したかった • マルウェアのレコメンドとは...! 熱い!! • 分散もさせたかった...
  • 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 • ハマり所の発見。持ち帰ってフィードバックします • クライアントライブラリは今後に期待 • 分散処理も実験したい