こんにちは。システム統括本部プラットフォーム開発本部の西山です。
Yahoo! JAPAN Tech Advent Calendar 2018の10日目は、社内で活動しているCTFチームワイハリマの紹介をします。(記事の最初にある画像はチームワイハリマのチームロゴです。)
まずはじめにワイハリマは国内のCTFコンテストSECCON CTF 2018のオンライン予選を勝ち抜き国内大会に出場することになりました! 本当は国際大会の方に出て世界のワイハリマとして名を馳せたかったのですが、順位が足りず国内大会に駒を進めることになりました。
今回のAdvent Calendarはこの結果を一つの区切りとして、「今までワイハリマがどのようなことをして国内大会まで進むことができたのか」を自身の振り返りも込めて紹介していこうと思います。
CTFとは
突然CTFと言われても「なにそれ?」と思う方もいらっしゃると思いますので簡単に説明します。
CTF(Capture The Flag)とは、コンピューターセキュリティのスキルを競うハッキング大会のことです。怖いですね。 CTFの大会形式も様々ありますが、ここではよく開催されているjeopardy形式について紹介します。
そして問題を解答して得られたFlagを
- 競技サイトに投稿し
- それが正しい内容であれば点数が得られ
- 制限時間内に一番得点が多いチームが勝利する
といった内容で、CTFをやったことがない人でもわかりやすい形式かなと思います。
ひとくちにセキュリティと言ってもさまざまな分野があり、ネットワーク、フォレンジック、実行ファイルのバイナリに存在する脆弱性への攻撃、リバースエンジニアリング、暗号解読、プログラミング、ウェブサイトへの攻撃などなどたくさんあります。
例えばウェブサイトへの攻撃問題では、Webセキュリティをかじったことがある方は1度は耳にしたことがあるであろう「XSS」や「SQLインジェクション」を利用してFlagを見つける問題が出題されたり、またバイナリを解析して答える問題では、実行ファイルがポンと渡されてそれを逆アセンブルして挙動を探って、調査する過程で「ここに脆弱性があるな!」と攻撃コードを送り込んだりしてFlagを見つけたりと解答方法は様々です。
問題に答えるために非常に多くの技術知識が必要になりますが、その分新しい技術に触れることになり自分の勉強になって楽しいです。さらに競技中に勉強したことを元に問題を解答できるとなお一層です!そういった点がCTFの醍醐味の1つだと思います。
ワイハリマとは
2015年の夏ごろから活動しているCTFチームで、主に2014年の新卒入社メンバーで構成されています。最近ではCTFの活動を聞きつけた物好きな好奇心旺盛な後輩も仲間入りしにぎやかに活動しています。
チーム名の由来はとあるメンバーの社内アカウント名で、そのアカウントを日本語読みして半角カタカナにしたものが正式名称です。決まった経緯はSlackの名前を決めるときに満場一致で決まりました。
また、あるCTFコンテストに参加登録するときに以下のようなチーム名で登録しようとしてました。最低ですね。(何が最低なのかはCTFをやればきっとわかります)
競技サイトの多くがチーム名が半角カタカナに対応しておらず、しぶしぶ英字を利用していますが、いつか半角カタカナが使えるサイトが登場すればいいなと思います😆
チームの活動について
ここからはワイハリマがどのような形でCTFに取り組んできたか紹介します。
また、実際に取り組んでみて気づいたメリット/デメリットも書いておきましたので、CTF活動されている方の参考になれば幸いです。
講義形式で勉強会
チーム結成初期はCTFの経験のあるメンバーが講義形式で勉強会を実施していました。
記録を見返すと最初のお題はx86アセンブラとgdb。やたらと濃いですね。まずはバイナリ問題から勉強していこうということでHacking本を教科書にして進めていました。
そんな感じでメンバー持ち回りで勉強会を週に1度に開催し、CTFで利用する知識について深めていきました。
<メリット>
- 教科書を基に勉強するので体系的な学びを得られる
- 発表担当者の知識整理につながる
<デメリット>
- 資料作成が大変
- 講義形式なので実際に問題解くことが少なく若干飽きる
CTFコンテストへの参加
初めて参加したコンテストは2015年に開催されたSECCON CTFの予選でした。初出場ながら42位/872チームと健闘し、当時はチーム内でも「これは来年には決勝いけるんじゃないか?!」と盛り上がりました。
が、年々SECCON CTFのレベルが上がり、なんだかんだで今年の2018年のコンテストで決勝に初出場ということになります。長かったですね。。。
このSECCON CTFへの参加を皮切りに、DEFCON CTFやTrend Micro CTFなど世界で開催されているCTFのコンテストに参加し実力をつけていきました。
コンテストにも色々な特徴があり、「初心者向けのコンテスト」から、難易度の高いバイナリの問題しか出なくて手も足も出ず「PCの前に座っているだけコンテスト」、挙げ句の果てには「そもそも競技サイトのログインが機能していないコンテスト」など多種多様でいろいろ苦しめられました。
<メリット>
- 実際に与えられた問題を解くので楽しくモチベーションを維持しやすい
- 全員で相談しながら問題に取り組むので一緒に正解できたときは嬉しい
- 触ったことのない技術の問題に取り組むことができるので視野が広がる
<デメリット>
- 時間が合わないと参加することが難しい
- 大会によって難易度が異なるので全く解けずどうしようもない時がある
出題形式で勉強会
徐々にCTFコンテストに参加するようになり、お互いのメンバーの得意分野もわかってきた時期に、「講義形式の勉強会」にも飽きてきたので「問題出題形式の勉強会」にシフトしました。出題する問題はチームで作成したWikiで管理し、「コンテストに参加してメンバーが面白かったと思ったものの改題」や、「自分の得意分野で自作の問題」等を出題しています。
この勉強会形式は今でも続いており、実践的に勉強することができるので講義形式に飽きてきたらオススメです。
<メリット>
- 実際に与えられた問題を解くので楽しくモチベーションを維持しやすい
- 各人の得意分野で出題するのでジャンルの偏りが起きづらく、チームの実力の底上げにつながる
- 出題者側の気持ちがわかるのでどこに脆弱性があるかの勘を養える
- 解答者側の問題の解き方、考え方を間近に見ることができるので勉強になる
<デメリット>
- 作問をするのが非常に難しい(特にクオリティの調整)
- 問題に取り組める時間が人によって違うので理解度に差がついてしまう
承諾CTF
近頃のワイハリマは「承諾CTF」が大流行しています。
社内の予定管理ツールで勉強会の出席承諾依頼を自分からメンバー宛に送信しているのですが、その予定を承諾したかどうかをCTFの問題で返信するという悪質なCTFです。
なので、Flagを見つけない限りそのメンバーが勉強会に出席するかどうかがわからないという困った代物ですが、メンバー同士は楽しんでいそうなので、それもまたこのチームのいいところかなと思います。(白目)
<メリット>
- サクッと解答できるのも多く、解けたときに爽快感が得られる
- 西山が困っている姿を見てメンバーは楽しい(らしい)
<デメリット>
- 業務時間中に解答する時間がない
- 勉強会の出欠確認がしづらい
最後に
そんなこんなでこの3年間を振り返ってみましたが、今回の国内大会出場は「地道に勉強会を継続してきたこと」が一番の要因だと感じます。
最初はほぼCTF初心者だったメンバーが、勉強会の実施やCTFコンテストへの参加を通じてメンバー同士切磋琢磨しながら少しずつ実力を高め合ってこれたからこそ結果に結びついたとしみじみ思います。
今後も継続して活動しつつ、いずれは世界のワイハリマとして結果を残し、世界のCTFコンテストに名が知れ渡るよう頑張っていきます!
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました