Slide 1

Slide 1 text

誘導を読み取って 1ステップ上の問題を解けるようになろう SECCON Beginners Live 2021 2021/10/17 Takashi Mima(@task4233)

Slide 2

Slide 2 text

自己紹介 氏名: Takashi Mima(@task4233) 所属: 芝浦工業大学 M1 興味: サーバサイドとWebセキュリティ 担当した問題: ・git-leak(410 Solves/43.5%) ・children(293 Solves/31.1%) 2

Slide 3

Slide 3 text

はじめに 基本的に例はLinuxコマンドでの説明になります ・Windowsユーザは適宜読みかえてください󰢛 3

Slide 4

Slide 4 text

テーマは「誘導」 4

Slide 5

Slide 5 text

CTFにおける 「誘導」って知ってますか? 5

Slide 6

Slide 6 text

解く時に「誘導」を 意識していますか? 6

Slide 7

Slide 7 text

本発表の目的と対象者 目的 解く時のテクニックの1つとして誘導を知り、1ステップ上の問題 を解けるようになること 対象者 教科書的なBeginner問題は解けるが、少しひねられた問題が 解けない人 7

Slide 8

Slide 8 text

目次 1.誘導とは 2.ジャンル・問題名・問題文から得られる情報 3.配布ファイルの表層から得られる情報 4.配布ファイルを解析して得られる情報 5.作問者が意識していたこと 6.まとめ 8

Slide 9

Slide 9 text

誘導は解き手をFlag取得に導く情報 今回お話するのは3種類の情報 1.ジャンル・問題名・問題文から得られる情報 2.配布ファイルの表層から得られる情報 3.配布ファイルの解析から得られる情報 →これらがあると「手が動かせる」 具体例を交えながら説明する 9

Slide 10

Slide 10 text

Beginners CTF 2021で出題された問題のジャンル ※ForensicsやNetworkなど、他のジャンルも存在する 10 ジャンル名 求められていること Reversing バイナリを解析する Pwnable プログラムの脆弱性をつく Crypto 暗号を解読する Web Webアプリケーションに関する脆弱性 Misc 何でも(他のジャンルに該当しないもの)

Slide 11

Slide 11 text

問題名・問題文に含まれる情報 背景 →問題が提示されるに至った経緯など 技術やキーワード →問題を解くために必要な脆弱性の名前など Flagのある場所・解き方 →そのまま 11

Slide 12

Slide 12 text

実例1: [Reversing] only_read ジャンル: Reversing => バイナリ解析しそう? 問題名: only_read => 読むだけで解けるのかな? 問題文: バイナリ読めなきゃやばいなり〜 => バイナリの処理の流れを読めると解けそう? →バイナリの制御フローを確認する 12

Slide 13

Slide 13 text

実例2: [Pwnable] beginners_rop ジャンル: Pwnable => 何らかの脆弱性を突きそう? 問題名:beginners_rop => 初心者向けのrop? 問題文:(略) Did you know Return Oriented Programming? => Return Oriented Programmingがキーワードっぽい? →Return Oriented Programmingについて調べる 13

Slide 14

Slide 14 text

実例3: [Reversing] be_angry ジャンル: Reversing => バイナリ解析しそう? 問題名: be_angry => angrを示唆している? →(知らないと分からないが)angrを使う 14

Slide 15

Slide 15 text

目次 1.誘導とは 2.ジャンル・問題名・問題文から得られる情報 3.配布ファイルの表層から得られる情報 4.配布ファイルを解析して得られる情報 5.作問者が意識していたこと 6.まとめ 15

Slide 16

Slide 16 text

配布ファイルの表層から得られる情報 メタ情報やファイルの種類から得られる情報 使えるコマンド例 16 コマンド名 概要 file ファイルの内容からファイル形式を出力する readelf ELFファイルの情報を出力する strings ファイル中の表示可能な文字列を出力する binwalk ファイル内に埋め込まれたファイルの情報を出力する exiftool メタ情報の読み取りと書き込みを行う checksec ファイルのセキュリティ機構の状態を出力する

