xryuseix’s diary progress

イベント参加記とか,何か進捗でたら書きます

OSINT中心のCTF・TsukuCTF2022 運営参加記

CTF 概要

タイトル TsukuCTF 2022
コンテスト URL tsukuctf.sechack365.com
Writeup URL fans.sechack365.com/ctf/TsukuCTF2022
開催期間 2022/10/22 12:20PM ~ 2022/10/23 18:00PM(29h40m)
参加者 652 (昨年度+273)
問題数 35

単独作問した問題の感想

全体的に以下の点に勝手に、個人的に注意しながら作問しています。

  • ブルートフォースは10回まで(個人的なルール)で、基本的にはスマートに解けるようにする
  • 典型を出すときは必ず学びがあるように
  • 典型じゃないものは正攻法ができるだけ簡潔に、スマートに(lucky_number, Ochakumiなど)
  • OSINTはできることが多すぎるので、ある程度は誘導する
  • できるだけguess要素を作らない
  • 海外ニキでも解けるようにする
  • 去年自分が出した手法と全く同じ手法で解ける問題は出さない(他の運営が出すことはあります)
    • 特に僕のQiitaとかで公開した方法は極力出さないようにしています
  • 答えが確認できる様にする(作問してて確証が持てる様にする)
  • etc...

lucky_number777

What's New in Pythonを読むのが好きだった謎の時期がありまして、その時にこれCTFに使えるじゃんと思って出題したものです。僕の知る限り2通りの解法があってeasyでいいかなと思ったんですが、あんまり解かれていませんね...🙇‍♂️

問題タイトルは去年の続きって感じですが、特に意味はないです。

TakaiTakai

私自身が高所からの特定問題にGoogle Mapの使用をやめて、全部Google Earth Proを使っているので、Google Earth Proが活かせる問題を作ろうと思ったんですが、できず微妙な感じになってしまいました。まあ3Dみたいな問題面白いしいくつか出してもいいかなって思って出しました。

普段から海外CTFでカピッカピの画像にキレている(いいえ)ので、仕返しにカピッカピにしてやりました。どうだ海外ニキたちよ!!!!!

uTSUKUSHIi

最初easyで提案したらny_aさんに「これ絶対ヤバいので最低でもmediumにしろ!!!!!(言ってない)」って言われ、耐えました(udonの悲劇回避)。

ねこちゃんの画像を出題したかっただけです。

というのは半分ジョークで、検索ワードをうまく見つけ出す問題として作りました。いかに「猫カフェ」という単語を導き出せるかって問題ですね。

それにしてもかわいいね。

TsukuCTF_Big_Fan_1 ~ TsukuCTF_Big_Fan_3

複数の問題で話がつながっているアカウント問を作りたくて作りました。

1は無難にやりました。2のドメインはTsukuCTFが保持していることがわかる&&CTF開催前に発見されにくいドメインとして「つくctf.com」を取得したのでpunycodeというややこしい要素が入ってしまってなんかすみません(別に最初から貼っても良かった)。メインテーマ?としてはcrt.shです(ところで、当日朝にcrt.shの鯖の調子が悪くて焦りました)。 3はWayback Machineから作ってます。

FlagDM

GHuntのissueが永遠に消えてない(※詳細は公式Writeupを見てください)けど、GHuntのソースコードを見るとそんなにヤバめのissueではなさそうだったので問題にしようと思いました。また、去年アカウント探すツールを使った問題があまりなく、Google Docsから他のサービスのアカウントが特定できると面白いな〜って思ってまとめちゃいました。 Youtubeがrabbit holeになっていたのはすみません。今すぐ思い出せないんですが、Docs→Map→Youtube or Twitter→Flagって順で、どうにかするとTwitterよりも先にYoutubeが特定できたはずです(writeupお待ちしています)(公式ではYoutubeは触れてなかった気がする)。

Ochakumi

お茶汲み担当の皆さん、解けましたか????????????

自分でWASMのコードを書いてる時、WASMの中にGitHub secretレポジトリのレポジトリ名が入ってて焦った経験から問題を作りました。onionサーバにするかは結構迷いました。メリットデメリットはこんな感じで、結局使いました

メリット: 一般鯖におけるOSINT手法が使いにくいので参加者の選択肢が減る、インターネット上で捕捉されにくい、来年以降onion問題を作るなら知見として貯められる
デメリット: ネットワークが重い、Torなんて知らん、Tor関連の選択肢が多少増える

