デジタル人材の育成

セキュリティ・キャンプ2025 全国大会【開発】Yゼミ

公開日:2025年5月7日

  • セキュリティ・キャンプ2025 全国大会

Yゼミ

開発コースは受講者2~3人のゼミにわかれて、合格通知後の事前学習期間からキャンプ開催期間の終わりまでコミュニケーションを取りながら進める、ゼミ形式の学習形態となっています。ゼミの講師は専門分野の家庭教師だと考えてください。

このゼミ形式では、あなたの理解度に合わせつつ、講師が「更なる理解の手助けと新しい知識と経験を得る手がかり」を用意してくれることでしょう。講師の方々はご自身の専門分野で第一線で活躍されている方ばかりです。技術の研鑽はもちろんのこと、「何を楽しんでいるのか」「どうやって楽しんでいるか」「なんで継続できているのか」といった、一流のプロフェッショナルの姿勢を学べることでしょう。

Y1『Code Sanitizer・Fuzzer自作ゼミ』

担当講師
講義概要

Code Sanitizerとは、コンパイル時に追加の命令を挿入することでプログラム中のバグを実行時に検出するコンパイラ内蔵機能のことです。

サニタイザは、検出されるバグの種類によりいくつかの種類に分類できるのですが、代表的なものはアドレスサニタイザ(ASan)といい、ポインタの扱いを誤ることなどによるメモリ管理のバグを発見することができます。

他方のFuzzerは、(半)自動的に生成された入力をプログラムに与えることでソフトウェアをテストする手法を指します。

この手法にも多数の種類が存在しますが、サニタイザと同様にコンパイル時に追加の命令を挿入することでより効率的にテストケースを生成する手法が多数提案されています。

そして、これら2つの機能は同時に使用することが可能で、サニタイザの併用によりFuzzerによるバグの検出率が高まるため、実世界でもよく利用される組み合わせとなっています。

「そんなもの使ったこともない!」と思うかもしれませんが、静的検査では検知できないバグも発見することができるため、LinuxやChromiumの開発などにも使われている便利機能となっています。

本ゼミは、既存のコンパイラを改造することで手っ取り早くサニタイザやFuzzerのような付加的機能を実装する部分を楽しむことを目標としています。

大会期間中には、サニタイザまたはFuzzer、あるいはその両方を受講生のすきな形で実装していこうと思っています。

これらの実装には、コンパイラ側のコード生成の改造とともに、時として`malloc()`などのランタイムライブラリの変更が必要となるため、双方に関する知見を深める良い機会になると信じています。

コンパイラに興味がある方、ランタイムでの保護に興味がある方、それらに限らず、皆さんのご応募をお待ちしております。

Y2『CDN自作ゼミ』

担当講師
講義概要

【趣旨】
Webサービスやアプリのバックエンドにおいて、Content Delivery Network (CDN)を使うことが一般的になっています。しかし、CDNそのものがどのような仕組みで動いているのか、意識したことはありますか?
本ゼミでは、CDNの要素技術を実際にみなさんにコーディングいただくことで、CDNをフルスクラッチ自作できる自信を持っていただければと思います。

【講義の流れ】
キャンプ当日を盛り上げるため、基礎知識の座学や開発環境の整備は、事前学習という形で、キャンプ前にすませられればと思います。
キャンプ当日は、安価なコンピュータとネットワーク機器を組み合わせて、物理的にミニCDNを講義会場で作ることを目標とできればと思います。うまく動作までこぎつけた後は、みなさまと時間の許す限り皆様の興味やバックグラウンドに応じて、ミニCDNをいろいろな形で進化させられればと思います。

【受講者への想定】
みなさまのバックグラウンドや興味に応じて柔軟に対応いたします。
プログラミング言語について、特に制約はありませんが、サンプルプログラムはGo、C言語での提供となりますので、これらの言語で書かれたプログラムが読めることが望ましいです。

