-
Notifications
You must be signed in to change notification settings - Fork 0
Description
公開日
2018-04-13
1. 概要
悪性のHTMLとかのコンテンツを検知する
2. 新規性・差分
先行研究はURLのみに対して悪意のあるものを検知するが、悪意のあるHTML検知とURL検知を組み合わせるとより強力なものになる。そこで、今回は悪意のあるHTML検知を行なった。
3. 手法
- 悪意あるHTMLは、可変で巨大な通常のHTMLの中に小さな悪意あるコンテンツが埋め込まれている。
- 明示的なHTMLファイルのパースは望ましくない。HTML、CSS、JSが展開されて初めて悪意のあるコードとして動作する。
- 動的解析、静的解析またはシンボリック実行(部分的な実行)は望ましくない。計算のオーバーヘッドがあるのと、検出器の中で攻撃の挙動を開始させてしまうからだ。
- そのため、私たちのアプローチは、まずbag-of-wordsでtoken表現を獲得した。得たトークン表現は、文章全体で局所的な集約表現となるため、たくさんの良性なものに埋め込まれた悪性表現を見つけることができる。
この研究では、shared-weight NNをつかって分類を行なっている。
feature extraction
アルファベット以外のところでまず区切ってトークンを作る。区切ったトークンを16個の同じ長さのチャンクに分ける。そのあと、ハッシュ技術を使って1024つのバイナリ値のbag-of-words style 表現を獲得する。
inspector
獲得した16個の表現 x[0]...x[15]から、隣り合った要素で平均をとったx(0, 1), x(2, 3), ... , x(14, 15)を計算する。それを繰り返していき、x(all)まで行ったら、元のx[0]-x[15]と計算した値全て(計31個)を使い、入力ベクトルとする。(311024のテンソル)→階層的表現
ここで、合計するのではなく平均をとることで、異なる長さのドキュメント同士でも各表現レベルのノルムを均一に保つことができる。
そのあと、Layer norm - FC(10241024) - ReLU - Layer norm - dropout - FC(1024*1024) - ReLU - Layer normと続く。
maximum activation
inspectorのあと、31個のフィルターの中で同じ位置の各ニューロン内で最大値をとって、1024の長さのベクトルを作る。
master
2回FCしたあと、最後のFCで出力を26個にして、それぞれにsigmoidをかける。
1つのoutputは文章が悪性であるかどうかを判定する。
残りの25個は、フィッシングサイトかどうか、exploit kitのインスタンスかどうかなどを判定している。
lossはbinary-cross-entropyで、26個のoutputsの結果の勾配の平均をとってアップデートしている。
4. 結果
2つの方法で検証した。既存の異常検知しているモデルとの直接的な比較はしていなくて、なぜかというとこのアーキテクチャは速度面で優れていることが強みだからだ。
データセットはVirusTotalから10ヶ月分とってきた。
全ベンダーで良性と判断されたデータはnormal, 3つ以上のベンダーで悪性と判断されたデータはmaliciousとした。
- 標準的な文書分類タスクとしての評価
- 様々な方法でアーキテクチャを変更して実験した評価
精度は、97.2%でめっちゃ高かった。
5. 議論
ドメイン知識を組み合わせると強い。
6. コメント
特徴抽出が面白い
畳み込みよりこっちの方が有効な場合もあるのか
