NFLabs. エンジニアブログ

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

【2024年夏】現場受け入れ型インターンシップ体験記2 ~コンテンツ開発~

研究開発部 研究開発担当の保要 (@takahoyo) です。

エヌ・エフ・ラボラトリーズでは、2023年度に引き続き「現場受け入れ型インターンシップ」を実施しました。

2023年度の模様

blog.nflabs.jp

blog.nflabs.jp

2024年度の他チームでのインターンシップの模様

blog.nflabs.jp

私のチームに配属された2名のインターン生(荒井さん、藤原さん)には、2週間(8/26(月)~ 9/6(金)の平日、計10日間)で当社で開発しているセキュリティ学習プラットフォームのコンテンツ作成に取り組んでいただきました。 作成してもらったコンテンツは攻撃手法を試すものですが、実際のセキュリティ業務に活かす観点で、作成してもらった後にテーマとした攻撃をどのように検知するか、防御するかについてまでも考えてもらい、充実した内容のインターンシッププログラムを提供出来たと思います。

この記事では、主に参加したお二人からの参加したいと思った経緯や2週間の業務を体験してみた感想をご紹介します。

荒井さんの体験記

プロフィール

工学院大学大学院工学研究科情報学専攻の学生で、サイバーセキュリティの研究室に所属しています。研究ではマルウェアについて扱っており、主に解析や難読化解除に関するシステムの構築および自動化を行っています。

インターンシップ参加目的

卒業後の進路を考えた際、興味がある職種において実際の業務のような高いレベルでの作業を体験したいと考え、今回のインターンシップに参加させていただきました。また、大学院での研究や授業で得ることができる知識ではなく、実際の業務で活用されるセキュリティに関する知識について学びたいということも参加目的の一つです。

インターンシップで取り組んだこと

今回のインターンシップでは、セキュリティに関する教育プラットフォームを開発する業務において、既存コンテンツの移行と各テーマに沿ったコンテンツの開発を取り組みました。コンテンツ開発では、提示されたテーマに沿った脆弱な環境をAWS上に構築し、攻撃検証することで教育用コンテンツを作成しました。

インターンシップ前半

インターンシップ前半では、既存コンテンツを現行の教育用プラットフォームへ移行する作業について取り組みました。 コンテンツ内容は研修用ということもあり、比較的イメージがしやすいものでしたが、実際にプラットフォームへと移行する作業は初めての経験でした。

ローカルでの教育プラットフォームの構築にはDockerを使用していたのですが、私が普段使用しているようなコンテナを作成するだけの使い方よりも遥かに複雑で、実際に提供されているようなプラットフォームの構造について学ぶことができました。

インターンシップ後半

インターンシップ後半では、各テーマに沿ったコンテンツの開発を取り組みました。

今回開発したコンテンツの内容は、特定のCVE番号に該当する脆弱性が存在する攻撃対象マシンに対して、攻撃用マシンから攻撃検証するという内容でした。 今回扱った脆弱性はPHPに存在する CVE-2024-4577 で、AWS上にxamppを用いて脆弱性の存在する環境を構築しました。xamppを用いた簡単なWebサーバの構築については経験がありましたが、PHPについては知識がなかったため、攻撃検証に必要なPHPに関する知識を学ぶところから始めました。

また、CVEに対するPoCは存在していたものの、リバースシェルを用いた接続を行う際のコードについては容易には見つからず、何度も相談にのっていただくことで今回のテーマに沿ったコンテンツを開発しました。PHPの実行エラーからリバースシェルの調査まで、悩んでいることに対して的確なアドバイスをいただけたため、多くの知識を得ることができたと同時に、こういうことも知っているんだなという関心がとても大きかったです。

今回初めて触ったAWSや開発チームとしてのGitHubの運用は、今回のインターンシップでしか経験することのできないことであったため、とても勉強になりました。

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

今回のインターンシップを通して、脆弱性に対する攻撃検証について深く学ぶことができ、AWSやチームでのGitHubの運用といったなかなか経験できないことを経験することができました。 また、セキュリティ分野に関して、攻撃手法を学ぶだけではなく防御手法についても学ぶことが重要であるということを教えていただき、特に意識していこうと思いました。

常に質問しやすい環境を整えていただいき、今回のインターンシップを円滑に進めることができました。 2週間という短い期間ではありましたが、普段の学生生活では得られない経験と知識を多く得ることができました。本当にありがとうございました。

藤原さんの体験記

プロフィール

初めまして。インターン生の藤原京平です。私は工学院大学大学院の情報学専攻に所属しており、研究ではCPU周りの知識を用いた比較的低レイヤーの内容を扱っています。

インターンシップ参加目的

本大学では、科目としてインターンシップの授業があり、今回はその授業の一環として参加させていただきました。 こちらのインターンシップに参加することを決めた理由といたしましては

  • セキュリティ教育コンテンツとしてどのような観点に注目しているのか気になっていた
  • コンテンツ開発の流れを知りたかった

の2点が挙げられます。