Slide 17

Slide 17 text

ジャンルに応じて大抵確認する表層情報 Reversing ファイルの素性 →file, strings, binwalkコマンド等 リバースエンジニアリングツールに読み込ませる →Radare2, Ghidra, IDA等 Pwnable ファイルの素性 →file, checksecコマンド等 17

Slide 18

Slide 18 text

実例: [Reversing] firmware $ file firmware.bin firmware.bin: data $ binwalk firmware.bin DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 1682 0x692 Copyright string: "Copyright 2011-2021 The Bootstrap Authors" 1727 0x6BF Copyright string: "Copyright 2011-2021 Twitter, Inc." 82842 0x1439A ELF, 32-bit LSB shared object, ARM, version 1 (SYSV) 93155 0x16BE3 Unix path: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/Scrt1.o (略) 18

Slide 19

Slide 19 text

目次 1.誘導とは 2.ジャンル・問題名・問題文から得られる情報 3.配布ファイルの表層から得られる情報 4.配布ファイルを解析して得られる情報 5.作問者が意識していたこと 6.まとめ 19

Slide 20

Slide 20 text

配布ファイルを解析して得られる情報 静的解析 →ファイルを実行しないで行う解析 ・ソースコードを読む ・バイナリを逆アセンブル(デコンパイル)してみる 👍 ・実行ファイルに含まれない情報が得られる(コメント) 👎 ・振る舞いが実際に確認できない 20

Slide 21

Slide 21 text

配布ファイルを解析して得られる情報 動的解析 →ファイルを実行して行う解析 ・実際の挙動を確認する ・ライブラリをリンクして実行する 👍 ・手元で実験ができる 👎 ・環境を作るのに手間がかかる 21

Slide 22

Slide 22 text

実例1: werewolf(app.py) コメントアウトされている情報は除去しても良いはず →必要だから書かれている 22 https://github.com/SECCON/Beginners_ CTF_2021/blob/fdf1194860eb36d45cfc 1d22b47658ace56b1925/web/werewolf /files/app.py#L24-L27

Slide 23

Slide 23 text

実例2: be_angry angr(動的解析)を使うと解ける 23

Slide 24

Slide 24 text

目次 1.誘導とは 2.ジャンル・問題名・問題文から得られる情報 3.配布ファイルの表層から得られる情報 4.配布ファイルを解析して得られる情報 5.作問者が意識していたこと 6.まとめ 24

Slide 25

Slide 25 text

作問者は作った問題を(たぶん)解いて欲しい 以下の要素があると、解く人は非本質的な部分で詰まるかも ・Guessing ・問題と関係ない情報 ・偽の誘導 など ref: https://icchy.hatenablog.jp/entry/2018/09/17/083648 25

Slide 26

Slide 26 text

出題予定の問題のレビュー git-leakは元々zlibヘッダを破損させるつもりだった →現実の問題で破損することは少ないので除去 26

Slide 27

Slide 27 text

目次 1.誘導とは 2.ジャンル・問題名・問題文から得られる情報 3.配布ファイルの表層から得られる情報 4.配布ファイルを解析して得られる情報 5.作問者が意識していたこと 6.まとめ 27

Slide 28

Slide 28 text

誘導は銀の弾丸ではない あくまで一つのテク ・手を動かすきっかけにするためのもの ・ミスリードや勘違いもよくある 大事なのは諦めないで取り組み続けること ・そのために、誘導から得られる情報が使える 28

Slide 29

Slide 29 text

まとめ 問題には情報がたくさん含まれている ・ジャンル・問題名・問題文から得られる情報 ・配布ファイルの表層から得られる情報 ・配布ファイルを解析して得られる情報 29 誘導を意識して、1ステップ上の問題を 解けるようになろう!