xryuseix’s diary progress

イベント参加記とか,何か進捗でたら書きます

セキュリティ・ネクストキャンプ2023 応募課題晒し

応募課題はこちらに記載されています.また,内容は少しいじりました.

https://www.ipa.go.jp/jinzai/security-camp/2023/next/ps6vr7000000c62g-att/next.txt


以下について,フリーフォーマットで自由に記述し回答してください.

選考のポイント

基本として、加点法で判断します。 自身の技術力ややってきたこと、発信してきたこと、何ができるかといったことなど、アピールしたい点を存分に記述してください。 多く書くことにより、「文章が長過ぎる・まとまりが無い・重複している・冗長」などとして減点するようなことはありません。 失敗した経験や落選の結果を書くことや、「文章が洗練されていない」「誤字脱字がある」などによる減点もありません(文章や作文のテストではありません。内容を見ます)。 アピールをいっぱい書いて、得をすることはあっても、損をすることはありません。自身がアピールしたいことを思い付くままにいっぱい書いて、アピールしてください。 いかにやる気があるか、参加できたらいかに頑張ることができるか、ということを「示して」ください。「やる気があり、今までこうしたことをやってきています」「このようにいままでずっと手を動かしてきています」「こういったものを作ったことがあります」「今までこのような活動を継続してきています」ということを書くといいでしょう。それが、やる気を証明することになります。 課題については、課題が解決できたかどうかの○×や正誤で判断するのではなく、いかに自身で疑問を持ち課題設定するか、その課題を解決しようとする過程や未知のことにどのように取り組むか、新たなことに挑戦しようとする姿勢を見ます。 このため課題は解決できなくても構いませんし、正答にたどりつけなくても構いません。課題に対する正答を求めているわけではありません。途中経過でも構いませんし、自分なりの考えでも構いませんので、いかに取り組んだか、難しい課題にこのように取り組んでここまではわかった、自分なりにこう考え、こういうことを調べた・試した、自分はこう考えこう思ったという、その過程を書いてください。自身のできる範囲で課題設定して回答するのでなく、ぜひ今まで知らなかったものに挑戦して、その挑戦の過程を書いてみてください。その結果正答でないとしても、それは挑戦しているためとして判断します。 手を動かしてみてください。ネット検索で調べたことを張り付けるだけではなく、本当にそうなのかという疑問を持ち、自分で手を動かして、見て、試し、調べ、確認し、本当にそうなのかと深堀りして考えてみてください。ネット検索で出てきたことは、はたして本当なのでしょうか︖ 深堀りして理解し納得できているでしょうか︖ 疑問点や矛盾は無いでしょうか(矛盾があるとしたら、その原因はどこでしょうか)︖ 自分の眼や手で確認したでしょうか︖ 他人に説明できるでしょうか︖ そして、そうしたことを書いてください。課題解決に対する、そのような姿勢を見ます。

■ あなたに関する問い

あなたは今までどのようなことをやってきましたか.どのようなことができて,どのようなことが得意で,どのようなことに自信がありますか. どのようなものを作りましたか.どのような情報を発信してきましたか. どのようにしてそうしたことをやってきましたか.なぜ,そのようなことをやってきましたか.やってきてどう思いましたか. 参加できた場合,セキュリティ・ネクストキャンプにどのようなことを期待し,どのようなことをやってみたいですか.

