Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

おしながき  Trend Micro CTF 2019  CTFとは  Trend Micro CTF概要  CTFの問題  答案  答え合わせ  ふろく  使用した機械学習モデルに関しての細かい情報

Slide 5

Slide 5 text

CTF(Capture The Flag)とは  ハッカーの腕くらべのためのコンテスト  フラグと呼ばれる文字列をお題から取得することで力量を 測る  フラグを取得する方法が、世間で言う情報セキュリティの 脆弱性を突く行為を以てすることが多い  コンピュータに関する様々な知識が問われる

Slide 6

Slide 6 text

どんなジャンルがあるの? 第8回CTF勉強会.pdfより

Slide 7

Slide 7 text

Trend Micro CTF 2019とは  トレンドマイクロ社が主催するCTF  https://www.trendmicro.com/ja_jp/campaigns/capture-the- flag.html  9月にオンライン予選の選抜、11月に本戦があった  優勝賞金100万円

Slide 8

Slide 8 text

前回(2019年9月)のLT#31  機械学習カテゴリに挑んだ件を報告 https://www.slideshare.net/meownoisy/trend-micro-ctf-2019/meownoisy/trend-micro-ctf-2019

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

[余談]映像を扱った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時間を超えるお天気カメラの映像からフラグを取得する

Slide 12

Slide 12 text

Wildcard300 問題文(原文)

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

今一度ルール把握  攻撃のあった10分間の中から、flagmanを見つけ出し、 TMCTF{} の中身の7文字を見つけてくる  その他の細かい制約  Flagmanは必ず1つのASCII文字を身につけている  同じフラグが連続して出現することはない  画像フレームの順序は入れ替えられていない

Slide 20

Slide 20 text

取ったアプローチ  何も考えずDeep Learningに飛びつく  Flagmanが写っている/いない を学習させればいいんでは いる いない

Slide 21

Slide 21 text

機械学習? Deep Learning? AI?  機械学習  プログラムの処理判断基準をデータから自動的に獲得させる技術  Deep Learning  機械学習手法の1種。Deep Neural Network(DNN)という機械学習の総 称。DNNは特徴抽出に長けており一般的に性能が高い。  AI  機械学習プロダクトを雰囲気でイメージしてもらう時に使う言葉 図: https://semla.polymtl.ca/wp-content/uploads/2019/06/Ma-semla.pdf

Slide 22

Slide 22 text

下ごしらえ  動画をフレームにバラす  全19,266枚  約18fps

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

使用したAIの構造  ResNet-18  層をたくさん積んでも学習できるようにした 画像分類用のネットワーク  このネットワークで画像の「いる/いない」学習した https://www.researchgate.net/figure/ Architecture-of-ResNet-18-Figure-from-reference-18_fig1_332303940 画像 いる/いない +

Slide 26

Slide 26 text

学習したAIでの分類  学習したAIに、攻撃後のフレーム約13,000枚を与え、 Flagmanが映っている/いない を分類  分類結果は信頼度†を出せる  †: イメージ的には、 AIがどれくらい答えに自信を持っているかの パーセンテージ  正しくは事後確率という いない (いる確率2%) いる (いる確率 99%) 攻撃後のフレーム

Slide 27

Slide 27 text

フレーム収集基準  AIが信頼度90%以上で「いる」と答えたフレームを集める  520枚のフレームが集まった

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

参考文献  人工知能学会 監修 (2015)『深層学習 Deep Learning』 近代科学社  原田達也 (2017) 『画像認識』 講談社  宮本・大川・毛利 著 (2018)『PyTorchニューラルネット ワーク 実装ハンドブック』秀和システム

Slide 34

Slide 34 text

ご清聴ありがとうございました

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

MLモデル  ResNet-18  ImageNetのpretrained weightを使用してfine-tuning  最終層の構造をいじって、1,000→2クラスのロジットを吐くよう にした  GPU推論で10,000枚 10分程度  GTX1070使用

Slide 38

Slide 38 text

学習におけるパラメータ  入力サイズ: 640x480のまま  データオーグメンテーションは一切なし  ドロップアウトなし  いる/いないで枚数の違いがあるので、枚数比の学習のペナ ルティをかけた  大体1:4の割合なので、いるのにいないと判断した時のペナルティ を4倍にする  train:val = 8:2

Slide 39

Slide 39 text

学習時のやらかし  valのaccuracyがほぼ100  ランダムサンプリングでvalデータを作ってしまったので、leakage が起きていそうだと資料作っている時に気づいた  とはいえ、CGモデルの動きは単調なので、依然として高い accuracyになったと思う