Y3『探査機自作ゼミ』

担当講師
講義概要

一緒に探査機を作ってみませんか?

このゼミでは惑星探査機の開発を題材として、複雑な問題への向き合い方を手を動かしながら考えます。つまり、目の前に明らかに存在する問題だけでなく、その背景にあるメタな問題を発見し、自らの認識、方法論、手札をアップデートしながら開発を進めていくという営みにチームで一丸となって取り組みます。

惑星探査機や人工衛星、宇宙開発と聞くと、一見遠い世界のことのように思うかもしれません。しかし、現代の我々は宇宙と切っても切れない関係にあります。便利な天気予報は気象衛星があってこそですし、スマートフォンの位置情報取得機能はGPS/GNSS衛星によって成り立っています。地震や洪水などの災害時においても、地形がどのように変化したかといった観測による人工衛星の役割は非常に大きなものとなっています。

即座に生活の役に立つものではなくとも、人類の知や活動の領域を押し広げるという面でも宇宙は大きな領域です。我々が理科の教科書などで月の裏側や太陽系の惑星の詳細な様子を知っているのも、人類がそこまで探査機を送り込んできたからです。近年では、「はやぶさ2」のカプセルの帰還や、小型月着陸実証機の SLIM の成功なども話題になりました。

そんな宇宙機ですが、みなさんはこういったものがどのような仕組みで動いているか、どのように作られているか考えてみたことはあるでしょうか?

宇宙機は非常に複雑なシステムです。なぜ非常に複雑なのかと言えば、考えなければならないことが非常に多いからです。まず 、宇宙にコンセントはありません。そのため、自分で発電能力を持つ必要があります。ほとんどの場合は発電手段として太陽光発電を用いますが、これはそこまでパワーのある発電手段ではなく、使える電力にかなりの制限がかかります。太陽光発電ができたら発電自体は安泰というわけでもなく、適切に太陽の方向を向くように制御しないといけません。その制御がうまくいかなかったら空飛ぶ文鎮です。また、そもそも制御するためには自分が向いている方向や太陽の方向をどうにかして得ないといけません。足場も無い環境で、どうやって自分の姿勢や位置を把握しましょうか?さらに、素朴にずっと太陽の方向を向いていても、それはそれで放熱ができず部品の温度が高くなりすぎて不可逆的に破壊されてしまうかもしれません。

このように非常に複雑なシステムは、一人で作ることはほぼ不可能です。機械的な構造、熱や電力の収支、姿勢決定、姿勢制御、コンピュータ・ボード、そしてソフトウェアなどすべてを設計し、開発しなければなりません。太陽光発電の例からも分かるように、このそれぞれかなり別々の専門領域を持った人間同士が適宜連携し、調整しながら開発を行う必要があるのです。

つまり、多分野の個々の高い技術が必要になるだけでなく、それらを適切に連携させる必要があります。この点において、個別の技術とは異なる別の難しさがあるのです。この複雑な連携のための方法論として、システムズ・エンジニアリングという分野があるのですが、これはアポロ計画、つまり実際の宇宙開発プロジェクトを大きな契機として発達しています。

このゼミでは、模擬的な惑星探査機の自作を通して、システムズ・エンジニアリング的な観点を持ちながらのチーム開発を体感してもらいます。他の受講生と、そして講師と協力しながら、ひとつの探査機という複雑なシステムを作っていきましょう。自分が得意なレイヤより上や下のレイヤ、別の人が開発しているサブシステム、システム全体、開発体制のことを考えながらものづくりをする経験は、宇宙開発に限らず、あなたが将来大きなものづくりに関わる時に確実に役に立つと信じています。皆さんの応募をお待ちしています。

【ミッション概要】
火星のような地球型惑星のことを考えましょう。
この惑星には既に周回軌道上に探査機が送り込まれており、データが送られてきています。ただし、周回軌道上からの観測手段や精度は限られており、現地に降りてみないと分からないこともたくさんあります。

