MWS Cup 2018 課題 3 ふりかえり

Posted by Takahiro Matsuki on 2018-11-14
SecurityConference

はじめに

松木です。10 月 21 日から 25 日までの 4 日間、マルウェア対策人材育成ワークショップ(MWS) 2018 が長野で開催されました。

MWS では例年、初日の午前中に MWS Cup というマルウェア対策・対応技術を競う大会が開催されています。

マルウェア対策研究用データセット MWS Datasets の利用契約した組織の人であれば誰でも参加でき、マルウェアの動的解析ログを分析したり、標的型攻撃検体を静的解析したりする実務に近い課題に挑戦できます。

今回は 16 チーム、総勢 86 名が参加しました。1 チーム最大 6 名というルールですが、ソロで参戦した猛者もいました。

課題は、自由にツールやデータセットを作る事前課題、課題 1 (DFIR)、課題 2 (静的解析)、課題 3 (表層解析・動的解析)、各 25 点という構成でした。

本記事では、私が作成を担当した課題 3 について、出題意図や解答の傾向を紹介します。

課題 3 は MWS Datasets の一部として当社が提供している FFRI Dataset を題材にマルウェアの動的解析、表層解析、データセット改善の 3 つのテーマで構成しました。

MWS Cup を通して FFRI Dataset をより多くの人に知ってもらい研究のきっかけになることも期待しています。

なお、今回の課題は、事前に当社の新入社員が取り組み、そのフィードバックをふまえて出題しました。

Q1. 動的解析ログによるコードインジェクション分析

Cuckoo Sandbox のログである 3 つの json ファイルを分析し、マルウェアによるコードインジェクションの詳細を明らかにする課題です。

この形式の課題は MWS Cup 2016 から出題しており、MWS の公式サイトで過去問の解説資料も公開されています。

そのため、過去の解法解説を見て勉強し、ログを分析するちょっとしたスクリプトを書いてみて欲しいという意図で出題しました。

基本的にはコードインジェクションに使われる API と呼び出し順序を理解し、引数が process_handle != 0xFFFFFFFF の API 呼び出しを追っていくことで解けます。

Q1 は全体で 6 点の配点でした。満点のチームはありませんでしたが、全体的に得点率は高く、過去問で対策していれば簡単だったと思います。

過去問との違いは、インジェクションに関する API 名だけでなく、スレッドやセクションのハンドル等の引数やインジェクション手法の名称も問う形にしたことです。

また、約 8,000 件のログファイルの中から指定したログと最も似たパターンのログを探すという課題も出しました。

インジェクション手法の名称や類似ログは正解チームが少なく、難しかったようです。

Q1 で良かった点は、複数のチームがこの課題に向けて事前課題で Cuckoo Sandbox のログを分析するツールを作成し、活用されていたことです。

事前課題で何を作るか悩むチームもいたなかで、この Q1 がきっかけになり、初心者でもログ分析ができるように不必要なデータをフィルタしたり、Web UI で操作できるツールが作られたことはとても喜ばしいです。

一方、Q1 の問題点は過去 3 年間、同じ種類のコードインジェクションを分析対象にし続けているため、理解している人にとっては新たな学びが少なかったことです。

次回もし同じ形式で出題するなら、これまで扱っていないコードインジェクション手法を分析対象にしたいと思います。

また、動的解析のログ分析ではなく、実際に手を動かして動的解析したり、Cuckoo Sandbox のシグネチャを作ったりする課題なども面白いと考えています。

Q2. 表層解析ログによるファイル分類

FFRI Dataset 2018 と同形式のファイル表層解析データ 10 万件をクリーンウェアデータとマルウェアデータに分類する課題です。

この形式の課題は今回初めて出題したもので、FFRI Dataset を動的解析ログから表層解析ログに変更したことで実現できました。

大会当日だけでは分類対象の 10 万件のデータを十分に分析できないと考え、Q2 の概要は事前に案内しました。

FFRI Dataset 2018 の 50 万件のデータを事前に分析し、分類手法の検討や分類器の作成をしてほしいと考えていました。

配点は 10 万件のデータ分類結果の TPR(検出率)と FPR(誤検出率) に基づいて算出する得点が 12 点、分類手法の解説を 3 点の計 15 点でした。

TPR, FPR による得点計算式は 12 * (TPR - 50 * FPR) で、誤検出率が高いと得点が大幅に低下するようにしました。

これはマルウェア対策技術の開発において誤検出に対する要求が厳しく、誤検出率を下げる工夫が重要であることを知ってもらいたかったためです。

参考として、Virus Bulletin が行っている VB100 という認証を得るには TPR 99.6 % 以上, FPR 0.01 % 未満という条件をクリアしなければなりません。

今回この課題で点を得たのは 16 チームのうち、「ICSCoE2018」 と 「Team GOTO Love」 の 2 チームのみで、どちらも FPR が 0.1 % 台という良い結果でした。得点の差はわずか 0.001 でほぼ同点となりました。

(表1) 100,000 件に対する TPR, FPR で算出した得点

Team Score TPR FPR TP FP
ICSCoE2018 8.296 78.636% 0.19% 39,318 95
Team GOTO Love 8.295 75.728% 0.132% 37,864 66

提出された手法解説資料は下記の基準で全て採点しました。

  • とにかくやってみましたというもの。 1点
  • データ分析をしっかり行って理論的にロジックの検討を行っている。 2点
  • 事前の精度検証や FPR 低減を意識した工夫や試行錯誤がある。 3点

多くのチームが機械学習を用いて分類に挑戦していましたが、FPR を抑えられていませんでした。

マルウェアのみの特徴だけでなく、クリーンウェアの特徴にも目を向け、機械学習のみに頼らず、パターンマッチングなどと組み合わせることで FPR を下げられた可能性があります。

