かよ日記

インターンの体験記などを書いていく予定です。

低レイヤ初心者がセキュリティキャンプ全国大会2020に参加した感想

この記事はセキュリティ・キャンプのグループワーク「控えめ関西人」の合同ブログ第6記事目になります。

modestkansaipeople.hatenablog.com

概要

2020年10月18日(日)~2020年12月6日(日)まで「セキュリティ・キャンプ 全国大会 2020 オンライン」のシステムソフトウェア自作トラック(Yトラック)「OS開発ゼミ」に参加させていただきました。低レイヤに入門して間もない状態で参加した私にとっては何もかもが新鮮で、とても刺激的な2ヶ月でした!
そこで、この記事ではセキュリティ・キャンプでやったことや実際に参加してみた感想などについて書いていこうと思います。

目次

セキュリティ・キャンプとは?

セキュリティ・キャンプとは、日本における将来の高度IT人材となり得る優れた人材の発掘と育成を目的とした独立行政法人情報処理推進機構(IPA)の事業の一つです。

 

現代においては、情報セキュリティの脅威は高まる一方です。

本事業では、セキュリティ分野に興味を持ち、将来同分野で活躍したいという意志をもった若者に対して、高度な情報セキュリティ技術の習得機会を提供しています。また、モラルや法律遵守の意識、セキュリティ意識、職業意識、自立的な学習意識についても向上のための機会を提供しています。

 

本事業は、2004年度のスタート以来、2019年度のセキュリティ・キャンプまでで計824名の将来が有望なIT・情報セキュリティ人材を輩出しています。セキュリティ業界はもとより各方面から、高度な情報人材育成に有益なイベントとして高く評価されています。 

