NFLabs. エンジニアブログ

セキュリティやソフトウェア開発に関する情報を発信する技術者向けのブログです。

CTF勉強会の支援でインターンシップを実施しました!

研究開発を担当している市岡です。この度、芝 海人さんに長期インターンに来ていただき、会社が技術力向上の1つとして推奨しているCTF活動について体験頂きました。

今回は主に「チーム紹介用のWebサイト作り」と「勉強会用のWriteup」の作成を実施頂きました。 また、「勉強会用のWriteup」を使って、実際に勉強会を実施頂きました。

CTF勉強会の様子

芝さんに体験してみた感想をいただきましたのでご紹介します。

芝さんの体験記

はじめまして。この度、エヌ・エフ・ラボラトリーズで長期インターンに取り組みました芝 (@mc4nf)と申します。 インターンでは、主に以下の業務に取り組みました。

  1. Team EnuのWebサイトの作成
  2. CTFのWriteupの作成

それぞれの業務で取り組んだ内容についてご紹介します。 ​

Team Enuの紹介

まず始めに、Team Enuについて簡単に説明します。 Team Enuは、NTTグループの有志によるCTFチームで、国内・国際に関わらずCTFに参加しています。 最近の主な実績としては、DEFCON CTF 予選 2022 世界28位や、SECCON CTF 2022 Domestic Finals で6位があります。 また、週に1回チーム内勉強会を開催しており、初心者から上級者まで集まり知恵を寄せ集め、切磋琢磨しています。 ​

私は、インターンに参加した際にTeam Enuに加入し、Team Enuのメンバーとして活動することになりました。 そこで、インターンでは、Team Enuに関わる業務について担当しました。 以下では、それぞれの業務の内容について述べていきます。

Team EnuのWebサイトの作成

最初の業務として、Team EnuのWebサイトの作成に取り組みました。 早速ですが、こちらが作成したWebサイトです。

https://team-enu.github.io/

​ 私の最初の業務は、このTeam EnuのWebサイトのひな型の作成をすることでした。 ベースとなるものが存在しない状態だったため、利用するプラットフォームの選定から始めました。 そこで、私が過去に使用したことのある静的サイトジェネレータである Hugo を使ったものを提案しました。 Hugoはテーマが豊富かつ、ビルドが高速なため、コンテンツ量が増えても安定して動作させることができます。 そこで、Team Enuの担当の方と相談したところ、セキュリティリスクが入り込む余地の少ない静的サイトであるという点も含めて、Hugoで作成しよう、ということになりました。 自分の決定で仕事が進むという経験を今までしたことがなかったため、多少の不安があったものの、最終的にこのサイトの作成に強い責任感を持つことに繋がったため、よい経験になったと思います。 ​

私自身にWebサイトの作成経験はありましたが、仕事としてWebサイトの作成に取り組むのは初めてでした。取り組む中で、個人でのWebサイト制作と仕事としてのWebサイト制作では異なる点がいくつかあると感じました。

1つ目は、作成の要件や期日が決まっているということです。 趣味でサイトを作る際は、自分気の向くままに好きなものを好きな時間に作成できますが、業務で取り組む場合は予め要件と期日が決まっており、これを満たすように作成する必要があります。 基本は自由にサイトの作成をさせていただきましたが、作成したものが要件に合っているものかわからないときは、必ず相談することを心掛けました。

​ 2つ目は、仕様の引き継ぎの必要があるため、可能な限りドキュメントを残すということです。 自分で作成するものは自分だけが理解していればよいものの、私のインターンが終了した後、このサイトを更新する方がどのような仕様になっているのか簡単に理解できるようにする必要があります。 これは、GitHubのIssueなどで文章にして残すことにより解決しました。 ​ ​

Writeupの作成

次に、このWebサイトで公開するWriteupの作成を行いました。 作成したWriteupは、先程紹介したTeam EnuのWebサイトで公開されています。 ​

https://team-enu.github.io/writeups/

​ Team EnuのWriteupとして公開するにあたり、Team Enuの方にレビューをしていただきました。 取り組んだCTFの問題はSECCON CTF 2021のpwnのジャンルのd問題であるkasu_bofと、SECCON CTF 2017のpwnのジャンルの問題である baby_stackです。

​ 私はWriteupの作成も趣味でやっていますが、仕事としてTeam EnuのWriteupを作成するにあたり、いくつかのことを心掛けました。

1つ目は、Writeupの読者層を意識することです。 普段は、私は自分の思考をまとめることと、攻撃手法のメモを主な目的としてWriteupを作成しています。 しかし、今回は勉強会で発表することがゴールとして設定されていたため、読者がWriteupを参照するだけで可能な限り攻撃を理解しながら再現できることを目標としてWriteupの作成に取り組みました。 インターネット上でWriteupを探してみると、問題を解くためのexploitと、それを作成するための方針が主に記載されており、そのexploitの具体的な作成方法を記述しているWriteupは少ないです。 入門者からすると、exploitだけを見ても理解できないことが多いです。また、ROPガジェットの見つけ方やGDBの使い方など、基本的な部分で詰まってしまうことも多いです。 そこで、入門者でもこのWriteupを参考にGDBやその他のツール用いて問題を解析することでそれぞれのツールの使い方についても学びながら、自力でexploitを作成できるようにWriteupを作成しました。 また、参考にした文献については、Writeupの下記に参考文献としてまとめたため、さらに深掘りしたい場合や記述のソースに当たりたい場合に参考にして欲しいと思います。

​ 2つ目は、技術的に間違ったことは書かないようにすることです。 これは、当たり前と言われてしまえばそうなのですが、特に雰囲気で書いてしまいそうなことでも、一度基本に立ち返って調べ直すことで間違った記述をなくすことを意識しました。 1つ目にも繋がりますが、読者層はpwn入門者を想定しているため、この手の読者は、Writeupに書かれている間違いには気づきにくいと思います。 このため、間違った内容で理解をしてしまわないように最大限の注意を払いました。 また、私の記述したWriteupのレビューをいただく中で、私も勘違いしていた箇所や理解が浅い箇所についても指摘していただき、Writeupを記述する私自身大変勉強になりました。

おわりに

エヌ・エフ・ラボラトリーズのインターンを通して、様々な業務に関わることができ、大変勉強となりました。

​ Webサイトの作成では、提案から納品までの一連の流れを経験することができ、大変有意義な経験をすることができました。 また、Webサイトの作成全体を通して、仕事をする上での基本を学ぶことができました。

​ Writeupの作成では、読者を意識してWriteupを作成することにより、より理解を深めることができたと思います。 また、レビューでは、実際にライブラリのソースコードなどを参照しながら、正しい理解に至るまで調べることで技術的にも大きな学びがありました。

​ インターン全体を通して、大学での研究活動で忙しくあまり勤務に入れない時期もありましたが、臨機応変に勤務時間を調整でき、最後までインターンに取り組むことができました。 最後になりましたが、関係者の皆さん、最後まで熱心に面倒を見ていただき、ありがとうございました。