決定木を用いて分類した際にランダムおよびデータ難読化と判定された行につい て、使用されている文字の割合や頻度分布を用いた特徴の調査を行った。
3.5.1 文字の割合に関する調査
ランダムおよびデータ難読化と分類されたデータにおける文字の使用率を調査し た。分類方法の基準として、英字および数字とその他に分類を行った。分類結果は 表3.3 および図3.8 となる。分類結果として総文字数に10倍ほどの差があるが、
図3.8からもわかるように悪性の難読化において、数字の利用率が高いことがわか る。これはASCIIコードやUnicodeといったものが悪性の難読化で頻繁に使用さ れている可能性が考えられる。また、その他に関して図3.9は区切り文字や演算子
といった記号に分けて解析を行ったが使用率は同じであった。良性に比べて、悪性 の難読化で数字の使用率が高いことがわかる。これはエンコード難読化でASCII
コードやUnicodeといった手法で数字が利用されていることが考えられるが、図
3.9から ASCIIコードで用いられる %といった記号の使用率が良性と悪性の難読
化で変わらないため、数字はエンコード難読化のみで利用されているとは断定でき ず、その他の用途でも利用されていると考えられる。
表3.3 各文字の使用数
Legitimate Malicious Letter 3,185,888 203,521 Number 119,782 78,427 Other 1,570,242 138,352
!"#$%&' (#%!&'
$(#()&'
!"#$%&'(")
*+,+-' ./01+-' 234+-'
!"#!$%&
'"#((%&
)$#*$%&
!"#$%$&'()
+,-,.&
/012,.&
345,.&
図3.8 使用されている文字の割合
図3.9 その他における記号の割合
3.5.2 頻度分布を利用した調査
3.4節で得られた結果からランダムおよびデータ難読化と分類されたデータのノ イズ除去を行った後にPythonのnltkライブラリを利用して頻度分布を使った調 査を行った。図3.10は頻度分布を出力するまでのフローを表しており、図3.8お よび図3.9から良性と悪性の難読化において、記号の利用率に差異はないと考えら れるため、ノイズ除去には表3.3でotherと分類した記号をスペースに置き換え、
置き換えの際に生成される複数のスペースを1つにまとめたものを頻度分布のデー タとして用いた。また、頻度分布の結果から、良性のデータセットから得られた
JavaScriptやActiveXといった関数などのウェブページ上で意味のある文字列お
よび、nltkで用意されている英語の語彙をまとめたコーパスから難読化されたコー ドとマッチする可能性のあるofやnoといった文字列の長さが2以下のものを除去 し、英語の語彙コーパスで文字列長が3以上のものをまとめて、ノイズ除去用コー パスを作成した。次に検証用データから作成したノイズ除去用コーパスを利用し て意味のある文字列を除去し、頻度分布による出力および、残った文字列の調査を 行った。ノイズ除去で利用した意味のある文字列の単語数は約12万5千語であり、
これらに部分一致した単語はノイズとして除去した。図3.11は例文を使ったノイ ズ除去のフローを表している。
ノイズ除去
Start
記号をスペースに 置き換える
無駄なスペースの 除去
特定文字列の 除去
頻度分布の出力
End
図3.10 頻度分布生成フロー
function gud(){var qklvoan = 64; for( var cfld=0; cfld<140; cfld++){qklvoan++};return qklvoan;}
function gud var qklvoan 64 for var cfld 0 cfld 140 cfld qklvoan return qklvoan
function gud var qklvoan 64 for var cfld 0 cfld 140 cfld qklvoan return qklvoan
function gud var qklvoan 64 for var cfld 0 cfld 140 cfld qklvoan return qklvoan
記号をスペースへ変換
意味ある文字列の削除 複数のスペースをまとめる
図3.11 例) ノイズ除去フロー
表3.4は悪性と良性の難読化について、ノイズ除去の有無による単語の総数およ び異なり語数∗の総数となる。検証対象とした良性の難読化には 3.3節の難読化調 査で用意した良性のデータセットとは別に新たにAlexa global topsiteからGoogle
Chromeで閲覧した際に得られるトップページおよび関連するJavaScript ファイ
ルを10サイト分取得した。同じJavaScriptが複数回取得されるものに関しては、
1つのファイルのみ取得し、総ファイル数を悪性のデータセットと同数にした。
表3.4の結果からランダムおよびデータ難読化に分類されたものにおいて、悪性 の難読化は解読できる意味のある文字列の除去を行うことで、総単語数で意味の理 解が困難な単語が約15.0%に減少するのに対して、良性では約 2.3%となってい る。また、異なり語の数で見ても悪性では除去された意味のある単語が半分にも満 たないのに対して、良性では約14.2%と大幅に低下する。異なり語数がノイズあり からノイズなしへの単語数の変化が、悪性では半分にもならないものが多く、これ
∗ ユニークな単語であり、単語の出現回数が複数回であっても1とカウントする。
表3.4 ノイズ除去前後におけるデータセットの単語数
良性 良性 悪性 悪性
(ノイズあり) (ノイズなし) (ノイズあり) (ノイズなし)
Normal 総語数 228,342 8,534 16,471 2,945
100-400 異なり語数 10,960 1,291 3,860 1,704
Random 総語数 1,998,911 46,474 82,212 12,352
& data 異なり語数 37,399 5,324 10,835 6,462
Encode 総語数 11,319 3,914 299,555 11,850
異なり語数 1,548 662 9,557 5,058
らと決定木を組み合わせて指標とすることで、良性と悪性の判断が可能になると考 えられる。
また、表3.4は英語圏の正規のウェブサイトから収集した結果であるため、英単語 のコーパスを使用した場合に日本語のウェブサイトと比較して、ノイズ除去率が高 いことが考えられる。そのため、日本語を用いる正規のウェブサイトのJavaScript を収集し、再評価した結果が表3.5となる。再評価に利用したウェブサイトは表 3.6である。
再評価の結果として、日本語のウェブサイトは英語のウェブサイトと似た傾向が 得られた。エンコード難読化で悪性と似た傾向が見られるが、これはノイズ除去前 の異なり語の数が極端に少ないことが原因と考えられる。英語と日本語のノイズ除 去率が変わらない要因として、日本語のウェブサイトのJavaScriptコードで、日本 語の使用率が結果に影響を及ぼさない範囲である可能性が高い。その結果、ノイズ 除去率が英語と日本語のサイトで変わらない結果が得られたと考えられる。
表3.5 ノイズ除去前後におけるデータセットの単語数 追加検証
良性 良性 悪性 悪性
(ノイズあり) (ノイズなし) (ノイズあり) (ノイズなし)
Normal 総語数 251,534 8,970 16,471 2,945
100-400 異なり語数 6,324 1,049 3,860 1,704
Random 総語数 948,018 18,664 82,212 12,352
& data 異なり語数 22,616 2,570 10,835 6,462
Encode 総語数 7,355 663 299,555 11,850
異なり語数 245 131 9,557 5,058
表3.6 追加検証で利用したウェブサイト
Yahoo.co.jp amazon.co.jp youtube.com rakuten.co.jp twitter.com livedoor.com ameblo.jp goo.ne.jp naver.jp tabelog.com