中学2年のときに友人から誘われ、コンピュータ部に入ったことが、私がコンピュータを勉強した最初のきっかけです。最初はPRGツクールというゲームエンジンを勧められ、色々な2次元平面のRPGゲームを作っていました。入部してから半年ほど経った時、RPGツクールは基本的な操作がある程度できることから、頑張ればRPG以外のゲームも作れるのではないかと思いました(この時点ではチューリング完全という言葉を知りませんでした)。そこで、パズルゲーム、横スクロールアクションゲーム、3Dゲーム、リズムゲームなどをかなり力技で作りました。その後チューリング完全という言葉を知り、調べるとPowerPointExcelなどもチューリング完全であることがわかり、興味を持ちました。PoworPointでストリートファイターのようなゲームを作ろうともしました(結局1種の攻撃とHPゲージしか実装できず、遊べる程には完成しませんでした)。中学3年の時に、初めてプログラミングを始めました。最初はC言語クイズゲームを作成し、文化祭で展示しました。当時は両親に3万円で買ってもらった、起動に20分かかるPCで、Dev-C++という古いエディタを使って開発していました。この時にブックオフで買った100円のC言語入門本を擦れるほど読んだ記憶があります。 高校に入ってから体系的にコンピュータサイエンスを学びたいと思い、ITパスポートを取得し、そのまま応用情報技術者まで取りました。応用情報技術者ドットコムというサイトでAPの午前過去問を学習できるのですが、応用情報技術者の午前問題は4択問題なのでクイズを解く感覚に近く、これを解くことが趣味になりました。過去問5000問全て一度以上正解し、問題を正解すると表示される王冠が並んだ光景が非常に好きでした。また、AIZU ONLINE JUDGEの問題を解いたり、情報オリンピックなどに参加したりなどもしました。

大学に入ってからはまず競プロとソフトウェア開発に熱中しました。競プロでは毎週3,4個の海外のコンテストに参加し、累計で3000問くらい解きました。2020年のICPCでは国内予選を突破し、アジア地区予選まで行けました。これらの能力を活かし、p社でアルバイトもさせていただき、競プロに近い問題を200問ほど作成しました。開発では高レイヤのソフトウェアを主に作っていました。自分が普段不便だと思ったことを解決することが基本的なモチベーションとなっていました。例えば、競プロの問題文用のlinter、大学のwifiに自動で接続するソフトウェア(当時の立命館大学wifi接続はWeb認証があり面倒だった)などを作りました。大学二年生以降はWebアプリケーションの方により興味を持ち、自分のWebサイトだけでなく、ハッカソンなどでいくつかのWebサイトを作成しました。 また、Seccamp全国大会2019をきっかけにセキュリティの分野にも興味を持ちました。最初に興味を持った分野は映画「イミテーション・ゲーム」の影響で、暗号でした。実用的ではなくとも新しい暗号を作成することに興味があり、Seccampでは自作暗号を実装しました。そして翌年にはSecHack365にも参加しました。SecHack365では、競技プログラミングにおけるソースコードの盗作検知を目標として、研究駆動コースに参加しました。SeccampとSecHack365の参加で得たものとしては、技術的なものより、多くの人脈を得られたことの方が大きかったと思います。それぞれの同期とは今でも連絡をとっており、一緒に勉強会を開いたり、プライベートでも仲良くしています。特に、2020年にはSecHack365の同期とTsukuCTFというCTFを開催したり、AVTOKYOのスピーカーなどをさせていただきました。AVTOKYOでは、普段zoomを使っているときに「バーチャル背景を使っているときに、顔の横に少しだけ部屋が映る。顔が動いたときのこれを集めると部屋が復元され、プライバシーが守られないのではないか」という疑問を持ち、共同研究を行い発表しました。この研究は最終的にICSS研究会で研究賞まで戴けました。

大学3,4年では主にオフェンシブセキュリティと前述のWebアプリケーション開発に興味がありました。特に、CTFに熱中していました。一年弱、毎週土日に欠かさずCTFに参加しました。最初は1問解くことに精一杯でしたが、気づいたらいくつかのCTFで上位入賞できるようになりました。また、大学生のうちは1つでも多くの挑戦をすべきだと思うようになり、唐突に何かを始めることが増えました。例えば、大学3年の夏に物理錠の仕組みに興味を持ち、2週間弱東京に行き2級鍵師を取得してきました。また、大学4年のときに、セキュリティの国際会議で最近の業界の動向が知りたくなり、CODE BLUEに学生スタッフとして参加しました。他にも、集団開発や実世界のセキュリティ業界の業務を学ぶためにr社でのアルバイトを申し込みました。当時はアルバイト募集がされていませんでしたが、どうしても働いてみたかったため、会社のお問合せフォームで働きたい旨を伝えたら承諾していただけました。さらに、唐突に監視カメラやデジタル時計が作りたくなって初めてラズパイを購入し、カメラモジュール、ディスプレイモジュールなども買ってきて半田付けして作ったこともあります。