Writeup見る限りの雑な感想なんですが、みんなTor使ったことないん...??OSINT解くならかなりデフォで入れてると思ってました。

共同作問した問題の感想

Bus POWER

xINT CTF定番のBus問風で作ろうかなと思って、僕が雑に写真撮ったやつを出しました。shiosa1tくんが「ヤバイけど」解けるとか言ってたので、ボス問のつもりで出したんですが、意外と解かれてびっくりです(左の文字が読めるとかいう人間離れしたWriteupも見ました)。

ところで、Bus POWERは僕自身はすぐに解けなくて、理由としては

  • 車番が同じでも同じルートとは限らない
  • 車番が違ってても同じルートとなることがある

あたりで綺麗な方法がなくて、そんなことしてる間に隣でshiosa1tくんが力技で解いてたので問題名にPOWERを入れました。

Money

パソコン初めて使ったような人でも1問くらい解かせてあげたいなと思って作りました。

Moon

開催3日前くらいまで解法がなくて没にするつもりでした。labo_4423くんが解いてくれました。

labo_4423「やっぱオタクは困ったらTwitterなんよ(笑)」

解けと言われ解法を生んだだけの問題の感想

banana

Google Lensが変な特徴を過度に解釈してしまう?という現象は今までよくあって、今まではトリミングとかしていい感じにやってたんですが、https://cleanup.pictures/ を見たときにこれで特徴量?消せるじゃんってなった記憶がありました。

Momoka「人間を消せ」

あと左の文字が読めるとか言ってる人間離れした人もいて、かなり驚きました。(いや読めないだろ)

Robot

Baidu問のつもりだったんですが、なんかLensで出るらしい。hardタグつけちゃってごめんなさい。 ところで、Baidu問は簡単すぎ or 激ムズしか作れなくて結構調整が大変でした。

レビューした問題の感想

  • Attack_of_Tsukushi
    • もう少しくらい簡単なのあってもいいよね
  • Desk
    • 沖縄いいな〜〜〜〜〜〜
  • douro
    • 情報量なさそうでめっちゃあるのいいね
  • FlyMeToTheTsukushi
    • 窓ガラスの反射で場所が特定されるのは現実でかなりあるので、よさそう
  • Gorgeous Interior Bus
    • 銀座ってここにもあるんか
  • inuyama082
    • うまそう
  • PaperJack
    • TsukuCTF運営は京都や寺社仏閣が大好きなんですよ、マジで
  • sky
    • 情報量ないように見えていっぱいあるね
  • what_time_is_it
    • 最初exifに思いっきり時間が入ってて慌てて消しました。僕の今回の一番の功績です(?)。あとshiosa1tくんが「答えが3パターンから絞ることができないけど、提出制限3回あれば十分だろ」とか言い出しててせめて5にしてって言いました。
  • Where
    • 都会やな〜
  • bughunter
    • 最初はもう少しむずかったんですが、日に日に簡単になるように改良されていました

準備期間

運営DiscordでTsukuCTF作問チャンネルみたいなのを作って、一年間原案になりそうなネタや写真などをそこにストックし続けました。また、いくつかのWebサイトにフラグを仕込んだり色々してたりしました(?)。

また、皆さんお察しの通りOchakumiだけは事前にタイトルを決めていました。ネタ枠です。

他にも「「97人までの参加、猫はチームメンバーに含む」をルールに追加」みたいなTODOもこの時期に決まってました。

そういえば、作問全体では特にフラグ形式に苦労しました。一般的な(?)SECCONのようなCTFでは、例えばWeb問ならWebサーバ内のDBやadminのcookieとかにフラグの文字列があるし、revなら元のソースコード内に直接的・間接的*1にフラグがあります。つまり、フラグは一意であり、運営が用意しています。

しかし、OSINTのCTFではどうでしょうか?Ochakumiやhub been storenなどは一般的なCTFと同じですが、inuyama082やPaperJackなどは違います。フラグは誰か運営とは別の人が考えた/一般的に使用されている(固有)名詞になっていることが多いです。これは表記ゆれが非常に生まれやすい上、作問者が思っている名称は正式名称ではないこともあります*2

