Trend Micro CTF 2019に挑んだ ~模擬監視カメラ映像解析編~/tmctf2019_wildcard300

C422cc033079e005fd1aa1b845b099da?s=47 meow
September 16, 2020

Trend Micro CTF 2019に挑んだ ~模擬監視カメラ映像解析編~/tmctf2019_wildcard300

2020/09/16(水) に 第36回ゼロから始めるセキュリティ入門 勉強会 で発表した資料です。
https://weeyble-security.connpass.com/event/188181/

解くにあたって開発した機械学習のスクリプト(Jupyter Notebook)はこちらにまとめています。
https://github.com/meow-noisy/tmctf2019-wildcard300

[備考]1年前の発表はこちら
『Trend Micro CTF 2019の機械学習カテゴリの問題に挑んだ』
https://speakerdeck.com/meow_noisy/tmctf2019ml

C422cc033079e005fd1aa1b845b099da?s=128

meow

September 16, 2020
Tweet

Transcript

  1. Trend Micro CTF 2019に挑んだ ~模擬監視カメラ映像解析編~ 第36回ゼロから始めるセキュリティ入門 勉強会 meow (id: meow_noisy)

    2020/09/16(水)
  2. 事前のお詫び  セキュリティの話題でないかもしれません  『CTF ≠ セキュリティ』でした  LT前座の小噺ということでお聞きいただければ…

  3. 発表概要  2019年9月に行われたTrend Micro CTF 2019の予選問題に 1年越しに挑んだ

  4. おしながき  Trend Micro CTF 2019  CTFとは  Trend

    Micro CTF概要  CTFの問題  答案  答え合わせ  ふろく  使用した機械学習モデルに関しての細かい情報
  5. CTF(Capture The Flag)とは  ハッカーの腕くらべのためのコンテスト  フラグと呼ばれる文字列をお題から取得することで力量を 測る  フラグを取得する方法が、世間で言う情報セキュリティの

    脆弱性を突く行為を以てすることが多い  コンピュータに関する様々な知識が問われる
  6. どんなジャンルがあるの? 第8回CTF勉強会.pdfより

  7. Trend Micro CTF 2019とは  トレンドマイクロ社が主催するCTF  https://www.trendmicro.com/ja_jp/campaigns/capture-the- flag.html 

    9月にオンライン予選の選抜、11月に本戦があった  優勝賞金100万円
  8. 前回(2019年9月)のLT#31  機械学習カテゴリに挑んだ件を報告 https://www.slideshare.net/meownoisy/trend-micro-ctf-2019/meownoisy/trend-micro-ctf-2019

  9. None
  10. CTF自体は終わったが  問題自体はTMCTF終了後も見ることができたので、アーカ イブを取った  今回は映像解析タスクの1問に挑んだ

  11. [余談]映像を扱ったCTF  SECCON TOWER 2016  https://www.youtube.com/watch?v=Y6voaURtKlM  ロボットアームの手旗信号を解読する 

    Needle in a haystack(SECCON 2018)  https://www.youtube.com/watch?v=sTKP2btHSBQ  9時間を超えるお天気カメラの映像からフラグを取得する
  12. Wildcard300 問題文(原文)

  13. 問題設定  Flagmanという男は監視カメラ越しにフラグを伝える  ある日、悪いハッカーに監視カメラを攻撃され、 映像を壊されてしまった  あなたは映像を解析し、Flagmanの伝えたかったフラグ 14文字分を回収しよう

  14. とりあえず映像を見てみよう  3DCGだった  屋外  同じキャラが延々と歩いている  尺は17分50秒 

    解像度は640x480px  形式はavi
  15. とりあえず映像を見てみよう  一般の通行人に混じって、Flagmanという黒ずくめの男が 体にフラグの文字をペイントして歩いている  この胸の文字がフラグの一部

  16. とりあえず映像を見てみよう  最初の5分間は正常  14文字の内`TMCTF{`までは確定

  17. とりあえず映像を見てみよう  その後攻撃を受け、映像のフレームが飛び飛びになる  文脈は使えない 1フレーム後

  18. とりあえず映像を見てみよう  そして最後の文字`}`

  19. 今一度ルール把握  攻撃のあった10分間の中から、flagmanを見つけ出し、 TMCTF{} の中身の7文字を見つけてくる  その他の細かい制約  Flagmanは必ず1つのASCII文字を身につけている 

    同じフラグが連続して出現することはない  画像フレームの順序は入れ替えられていない
  20. 取ったアプローチ  何も考えずDeep Learningに飛びつく  Flagmanが写っている/いない を学習させればいいんでは いる いない

  21. 機械学習? Deep Learning? AI?  機械学習  プログラムの処理判断基準をデータから自動的に獲得させる技術  Deep

    Learning  機械学習手法の1種。Deep Neural Network(DNN)という機械学習の総 称。DNNは特徴抽出に長けており一般的に性能が高い。  AI  機械学習プロダクトを雰囲気でイメージしてもらう時に使う言葉 図: https://semla.polymtl.ca/wp-content/uploads/2019/06/Ma-semla.pdf
  22. 下ごしらえ  動画をフレームにバラす  全19,266枚  約18fps

  23. 学習データ  いる/いないがわかっている冒頭5分間のフレームを学習 データとした  各フレームがいる/いないのラベルが必要

  24. フレームのラベリング  攻撃を受ける前の冒頭5分のうちFlagmanが映っている時間 を目視で記録  時間をフレームに換算  Flagmanの映っているフレームは1のインデックス、それ以 外を0のインデックスをラベリング フレーム番号,

    映るorNot 経過秒 → フレーム番号変換
  25. 使用したAIの構造  ResNet-18  層をたくさん積んでも学習できるようにした 画像分類用のネットワーク  このネットワークで画像の「いる/いない」学習した https://www.researchgate.net/figure/ Architecture-of-ResNet-18-Figure-from-reference-18_fig1_332303940

    画像 いる/いない +
  26. 学習したAIでの分類  学習したAIに、攻撃後のフレーム約13,000枚を与え、 Flagmanが映っている/いない を分類  分類結果は信頼度†を出せる  †: イメージ的には、

    AIがどれくらい答えに自信を持っているかの パーセンテージ  正しくは事後確率という いない (いる確率2%) いる (いる確率 99%) 攻撃後のフレーム
  27. フレーム収集基準  AIが信頼度90%以上で「いる」と答えたフレームを集める  520枚のフレームが集まった

  28. 人間のチェック  520枚を後は目視で7枚探した  全部あった 一応フレーム インデックス番号 6121 6355 9006

    12750 13622 15850 18111
  29. 裏取り  一応、攻撃後のフレーム約13,000枚を目視で確認  1.5時間くらいで終了  flagmanが映っているフレームが7枚以外に無いことを確認

  30. 所感  1.5人/時間で解けるならコード書くよりも人力チェックの 方が早いかも・・・  チーム人数制限もないし… 上位陣で解いていなかったチームも見かけた

  31. まとめ  TMCTF2019の問題に挑んだ  一応、回答は作れた  “TMCTF{46AIC46}”

  32. 2020年度のTMCTFは?  予選が10月開催決定  登録受付中! https://www.trendmicro.com/ja_jp/campaigns/capture-the-flag.html

  33. 参考文献  人工知能学会 監修 (2015)『深層学習 Deep Learning』 近代科学社  原田達也

    (2017) 『画像認識』 講談社  宮本・大川・毛利 著 (2018)『PyTorchニューラルネット ワーク 実装ハンドブック』秀和システム
  34. ご清聴ありがとうございました

  35. ふろく 使用した機械学習モデルに関しての細かい情報

  36. 開発リポジトリ  ツールは下記に配置  https://github.com/meow-noisy/tmctf2019-wildcard300  一応、学習時の重み(state dict)ファイルも上げた

  37. MLモデル  ResNet-18  ImageNetのpretrained weightを使用してfine-tuning  最終層の構造をいじって、1,000→2クラスのロジットを吐くよう にした 

    GPU推論で10,000枚 10分程度  GTX1070使用
  38. 学習におけるパラメータ  入力サイズ: 640x480のまま  データオーグメンテーションは一切なし  ドロップアウトなし  いる/いないで枚数の違いがあるので、枚数比の学習のペナ

    ルティをかけた  大体1:4の割合なので、いるのにいないと判断した時のペナルティ を4倍にする  train:val = 8:2
  39. 学習時のやらかし  valのaccuracyがほぼ100  ランダムサンプリングでvalデータを作ってしまったので、leakage が起きていそうだと資料作っている時に気づいた  とはいえ、CGモデルの動きは単調なので、依然として高い accuracyになったと思う