私は今後、ソフトウェアに対するハッキングと開発の両方ができるエンジニアになりたいと考えています。開発がある程度できないとハッキングに対する深い理解が期待できません。また、ハッキングができないと開発においてもセキュリティを考慮した設計ができないと考えています。現状どちらかが卓越しているエンジニアは非常に多いですが、両方とも卓越していると言えるエンジニアは数少ないと感じます。そのために私は、セキュリティネクストキャンプを通して、ハッキングや開発に関する知識を少しでも多く吸収したいと考えています。それだけではなく、ネクストキャンプでは同じように向上心を持ち、互いの知識や考えを共有し、切磋琢磨できる仲間が作れることを期待しています。

■ 課題への姿勢に関する問い

自身で何らかの技術的な疑問を設定し,その疑問を解決しようと取り組み,その過程を示すことで,自身の技術力や課題に取り組むやりかたを説明してください. (疑問の例:実行ファイルはどのような構造になっているのだろう? lsコマンドは何をしているのだろう? pingコマンドを実行すると何が起きるんだろう? といったようなことです) 設定する疑問は何でも構いませんし,解決しなくても構いません. 解決できたかどうかではなく,いかに課題に取り組むかという点を評価します.

前述の通り、大学3年のときからCTFに熱中していました。私は特にWebとOSINTを解いていました。その中で、OSINTのアカウント特定系の問題を解くためのテクニックとして、Webサービスのパスワードリカバリ機能に調査対象のアカウント情報を入力するというものがあります。第三者がパスワードリカバリ機能にユーザIDを入力すると、通知先であるメールアドレスや電話番号の一部が表示されることがあります。また、メールアドレスを入力すると電話番号の一部が、電話番号を入力するとメールアドレスの一部が表示されることもあります。これにより、アカウントIDからメールアドレスの一部が入手できるだけでなく、二つのアカウントが同一人物が所持するものなのか判断する手掛かりになります。 私はこのテクニックを用いて問題を解いている際に、もし調査対象者が多数のWebサービスを登録している場合、ユーザIDや電話番号・メールアドレスからパスワードリカバリ機能を通じて、電話番号やメールアドレスが完全に復元されてしまうのではないかと疑問に思いました。パスワードリカバリ機能で表示されるメールアドレスや電話番号の一部分はWebサイトによって異なります。例えば、メールアドレス「hogehuga@gmail.com」を用いてTwitterInstagramに登録し、パスワードリカバリ機能でユーザIDを入力した場合、Twitterは「ho@g」が表示され、Instagramは「ha@gmail.com」が表示されます。これらを組み合わせると、「ho*a@gmail.com」まで復元できます。このように、Webサービスによって開示される箇所が異なるため、調査対象者が多数のアカウントを所有している場合に限ってこれは脅威になりそうです。実際、私は累計100以上のサービスを使用しています。そこで、この問題が実際にどれくらい脅威となるのか、また防ぐ方法はあるのか疑問に思いました。以降、この攻撃を通知先情報復元攻撃と呼びます。 (略,詳しくは論文読んでくれ) また、この問題に対する対策手法を考察しました。この問題はメールアドレスを入力したにもかかわらず電話番号の一部が表示される(逆も然り)ことが原因でした。そのため、Webサービスの運営者はパスワードリカバリ機能において、メールアドレスが入力された場合は通知先としてメールアドレスを、電話番号が入力された場合は通知先として電話番号を表示すべきです。ただし、ユーザIDが入力された場合はメールアドレスのドメインのみを表示する、そもそも何も表示しないなどの対策が考えられます。また、ユーザは登録するメールアドレスにコメントやエイリアスを使用するなどして、パスワードリカバリ機能を用いた通知先情報復元攻撃に脆弱なWebサービスに対策することができます。 また、この研究は以下の研究会で発表されたものになっています。https://ken.ieice.org/ken/paper/20230313BCsd/

