Upgrade to Pro — share decks privately, control downloads, hide ads and more …

セキュリティ・キャンプ2019 Z2. ELFマルウェア検知エンジンの試作 成果報告

セキュリティ・キャンプ2019 Z2. ELFマルウェア検知エンジンの試作 成果報告

セキュリティ・キャンプ2019 Zトラック
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html

にて実施した、Z2. ELFマルウェア検知エンジンの試作 の参加者が作成した成果報告資料です。

F84f8fb6188c67bd9bd9477f546a8347?s=128

bachi/yuzuhara

August 17, 2019
Tweet

More Decks by bachi/yuzuhara

Other Decks in Technology

Transcript

  1. Z2. ELFマルウェア検知エンジンの試作 セキュリティ・キャンプ2019 Zトラック アンチウィルス実装ゼミ 成果報告 張 東嘉 イボット アリジャン

    上田 侑真 講師 忠鉢 洋輔 大居 司
  2. Z2の概要 •ELFマルウェア検知エンジンのための,決定⽊に使う特徴 量をひたすら⾒いだしていく •なぜ決定⽊? ◦判定理由が⾃明だから ◦講師の強い意志

  3. システム概要 MongoDB 特徴量 ストレージ 特徴量抽出 スクリプト 決定木 学習&評価 1. 特徴量を追加

    2. 特徴量を選択して 学習&評価 3. 何度も修正を繰り返す
  4. Z2講師が⽤意したデータセット 悪性検体: VirusShareから抽出したELF 29,512件 良性検体: DebianインストールDVDより抽出したELF : 172,483件 学習に使⽤した検体数 (※それぞれ訓練⽤と評価⽤で2分割)

    マルウェア : 29,166 正常系 : 29,166
  5. 特徴量を⾒つける ・マルウェアに多く含まれる⽂字列 “/etc/init.d”, “/bin/sh”, “/var/log/wtmp”, “wget”, … ・エントロピー,圧縮率 パッキングされている検体を⾒つける ・正常でないヘッダ・セクション・セグメント

    通常ではありえない改変されたヘッダを検出する
  6. 混同⾏列(Confusion Matrix) True Positive (TP) マルウェアを正しく検知 False Positive (FP) 正常系をマルウェアと誤検知

    False Negative (FN) マルウェアを未検知 True Negative(TN) 正常系を良性と認識
  7. とにかく特徴量を追加した結果(2〜3⽇⽬) (TP) 13781 (FP) 856 (FN) 802 (TN) 13727 精度

    : 94.32% TP Rate : 94.50% FP Rate : 5.87%
  8. とにかく特徴量を追加した結果(2〜3⽇⽬) (TP) 13781 (FP) 856 (FN) 802 (TN) 13727 精度

    : 94.32% TP Rate : 94.50% FP Rate : 5.87% FPがデカすぎる FP Rateが0.01%で製品レベルかなぁ・・・ せめて1%ぐらいは切りたいよね
  9. 誤検知した正常系プログラムの調査 - 事例1 誤検知された正常系プログラムをGhidraでリバースエンジニアリング → Heimdal ( https://www.h5l.org ) という認証⽤のプログラム

    ⽂字列を眺めると ”Copyright” を発⾒ ... 検知に使えるのでは? ”Copyright” が含まれたマルウェアは2099件,良性ソフトウェアが 8298件 → 新たな特徴量を発⾒
  10. 誤検知した正常系プログラムの調査 (続)- 事例2 ・誤検知された正常系プログラムを確認したら FreeBSD を対 象にしていた(Debian GNU kFreeBSD向けパッケージ) ・FreeBSD

    を対象としたファイルの数を確認 → マルウェアが61件,良性ソフトウェアが2318件 → 新たな特徴量として追加
  11. [0, 1, 2, 4, 5] [0, 1, 11, 12, 13,

    14, 15, 16] [0, 1, 2, 3] [0, 1, 11, 12, 13, 14, 15, 16] [0, 1, 2, 3] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 42, 43, 53, 55, 56, 57] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 2, 3] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] ( … ) [0→1→11→...→34→35] のルートを通る誤検知が多い ... 特徴量の追加・削除
  12. [0, 1, 2, 4, 5] [0, 1, 11, 12, 13,

    14, 15, 16] [0, 1, 2, 3] [0, 1, 11, 12, 13, 14, 15, 16] [0, 1, 2, 3] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 42, 43, 53, 55, 56, 57] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 2, 3] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] [0, 1, 11, 12, 28, 29, 30, 31, 32, 34, 35] ( … ) [0→1→11→...→34→35] のルートを通る誤検知が多い ... 特徴量の追加・削除
  13. 特徴量の調整 ・パッキングを検出するため,圧縮率を特徴量に使⽤していた → 決定⽊から誤検知の原因だと判明 ・圧縮率に閾値を設定し,特徴量を0, 1のみに更新した → 誤検知を⼤きく減らすことに成功

  14. 結果 (TP) 13886 (FP) 257 (FN) 697 (TN) 14326 精度

    : 96.73% TP Rate : 95.22% FP Rate : 1.76%
  15. 結果 - (⾼精度) (TP) 14017 (FP) 188 (FN) 566 (TN)

    14395 精度 : 97.41% TP Rate : 96.12% FP Rate : 1.29%
  16. 結果 - (低FP率) (TP) 7526 (FP) 18 (FN) 7057 (TN)

    14565 精度 : 75.74% TP Rate : 51.61% FP Rate : 0.12%
  17. まとめ • 特徴エンジニアリングには複数の⽅法があり, やり⽅次第で⼤きく結果が異なる • 精度やFPなど,どの結果を優先するかは場合による ◦ ホワイトリストによる対応,別アルゴリズムによる検知とか • ELFなんもわからん

  18. EOF