feature image

2024年8月24日 | ブログ記事

セキュリティ・キャンプ2024 全国大会 参加記

これは夏のブログリレー6日目の記事です。
こんにちは、22Bのjippoです。
先日開催された「セキュリティキャンプ2024全国大会」に参加してきたので、すごく久しぶりにブログを書いています。こんなにtraP民らしい記事を書くのは初めて...!
先に結論から書いておくと、参加できて本当によかったです。最高でした。

参加が決まるまで

そもそも私がセキュキャンの存在を知ったのは1年前くらいで、応募したのは今年が初めてです。
去年は夏休みが暇すぎかつ暑すぎたせいでだいぶ気分が落ち込んだので、なんとか夏休みの予定を埋めようといろいろ申し込もうと思っていました。

とはいえ、セキュリティキャンプはめちゃくちゃ技術のある雲の上の人が行くものだと思っていたし、応募課題も重そうだったのでどうも踏ん切りがつかずにくねくねしていたところ、「応募を迷っている人は参加する素質がある」というようなツイート(ポスト)を見かけ、「俺のことやん!」と勘違いして思ってギリギリでエントリーしました。

応募

開発コースのS09 サニタイザ自作ゼミを第一希望としたのは以下のような理由があります。

そんな感じのミーハーな理由で応募しました。なお、応募時点ではサニタイザはほとんど使ったことがなかったです(類似ツールであるValgrindはけっこう使ってました)。

開発コースは第三希望まで出せるので第二希望、第三希望も提出はしたのですが、応募課題は1つ1つが重いので今思えば無理して3つも出さない方が良かったです。第一希望の課題しか納得のいくものは書けませんでした。いや、でも応募課題を進める過程で多少なりとも知識はついたので、不完全であっても出して良かったかもしれない。結論、どっちでもよし。

合格発表

そして合格者発表の日。受かってたら奇跡だな、くらいの気持ちでいたのですが(と言いつつ参加したい気持ちはあったので発表された瞬間に見に行きました笑)...

まさかの第一志望合格!!!一瞬見間違いではないかと思ったのですが、私の番号はあまりにもキリが良いので見間違えようがありません。
というわけで、恐れ多くもセキュリティキャンプに参加できることになりました。

本番まで

他の参加者や講師の方とDiscordでコミュニケーションを取っていたのですが、受講生のみなさんの自己紹介が強そうすぎて早くもビビってました。今思えば私と同じような初心者の人もちらほらいたはずです。

キャンプ本番での開発の時間は実質3日くらいしかないので、事前学習である程度進めておくことが重要になります。
講師のmikitさんに週1でOffice Hourを設定していただき、進捗報告や質問をしたり今後の指針を立てたりしました。
私は大学の2Q(6月~7月いっぱい)のコンパイラ構成という授業でコンパイラを作る予定だったので、それにTSan(スレッドサニタイザ)をつけるという方針で準備を進めていきました。

しんどい

この準備期間が1番しんどかったです。
どのくらいしんどかったかというと、Xの検索履歴がこんな感じになってしまうくらいです。

メンタル終わってたときの検索履歴

相当つらかったみたいですね。この時期には戻りたくないです。
他の受講生の方々が非常に優秀で、それと比べて自分はなんでこんな簡単なところで詰まってるんだ...と虚無になってしまう瞬間がたくさんありました。
今考えても、私の技術力は参加者の中で最弱だったと思います。でもそもそもセキュキャンの目的は「将来の情報セキュリティをけん引する人材となり得る優れた人材の発掘と育成」であって、「キャンプまでの時間で成果を出させること」ではないし...と必死に自分に言い聞かせてました。

コンパイラ

まず、サニタイザを作る以前にコンパイラを作るのが難しい!!私はアセンブリについてもコンパイラについてもほとんど知識が無く、まず慣れるのが大変でした。
とにかくサニタイザを作るにはコンパイラがある程度動かないと始まらないので、7月中旬までにはがんばってコード生成部分を終わらせました。この過程でC言語ともアセンブリ言語とも仲がぐっと深まった気がします。
余談ですが、私の受講していた「コンパイラ構成」という授業ではフルスクラッチでコンパイラを作るのではなく、担当教授である権藤先生作の雛形にコードを足していく感じで実装していきます(この授業、私が大学で受けた授業の中ではトップクラスで面白かったのでおすすめです)。雛形の時点で面倒な部分はほぼすべて完成してくれている上、自力で実装する部分も講義資料でかなりヒントを書いてくれています。それでも大変だった!S06のコンパイラ自作ゼミの方々はほんとすごい。