そこで今進行しているのが着陸型の探査機の開発プロジェクトです。着陸機を開発するのは技術的にもコスト的にも大変なので、とても大きなプレッシャーがかかっています。あまりリスクは取れません。確実に何かがありそうなことが分かっているもののみを調査したいです。とはいえ、降りてみないと分からないことがあるから着陸してみるのに、降りずに判断したもののみを調査するのはある種本末転倒です。

この問題を解決するため、この着陸機には子機を搭載することになりました。子機は着陸後に親機から分離し、親機とは別に行動します。子機であれば、親機よりもリスクを取ってチャレンジングな探査ができることでしょう。みなさんのチームはこの子機を開発することになりました。

【受講を考えている方へ】
ものづくりが好きな人、問題の発見・解決が好きな人を歓迎します。

宇宙開発はあくまで題材なので、宇宙関係の知識や興味は特に要求しません(あるとより楽しめるかもしれません)。

このゼミで自作する探査機は色々とデータを取得したり、移動したりすることが求められます。そのため、各種センサやアクチュエータをマイコンで制御することになります。この探査機本体の制御や、探査機とやりとりする地上局側において、ソフトウェア開発をすることになるわけです。

このゼミではチーム開発を行い、ハードウェアも扱う都合上、ゼミや開発の大部分を事前学習期間中に行うことになります。事前学習期間中は最低週1回程度、適宜オンラインで会話する機会を設けたいと考えています。そのため、余裕を持った予定の確保・確認をお願いします。実際の予定調整は受講生同士の都合などもあるため柔軟に行います(無理はせず、テスト期間などでは学業を優先してください)。

ハードウェア部分については、みなさんがあまり慣れていないであろうという勝手な予測や、モノのリードタイムなどの都合から、ある程度講師の方で用意しています。これはつまり、講師はハードウェア開発を担当するみなさんのチームの一員だということです。講師は経験者であるという一日の長はありつつ、ただの調整相手のひとりです。そしてもちろん、みなさんがハードウェア開発をしてはいけない道理もまったくありません(むしろ歓迎します)。このゼミに答えはありません。ただし、期間中にあらゆることをやりたくなると時間があっという間になくなるので、そこは気を付けましょう。

ソフトウェアの開発には Rust とC言語を用います。そのため,C言語の基礎的な文法は一通り分かっていて、自力でなにかしらのプログラムを書いて動かした経験があることが望ましいです。
Rust については入門からサポートしますが、『The Rust Programming Language』や『The Rustonomicon』『The Embedded Rust Book』などをなんとなくでも読んだりやったりしておいてもらえると、スムーズに実践的な開発ができる時間が増えると思います。

ただし、Rust や C言語の経験がなくとも、応募後や事前学習期間中に自走できる熱意がある場合は応募をためらわないでください。

また、受講にあたり、『Kerbal Space Program』ないし『Kerbal Space Program 2』を多少プレイしておくと、「宇宙開発」がどのような世界観か分かりやすくなるかもしれません。ただし、ハマって時間を溶かして応募できなくなってしまうと本末転倒なので、プレイするのは応募後にしましょう。お金に余裕が無い人や、ハマりすぎてしまうのが怖い人は、ニコニコ動画や YouTube にあるCeVIO実況プレイ動画をいくつか観てみると面白いと思います。個人的なおすすめは『Kerbal宇宙開発日誌~ニコニコ重工~』です。これらも量が多いので観すぎに注意ですが、チラっと見る分には気分転換や応募課題の参考にもなるかもしれません。

最後に、去年の探査機自作ゼミについての講師のブログ記事のリンクを貼っておきます。受講生のみなさんと一緒に作り上げるゼミなので同じようなことになるかは分かりませんが、雰囲気は伝わるのではないかと思います。

更新履歴

  • 2025年5月7日

    ページを公開しました