MWS 2018 ポストミーティングでは、上記 2 チームの分類手法や当社の新人が考えた手法の紹介ができたらと思います。

Q2 の良かった点は、仕様変更した新しい FFRI Dataset 2018 をよく分析してもらえたことです。

当日まで、点を取れるチームがいなかったらどうしようと心配していましたが、良い結果を出してくれたチームがあり安堵しました。

また、スコアサーバーを用意し、競技中に全チームの解答状況を可視化して把握できました。

問題点は、事前準備を期待していることやルールのアナウンスが不足していたことです。

得点計算式が厳しかったため、事前準備ができずぶっつけ本番だったチームのやる気を削いでしまったかもしれません。

また、解答状況の可視化を活かして試行錯誤を促すヒントを提供することもできませんでした。

この課題に関しては、いろいろと試してみたいアイデアがあるため、今後も継続できたらと思います。

例えば、今回よりも得点するチームが増えるように順位に応じて得点を加算したり、今回良い結果を残した手法やサンプル分類器をヒントとして共有をしたいです。

流行するマルウェアは時間とともに変化していく Concept-drift という性質があると考えられるため、今回の手法が次回どの程度の結果を出せるのか気になります。

そのため、この課題で考案された手法が最新のマルウェアをどの程度検出できるか継続的に計測、可視化してみたいです。

そのほか、MWS 発の複数の手法を組み合わせて高性能なオープンソースのマルウェア検出エンジンが実現できたら面白いと考えています。

Q3. データセット改善提案

最後は FFRI Dataset に対して改善を提案する課題です。より研究に使ってもらえるデータセットを作りたいという意図で出題しました。

昨年は 1 点のサービス問題として出題しましたが、「人海戦術 White チーム」から良い意見が得られ、FFRI Dataset 2018 の仕様検討の参考になりました。

今年も魅力的な提案を募るため 4 点満点とし、採点は下記の基準で行いました。

  • 提案理由の説明が十分で、次期 FFRI Dataset の仕様として採用を検討したい案 4点
  • 提案理由が説明不足だが、検討の余地がある案 1点
  • 無回答 -2 点

ほぼ全てのチームから提案があったのですが、提案理由がないものは採用候補として検討できませんでした。

提案理由がしっかりしており、基礎技術研究室の次期データセット作成チームが採用したい思った提案を紹介します。

  • 表層解析のデータセットへの文字列データの追加 (「Team GOTO Love」 による提案)

    • <理由>

      • 実行ファイルに含まれる文字列情報からクリーンウェアとマルウェアの分類や、亜種の発見はすでに研究がなされており、実用性がある。
      • C2 サーバーのドメインや IP アドレス、暗号化に使われている鍵情報が抽出できる場合がある。
    • <想定されるコストやリスク>

      • 実行ファイルから文字列を抽出することは strings コマンドにより短時間で行うことができるため、低コストで行うことができる。
      • 文字列情報の抽出はマルウェアを実行することなく、またインターネットに接続することなく抽出可能であるためリスクが低い。
  • Windows 以外の OS や携帯端末を対象とした検体の解析ログの提供 (「セキュリティ讃歌」による提案)

    • <理由>
      • 特に Android 端末を対象としたマルウェアに関するデータセットは、MWS Datasets では提供が停止されているか更新されておらず、最新のマルウェアに関する情報を入手することが難しくなっている。
      • 一方で skygofree や AndroRAT の亜種など、Android を対象とした新種のマルウェアは最近も多く確認されており、これらの対策技術の研究開発は大変重要である。
    • <想定されるコストやリスク>
      • 新たに解析環境を構築しなければいけない。また、Android で多く見られるアドウェアはマルウェアとの区別が曖昧であり、マルウェアかクリーンウェアかの分類が難しいという問題がある。
  • FFRI Dataset を利用するための API の提供 (「SecCap-KKK」 による提案)

    • <理由>

      • データセットはサイズが大きく、配布形式の変換やツールの配布では利便性の向上に限界がある。
      • 必要なデータのみをダウンロードし、かつ独自のアプリケーションを開発でデータを利用しやすくするための仕組みが必要である。
      • API 作成によりデータを取得する際の仕様がはっきりとすれば関連ツールの開発が盛んになる。また、データセットを動的に取得することで最新のデータを取り込むことができる。
    • <想定されるコストやリスク>

      • API 開発時のほか、データセットが変わった際の仕様変更のコストがかかる。
      • また、API でデータを取得する際、承認されたユーザのみがダウンロードできるようにする仕組みも必要である。

なお、MWS では今回から Slack が常設され、データセットについて議論するチャンネル #dataset ができています。

FFRI Dataset に対する提案や要望、データを取得したい検体のハッシュ値などをこのチャンネルにどんどん書き込んでもらいたいです。

そうすれば、この課題はお役御免となり、次回は新しいテーマの課題に変わると思います。

おわりに

自画自賛になりますが、今回はなかなか良い課題が出題できたと思っています。

しかし、課題について質問や文句、こんな課題がやりたいなどの意見がある方は 12 月中旬に行われる MWS 2018 ポストミーティングに参加し、議論をお願いします。

大会当日に MWS 実行委員長からも案内がありましたが、MWS では MWS Cup 課題作成や企画に参加いただける新しい人材を募集しています。

当社も FFRI Dataset 作成にご協力いただける方や FFRI Dataset 利用の有無に関わらず、セキュリティ新技術を共同で研究開発するパートナーを募集しています。

また、透明性の高い信頼されるセキュリティ技術や製品を一緒に創っていこうという善良なエンジニアを歓迎します。

ご興味のある方は MWS の Slack でぜひお声がけください。

Takahiro Matsuki, Ph.D., CISSP