「元凶」なんて、悪いイメージの言葉を使って、すみませんでした!

…と、先に謝っておいて、と。

そうなんです。最近、マルウェアのバイナリを2次元イメージ化して、CNNなどの深層学習で分類させるというのが、流行ってますよね。去年のCSSでもいくつかそういう発表を見かけました。バイナリって、そもそも1次元情報だし、特徴点だって2つじゃないだろうに、なんで2次元?ひょっとして、CNNとかが画像解析に実績があるからって、それだけ?と常々思ってました。そうこうしているうちに、うちの学生もそんなことやりたいと言いだしたので、「なんでなんで!?」と問い詰めた訳です。そしたら、下の論文を見つけてきまして…

[1]L. Nataraj, S. Karthikeyan, G. Jacob, B. S. Manjunath. “Malware Images:  Visualization and Automatic Classification”, VizSec’11, July 20, 2011, Pittsburg, PA, USA.

こいつだ!こいつが元凶(すみません)!
…という訳で読んでみました。概要はこんな感じ。

  • マルウェアのバイナリをイメージ可視化、パターン認識による分類してます
  • なんでかというと、同じファミリーに属するマルウェアは似たようなレイアウト、内容だから!
  • この方式ならば逆アセンブルもコード実行も必要ない!
  • ユークリッド距離のk-nearest neighborでやってます
  • 25ファミリー、9,458のサンプルをテストして98%の分類精度が得られたよ!

ってことなんですが。著者らによると、マルウェアのバイナリを画像化して見てると、模様のようなものが出てくると。だから分類可能なんじゃないかと、例として上がってる画像が下のもの。

出典:[1]

まあ、こいつなら目grepできそうだけど…
それにしても、こんなの幅次第で変わるじゃん?それに、packer変えたらバイナリも変わっちゃうから意味ないのでは?

幅については、次のように決められているらしい。

ファイルサイズ画像の幅
<10KB32
10KB~30KB64
30KB~60KB128
60KB~100KB256
100KB~200KB384
200KB~500KB512
500KB~1000KB768
1000KB≦1024
出典:[1]

…だからなんでこういう設定!?

packerについては、今回のはunpack後にやっている。が、packされていても98%の精度があると主張している!ホントかよ!後の研究によれば、packが完全な暗号じゃなかったり、同じファミリーが同じpackerを使う傾向が多いかららしい。じゃ、違うpacker使ったらアウトじゃね?

この元凶が(申し訳ございません)2011年ですが、国内でというと下記の発表でしょうか。

矢倉大夢,篠崎慎之介,西村礼恩,大山恵弘,佐久間淳.“CNNと注意機構による画像化されたマルウェアの解析手法”,コンピュータセキュリティシンポジウム2017.

なんと、その年の優秀論文賞を受賞されています。はーん。この受賞が流行の元か。

彼らは、単純に模様で見るのではなく、(1)されたバイナリデータをCNNにかけ、マルウェアに特徴的な領域を検出して、(2)CNN に注意機構と呼ばれる仕組みを組み合わせることによって,画像の中で分類に重要な領域を示す「注意度マップ」を出力しています。
注意機構というのは、深層学習において用いられる手法の1 つで、重要な特徴を動的に選び出し,それらを直接的に用いるのだそうです。自然言語処理の研究で提案されたものだそうです。画像認識では、画像につけられたキャプションを最も特徴的にあらわす領域を抽出することができます。例えば、画像に「バイオリン」というキャプションがついている時、バイオリンの領域を抽出できる訳です(この例の画像はこの解説記事を参照ください)

で、矢倉さん達も、unpackしなくても同等の精度が得られると言ってます。うーーん、そういうものなんですかね。今一つ釈然としないのだが

Follow me!

マルウェアのイメージ化→機械学習の「元凶」” に対して2件のコメントがあります。

  1. syssectsukuba より:

    drokubo先生,大山です.論文に言及していただきありがとうございます.

    パッカーでパックしても元のバイナリの性質はだいぶ保たれるようです.たとえばこの論文にそれが書いてあります.

    Grégoire JacobPaolo Milani ComparettiMatthias NeugschwandtnerChristopher KruegelGiovanni Vigna
    A Static, Packer-Agnostic Filter to Detect Similar Malware Samples
    In DIMVA 2012.
    https://link.springer.com/chapter/10.1007/978-3-642-37300-8_6

    この論文にはたとえば以下のような記述があります.

    “Our approach exploits the fact that current packers use compression and
    weak encryption schemes that do not break, in the packed versions, all
    the similarities existing between the original versions of two programs.”

    “This is possible because existing packers and their compres-
    sion/encryption algorithms retain some of the properties present in the original
    code. Thus, two packed executables, produced by a certain packer, are likely to
    remain similar (in certain ways) if they were originally similar.”

    “We leverage the fact that current
    malware packers only employ compression and weak encryption, and, therefore,
    information about the original program can be extracted from a packed binary.”

    一部のパッカーは非常に単純な暗号化をしたり,そもそも暗号化をしなかったりします.

    UPXでも鍵は毎回同じだったりします.

    この論文ではパック前後でのentropyを測定していますが,パックによる値の変動幅は,多くの人が思うほどそんなには大きくないです.

    Guhyeon Jeong, Euijin Choo, Joosuk Lee, Munkhbayar Bat-Erdene, Heejo Lee
    Generic unpacking using entropy analysis
    In MALWARE 2010.
    https://ieeexplore.ieee.org/document/5665789

    これらの記述は実験による経験則とも一致します.

  2. drokubo より:

    関係者ご本人にコメントいただき光栄です。
    また、論文の紹介ありがとうございます。大変参考になります。
    なるほど、packerの暗号化は弱いとは思っていましたが、パック後でもラスターとしての形に変動がないということでしょうかね。
    entropyの論文も興味深いです。1点気になるのですが、例えば
    ・マルウェアAとBが同一ファミリー(類似度高い)
    ・マルウェアA,Bそれぞれパック前後のentropy変動幅が小さい
    として、だから、パック後のAとBも類似度高いと言えるんでしょうか。

    また、せっかく著者の方にご登場いただいたので、なぜ2011年論文の幅設定(<10KB→32,…)を採用したのか、他の幅は試したのか、さしつかえなければ教えていただいてもよろしいでしょうか。

コメントを残す