NTT Com グループ セキュリティコンテスト 「ComCTF 2019」 を開催しました

はじめまして、技術開発部セキュリティユニットの志村です。
10月・11月に、NTT Comグループの社員を対象としたCTF形式のセキュリティコンテスト「ComCTF 2019」を開催しました。前年度に引き続き2回目の開催となります。私は運営側としてCTFの作問に携わりました。
今回はその模様をお伝えします。

CTFとは

CTFとは “Capture The FLAG” の略であり、セキュリティ分野では、セキュリティなどの技術を競い合う競技のことを指します。国内で開催されるCTFとしてはSECCONなどが有名です。

CTFの競技形式にはいくつか種類があります。クイズ形式で様々なジャンルの問題を解いていくJeopardy方式、 自チームの脆弱なサーバを守りつつ他チームのサーバに侵入するAttack&Defenseなどの形式が有名です。ComCTFは大人数が参加しやすいJeorpady方式で行われました。

社内CTF 「ComCTF」について

ComCTFはNTT Comグループの社員を対象とした、NTT Comグループの有志によって運営や問題の作問が行われるCTFです。
ComCTFの開催の目的には、「参加を通じてセキュリティスキルの向上」「参加者や作問者同士の交流」などが挙げられます。またNTTの持ち株が主催するNTTグループ内のセキュリティコンテストの予選も兼ねており、上位チームはNTTグループ内セキュリティコンテストに参加する予定です。

ComCTFを企画する上では以下のようなことが念頭に置かれました。

1.初学者も参加しやすいCTFであること

CTF未経験者も参加しやすくなるように、簡単な問題を用意したり、全問題にヒントを用意しておくことを作問ルールとして定めました。また変わった試みとして 「Deskwork」という初心者が取り組みやすいジャンルを作成しました。(後述)

2.スキルの定着を図ること

参加者がCTFを通じてスキルを定着できるようにすることな取り組みを実施しました。Writeup(想定される問題の解法) を終了後すぐに参加者に配布する、問題環境を参加者に配布するなど、参加者が復習できる環境を用意しました。

大会概要

ComCTF 2019は予選・決勝の2ラウンド制で開催しました。参加者は最大4名のチームを組み予選に参加。上位12チームが決勝に進出し、決勝で最終的な優勝チームを決定しました。
予選・決勝で使う問題はNTT Comグループの有志で内製されました。セキュリティ系の業務に携わっているメンバーだけでなく、Web・ネットワーク・ソフトウェアなど多様なバックグラウンドを持つメンバーによって作問が行われました。

続いて予選・決勝の様子やどのような問題が出題されたかをご紹介します。

予選

予選はWeb上で5日間問題を公開し、参加者は好きなタイミングで問題を解くことができるようにしました。
各問題は以下のようにジャンルごとに分類され、好きな順番で問題を解くことができます。

出題された問題は次の9ジャンルに渡ります。

  • Web: Webアプリケーションの脆弱性をつく問題
  • Crypto: 暗号系の問題
  • Forensics: メモリダンプやディスクダンプなどを解析する問題など
  • Reversing: プログラムの挙動を解析してフラグを取得する問題
  • Pwn: 実行ファイルの脆弱性をついてFLAGを入手する問題。サーバ上で稼働している実行ファイルの脆弱性をついてFLAGファイルを読み出すなどの問題が多い
  • Coding: プログラムを書いて与えられた問題を解く
  • Network: pcapファイルを解析して隠されたFLAGを見つける、ネットワークに関連する問題
  • Deskwork : 日常業務に潜むリスクにフォーカスした問題
  • Misc: その他の問題

ComCTF 2019では独自の「Deskwork」というジャンルを用意しました。このジャンルは日常業務に潜むリスクにフォーカスした問題を出題する、というコンセプトで、普段セキュリティに馴染みのない方やエンジニアでない方も取り掛かりやすいように出題されました。
問題の例としては、「簡単なパスワードで暗号化されたZipファイルを開いて中のFLAGを入手」、「暗号化されたエクセルマクロの中身を見る」など、業務でよく使うツールを取り扱う問題が出題されました。