TSanはマルチスレッドのプログラムで起こり得るデータ競合を検知するためのツールです。準備期間で競合を検知するためのアルゴリズムの論文や実際のスレッドサニタイザのコードを読もうとがんばっていたのですが、めちゃくちゃ難しくて思うように進みませんでした。今でも理解できてないことが多いです。でもここで苦しんだおかげできっといつか並行プログラミングの知識が必要になった時にスムーズに勉強できるはず。

とにかく進捗が無くて焦っていたからかはわかりませんが、キャンプ前日に発熱しました。結果的には最後まで参加できて本当によかったです。

キャンプ本番

例年は月~金の4泊5日らしいですが、今年は月~土の5泊6日でした。私はこの世の何よりも夏が嫌いなので、1日でも長く涼しい場所で寝泊まりできるのは有難かったです。
会場のクロスウェーブ府中は建物の構造が壮大でかっこよかったです。でも今月で取り壊されてしまうらしい...。悲しい。

部屋

広めの個室を一人一部屋使えます。普通にホテルのシングルルームみたいな感じ。
机の上にはHSan(Hand Sanitizer)が置いてありました。これ自作してみてもいいかもしれない。

HSan

受講生の中で唯一会ったことのあった方と部屋が隣同士で嬉しかったです。空き時間に一緒に作業したり喋ったりできました。

ご飯

朝ごはんはバイキング、昼食は2つのメニューから好きな方を選択、夕食は一択でした。
朝食はヨーグルト+ドライフルーツのコンビとかぼちゃサラダがとても美味しかったです。
昼食は1番力が入っていた気がします。どれも美味しかったです。
夕食は量が多く、なんと1回も食べきれませんでした...。申し訳ないです。

もっと野菜を食べた方が良い
水曜日の昼食
木曜日の昼食
金曜日の昼食

1日目

移動中に熱がぶり返しそうになっていましたが、ロキソニンでねじふせました。
※褒められた行動ではないので真似しないでください。

北府中駅からクロスウェーブ府中までの道中がめちゃ暑かったし、ちょっと道を間違えたりもしましたが、なんとか辿り着きました。
開講式、共通講義×2、グループワークが終わった後は夕食を食べて交流会がありました。目と目が合ったらポケモンバトル名刺交換!!
hikaliumさんや内田公太さんにも会えて感無量でした。
なお、名刺は常に何枚か持ち歩いておいて、1日目以降も初めて会う人にはどんどん渡しました。100枚作ってキャンプ期間中に交換できたのは70枚くらい。余ったやつもまた別のイベントに参加したら配りたいです。
嬉しいことがたくさんあって、ほわほわした気持ちで寝ました。確か0時くらいに。

2日目

2日目~4日目は各ゼミやクラスによってやることが違います。開発コースはS01~S19の受講生&講師がみんな同じ部屋で進捗を生んでいました。集中力が切れてきたら他のゼミを見に行くことができて楽しかったです。
確か、共有変数への書き込み・読み込みやロックの取得・解放のログを取って、それを他の言語(Pythonとか)で解析するのが1番手っ取り早いかも、というアドバイスをいただいて、ログを出すにはどうしたらいいのかを考えていた気がする。開発の時間は1日当たり8時間ほどありましたがあっという間に終わりました。

3日目

読み込みと書き込みのログを取るのが意外と難しく、難航していました。
あまりにも進捗が無さ過ぎて呆れられてるなあ、というのを感じ取ってしまい、準備期間から感じていた劣等感が爆発してしばらく何もできなくなってしまいました...。
精神が弱すぎますね。
でも結局ログを取ることには成功して、解析のコードはmikitさんが書いてくださったものをほぼそのまま使用することで、TSanっぽい出力はとりあえず出せるようになりました。本当はここから性能の改善をした方が良いのですが、キャンプ期間中での実装は諦めました。

4日目

成果報告資料を作ったり、発表のスライドを作ったり、出力の見栄えを良くしたりしました。
変数の名前を表示するために、グローバル変数の宣言の時点で名前もデータセクションに置くようにして、ログを書くための関数に名前を渡す、というような処理を自力で実装出来て嬉しかったです。
いろんな人と話すことで精神もだいぶ回復していきました。

5日目

