Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Jubatusでマルウェア分類

13,486 views

Published on

機械学習×プログラミング勉強会
2012年5月11日

Published in: Technology

Jubatusでマルウェア分類

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

×