最終的には全84チーム、241名に参加いただけました。
上位チームの点数の推移は以下通りです。ここには載っていませんが最終日に怒涛の追い上げを見せ上位12チームに滑り込んだチームがあるなど、最後まで白熱した争いが繰り広げられました。

決勝

決勝では、予選を勝ち抜いた上位12チームが一堂に会し、7時間という限られた時間の中で問題に取り組みました。どのチームも真剣に取り組み、運営は問題のトラブルに対応したり、飲み物やお菓子を用意するなど参加者のサポートを行いました。  

決勝問題は6ジャンル、合計17問の問題で構成されていました。予選と違い1日のみ開催となるため問題数は少なく、ただし難易度は高めにした問題が揃えられました。決勝問題では以下のジャンルの問題が出題されました。

  • Crypto
  • Pentest
  • Security by Ops
  • Threat hunting
  • Web

ここでは予選になかった4つのジャンルについて紹介します。

Pentest

Pentestとは、「Penetration test」 の略で、コンピュータやネットワークに実際に侵入を試みることで、システムに脆弱性がないかをテストする手法です。
この問題ではネットワークに侵入し(Intrusion)、システムを発見(Discovery)。その後発見したシステムの脆弱性をついて攻撃(Exploitation)し、攻撃したサーバを足掛かりにし侵入を拡大する(Lateral Movement)という攻撃の一連の流れを体験できる問題になっていました。
各チームにはdockerで作った問題環境が用意され、自チームの環境にVPNアクセスして問題を解く、という形式で行われました。
実際にこの環境がどのように作成されたかについては、NTTコミュニケーションズ Advent Calendar 201912/15 の記事で作問者より公開される予定ですので、詳しくはそちらをご覧ください。

Security by Ops

一般的なCTFには見かけないジャンルの問題になります。セキュリティオペレーションに関する技術を問う問題で、運用や防御側のスキルが問われる問題となっています。
この問題は以下のような構成になっていました。

  • 複数の脆弱性があるサービスが稼働している。
  • サービスのシステム構成図、アプリケーションログ、pcapが提供される。
  • ログやpcapから脆弱性を発見する。発見した脆弱性を使えばFLAGが取れる。
  • エクスプロイトを防ぐようなSnortルール/Yaraシグネチャを作成したら検証システムに提出する。過検知なくエクスプロイトが防げることが検証できたらFLAGを得ることができる

Threat Hunting

擬似的なランサムウェアの検体を解析し、暗号ロジックを読み解いて暗号化されたファイルを復元したり、攻撃者が残した情報から擬似攻撃グループの情報をOSINTで追跡する、といった問題でした。  

懇親会

決勝終了後には懇親会が開催され、参加者と作問者・運営や協力してくださったヒューマンリソース部社員などが交流しました。CTFの問題の話などで大いに盛り上がり、終始楽しい雰囲気に包まれました。   また特別ゲストとして株式会社コナミデジタルエンタテインメントの瀬戸康裕様が登壇し、コナミ社内でのCTFの取り組みを紹介してくださりました。その中ではCTFの可視化システムが映像を交えて紹介され、会場が盛り上がりました。

結果発表・問題解説

懇親会中に、決勝の順位発表が行われました。 点数推移は下の通りで、優勝チームは最後の1時間に怒涛のFLAG奪取を行い、突き放しての優勝となりました。

また配布されるWriteupとは別に、Threat hunting作問者から問題の解説が行われました。Threat hunting問題の出題意図や解法などが解説され、参加者は興味深そうに聞いていました。

参加者からの声

参加者からは以下のような意見が聞かれました。

  • セキュリティの知識向上にとても良い機会だと思います。勉強して来年も参加できればと思います。
  • 解けなかった人ですが、問題解説やお菓子提供やスピーディなwrite-up配布等、運営がとても行き届いていてよかったと思います。皆さまありがとうございました。

一方でジャンルの偏りや、予選と決勝戦の難易度の差などを指摘する声も聞かれたため、今後は頂いたフィードバックをもとに改善していく予定です。

まとめ

NTTコミュニケーションズグループで開催されたComCTFについてご紹介しました。この記事で初めてCTFを知ったという方も、picoctfksnctfなど常設で公開されているCTFもありますので、興味のある方は挑戦してみてください。

© NTT Communications Corporation All Rights Reserved.