こうした華々しいイベントの陰では、新しいチャレンジもあった。それはCTF競技のインフラ刷新だ。SECCON実行委員会インフラ&NOCワーキンググループの野村敬太氏は「インフラチームとして可能な限り新しい技術を取り入れ、効率化を目指そうと考えた。CTFを開催できるのは当たり前。それをより良いものにできないかと考え、技術と参加者にリスペクトを払いながら取り組んだ」と述べた。
インフラ&NOCチームの最終的なゴールは、「問題を作る人の大変さを解消する」「挑戦する人たちの快適さを実現する」という課題を技術で解決し、SECCONの完成度を上げていくこと。その意味で、SRE的な考え方に近い。
実はSECCONのインフラ構築は、長年ほとんど手弁当、ボランティアベースで構築されてきたそうだ。秋葉原の店舗で中古のネットワーク機器を調達したり、自宅で使っていた機材を流用したりしていたという。またCTFの問題サーバもWindows上にVirtualBoxで構築していた。「これは本当に地獄で、本当にトラブルが多かった」(野村氏)。問題がギリギリまで出そろわず、構成が決められなかったのもそれに追い打ちをかけていた。
けれど「CTFは挑戦者ありき」(野村氏)。せっかく時間と労力をかけて参加してくれるチームに敬意を払い、やるからにはスムーズに動かせるようにしたい――ということで、浅野大我氏ら新しいメンバーを加えてインフラの刷新を進めてきた。
そもそも問題サーバやスコアサーバが不安定では競技にならない。そこで今回のSECCON CTF 2019(以降、「本戦」)では、ヤマハのネットワーク機器を採用して見える化、安定化を図った。また、予選19台、本戦78台のインスタンスは全て「さくらのクラウド」上に構築し、これらのスポンサーの力も大きかったという。
さらにCI/CD(継続的インテグレーション/継続的デリバリー)を取り入れ、インフラ構築や各種設定も自動化した。予選と本戦とで構成はやや異なるが、サーバのデプロイには「Terraform」を、各種設定の投入には「Ansible」を利用し、いわゆる「Infrastructure as Code」の考え方でインフラ構成管理を行った。
「最近はやりの『コード化』をすることで、人のやる作業をなるべく減らし、ミスや面倒くささをなくすためにTerraformを採用した。インフラのバージョン管理や再利用が容易で、事前にチェックして『このリリースを使えばこうなる』と分かった状態でデプロイできることも大きかった」(前田章吾氏)
もう一つ力を入れたのが、監視だ。これまでの大会では、参加チームから「問題サーバ、ちゃんと動いてます?」という問い合わせがたびたび寄せられてきた。「応答が返ってこなかったり、タイムアウトしたりするが、そのたびにインフラに問題があるのか、サーバの問題か、あるいは問題サービスそのものが動いていないのか、いろいろなパターンの切り分けに時間を要していた」(浅野氏)
そこで今回から、問題サーバの稼働状況を「Prometheus」と「Grafana」を用いて監視することにした。10分置きに、例えばWebの問題ならばHTTPは空いているか、TCPは通っているかといった疎通確認を実施し、その結果を「ステータスページ」に表示し、インフラ&NOCチームだけではなく参加者と作問者に提供した。さらに、テスト駆動開発的な仕掛けといえそうだが、問題が解けることを示す「Solveバッジ」も用意し、これも定期的に実行して結果をステータスページに開示し、見える化した。
「こちらのステータスページに誘導することで、格段に問い合わせが減った。動いていないときはインフラチームから作問者にエスカレーションを行って対応してもらった」(浅野氏)
そのために幾つかツールを自作した。例えば、Web上のインタフェースに必要項目をポチポチっと入力するとSECCON用の.tfファイルが自動生成され、作問者自身が手を動かさなくても自動的にGitHubにコミットし、プルリクエストを自動生成してくれる「tfgenerator」、作問者へのエスカレーション時に必要なインスタンス名とIPアドレス情報だけを抽出する「tfstatediff」などだ。
地味なところでは、踏み台となるリバースプロキシも導入したという。これまで、インフラチームで用意する監視サーバやIRCチャットへのアクセスはベーシック認証で制御していたが、「作問者がいろんなところに散らばっていた。問題ごとに『この問題のIDとパスワードはこれです』というのを幾つも管理しなければならず、インフラチームも訳が分からない状態だったので、オープンソースソフトウェアのゼロトラストプロキシを幾つか集めて活用し、GoogleアカウントをIDプロバイダー(IdP)として使うことで、ベーシック認証から解放された」(浅野氏)
個人的には、Solveバッジが追加されたことがポイントだと感じた。「これまで、時間もギリギリだったため問題が解けるかどうかは暗黙の了解でやっていた。けれど、問題と同時にSolverを提供してもらうことにより、絶対にその問題が解ける証拠ができ、レビュアーの負担も減った」と浅野氏は述べている。
このように、まさにSRE的な発想で「質の高い問題を作ってもらうところに力を注いでもらって、僕らはそれを可能にするためのツールを作ったり、いろいろな開発をしたりしている」と野村氏。最終的には作問者とインフラチームがコラボレーションしていく、いわばCTFのDevOpsが目標だという。
「開発の現場ではDevOpsがけっこう実践できているけれど、CTFというやや特殊な環境でその波を立たせるのは難しいかもしれない。けれど、いろいろなツールを活用し、ときには自作して、CTFの問題のように楽しみ、手探りしながら解決していきたい」と野村氏は述べている。これからの化学変化に期待したい。
Copyright © ITmedia, Inc. All Rights Reserved.