サイバーディフェンス研究所のエンジニアにより結成されたCTFチーム「Cyber Dark Inferno」。先日韓国で開催された「CODEGATE CTF 2024 Finals」に出場し、激戦を繰り広げてきた彼らにその舞台裏を伺いました!
皆さんCODEGATEの決勝出場お疲れ様でした。改めて今回参加したCODEGATE CTFってどんな大会なのか軽く教えていただけますか?
桜井:詳細が公開されてないのであまり自信はないんですが、韓国の科学技術情報通信部っていう行政機関が主催してるCTFで、カンファレンスとあわせて開催されます。国内向けの開催から数えると2008年からやっていてCTF界隈ではなかなか知名度もあります。
清水:韓国の偉い方が来賓してたり、国内のニュースで取り上げられたりしてるんで韓国ではわりと有名なイベントなのかもしれません。
前田:優勝賞金も5000万ウォン(※1)とCTFの大会としては指折りの額ですし、結構お金がかけられてるなぁって印象ですね。あと実は予選直後で不正が発覚したチームが出場停止になるってアクシデントがありまして。どうやらメンバーが他のチームにフラグを共有していたことが原因だったみたいなんですけど、CODEGATEって解いたチームごとに一意のフラグが出てくる仕組みになっていて同じ問題であっても答えのフラグはチームによって異なるんです。なので同じフラグをコピペして提出すると一発でバレるっていう。こういったルール違反検出に気合いを入れてるところもCODEGATEの特徴ですね。
(※1)日本円でおよそ546万円(1ウォン = 0.11円で計算)
今回出場したCyber Dark Infernoというチームはどのようにして結成されたんですか?
清水:会社に30人弱が所属してる「非公式CTF部」って部活があるんですけど、そこのメンバーの中で出たい人が挙手をして結成したって感じです。大したストーリーがなくてすみません(笑)
桜井:前田さんや清水さんのように元々別のチームに所属して活動してる経験豊富なメンバーと、僕のように経験が浅いメンバーが混ざってますが、僕は最初は遠慮してたんですよ。というのも最初に予選に参加したのはここにいる4人に加えて松隈さんとUCQさんの6人だったんですが、僕は予選で何も解けなかったんです。(決勝は4人のチームなので)決勝に行くメンバーを決める時も僕はどうせ行ったところで解けないだろうと思ってたし、会社から渡航費が出ることもあって(戦力にならないのに行くのは)余計に嫌だったので。ですが松隈さんから「若者は現地を体験してこんかい」というご厚意を受けて決勝もメンバーとして参加することになりました。
今回CODEGATEに出場しようと思った経緯は何ですか?
前田:経緯...うーん特に大きな理由はないんですが、普通は決勝に出場できるチームって8チームぐらいなんですけど、CODEGATEは決勝に進めるのが20チームとかなり多かったのもあって。「これはワンチャンいけるんじゃ?」っていうのもあって出てみることにしました。
今回の結果は20チーム中17位と悔しい結果に終わってしまいましたが何か敗因のようなものがあるのでしょうか?
前田:そうですね、まず今回うちのチームは他のチームも解いているような問題「しか」解けなかったってことが挙げられます。うちが解いている問題は実は他の15チームも解いてます、みたいな。
それは解きやすい問題から解いた結果そうなったということでしょうか?
前田:最初はこれが解きやすい問題なのかどうかっていうのはわからないんですが、競技が進行していくと問題に対して解答したチームが公開されていくので時間が経つにつれて各問題の難易度がなんとなくわかってきます。なので「これはみんな解答しているから簡単そうだな」って判断したところから手をつけてました。
勝つためには誰も解いてないような問題を解くっていうのが大前提なんですけど、今回はそこまで時間をかけることができませんでした。
うちはWebできる人が2人いたので僕はその2人に任せちゃってたんですが、実はWebの問題が6〜7問と多く、ほとんどのチームが5、6問解答していたのにうちは4問ぐらいしか解けてなくて。その分担も敗因だったのかなぁとか思いますね。
なるほど。今回印象に残った問題とかありますか?
前田:そうですね、僕は最初に暗号の問題に取り組んだんですけどそれが2018年頃のDEF CONの予選で出題された問題と設定がかなり似ていたことが印象に残ってますね。最初は誰でも解ける問題だなって思って朝の10時ぐらいから取り組み始めたんですが、途中で他の問題とか挟んでいたら最終的に解けたのが夜中の3時ぐらいになってしまいました。ここで時間を使いすぎてしまったことが心残りですね。
桜井:ちなみに前田さんの「誰でも解ける」は嘘です。
前田:いやいや(笑)実際20チーム中15チームが解答してましたし。そんなに難しくはないはずの問題だっただけに悔しいです。
新穂さんはいかがです?
新穂:僕は基本的にWebの問題をやってたんですが、2つの画像ファイルをアップロードするとその2つの画像を合成して新しい画像を生成してくれるっていうサービスの問題に取り組みました。生成された画像の情報を検証する処理で特定の条件を満たしているとフラグが出る、みたいな問題です。結局そのアプリケーションの(シナリオ上の)設定とかは謎だったのが印象に残ってます。
あとは競技中には解けなかった問題の中で、JavaScriptの文末のセミコロンがあるかないかで変数の値の取り扱いが変わってくるっていうのを知った時は素直に「へーそうなんだ」って思いましたね。
清水さんはいかがですか?
清水:ELFファイルをアップして任意のアドレスを指定してそこに飛ばすことができる「Jumper」って呼ばれる問題があったんですけど、競技開始から5時間後ぐらいにその問題に不備があったことが発表されて修正された問題が出題されたんです。 でも私はその不備に気づかず、修正前の問題を想定解と思われる方法で解いていました。ですので修正後の問題も出題からわずか30秒で解くことができ、うちのチームがFirst Blood(各問題を一番最初に解いたチームに与えられる称号)を獲得したっていうのが印象的でした。 それが今回の戦いのハイライトかもしれません(笑)
CODEGATEのような国際的なイベントでも問題にミスがあったりするんですね!
清水:あると思いますよ。僕らが出題する場合でも時間がない時は検証を十分に出来ずに済ませてしまうこともたまにありますし。
前田:本来は作った問題に対して脆弱性診断しないといけないんですけどね(笑)
桜井さんは初の海外CTF参加だったわけですが何か印象に残った問題はありますか?
桜井:先ほど新穂さんが仰ってた問題も印象に残ってるんですが、他にもいくつか印象に残ってた問題がありました。それは別の記事でWriteupを書くのでそちらをご覧になっていただければと思います。
桜井さんはセキュリティエンジニアになってまだ日が浅いかと思いますが、CTFを通じていい影響があったりしますか?
桜井:僕が最初にCTFを知ったのは昔インターンシップに行ってた会社でCTFという競技の存在を教えてもらったことがきっかけだったんですけど、当時は本当に全く知識がなかったので、「フラグ」や「BASE64エンコード」すら何?って状態でした。
その時はもちろんソースコードも読めないので全然楽しさがわからず取り組んでなかったんですが、サイバーディフェンスに入社してからは松隈さんから「コードはちゃんと読まんかい」と言われたことで最近はソースコードを少しずつ読めるようになってきたので、CTFの楽しさや難しさもわかるようになってきました。
CTFはソースコードを読んで脆弱性を特定してエクスプロイトを刺す、みたいな流れが多いのかなと思うんですが、個人的には普段ブラックボックスの診断業務が多くてソースコードを読む機会がほとんどないので、CTFを通してコードを読む勉強ができているって感じですね。
今回のCODEGATE CTFって丸一日開催されてたと思うんですが、皆さんは競技中に寝れたんですか?
前田:僕は寝てないです。競技が終わってからも表彰式や公式のWriteupの解説を聞きに行ったりしていたので30時間以上起きてたと思います。 ホテルに戻ってからも夜の懇親会まで少し時間が空いてたのでちょっと1時間ぐらい寝ただけですね。
新穂:僕もそんな感じですね。会場が蒸し暑かったので明け方頃に一旦シャワーを浴びにホテルに戻ったりとかはありましたが、それ以外はほとんどPCに向き合ってました。
そんなに長く起きておくなんてもうこの年齢になると考えられないです(笑)CTFやってる時ってハイになってくるんですか?
前田:解けそうになってくると目が覚めることはあります(笑)でもやっぱり明け方5〜6時ぐらいがピークでしんどいです。
新穂:今回ホテルと会場の間が歩いて15分ぐらいあったのでシャワーを浴びに帰る時にそこで目は覚めるんですけど、100%復活するかというとそんなことはないです。老いを感じますね(笑)
桜井:僕は普段なら24時間ぐらい起きてられるんですが、CODEGATEは最後の3時間ぐらいで寝てしまいました。オンサイトだと消耗するのかもしれません。
清水:寒かったり暑かったりに加えて、食事の酸っぱい匂いも充満してましたしね(笑)
桜井:あと競技中のBGMでずっとK-POPが流れてて、個人的には知ってる曲ばかりで気が散って全然集中できませんでした(笑)
新穂:僕はむしろ作業しながら気分が上がってましたよ(笑)
(オンサイトの)CTFって普通BGMを流してるものなんですか?
新穂:流れてることが多いですが、版権のある音楽を流してていいのかは疑問です(笑)
前田:でもそういう曲が流れているうちは平和なのかなと思います。最近は妨害コンテンツも見なくなりましたし。
桜井:妨害コンテンツってなんですか?
前田:一昔前は競技中に『Tunak Tunak Tun』のMVが流れたりRickroll(釣りリンクを貼る行為)で定番の『Never Gonna Give You Up』が流れたりとか、あからさまに競技者の集中力を妨げるような行為が行われることも度々ありました(笑)
前田さんや清水さんはSECCONなどCTFの開催に携わる身でもあるわけですけど、若い世代に向けて伝えたいCTFの魅力ってありますか?
前田:うーん、やっぱり一つの問題に対して試行錯誤できることですかね。問題を解けることは競技をするうえで大事ですけど、問題を解けずに試行錯誤してる時間の方が大事だと僕は思ってます。トラブルシューティングが上手い人ってトラブルシューティングの勉強だけをしてきたわけじゃなくて、それまで様々なトラブルにあたって解決してきたっていう「過程」があってそうなったはずなんです。それと同じで正解を導くまでの「過程」こそ一番成長できるんじゃないでしょうか。
あとCTFで出題される問題ってよくある落とし穴とかもあって、繰り返していくうちに「ここでこうすると失敗するよね」っていう勘が鍛えられていきます。そうすると普段の業務とかでも時短できることが結構あるんですよ。
なるほど、特定の技術に関して試行錯誤する機会が与えられて、それが結果的に血肉になるってことですね。
新穂:CTFは仕事以外での技術研鑽ができる場だと思っています。仕事では遭遇しない設定もありますし、逆に実際にCTFで取り組んだことのある問題と同様の脆弱性が現実の業務で発見されることもありますから。
前田:問題解いている時に「あれ、現実でこれ見逃してないか!?」って逆に不安になることもありますけど(笑)
清水:僕は普段積極的に新しい技術を学んでいこう!ってタイプではないんですが、CTFに参加すると「名前は聞いたことある」ような技術もその内部の構造を半ば強制的に勉強しないといけないので、何から技術の勉強をすればいいかわからないって人にもいい機会になるのかもしれません。
CTF初心者の中には何から勉強したらいいかわからないって方多いと思うんですけど...
前田:まずCTF初心者の人って何かしら勉強したことを持ち込んで「よし、いっぱい問題解くぞ」って人多いんですけど、CTFの常連は問題を見て競技の合間に勉強してます。
例えばですが、普段使ってるPCやライブラリの中身のこういったパーツがどう動いてるかとか、Webアプリの普段使ってるフレームワークの、そのマニュアルの先のコード読んでますか?どうしたらバグるか知ってますか?みたいなことを突然聞かれるわけです。
CTFの過去問とかに触れて普段から勉強することももちろん大事ですが、その場で知らないことをめちゃくちゃググってコードに書き起こすっていう現地調達みたいな勉強方法も有効だと思いますね。
なるほど、知ってるようで実は知らないことに気付かされて、さらにその深層を理解する機会にもなるわけですね。この話を聞いていると改めてCTFという競技は万人に受けるものではないのかなと思いました。
清水:そうですね、調べることを苦痛に感じないとか技術の仕組みを根本から理解することに楽しさを感じられるある種の資質のようなものがないと向いてないかもしれないですね。
桜井:僕から見ると皆さん変態の域に達していると思います。技術を突き詰めようとする気概が凄すぎるというか、諦めなさすぎるというか。僕は問題解く時に一つわからないことがあるとすぐ諦めちゃいますから。
これからCTFに参加してみようと思っている若い世代の方に向けてのアドバイスをお願いします。
清水:やっぱり最初は試行錯誤するための手札がないと思うので、Writeupを読んででもとにかく問題を解いて手札を増やしていくことが大事かなと思います。
前田:プログラミングできないとCTFはできないので、もしプログラミングが苦手って人はそこから勉強しましょう。自分でプログラムを作ってみるとかオーソドックスなコンピューター技術をしっかり抑えることをお勧めしますね。よく「Linuxわかりません」って人もいるんですが、LinuxがわからないとほとんどのCTFに参加できませんし。
清水:たしかに。まずはCTFでよく出題されるサーバー管理と(Web開発などの)プログラミング周りの下地を固めることですかね。
前田:あとはDockerも絶対使えるようになった方がいいです。昨今のCTFってほとんどDockerで問題ファイルが配られるので、Docker使えないと自分の手元で環境再現ができず自分の解答が合ってるのか検証できなくなっちゃうので。
なるほど、つまりサーバー管理やLinuxコマンドなど現在のインターネットインフラを構築する技術は最低限理解したうえでCTFに挑戦する土台を作るということですね。ちなみに初心者でも参加しやすいおすすめのオンラインCTFとかありますか?
前田:アメリカのカーネギーメロン大学がホストしているpicoCTFの常設版とかがいいかもしれません。難易度の低い問題が大量にある印象です。picoCTFが簡単でつまらないなと感じたらAlpacaHackがおススメです。AlpacaHackは国内の有志によって運営されている個人戦のCTFで、1回が6時間の短期決戦かつ開催頻度が高いことが特徴です。まだサービスが始まって間もないのでこれからの発展が楽しみです。
では最後にCyber Dark Infernoとしての今後の活動の目標とかあれば教えてください。
桜井:ゆくゆくSECCON CTFの決勝に行きたいねっていうのは時々話してますね。
前田:運営メンバーが2人いるから戦力だいぶ減るけど(笑)
運営メンバーが所属するチームが出場するのって大丈夫?フェアじゃないとか言われない?
清水:他の運営メンバーもそういう人たちが出場することを理解しているので全然大丈夫です。ぜひ決勝にきてほしいですね。
本日はありがとうございました。
全員:ありがとうございました。
前田 優人 2020年、新卒でサイバーディフェンス研究所へ入社。主にリバースエンジニアリングが関わる診断に従事。SECCONではCTF WGリーダーを務める。 |
---|
清水 祐太郎 サイバーディフェンス研究所ではリバースエンジニアリングの診断に従事。しばしばWebアプリケーション診断やネットワーク診断に携わることもある。CTFでは主にPwnableを担当し、SECCONなどの大会で作問も務める。 |
---|
新穗 隼人 2017年、新卒でサイバーディフェンス研究所へ入社。Webアプリケーション診断やネットワークペネトレーションテストを担当した後、現在はリバースエンジニアリンググループでの業務に従事している。INTERPOL Digital Security Challenge(インターポール向けサイバー犯罪捜査演習)プロジェクトに参画、セキュリティエンジニア育成のためのオンラインラーニングサービスの開発にも貢献した。CODEGATE CTF 2024 Finals 出場。趣味とは言えないレベルでボウリングに情熱を傾けている。 |
---|
桜井 遼 2023年、新卒枠でサイバーディフェンスへ入社。ウェブアプリケーション診断やモバイルアプリケーション診断に従事。 |
---|