そこで、一部の問題(Attack_of_Tsukushi, TakaiTakaiなど)はフラグフォーマットをTsukuCTF22{\x21–\x7e}*3で、かつ一意に定まる地理情報(開業日や郵便番号*4 )にしました。しかししかし(2回目)、正確な地名をフラグにしたい場合はどうしたら良いでしょう?douroとかがこれに当たりました。 open xINT CTFではniceviewという問題に「plus code」が使用されていました。これは天才の発想なんですが僕らはそんなこと知らずに困って困った先、普通に地理座標を使用しました。

しかししかししかし(3回目)、地理座標のフォーマットをどうしたらユーザに誤解を与えることなく伝えられるでしょうか?前回の反省点で、間違ったフラグフォーマットで大量にsubmitされている方*5がいました。長きにわたる議論の末*6、このようになりました。

問題文の末尾

※フラグの形式はTsukuCTF22{緯度_経度}です。ただし、緯度経度は十進法で小数点以下五桁目を切り捨てたものとします。

ルール

座標を特定する問題におけるフラグ形式は問題文に記載のある通り、 TsukuCTF22{緯度_経度} です。ただし、緯度および経度は十進法で小数点以下五桁目を切り捨てたものとします。例えば、日本中央標準時子午線最北端の塔の座標は緯度 35.693098 、経度 135.003078 付近なので、フラグは TsukuCTF22{35.6930_135.0030} となります。また、数メートル程度の誤差が許容されています。

基本的にはdiscordで質問された時に「ルールのこの辺りに書いてあるからちゃんと読め!」って返せるように他のルールも工夫されています。その結果、今年は(提出を監視してた限り)かなりフラグフォーマットのミスを防げたかと思います *7

開発体制

GitHubでmasterから各問題ブランチに切ってPRを作成する形で作っていました*8。レビューは基本的に2人体制で行っていました。そしてGitHubの更新はdiscordにwebhookで飛ばすようにしていました。

DiscordとGitHubの使い分けとしては

  • 問題のレビュー、問題特有のissue(バグなど)はGitHubのPR comment(名前わからん)
  • 他は全部Discord

と言った形で行いました。

後にこの辺りのKPTを行ったのですが、来年はこの辺りの開発体制を一新してより効率的かつミスの少ない仕組みが検討されています。

本番

TsukuCTFは元々Sechack365 Returnsの併催イベントとして開催されています。今年はReturnsがオフラインで開催されたので、僕ら運営陣も東京に集まって運営しました。夜は貸し部屋(名前わからん)を借りて交代しながら誰か1~2人は最低起きていられるようにしました。

次回に向けて

KPTで言うKeep, Tryはみんな興味ないと思うので、特にProblemについてお話ししたいと思います。アンケートでいただいたいくつかの内容について触れたいと思います。

  • 「CTFd上で漢字変換する際に提出されてしまう、そのせいで提出回数制限がある問題で失敗する」→知りませんでした。来年は最善を尽くします。
  • 「上位入賞者へは直接DMを行って住所などをお聞きしていましたが、DMの送信者が本当に運営か分かりにくい*9」→来年はTsukuCTF鯖内で賞品を渡す方々用のチャンネルを作成します。
  • 「Welcome問題がむずい」→CTFerからするとビックリでしょうが初見だと確かになって感じです。もう少し難易度を落とします。
  • 「英語で書いてくれ」→少なくとも来年は今年より時間を割きたいです。
  • 「問題数が多い」→面白そうで解きたい問題だけを解いて楽しんでもらえるとありがたいです!!後述しますが難易度傾斜がかなり緩やかなので、全完された方以外は「あともう少しで解けた」という問題が必ず存在するようになっています。

Q&A

来年は開催するの?

(TsukuCTF 運営ではなく個人の意見です)同じくらいの難易度でしたいです。今年はSecHackからの来年もやってくれってお話をいただいたり、鯖費用以上の寄付金をいただいたりしたので、意地でも開催したいなと思っています。

コンテストの様子(写真集)

おわり。

*1:例えば、フラグを受け取ってハッシュ化すると文字列Xになる場合にその値がフラグです、的な問題

*2:CTF運営=仕事ではないので、対策は全部ベストエフォートです

*3:表記適当ですが、要するにasciiのprintableなもの

*4:郵便番号は範囲が広いけどAttack_of_Tsukushiは九州の僻地だしええやろ的な

*5:上位10チームの中でも結構いらっしゃった

*6:本当に数日議論してた

*7:TsukuCTF{XXX}というミスは結構あった、これは来年への課題になっています

*8:GitHubにお金払ってないのでbranch protectionは設定とメッセージが出ているものの機能していませんでした

*9:フィッシング的な