現在、私が所属する研究室では、セキュリティ教育の観点から独自のCTF(Capture The Flag)を作成しています。 CTFというのは情報セキュリティの技術を駆使して隠されているFlag(秘密の情報)を見つける競技のことを指しており、比較的楽しく情報セキュリティの知識を身に着けることができます。 基本的には毎週土日で様々なCTFが開催されているのですが、セキュリティ初学者にとっては最初の問題を解くまでが難しく、実践的な内容とはかけ離れていることが多いといった課題があります。

本研究室のCTFでは前者の問題を解決するべく、更なる導入となるコンテンツを作成しているのですが、実践的な業務を体験している人が少ないため、後者の問題は解決できていません。 そこで、実践的なコンテンツを作成しているこのインターンに参加し、どのような点に注目しながらコンテンツを作成しているのか学ぶことを決めました。

インターンシップで取り組んだこと

まずインターンシップが始まる前にエヌ・エフ・ラボラトリーズが現在開発を進めている教育コンテンツを一通り取り組むところから始まりました。 どのようなコンテンツがあるのか実際に体験した後、インターンシップ期間中は実際にその環境をローカルで試せるように環境構築をして、既存コンテンツの現行の教育用プラットフォームへの移行、新規コンテンツの作成を行っていました。

インターンシップ前半

インターンシップ前半では、始めに業務用PCで教育コンテンツを構築するための環境構築を行いました。

ホストのOSはWindows11で、開発はLinux環境で行うため、何かしらの仮想化技術を用いる必要があるのですが、今回はWSL2+Ubuntu24.04+Dockerという環境で構築しました。 開発環境で用いるファイルの一部ではシンボリックリンクを用いていて、シンボリックリンク入りのzipをWindowsの方で展開したら壊れてしまったというハプニングがありましたが、WSL上で展開すれば問題なく、無事環境構築をすることができました。

続いて、研修コンテンツのこの環境でまずはコンテンツを作成する方法を学びました。

インターンシップ後半

インターンシップ後半では、特定の脆弱性への攻撃を試せるコンテンツとsudoコマンドの設定不備を用いたコンテンツの作成を行いました。

特定の脆弱性への攻撃を試せるコンテンツの作成では、脆弱性CVE-2023-3452を対象としたコンテンツの作成に取り掛かりました。CVE-2023-3452では、WordPressのプラグインの脆弱性を扱っているため、Dockerで脆弱なプラグインを導入し、コンテナを立てて外からアクセスできるよう確認する作業を行いました。 この脆弱性ではRFI(Remote File Inclusion)と呼ばれる、外部(攻撃者側)で用意した悪意のあるスクリプトを攻撃対象のサイトに読み込ませて実行させる攻撃手法を用いていました。このRFIを利用してリバースシェルを確立させるコンテンツを作成しました。コンテンツ作成では、使ったことがないAWSの環境や、作成したDockerコンテナからAMIを作成するまでの手順に慣れず苦戦しましたが、社員の方のサポートもあり、コンテンツ作成を通して理解していくことができました。

その後は、sudoコマンドの設定不備を用いたコンテンツの作成を行いました。 sudoコマンドの設定不備とは、sudoコマンドに関する設定ファイルに、一般ユーザのままsudoコマンドを実行できるよう設定する際、権限昇格ができてしまう脆弱なコマンドを設定してしまっている時のことを指します。 セキュリティの観点から詳細は省きますが、いつも使っているようなコマンドでも権限昇格が可能ということが分かり、学びになったと同時に気を付けなければいけないと感じました。

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

私が行っている研究は基本的には個人で行うものなので、チームでの開発を行うという経験は初めてでした。

そのため、コンテンツ作成以外のAWSやGitの部分でつまづくことがあり、最初は10日間覚えるだけで終わってしまうのではないだろうかという不安がありました。 しかし、実際には社員の方々の手厚いサポートのおかげで想定よりも多くのコンテンツ作成に取り組むことができました。 また、答えだけでなく、どうしてこのような課題を出したのかという背景まで教えていただき、論理的に考える力を養うことができました。 論理的思考能力を養いたい、もしくはその力を持って仕事に取り組みたいという方にはとてもマッチしていると思います。

今回のインターンシップの目的はコンテンツ開発の流れを知りつつ、セキュリティ教育コンテンツとしてどのような観点に注目しているのか知るということでした。 開発の流れは手順書が豊富に用意されているため初心者でも取り掛かりやすく、どこが分からないという説明もしやすくなっています。 課題などはGitHubを通して確認することができ、最初は苦戦したものの、それぞれのコンテンツがある程度分離していて、分かりやすくなっていました。

実際に経験することで開発の流れを知ることができたと思います。後者に関しては、提供された課題や既存のコンテンツを通して実際のシナリオを想定して作成されたコンテンツが多いことが分かりました。 実際の脆弱性を用いるところはCTFも同じですが、この脆弱性はどのようなストーリーで生まれてしまうのか考えることができるコンテンツが多く、勉強になりました。