Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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になったと思う