(公式サイトより引用:https://www.ipa.go.jp/jinzai/camp/2020/zenkoku2020_about.html

つまり、セキュリティ・キャンプは国主催の、セキュリティ分野のすごい人たちの講義*1を無料で受けられるとても豪華なイベントなのです。 一口にセキュリティ分野と書かれていますが、theセキュリティといった感じ(?)の講義から自作OSやコンパイラ、電子工作まで、様々な講義があります。 もしどれか1つでも興味があるのなら応募しない手はないでしょう。

セキュリティ・キャンプ全国大会2020の講義一覧など、詳細は公式サイトに書かれているので気になる方はぜひ読んでみてください。*2

www.ipa.go.jp

例年は8月に5日間の合宿形式で行われていたのですが今年は新型コロナウイルス感染拡大防止のため、オンライン形式による開催となりました。

セキュリティ・キャンプのここがすごい!

講師陣がすごい!

何と言っても講師陣がとても豪華です!
その分野を勉強している誰もが知っている名著を書かれた方、大学で先生をしている方、GoogleやLINEなどの超有名企業のエンジニアの方、受講生とほとんど変わらない年齢でありながら最前線で大活躍されている方など、普段中々会えないようなすごい方々が沢山いらっしゃいます!
そのような豪華すぎる講師陣の講義を無料で受講できるし、相談や質問も無料でし放題なのです

受講生・チューターがすごい!

講師陣だけではなく受講生やチューターもすごい人ばかりでした。
小中学生の頃からずっとプログラミングをしてきたような人がザラにいます。何なら中高生の参加者もいたりします。私ですら名前を聞いたことがあるような強い人もいました。(主観ですが、実務経験や開発経験が豊富な「強い人」というよりはアカデミック系の「強い人」が多い印象を受けました。)
初心者の私にとっては雲の上の存在ばかりだったのですが、セキュリティ・キャンプではそんな人たちと同じ講義を受けることができ、交流することができてとても刺激的でした!
また、優しい人たちばかりだったので、初心者だからといって肩身の狭い思いをすることはなく、雰囲気もとても良かったです。

協賛企業がすごい!

公式サイトの会員企業・団体一覧を見てもらえば分かると思うのですが、セキュリティ・キャンプの協賛企業には名立たる企業の名前がずらりと並んでいます
https://www.security-camp.or.jp/about/index.html

セキュリティ・キャンプでは協賛企業の方のLTを聞けたり、企業の方を交えて技術的な話題について議論するBoFというイベントがあったりしました。


↑豪華なノベルティを頂きました。

セキュリティ・キャンプに参加するには

※こちらは2020年度の情報になります。

セキュリティ・キャンプ全国大会に応募するための条件は大きく2つありました。

  1. 日本国内の学校に在籍する2021年3月31日終了時点において22歳以下であること
  2. 応募課題を提出すること(応募課題による選考有り)

他にも細かい条件が色々ありますがここでは割愛します。気になる方は応募要項を読んでみてください。:https://www.ipa.go.jp/jinzai/camp/2020/zenkoku2020_vote.html

年齢制限

1に関しては、学年制限ではなく年齢制限であることに注意してください。
ただし22歳を超えている場合であっても、25歳以下の学生であれば同時開催の「セキュリティ・ネクストキャンプ」や、地方各地で開催している「セキュリティ・ミニキャンプ」には参加できるようです。また、協賛企業の社員であったり、そうでなくてもお金を払えば全国大会の講義を見学できるらしいという話も聞きました。

www.ipa.go.jp

www.security-camp.or.jp

応募課題

セキュリティ・キャンプの講義は分野ごとにいくつかの「トラック」に分けられています。 トラックごとに応募課題が用意されており、参加したいトラックの問題を回答します。

2020年度ではA~Dトラックが「選択コース」であり、L、X~Zトラックが「集中コース」でした。

「選択コース」は基本的に1回完結型の講義の集まりで、自由に組み合わせて受講します。(定員数によっては希望通りにならない場合もあります)。 ただし、応募時はトラックごとに選考が行われるものの、参加時は選択コースの全講義の中から受講したいものを選択できるようになっていました。(募集時に公式サイトにもそう明記されていました。)つまり、「Aトラックで応募したけれどB~Dトラックの講義も受講する」ということもできるわけです。

「集中コース」は1つのテーマについて集中的に開発するハッカソン形式のコースです。トラックの中でさらにゼミに分かれており、ゼミ毎に応募課題が出されます。 選択コースと違ってこちらは応募時と同じゼミにしか参加できませんでした。

参加するまでの経緯

自作OSに興味を持ったきっかけ

私は集中コースの中でもYトラックのOS開発ゼミに参加しました。
しかし、前々から低レイヤに興味があったわけではなく、興味を持ち始めたのは応募するほんの少し前の話でした。

大学では情報系の学部に所属しているのですが、その中でも低レイヤやハードウェアをほぼ扱わないコースに所属していたため、それらの勉強をちゃんとしたことがなく、しようとも思っていませんでした。それどころか他コースの友人たちが低レイヤに関する実習で苦しんでいる様子を見て「(一部の天才を除き)低レイヤとはつらく苦しく、何も面白くないものである」とさえ思いこんでいました。

普段使っているコンピュータの裏でどういう処理がされているんだろうといった興味は少しだけ持っていましたし、昔から何かを作ることも大好きだったのですが、低レイヤに対して前述のような印象を抱いていたため実際に行動に移すことはありませんでした。

そんな私に転機が訪れたのはとある技術系イベントでした。 イベントの内容自体は低レイヤに寄ったものではなかったのですが、そこで私は低レイヤ界の有名な方や低レイヤが好きな方々に沢山出会い、低レイヤに対する印象が変わっていきました。そして、イベントが終わる頃には誰かから勧められたわけでもなく自然と「30日でできる!OS自作入門」を手にしていました。

f:id:knknk98:20210221205251p:plain

かの有名な緑の本


この本の詳細についてはここでは割愛しますが、私のような前提知識がほぼない人でも読めるよう詳しく解説してあり、また、自作OSを楽しもうというスタンスで書かれているので友だちと雑談しているような感覚で読み進めることができます。 自作OSと言えばこの本!というくらい有名な本ですので、ぜひ一度読んでみてください!
私はこの本を読んで自作OS、そしてセキュリティ・キャンプのOS開発ゼミに興味を持つようになりました。

www.amazon.co.jp

※OS開発ゼミの講師でもあり、かつて高校生代表として「30日でできる!OS自作入門」の校正にも携わっていた内田さんが3月に「ゼロからのOS自作入門」という本を出版するそうです。こちらは「30日でできる!OS自作入門」の現代版といった内容らしいので、今から読むならこちらの方がオススメかもしれません。

www.amazon.co.jp

応募課題

まず、OS開発ゼミの応募課題は以下の通りでした。

■問題A
我々講師は、普段いくつかのOSを使っていますが、使い込むうちに色々な発見をします。
皆さんもきっとそういう体験があると思います。
あなたが普段使っているOSで、好きな機能と改善してほしい部分について、思いのたけを聞かせてください。
この問では、皆さんが普段どの程度興味を持って既存OSを観察しているかを評価します。

■問題B
皆さんが仮にOSを作るとしたら、「どんなOS(やOSの機能)を作ってみたい」でしょうか?
(既にOSを作った事がある人は、その特徴を書いてくれても構いません。)
そして、なぜそれを作ってみたいと思ったのでしょうか?
皆さんが心の中で夢描いているであろう、ワクワクするようなOS像を教えてください。

■問題C
OSを実装する上で基礎となるC言語の力を見る問題です。

C.1. C言語で双方向リンクリストとそれを操作する関数を作り、ソースコードを提出してください。
リンクリストを生成する関数、要素を任意の場所に挿入する関数、全ての要素を順に標準出力に印字する関数、の3つがあれば十分です。
やる気があればもっとたくさんの機能を実装しても構いません!
C.2. 設計・実装で工夫した点を述べてください。

■問題D
OSを作る過程で様々な調べものをする必要が出てきます。
皆さんに必要な調査力があるかどうかを知りたいです。

単語集:PCI、ACPI、ASLR、スピンロック、コンテキストスイッチ、バディシステム

D.1. 上記の単語集から知らない単語を 1 つ選んでください。何を選びましたか?
D.2. その単語について、調べて分かった事実をなるべくたくさん教えてください。
D.3. 判明した事実に対して、あなたなりの解釈をしてみてください。例えば…
- 「Aという機能はXをやるために追加されたのではないか」
- 「類似のBと比べて、Yの場合にとても効率が良さそう」

※調べる、という行為は、書籍やウェブサイトを読むことはもちろんですが、
実験や観察を自分でやるということも含みます。

■問題E
その他、書ききれなかったことを好きなだけ書いてください。

(公式サイトより引用:https://www.ipa.go.jp/files/000084574.txt
応募課題の回答を載せるのは恥ずかしいのでしませんが、意識した点について簡単に書こうと思います。
公式サイトには選考基準について、以下のような文章が書かれてありました。

このゼミでは、OSの面白さや奥深さを学生の皆さんに沢山伝えたくて、いろいろな講義を計画しています。
恐らく皆さんも、こういった講師の熱い思いに惹かれて、このゼミに興味を持ってくれたのではないでしょうか。
設問の多くは皆さんの知識や技術力を問うのではなく(その辺りは事前学習で講師がフォローします!)、
皆さんのOSに対する興味やモチベーションを聞いてます。それを意識して回答してみてください。

回答は、最低限のことだけでなく、膨らませて沢山書いていただいて大丈夫です(むしろ歓迎!)

(公式サイトより引用:https://www.ipa.go.jp/files/000084574.txt

Y トラックの選考基準は各ゼミ毎に異なりますが,全体的には加点方式を採用し,皆さんのやる気を見ます。 加点方式は,間違った回答を減点するのではなく,良い答えに対して加点していく方法です。ですので,間違ってしまうことを恐れて何も書かないよりは,自分なりの回答を書く方が加点の可能性が高まります。

(公式サイトより引用:https://www.ipa.go.jp/jinzai/camp/2020/zenkoku2020_message.html
つまり、知識や技術力だけではなくモチベも重視するということ、加点方式であるということです。
そこで私は単に問題を解くだけではなく、志望動機やセキュリティ・キャンプに参加するために今どんな勉強をしているのかなども書くこと、少しでも書きたいことは全て書くことを意識して回答しました。
今見返すと現実味のないことや間違った内容ばかりだなあと思うのですが、当時は一生懸命調べたり考えたりしていました。(その結果1万字超えの大長文になってしまいました。)

セキュリティ・キャンプでやったこと

ここではセキュリティ・キャンプでやったことについて簡単に紹介します。

OS開発ゼミ

OS開発ゼミは決まった内容をやるのではなく、各々の好きなことをやり、それを講師やチューターがサポートするという形式でした。
公式サイト:https://www.ipa.go.jp/jinzai/camp/2020/zenkoku2020_program_list.html#list_s-y1

当初、作りたいOSの具体的なイメージを持てていなかった私はテーマを決められるか不安だったのですが、初回講義で講師の内田さんが私のぼんやりとしたイメージをまとめてくださり「こういうことをやればいいんじゃないか?」と具体的な形を提案してくださったので、すんなりと決めることができました。
その結果、私は「30日でできる!OS自作入門」のハリボテOSを改造し、最新のC++で動くようにすること*3、そのために、Linuxの標準的なコマンド(gccやld)を用いて開発できるようにすることを開発テーマにしました。(WSL2上で実行しました。)

「30日でできる!OS自作入門」では開発環境として著者の川合さんオリジナルのツールキットが使われていました。特別な操作を必要とせず本に付属しているファイルを好きな場所にダウンロードするだけで使えるので、初学者が環境構築で挫折することを防いでくれる素晴らしいツールです。しかしその分プログラムが実行される仕組みがブラックボックスのままになってしまっていました。
Linuxの標準的なコマンドを用いて開発できるよう実際にMakefileを書き変えたりリンカスクリプトを書いたりすることによってプログラムが実行される仕組みについて理解を深めることができました。(これに取り組むにあたり、講師の内田さんやチューターのsksatさんがハンズオンしてくださいました。ありがとうございました!)

また、セキュリティ・キャンプ参加前は「C++C言語と互換性があるため、CコンパイラC++コンパイラに差し替えるだけで(C++っぽい書き方かどうかはともかく一応は)ハリボテOSがC++に対応できる」と思いこんでいたのですが、チューターのhsjoihsさんから名前マングリング*4について教えていただき、そうではないことを知りました。(ありがとうございました!)残念ながらセキュリティ・キャンプ期間中に最新のC++への完全対応はできなかったのですが、学びになることは沢山ありました。

OS開発ゼミ全体については講師の内田さんがまとめてくださっているのでぜひそちらを読んでみてください。

uchan.hateblo.jp

グループワーク・交流タイム

セキュリティ・キャンプでは他参加者と交流する場も設けられていました。

グループワークではトラックごちゃまぜの数人のグループに分かれ、「セキュリティ・キャンプ修了後に取り組むこと」をテーマに話し合いました。私たちのグループでは「積極的にアウトプットしたいと思っているもののついつい先延ばしにしていまう……」という悩みを抱えている人が多かったため、合同ブログを運営し、期日を決めて記事を投稿するようにしました。(この記事も合同ブログの一環です。)

交流会では色んなトラックの人と雑談することができました。Yトラック以外の参加者も数多くいたにも関わらず、みんな緑の本を持っていたのはとても面白かったです(笑)
↓当時のTL

その他のイベント

このほかにも全体で受講する講義や協賛企業のLT、好きなテーマを選び協賛企業の方と一緒に自由に議論するBoF等のイベントもありました。

まとめ

セキュリティ・キャンプに実際に参加して、沢山の学びを得ることが出来たのはもちろん、セキュリティや低レイヤに強い方々と沢山交流することができてとても刺激的でした。ありがとうございました! 少しでも興味がある人はぜひ応募してみてください!

*1:座学ではなく手を動かしながら学ぶタイプの講義が殆どでした。

*2:毎年講義の内容は変わっているようです。

*3:ハリボテOSはC言語で書かれています。

*4:C++ 名前マングリングとは - あるべるのIT関連メモ