いろんな成果発表がありました。
専門コースの発表と開発コースの発表はだいぶ雰囲気が異なっていて面白かったです。
専門コースは1日当たり2つずつ、合計6つもの講義を受けるので、大変そうでした。実際、開発コースの人に聞いてみたら「知識の洪水だった」と言っていました。成果発表は比較的ゆったりと喋っていた気がします。
開発コースは1ゼミあたり3分と非常に時間が限られていたので、どのゼミもめちゃくちゃ高速で喋ってました。みんな高度なことをやっているので短時間の発表じゃぜんぜんわからん!でもそれが楽しい!というような感じ。
ジュニアもネクストもすごかった。

閉講式では修了証書をもらいました。無事に終了できてよかったです。

うれしい

企業イベントが台風の影響で無くなってしまって悲しかったのですが、その代わりに交流をたくさんすることができて非常に楽しかったです。成果発表が終わった後なので進捗を生む必要もないし、とにかくTシャツクイズの解法をみんなで考えてました。難しすぎてまだ解けてないです。先着30名限定で技術書がもらえるらしいのでがんばって解きたい。

6日目

朝食を食べて解散するだけの日でしたが、解散前にいろんな人と話すことができました。一昨日いただいたLLVM本にサインをもらうことを思いつき、入り口付近で待ち伏せして1ページ埋まるくらいサインをいただけて嬉しかったです。卒業アルバムに寄せ書きをもらってる気分でした。かなり余裕をもって新幹線を予約しておいて本当によかったです。
OtakuAssemblyという同人誌もいただくことができました。まだちょっとしか読んでないですがめちゃくちゃ面白いです。

ありがとう、クロスウェーブ府中!

最初で最後のクロスウェーブ府中

東京駅に来ることはあまりないので、ちょっと高めの(といっても1300円くらいの)美味しそうなお弁当を買って食べました。東京駅限定のものではない気がしますが美味しかったです。

内容のわりに安い、そして美味しい

今後

大学の授業内で作ったコンパイラのコードは公開不可なので、実績として見せびらかすことができません。
ということで、もう一度自分でコンパイラを作ってそこにサニタイザを付けることを目標にしたいと思います。理論は一通り学ぶことができたので、去年挫折した低レイヤを知りたい人のためのCコンパイラ作成入門などを読みながらもう一度チャレンジしてみたいです。

また、他のゼミでも面白そうなことをたくさんやっていたので、いろいろ調べてみたいです。特にハイパーバイザ、OS、Rustあたりが気になる。OSに関してはみかん本もエナガ本も買ってから1年くらい経つけどまだ読破には程遠いです。そろそろスラスラ読めるようになってきているといいな。
キャンプ中にいただいたこの2冊も読みたい。

いただいた本たち

あとCTFもやりたい!!低レイヤ方面の知識を深めていきたいです。やりたいことが多すぎる。
あと、これからも面白そうなイベント等があったらとりあえずいろいろ応募してみたいです。自分なんて...と思っていても意外と受かるかもしれないし。
ミニキャンプや来年以降のチューター、ネクストにも応募してみたいです。

まとめ

合格通知からキャンプ終了までの約2か月、プレッシャーも大きかったですが、ものすごく成長することができました。S09ゼミの受講生として参加することができて本当によかった!mikitさんとももう1人の受講生の方ともキャンプ中に知り合えた人とも、またどこかで会いたいです。その時にはもっともっと成長した自分を見せられたらいいな。
「今の実力じゃ無理だ...」と思っている人も、とりあえず申し込んでみるとよいのではないかと思います。セキュキャン公式サイトの講義一覧を見てワクワクしてくるならきっと素質があるはず...!

明日は@ikura-hamu君と@Pugma君の記事です。楽しみ~

jippo icon
この記事を書いた人
jippo

22B 情報通信系 絵を描いてます。Webが難しくて低レイヤーに興味を持ち始めた

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2024年8月21日
【最新版 / 入門】JUCEを使ってVSTプラグインを作ろう!!!!【WebView UI】
kashiwade icon kashiwade
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2022年9月26日
競プロしかシラン人間が web アプリ QK Judge を作った話
tqk icon tqk
2022年9月16日
5日でゲームを作った #tararira
Komichi icon Komichi
2024年8月29日
クロスコンパイルRust
H1rono_K icon H1rono_K
2023年9月27日
夏のブログリレーは終わらない【駄文】
Komichi icon Komichi
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記