Save 37% off PRO during our Black Friday Sale! »

誘導を読み取って1ステップ上の問題を解けるようになろう/Tips for Solving CTF with Reading Leads

195f71c8183f8d27da66aa0618f293b6?s=47 task4233
October 17, 2021

誘導を読み取って1ステップ上の問題を解けるようになろう/Tips for Solving CTF with Reading Leads

教科書的なBeginner問題は解けるが、少しひねられたBeginner~Medium問が解けない方に対して、問題に散りばめられた誘導から方針決定できるようになってもらうことが目的です。 実際にBeginners CTF 2021で出題された問題から一部抜粋して例を提示します。

195f71c8183f8d27da66aa0618f293b6?s=128

task4233

October 17, 2021
Tweet

Transcript

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

  2. 自己紹介 氏名: Takashi Mima(@task4233) 所属: 芝浦工業大学 M1 興味: サーバサイドとWebセキュリティ 担当した問題:

    ・git-leak(410 Solves/43.5%) ・children(293 Solves/31.1%) 2
  3. はじめに 基本的に例はLinuxコマンドでの説明になります ・Windowsユーザは適宜読みかえてください󰢛 3

  4. テーマは「誘導」 4

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

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

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

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

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

  10. Beginners CTF 2021で出題された問題のジャンル ※ForensicsやNetworkなど、他のジャンルも存在する 10 ジャンル名 求められていること Reversing バイナリを解析する Pwnable

    プログラムの脆弱性をつく Crypto 暗号を解読する Web Webアプリケーションに関する脆弱性 Misc 何でも(他のジャンルに該当しないもの)
  11. 問題名・問題文に含まれる情報 背景 →問題が提示されるに至った経緯など 技術やキーワード →問題を解くために必要な脆弱性の名前など Flagのある場所・解き方 →そのまま 11

  12. 実例1: [Reversing] only_read ジャンル: Reversing => バイナリ解析しそう? 問題名: only_read =>

    読むだけで解けるのかな? 問題文: バイナリ読めなきゃやばいなり〜 => バイナリの処理の流れを読めると解けそう? →バイナリの制御フローを確認する 12
  13. 実例2: [Pwnable] beginners_rop ジャンル: Pwnable => 何らかの脆弱性を突きそう? 問題名:beginners_rop => 初心者向けのrop?

    問題文:(略) Did you know Return Oriented Programming? => Return Oriented Programmingがキーワードっぽい? →Return Oriented Programmingについて調べる 13
  14. 実例3: [Reversing] be_angry ジャンル: Reversing => バイナリ解析しそう? 問題名: be_angry =>

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

  16. 配布ファイルの表層から得られる情報 メタ情報やファイルの種類から得られる情報 使えるコマンド例 16 コマンド名 概要 file ファイルの内容からファイル形式を出力する readelf ELFファイルの情報を出力する

    strings ファイル中の表示可能な文字列を出力する binwalk ファイル内に埋め込まれたファイルの情報を出力する exiftool メタ情報の読み取りと書き込みを行う checksec ファイルのセキュリティ機構の状態を出力する
  17. ジャンルに応じて大抵確認する表層情報 Reversing ファイルの素性 →file, strings, binwalkコマンド等 リバースエンジニアリングツールに読み込ませる →Radare2, Ghidra, IDA等

    Pwnable ファイルの素性 →file, checksecコマンド等 17
  18. 実例: [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
  19. 目次 1.誘導とは 2.ジャンル・問題名・問題文から得られる情報 3.配布ファイルの表層から得られる情報 4.配布ファイルを解析して得られる情報 5.作問者が意識していたこと 6.まとめ 19

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

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

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

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

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

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

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

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

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

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