NFLabs. エンジニアブログ

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

コンテンツ開発インターンシップ業務内容紹介

研究開発部の保要 (@takahoyo) です。 今回は弊チームのコンテンツ開発のインターンシップに参加している伊東が、インターンシップを通じて学んだことを共有します。

はじめに

こんにちは。株式会社エヌ・エフ・ラボラトリーズ(以下NFLabs.)学生インターンの伊東です。 NFLabs. では事業の1つとして、セキュリティ人材を育成する教育用コンテンツの作成を行なっています。私はその中で主に教育コンテンツの開発に取り組んでいます。 この記事では、長期インターンシップでの私の業務内容について詳しく紹介します。

プロフィール

私は千葉大学の工学部情報工学コースに通っている学部4年生です。セキュリティやネットワークを中心に扱っている研究室に所属しています。普段はセキュリティに関する勉強会やワークショップ、コンテストに参加しています。Webセキュリティ、Reversing、Pwnable、セキュリティログ分析などに興味を持っています。

参加の経緯

去年(2023年)の春頃に、技術職で働いてみたいと思い、インターンシップの募集情報を探しはじめました。私はその頃からセキュリティ領域に興味があったので、可能であればセキュリティに関われるインターンシップに参加したいと考えていました。しかし、実際に調べてみると、どこもフロントエンド・バックエンドエンジニアの募集ばかりで、セキュリティに関われる長期インターンシップを見つけられずにいました。諦めかけていた中で、偶然Twitter(現X)にてNFLabs.のインターンシップ募集についてのツイートを見て、すぐ応募することにしました。

インターンシップの業務内容

「教育コンテンツの開発」における具体的な業務を紹介します。

問題のアイディアを考える

教育用コンテンツは、利用者が主体的に学習できるように、学習するテーマに合わせた実践的な問題に回答していく形式です。これにより、知識を実践的なスキルとして身につけることができます。そこで、学習者が理解すべき脆弱性とは何か、また、その脆弱性を学習する上でどのような問題を設定すべきかを考えて設計します。設計した問題については、学習するテーマとして適切であること、現実でも発生しうること、既存の問題とのバランスがとれていること等を、社員の方にレビューしていただきます。 セキュリティの脆弱性を教育の題材として深く掘り下げる経験は、他ではなかなか得られない貴重な機会だと感じています。

実践環境を作成する

設計した問題を実際に解くことができる実践環境を作成します。現実的なシナリオに近づくように、社員の方にもアドバイスをいただきながら実装していきます。脆弱性の再現には、攻撃者の視点に立ち、その手法を深く理解することが不可欠です。実践と検証を繰り返す中で、セキュリティに関する理解を深めることができるため、この業務はとても勉強になることが多いです。

問題文、解説文を作成する

作成した実践環境に合わせた問題文、解説文を作成します。専門用語を分かりやすく説明し、読者の理解度に合わせて説明の粒度を調整する必要があるため、非常にやりがいのある業務です。また、実践環境の作成と同様に、解説文の作成にも攻撃手法への深い理解が求められます。アウトプットとしても「他人にわかるように書く」ことはハードです。しかし、ここまでの工程を終えて実際にコンテンツに組み込まれると、大きな達成感を感じます。

実際に取り組んだテーマ

実際に作問に取り組んだテーマの一例として、Local File Inclusion(LFI)の脆弱性を紹介します。 LFIについて調べてみると、適切な入力検証が行われていない場合に、攻撃者が任意のファイルを読み込んだり実行したりできる脆弱性だとわかります。しかし、この脆弱性の具体的な悪用方法やその影響範囲は、セキュリティ初学者には理解しづらいかもしれません。そこで、LFIの脆弱性を利用して、どのような攻撃が成立するのかを調査します。 LFIの脆弱性が悪用されると、以下の被害が想定されます。

  • サーバに存在する任意のファイルの閲覧
  • リモートコード実行

今回は、LFIが単なるファイル読み込みだけでなく、リモートコード実行にもつながる危険性を示すため、Log Poisoningと組み合わせたシナリオを設計しました。Log Poisoningは、ログファイルに悪意のあるコードを保持させる攻撃手法です。

これらを整理すると、以下のシナリオで問題を設計できます。

  • Webアプリケーション上にLFIの脆弱性がないか探す
  • Log Poisoningを用いて、任意コードの実行が可能になる文字列をログファイルに注入する
  • LFIの脆弱性を利用して、ログファイルをプログラムとして実行する
  • フラグとなる情報を取得する

大まかな方針を決めたあとに、上記のシナリオが実践できる環境を作成します。学習に利用しやすいように明確なLFIの脆弱性を作り込みます。また、Log Poisoningをする対象のログファイルを用意するため、Apache + PHP + MySQLの構成で実践できる環境の構築を行いました。これにより、Apacheのアクセスログが生成され、シナリオが実践しやすくなります。 加えて、隠しディレクトリのフラグ取得だけでは現実的な攻撃シナリオとは言えないため、MySQLデータベースからユーザのクレデンシャル情報を盗み出すことを最終目標としました。 最後に、これらのシナリオに合わせた問題文、解説文を作成します。 実践的な環境構築と、その挙動を分析し分かりやすく解説する経験は、セキュリティエンジニアとしてのスキルアップに大きく貢献すると考えています。実際に、NFLabs.でのインターンシップを通じて、開発環境の構築からドキュメント作成、基本機能の実装まで、一連の開発プロセスを効率的に進めるスキルが向上したと感じています。

インターンシップの雰囲気

私は研究室の活動がない日を中心に週2日ほど勤務しています。フルリモートでの勤務となっており、SlackやGitLabを活用し、円滑なコミュニケーションを図っています。午前中に行われるデイリーミーティングでは、自身が取り組んでいるタスクの進捗や問題点を共有します。新たに生じた問題については、テキストチャットで共有を行います。また、必要に応じてWeb会議ツールを使用して、問題の状況を共有します。Slackでの質問には、いつも迅速かつ丁寧な回答が返ってくるので、安心して業務に取り組めます。また、勤務の日程を柔軟に調整できるので、学業との両立も無理なく行えています。 セキュリティに情熱を持って取り組まれている方々に囲まれながら、これほど柔軟に働けるインターンシップは他にないと思います。

インターンシップを振り返って

以前は、学んだ脆弱性を実際に検証する機会が少なく、知識として理解するだけで終わってしまうことがありました。インターンシップを通じて、数多くの脆弱性再現・検証に取り組む中で、実践的な知識やスキルが身につき、検証環境構築への抵抗感がなくなりました。 インターンシップを通じて、技術的なスキルだけでなく、ドキュメントの読解、チームでの情報共有、質問力など、セキュリティエンジニアとして必要な基礎力を養うことができました。

おわりに

改めて、私の興味関心に合わせて1年以上にわたり挑戦の場を与えてくださっている職場の皆さん、ありがとうございます。

この記事では、長期インターンシップの業務内容について紹介しました。NFLabs.のインターンシップについて調べている方の参考になれば幸いです。