■ 興味ある分野に関する問い

セキュリティ・ネクストキャンプの講義の一覧を見て,その中から興味のある講義を選び,その講義で扱うテーマに対して自分が考えること,興味,疑問,課題,自分なりの考察などを説明してください. その分野について知識があるかどうかではなく,いかに興味や疑問を持ち,課題を考え,自分なりに調べて考察するかといった点を評価します.

セキュリティ・ネクストキャンプ共通講義・ネクスト講義の中から、特に以下の講義に興味があります。

「K3 サイバーセキュリティと国際政治」 私はOSINTに興味があるため、APTにも興味があります。特に、最近のトレンドとしてロシアのウクライナ侵攻に関するサイバー空間上・認知空間上の攻撃が非常に興味深いと考えています。また、これらの攻撃に反応して、義賊のようなハッカーも現れるようになりました。例えばAnonymousがロシアの国営放送をハックしたり、一般の個人ハッカーもロシアの企業にDDoSを仕掛けているところを複数観測しました。ところで、これらの戦争を仕掛けた国への第三者からの攻撃は犯罪なのでしょうか?仮に国に対する攻撃は認められたとして、その国に所属する企業への攻撃は行なっても良いのでしょうか?本講義でこのような疑問を解決する手掛かりが得られればと思っています。

「N2・N12 低レベルGPUプログラミング」

私は以前、機械学習モデルであるCNNを標準ライブラリのみで実装し、CPU上で動かしてみたことがあります。その際、素人が特に工夫もせずに実装し、動かしたコードは異常なほど遅いことを実感しました。そこで、外部ライブラリを用いてGPUを使ってみたところ、それだけでとても早くなり感動した経験があります。本講義ではGPUの内部構造にまで着目したGPUソフトウェア実装を主軸とされています。この講義を学ぶことで、よりGPUの特徴を理解し、我が家のGPUを最大限活用できるようになればと思っています。

「N4 TDD+モブプログラミング」

私は普段からTDDに興味があり、アルバイト先や個人開発でTDDを取り入れています。最近は特に、firebase関連のテストを書くことが多く、VitestやMochaをよく使用します。また、モブプログラミングはハッカソンで時々使用します。特に、アプリケーションの設計やベースとなる機能の実装において、モブプログラミングを取り入れることが多いです。しかし、私はモブプログラミングでTDDを取り入れたことはなく、単体でやったときとの差分が気になりました。例えば、プロダクトコードとテストコードで、ドライバーとナビゲーターを入れ替えればより網羅性のあるテストが書けるのではないかと非常に興味があります。

「N7・N11 競技自作入門」

私はCTF、ハッカソンプログラミングコンテストなど、様々なコンピュータ系の競技に参加してきました。そのいずれも遊んでいるような感覚でさまざまな学びが得られました。今までは、既存の競技の主催者として、CTFやプログラミングコンテストを実施してきました。しかし、自分で競技を作るという経験はありません。また、私は競技のルール上の穴を見つけたり聞いたりすることが好きです。例えば、以前ネクストキャンプで実施されていた、LANケーブルに物理的にノイズを入れた状態でファイルをできるだけ送信する競技で、競技のコンセプトとしては再送処理や誤り訂正などを工夫したプロトコルを考案するものとなっているにもかかわらず、片っ端からファイル送りまくるプロトコル(?)の成績が良かった、という話が非常に面白かったです。本講義を通じて、自分で公平で面白く、学びになる競技を作ることの難しさや楽しさを体験したいと思っています。

■ その他に関する問い

その他,アピールしたい点などあれば自由記述で回答してください.

「興味ある分野に関する問い」では興味のあるものを4つピックアップしましたが、今年は特に面白そうな講義が多く、このような機会はなかなかないと思います。今まで培った知識や経験を活かして、より多くのことを学べればと思います。Seccampの5日間、コンピュータセキュリティのみに熱中できることを楽しみにしています。