デジタル人材の育成
サイバーセキュリティでアイディアは生まれるのか
サイバーセキュリティは社会的に未解決の課題が多い分野です。課題に対処するには分析する必要がありますが、分析するためにはその課題にどっぷり漬からなければなりません。どっぷり漬かるとそれに囚われてしまい、その課題を斜め上から眺めてみる思考や、ひっくり返してみたり変なモノと組み合わせてみたりするような発想が難しくなります。過度に囚われずにいじくり倒してゲームチェンジするための発想をするにはどうしたら良いか。この時間は対談形式でアイディアの根幹に触れ、実課題とどう向き合うかを検討していきます。
テーマ例:
心理学の視点からセキュリティを考えてみよう
システムを作る「人」、システムへサイバー攻撃をする「人」、サイバー攻撃から守る「人」…サイバーセキュリティの世界に登場する「人」について考えたことはありますか︖本セッションでは、人の心理という側面からサイバーセキュリティを捉えていきます。英語でPsycho(心)-logy(学問・科学)とされているように、心理学では人の考え・感情・行動などを統計的手法を用いて科学的に分析・解明します。科学的に立証されている心理モデルや理論を用いて、サイバーセキュリティにおける人の行動と心理的背景について説明をしていきます。人の行動特性を知ることで、「人が使いやすいシステムの開発」や「人が順守しやすいセキュリティ対策」という視点を得ることを目指します。
セキュリティ情報を適切に伝えよう
セキュリティの啓蒙・啓発活動はもちろん、脆弱性情報を伝えて警告を発したり、新たな知見を伝えることは、「言葉」を抜きにしてはできません。情報は発信する人のところに集まり、さらに知見を深めることができますが、セキュリティ関連情報を適切に扱わなければ、時に他人に害を及ぼしてしまう恐れもあります。
この講義では、皆さんがブログやSNS、あるいはメディアの寄稿記事でセキュリティ情報を公開し、伝えていく際に「何をしてもいいのか」「何をすべきでないのか」、そしてどうすれば多くの人にセキュリティに関心を持ってもらい、より安全な世界を作れるのかを、朝日新聞社でセキュリティ関連記事を担当する須藤龍也編集委員、Security NEXTの武山知裕編集長とともに考えていきます。なお、もし時間に余裕ができれば、取材時のこぼれ話が紹介できるかもしれません。
本講義の受講に当たって必要なスキル・知識は特にありません。自分のブログやメディアを通じてセキュリティ情報を発信し、正しく伝えていく際のヒントにしていただきたいと思います。
ハッカーの倫理
前半は、サイバーセキュリティに関連する法律の基礎的な理解をお話しします。後半はパネルディスカッション形式で、園田さんと色々な事例に基づき、気をつけるべき点をお話しします。
グループワーク
グループワークはセキュリティ・キャンプ全国大会の全日程を通して行われるプログラムです。 数人ごとのグループに分け、決められたテーマについて議論・インタビュー・検討を行います。 今年のグループワークのテーマは「セキュリティ・キャンプ修了後にあなたが取り組むこと」です。 グループワークは、異なるコース・トラックの参加者や、講師・チューターと交流する貴重なチャンスです。 グループワークでは講師やチューター、見学しているスポンサー企業の方々へヒアリングすることを推奨しており、 幅広い意見を収集して、セキュリティ・キャンプ修了後の活動について考えるまたとないチャンスとなるでしょう。 このグループワークはキャンプ期間中に活動内容を計画して、キャンプ修了後に参加者がやりたい活動を「見つける・実行する・継続する」ことが目標です。 つまりキャンプ修了後の活動が本番です! 最終日には各グループで議論した「セキュリティ・キャンプ修了後にあなたが取り組むこと」を、発表することを予定しています。
患者の命に直結する医療情報システムを歩く
さまざまなモノがインターネットを通じてつながることで、情報交換し、またその情報をAI等で現実世界に介入する「力」と転じていくために重要なインフラとしてIoTが注目されている。医療業界でもIoTが注目されている。遠隔での診療が可能になり、災害や過疎地、精神的、肉体的制約等から医療へのアクセスが困難な者への活路が切り拓かれることが期待される。またウェアラブルセンサーを利用してバイタルサインを計測することにより、健康状態をリアルタイムに監視し、本人ですら気づかない危険な兆候をいち早く検出し、救命したり健康状態を維持・改善するようにする試みもなされている。Apple Watchで命を救われたと主張する事例を皆さんも聞いたことがあるだろう。ネットワークにつながった医療機器は、これまで以上の医療・健康に関する管理や支援を実現するツールとして期待されている。 一方、医療機関の情報セキュリティの侵害が命を脅かしうるという懸念が以前から指摘されている。
本講を含むトラックでは、IoTデバイスのセキュリティについて学んで頂くことになるが、本講がその最初の講義となる予定である。医療機関と医療情報システム、医療機器における情報セキュリティ上の瑕疵が命に直結しうる事態について理解して頂き、セキュリティに対する強い関心と続く講義の受講のモチベーションにつなげたい。
チップレベルでカスタマイズができることで見える世界の体験
集積回路(LSI)はコンピュータのCPUをはじめ、あらゆる電子機器の基本パーツで、その進化はコンピュータの進化と表裏一体です。その進化の結果、あまりに高度化、複雑化したLSIはブラックボックスとなり、中身を知らなくても多くのことができるようになりました。しかしそのことは、先日のCPUの根本的な脆弱性「MeltDown」のような深刻な問題の遠因ともなりえます。 この講義では、LSIを設計することに立ち返り、その視点からコンピュータというものを改めて見つめ直すことを目指しています。 具体的には、論理ゲートレベルの単純なものから、徐々にARMプロセッサ等の複雑なLSIを、それぞれにあった手法で設計しながら、その仕組み、その可能性を体験します。そしてそれを通してコンピュータというものに対する新たな視点を得ることを目標とします。
ロバストプロトコル・オープンチャレンジ
一般にサイバーセキュリティとは悪意を持った第三者からの攻撃から情報通信機器やデータを守ることに重点が置かれがちですが、これ以外に事故や自然災害から通信を確保することもサイバーセキュリティの大事な要素と考えます。参加者は障害のあるLANにおいて通信が可能な強靭なプロトコルを各自がデザインし実装します。あらかじめ示された評価軸に基づき、各自が考案したプロトコルを講師や参加者とともに評価します。この講義ではどのプロトコルが優れているかを競うのではなく、今回の実装に至った思考過程を明らかにし、各自のプロトコルの設計思想を共有することを本講義の目的とします。
本講義は前半と後半の2時間×2コマで実施します。前半の1コマ目の講義では主に自作プロトコルのためのセットアップ作業に取り組んでもらいます。後半の2コマ目の講義では主に各自作成したプロトコルの性能を評価し、発表してもらいます。
ファイルシステムの理解と記憶チップ内データの解析
USBメモリを通して、IoT 解析の基本であるフラッシュメモリからデータを吸い出すことや、FATを題材にしてファイルシステムの仕組みを理解します。最初にファイルシステムの構造について詳しく解説を行い、その後に実際のUSBメモリに書かれた内容をバイナリレベルで解析していくハンズオンを行っていきます。基本的な Linuxの操作ができ、バイナリダンプをひたすら眺めることができれば内容は理解できると思います。
IoTのセキュリティをソフトウェアを分析することから考えよう
IoTシステムは多数のサブシステムをネットワークで繋ぎ合わせることで構成され、必要な機能を随時追加・変更あるいは削除することが可能です。また、それらのサブシステムを構成するソフトウェアにはオープンソースソフトウェアから、OS、データベース、UIやプロトコルのライブラリ、業種固有の専用アプリケーション(クレジットカード処理やデータ可視化、ウェブアプリケーション)を実装するための商用ソフトウェアなど多岐にわたります。これらを管理するための手法はSCA(Software Composition Analysis)と呼ばれ、ソースコード、パッケージ、バイナリーなど流通する形態を問わず解析するためのツールが存在しており、SCAの技術を用いて生成管理されるソフトウェア部品表(Software Bill of Materials/SBOM)は、ソフトウェアのリスク管理の最新手法として世界中で利用が拡大しています。
例えば、直近ではApache Log4jの脆弱性が昨年末に公開されたものの、産業用制御システムや医療システムで用いられるアプリケーションでも利用されていたため、大きな問題に発展しました(現在も対処中のメーカーがあります)が、SBOMを用意することで脆弱性に限らず、ソフトウェア利用の際に、ライセンスや来歴、オリジンなどのリスクを可視化することができます。
講義では、SCAツールを使い、組み込まれているソフトウェアにどのような部品(コンポーネント)が含まれているかを解析し、それらのソフトウェア部品が抱える脆弱性から必要なセキュリティ対策を、JPCERT/CCと共同で作成したガイドを用いて導き出します。
車載ネットワークを流れるCANパケット解析演習
現在の自動車には数十のECU(制御コンピュータ)が搭載されており、CANやLINなどの車載ネットワークで結ばれています。演習では、ECUやCANネットワークで構成される実験用ネットワークを遠隔にある実験室に敷設しておき、インターネット経由で各人のPCからCANにつながるECUをエミュレーションするLinuxノードにアクセスし、CANネットワークに流れているパケットを取得し解析する方法をハンズオン形式で行います。Linuxノードにてパケットを取得し解析するためのPythonを使った簡単なプログラムを作成していきます。また、実車からキャプチャしたメッセージを実験ネットワークに流したり、なりすましデータを作ったり、実験用ネットワークに接続した実車のメータパネルを遠隔から映像として観察しながら、その挙動を確認していきます。
作って学ぶ、Webブラウザ
Webブラウザは私たちとインターネットを繋ぐための身近な存在ですが、大規模すぎるプロダクトがゆえに全貌を理解することは困難です。本講義では、仕様を読み解きながら自分で簡単なブラウザを作ることによって、HTML、CSS、JavaScriptへの理解を深め、Webセキュリティにおけるブラウザの役割について少しでも詳しくなることを目標とします。
マイクロサービス/分散モノリス的アーキテクチャへの攻撃手法
近年クラウドサービスやマイクロサービスアーキテクチャの普及が進むと同時に、それらの攻撃手法もまた研究されており、セキュリティエンジニアの間では関心の強い分野の一つとなっています。本講義は現役のペネトレーションテスターが業務等で得た知見を元に作成しており、クラウドサービスやマイクロサービスアーキテクチャで構築されたWebサービスに対するリアルな攻撃手法をハンズオン形式で学び、習得することを目的としています。
Policy as Code入門
情報セキュリティの分野でも、いままで人が作業していたようなことをソフトウェアの力を使って置き換えるようなエンジニアリングの動きが近年広がっています。その一つとして、組織やチームで定めたポリシーにしたがって判断をしたり、ポリシーに準拠しているかのチェックをコード化によって機械的に実施する「Policy as Code」という考え方があります。この講義では「Policy as Code」がどのような取り組みなのか、具体的にどのようなことができるのかについて実例とともに紹介していきます。また、Policy as Codeの分野で注目されている実装のOpen Policy Agent(OPA)とその記述言語であるRegoについても簡単に紹介し、実際にポリシーをコードで記述するハンズオンまで実施したいと思います。
モダンな開発環境のセキュリティおよびCI/CDパイプラインのセキュア化
この10年で、ソフトウェアを開発する環境は大きく変化してきました。 インフラストラクチャはCloud基盤の利用が増え、ソフトウェアのテストやデプロイの際はCI/CD(継続的インテグレーション/継続的デリバリ)パイプラインを通じてデプロイされるようになりました。また、開発はリモートワークを前提とした、境界防御によらないゼロトラスト環境の社内IT基盤上で行われています。
本講義の前半では、現代のプロダクション環境を攻撃および保護するためにはどのような手法を用いることができるのか、主にマルウェアなどを用いたクライアントサイドへの攻撃や、サプライチェーン攻撃の視点から、総合的に攻撃手法および対策を講義した上で、ハンズオンを行います。
後半では、セキュリティ対策として焦点の当たることの少ないCI/CDパイプラインのセキュア化についてハンズオンを通じて攻撃手法と対策を身に着けていただいた上で、その上で残る課題について解説することを予定しています。
ソフトウェアサプライチェーンセキュリティのこれから
現代のソフトウェアの開発・運用プロセスは多くの人・組織・ソフトウェア資産に立脚するようになってきています。多くの便利な OSS パッケージが 1, 2 回のコマンド実行で手に入り、1 つの YAML ファイルがテストやデプロイの継続的実行を可能にし、便利なソフトウェアを動かすための環境は世界の誰かがコンテナイメージとして公開してくれている、そんな体験をする機会が多くなってきたのではないでしょうか。
しかし、この喜ばしい時代の流れの中で、「一つのソフトウェアを作って届けるという工程に関与する人の数」が爆発的に増加してきているのも事実です。この流れが、ソフトウェアサプライチェーンのセキュリティへの関心を急激に高めています。本講義では専門講義「モダンな開発環境のセキュリティおよびCI/CDパイプラインのセキュア化」で取り扱う内容と連携しながら、ソフトウェアサプライチェーンセキュリティのこれからについて検討します。
実践 Linux コンテナ実行基盤セキュリティ
コンテナ型仮想化技術やコンテナオーケストレーションツールの登場により、Web アプリケーションをはじめとした様々なシステムがコンテナ実行基盤上で実行することは、いまや当たり前になりつつあります。コンテナはサンドボックス技術の一つでもあるため、それを使った開発や運用は安全だと思われますが、適切に対策しないと、アプリケーションだけでなく、隔離されているはずのホストOS自体も攻撃されてしまう可能性があります。
本講義では、そういったセキュリティ上の問題を理解するために、コンテナやその実行基盤に対する攻撃手法やそれらの対策について学びます。また、フルスクラッチでコンテナを作成することで、コンテナを支えている要素技術について学び、コンテナ実行基盤を深く学ぶための素地を身に着けます。
痕跡から手がかりを集める - アーティファクトの分析
サイバー攻撃や内部不正などのインシデントが発覚した際には、適切な対応や再発防止の検討を進めるために、発生原因や影響範囲の特定が重要となります。そのため、一般的には必要なログをあらかじめ取得するように設定をしてシステムを運用しますが、インシデントは想定外の状況で発生することも多く、ログが残っていない、もしくは不十分なことがあります。 このような場合、いわゆるデジタルフォレンジックの技術を活用した調査が拠り所となり、特にアーティファクトと呼ばれるOS/アプリケーションが残す情報(痕跡)が手がかりの1つとなります。 アーティファクトはログとは異なり、人間に解釈しやすい状態では残っていません。意味のある情報として扱うためには、それらの特徴、構造を把握する必要があります。本講義ではこのような断片的な情報を分析するための技術を学び、演習を通じてあるインシデントの解明に取り組みます。
Advanced Linux Kernel Exploit
カーネル空間で動くプログラムのバグは、悪用されると権限昇格に繋がるもっとも重大な脆弱性の1つです。 本講義では、Linuxカーネルが提供するeBPF(Extended Berkeley Packet Filter)と呼ばれる機能の脆弱性を攻撃します。BPFはもともとカーネル空間でパケットフィルタリングする目的で設計されましたが、現在はそれ以外の用途にも用いられており、JIT(Just-in-Time)コンパイラが実装されています。
本講義ではeBPFのJITに隠れたバグを調査します。また、JITのバグをメモリ破壊に繋げる攻撃手法を学び、権限昇格するまでを演習形式で実践します。
前提知識として、ユーザー空間の攻撃手法(ROP等)に関する初歩的なスキルが要求されます。演習をスムーズに進めるため、参加者のみなさんには事前課題でLinuxカーネルエクスプロイトの基礎的な能力を習得してもらいます。
ソースコードから脆弱性を見つけよう
プログラムを実行せずに解析を行う静的解析でソースコードからコンパイルでは見つけることが難しいバグや脆弱性を見つけることができます。プログラミング言語Goでは、標準で静的解析に使用できるパッケージが用意されており、比較的簡単に静的解析ツールを開発できます。本講義では、Goで書かれたソースコードを静的に解析し、脆弱性を見つける方法についてハンズオン形式で学びます。抽象構文木(AST)、型情報、静的単一代入(SSA)形式、ポインタ解析、コントロールフローグラフ、コールグラフなどを用いた解析手法について紹介する予定です。言語によらない汎用的な話題を中心に扱う予定ですが、Go公式におけるセキュリティへの取り組みや今後のリリースに含まれる予定の公式の脆弱性データベースや静的解析ツールについても紹介します。
Real World Malware Analysis: Dissecting Stealthy Vector
この講義では、セキュリティ業界のデファクトスタンダードになりつつあるリバースエンジニアリングツールGhidraをベースとして、実際のAPTマルウェアを題材に、マルウェア解析の基礎から実践的な解析方法まで学びます。
Part1では、マルウェア解析の概要と手法、ツールの使い方など静的解析の基礎部分を学びます。主にサンプルプログラムの解析を通じて、Windowsマルウェアの解析に必要な知識やGhidraの実践的な使用方法などを学びます。
Part2では、APTマルウェアのコードを解析し、マルウェアの機能や利用する暗号アルゴリズムを明らかにします。さらに、スクリプトを用いて、コンフィグの復号やペイロードの取得などを行う応用的な解析技術を学びます。 全体を通して、最終的に実務レベルのマルウェア解析スキルを習得することを目指します。
「Sometimes I dream of saving the world.」
実践 AIシステム Attack&Defense
AIシステムに対する攻撃手法と防御手法を実践形式で学びます。攻撃パートでは受講生の皆さんに攻撃者になりきってもらい、攻撃者の視点で実製品を想定したAIシステムに攻撃を行います。ここでは、標的AIの情報を収集する偵察行為や攻撃、攻撃で得られた情報を基にさらなる攻撃を行うなど、「実践形式でAIに対する攻撃手法・戦略」を学びます。防御パートではシステム運用者になりきってもらい、「実践形式でAIシステム特有の防御手法」を学びます。本講義は機械学習の知識が必要になりますが、充実した事前学習コンテンツを用意いたします。また、本講義は複数回(数日)にわたって開催されますので、初回で攻撃や防御が上手くいかなかった方でも、次回の講義までに講師陣がサポートしますので、安心してご参加ください。
機械学習による検知など近年のフェイクニュースに対する取り組み
近年,フェイクニュースは様々な社会的実害を生み出し大きな社会問題となっている.
今回の講義では,フェイクニュースに対する近年の取り組みを交えつつ,主に研究的側面でフェイクニュースをソーシャルメディアなどのデータからどのように検出しているのかを概説しつつ,どうすれば自動的にフェイクニュースというものの検出や緩和ができるのかをディスカッションを交えて議論を行いたい.さらに,簡単な機械学習モデルを構築を実際のデータを用いて取り組むことを目指す.
AI技術最前線
ここ数年AIに関する研究論文は爆発的に増え続けていて、ビジネスへの活用も急速に進んでいます。
医療、物流、翻訳、そしてセキュリティなど、AIが普及した後の世界について様々な構想が進んでいる反面、特に国内では普及しきれていないのが現状です。
本講義では、AIに関する最先端の技術トレンドとビジネストレンドをお話し、AIが十分普及するために必要なものは何か考えていただきます。そして、「AIとセキュリティのあり方」について深く理解することを目指します。
これからのAIにとってのセキュリティを考える
AIにまつわる話を冒頭30分ほどレクチャーした後、諸問題をいくつか提示しますので、受講生の皆様には検討及び発表をしていただきます。 この講義により、AIに対する様々な課題への解決やその糸口を考えていただく予定です。
暗号解読チャレンジゼミ
暗号では「既存の(理想的には全ての)攻撃手法に対し安全」であることが一つの基準として求められます. このため, 現代暗号において暗号解読は安全な暗号の構築と同時にとても重要な分野として認められています. 本講義は, 「暗号が安全であるとはなにか?」をメインテーマとし, 既存の暗号に対して提案されている解読手法, 特にその理論学習・実装をしながら学んでいきます. アルゴリズムの高速実装から数式のみの理論の世界まで様々な道具・世界を渡り歩きますが, どれも恐れず「解読」していけるようになりましょう.
暗号のままで計算しようゼミ
Cコンパイラゼミ
本ゼミでは、実用的なプログラムをコンパイルできるC言語のコンパイラを開発します。コンパイラを開発するための言語は問いません。そのため、C言語で開発しても良いですし、ご自身の慣れ親しんだ言語を使って開発しても構いません。目標は、C言語で書かれたOSSなどをコンパイルできるCコンパイラを開発し、余裕があればより高度なものへと改造することです。コンパイラの基本的な要素はもちろん、高度なコンパイラ最適化やコンピュータ自体についての理解が進むよう、講師が手助けをします。大会期間前に多くの事前学習が必要となりますが、プログラミング言語やその処理系に関心を持つ皆さんの応募をお待ちしています。
分散型アプリケーション脆弱性解析ゼミ
分散型アプリケーションの脆弱性はときに数百億円規模の資金流出やガバナンスの乗っ取りなど多大な被害をもたらします。このゼミでは、現実に起きてしまった分散型アプリケーションのエクスプロイトを解析し、その理論の理解および攻撃コードの実装を行い、(テスト環境で)実際に攻撃を再現することを通して、安全な分散型アプリケーションの構築技術を学びます。分散型アプリケーションの開発はまだこれからという方も歓迎です。
リバースエンジニアリングゼミ
リバエンゼミではIoT機器を分解、解析してものが動く動作を明らかにするリバースエンジニアリングを中心に行います。実際のIoT機器を分解、解析してどのような仕組みで動くかを明らかにし、可能であれば脆弱性が無いかを検証します。
今後 IoT 製品がどんどん増えていく世の中に向けて、分解しながら物作りのためのアイディアの源泉を得るもよし、徹底的に分解を進めてすべてを明らかにする喜びを全力で満たすもよしの内容となっています。仕組みを知ること、解析することに興味がある方からの応募をぜひお待ちしています。
電子回路・プリント基板を作ろうゼミ
この講義では受講者のみなさまのものづくりや問題解決手段に「電子回路・基板を作る」を加えていただくことを目的に、IoT機器の解析にも利用できるデバッガ基板を作ります。
講義内容は「電子回路とは何か」から始まり、回路図の読み方や部品の種類等を学びつつ、最後には回路図CAD・基板設計アプリ(kicad)を使った基板の設計、発注、及び実装(はんだづけ)を行います。 受講者のみなさまは、この講義を通して「データシートやサンプル回路を読み、理解し、組み合わせ、マイコンや機能ICを使った簡単な電子回路および基板を作る」技術を身に着けられるでしょう。
この講義は「電子回路に興味はあるけど作ったことがない」という方も大歓迎です。
実際に手を動かすものづくりに興味のある方からの応募をお待ちしています。
注意:
基板や部品の発注から納品までには3週間程度の時間がかかるため、この講義は以下の予定で行います。
事前学習期間はスライド枚数300枚程度の資料を約1ヶ月という短い期間に進め、締め切りまでに基板の設計を完了していただく必要があります。 受講を希望される方は、この期間の予定の確認と確保をお願いします。
ハードウェア魔改造ゼミ
本ゼミでは市販の無線ルーターにモーターと履帯(「キャタピラ」とも)を着けてラジコンに変貌させます。その過程で電気回路からHTTPに至るまで全レイヤーに触れるため、コンピューターを構成する技術スタックの全体像をハードやソフトの枠を超えて具体的に知ることができます。電波法令に定められた技術基準適合証明(いわゆる「技適」)への対応も含むため、魔改造にあたって遵守する事柄も同時に理解できます。コードは書けるけど低いレイヤーに触れたことがない・一風変わった技術の学び方に興味がある・見た目に楽しいハードを作ってみたい・改造の具体的手法が知りたい…といった方を主に想定しています。
無線通信ハッキングゼミ
無線通信ハッキングゼミでは、実際の無線通信で使われている技術を学んだ後、SDR(Software Defined Radio)を使用して実際の無線通信を受信し、通信内容の解析を行います。また、無線機を解析したり、実際にリプレイ攻撃などを行って、意図しない動作を起こせるかどうかの検証も行います。
無線通信に興味がある方、ちょっと違うレイヤーのセキュリティを学んでみたい方の応募をお待ちしています。
OS自作ゼミ
データベースゼミ
故障を乗り越えて動くシステムのための分散合意ゼミ
このゼミは,高信頼システムを支える基盤技術である分散システムおよび分散アルゴリズムに焦点を当て,特に「分散合意」と呼ばれる基礎的な技術課題を解決するプロトコルの実装を通し,分散システムの世界を垣間見る機会を持ってもらうことを目的としています. 現代を生きる皆さんにとって,コンピュータシステムは基本的には常時アクセスが可能で,動き続けていてくれるような安心感のあるものになっているかもしれません.しかしながら,コンピュータだって機械ですので,裏で動いているモノは「すでに故障しているもの」か「まだ故障していないもの (いずれ故障するもの)」のどちらかです.なお,ここでいう「故障」には,コンピュータや通信機器の物理的な故障だけではなく,ソフトウェアの不良動作や悪意のある不正動作も含まれます.こうした様々な故障に対応しながらサービスを継続的に提供するシステムを構築する技術は,現代のコンピュータシステムを支える重要な役割を持っています.
本ゼミでは,こうした耐障害性を持つシステム基盤としての分散システムについて,実装を通して理解を深めることを目指します.まずは,共有メモリなどを持たない複数の独立したコンピュータが通信によって協調動作する仕組みを構築してもらおうと考えています.最終目標として,システム全体で同じ計算結果について合意を得る「分散合意」の仕組みを実現し,分散システムの要素技術に触れてもらいます.
学生・生徒の皆さんにとって分散システムや分散アルゴリズムはあまり馴染みのないものかもしれません.分散システムをうまく動かすためには,通信の非同期性や故障モデルの理解など,やや専門性の高い知識が必要な場面もあります.可能な限りわかりやすく構成するつもりですので,一緒にひとつずつ課題をクリアしていきましょう.
分散システムに関する実装経験は問いません. 分散システムそのものに興味がある,あるいは「協調動作」といったキーワードに心が躍る方で,新しいことに挑戦する熱意を持った参加者を歓迎します.
# ゼミ計画
以下に本ゼミで扱う予定のトピックについてキーワードを列挙します.具体的な内容は,準備の都合もありますが,可能な限り参加者の興味に合わせて柔軟に対応していきたいと考えています.
RISC-V CPU自作ゼミ
普段なにげなくCPUをつかってプログラムを実行していますが、このCPUを作ってみたいと思ったことが少なからずあるのではないかと思います。 CPUの自作というと難しそうに感じるかもしれませんが、実はそこまで難しくありません。
特に、近年ではオープンソースの命令セット・アーキテクチャ規格であるRISC-Vの登場により、CPUコアを実装して実際に動作させるハードルがかなり下がっています。
本講義ではRISC-V CPUコアの作成を通じて、CPUの内部構造と動作原理を学びます。
作成するCPUコアは非常に単純なものではありますが、動作原理を理解することによりSpectreやMeltdownといったCPUの動作に関連した脆弱性の理解につながります。
講義の内容としては、RISC-Vの規格で定められる RV32I 命令セットを実装したCPUコアを作成し、FPGA上に実装して動作を確認します。
最終的には、FPGAボードとPCを接続し、FPGAボード上のCPUとPCの間でUARTによる通信を行うことを目標とします。
BGPを実装して学ぶIPルーティング / ネットワークを自動制御して学ぶSDNゼミ
現代社会の多くのサービスはクラウド上に展開されます. クラウドユーザにはシンプルに見えている仮想ネットワークも, その裏側では 非常に複雑な技術の組み合わせによって成り立っています. 例えばLINEの多くのサービスを 動作させているクラウドでは要件にそったネットワークサービスを提供するために, 既存の ルーティングプロトコルを活用するだけでなく, 自らルーティングプロトコル自体の機能を拡張したり, それらを制御するSDN基盤を開発し運用しています. このような次世代ネットワークを推進する現場では 教科書どおりの技術の理解程度ではなく新しい技術のためのシステム設計能力やそれらを 実装して現場に導入するためのプログラミング能力が求められ, それには開発の経験が必要不可欠です. この講義ではこのような次世代ネットワークを支えるルーティングプロトコルやSDNコントローラ をフルスクラッチで実装しながらルーティングプロトコルやSDNに関して学びます. 実際に講義では (1) BGPを実装 (2) SDNコントローラの実装 の2つのレパートリーから どちらかを選択し, 事前学習を含めてseccampの終了時間までにできる限り開発を行います. 受講生のみなさんが更に細かく希望するネットワーク開発のテーマがあればこの限りではありません. 講師の二人は実際にこれまでDPDKやXDPを用いたソフトウェアルータのパケット処理部分から, BGPやIS-ISなどのルーティングプロトコル, SRv6, そしてSDN基盤やより上位層のセキュリティ機能まで 開発してきた経験があり, 全力でみなさんがネットワークソフトウェア開発の沼に ハマっていくのを手助けします. さらに, ただ機能を開発するだけでなく, Network Namespaceや Dockerを活用してこれらの開発を効率化する術も紹介します. 今年の夏は自作BGPと自作SDNに没頭しましょう!
マルウェアサンドボックス強化ゼミ
マルウェアサンドボックスは(以下、サンドボックス)、ファイルを実行した際の挙動を監視し、観測された不審な挙動をもとに、それがマルウェアか否かを判定するシステムです。サンドボックスは、挙動を監視する仕組みと、不審な挙動を定義したシグネチャ(ルール)から主に構成されます。サンドボックスは、有償・無償を問わず数多く存在しますが、OSSの場合は自ら機能を向上させることが容易です。マルウェアサンドボックス強化ゼミでは、OSSのサンドボックス(CuckooおよびCAPE)の実践的なシグネチャの開発を通じて、マルウェアの挙動とその検知手法について深く学びます。本ゼミでは、まずはじめにマルウェアの挙動とサンドボックスの仕組みについて、実際のサンドボックスに触れながら学習します。その後、課題を解きながらシグネチャの開発手法について学び、最終的には各自で不審な挙動を定義し、それを検知するシグネチャをそれぞれ開発します。本ゼミは、マルウェアの動的解析をベースとしているため、リバースエンジニアリング経験者だけでなく、マルウェア解析に興味はあるもののリバースエンジニアリングに苦手意識がある方の参加も歓迎します。
WordPressから学ぶ不正アクセスの検知と対策ゼミ
Webサイトへの攻撃は、報道にも出ている個人情報の漏えいや、アクセスしたユーザへの攻撃などに悪用され深刻な被害が想定されます。また、開発スピードが早く開発者自身がセキュリティを考慮した開発を行えることが望ましいとされています。
本講義ではWordPressの構築や実際の攻撃事例を検証し対策と傾向を分析します。またミドルウェアの設定やWordPressのプラグインを実際に開発することで、攻撃の早期発見や対策などの安全なWebサイトの運営を学びます。
WordPressはWebサイトのオープンソースのCMSであり長年世界一のシェアを占めています。その一方で多くのサイトがWebサイトの改ざんなどの攻撃の被害にあっています。様々な事例を目の当たりにしたWordPressを触ってみて、Webセキュリティの楽しさを体感して頂ければと思います。
ファイルレスマルウェアの仕組みと検知エンジンの開発ゼミ
サイバー攻撃において、ファイルを持たない「ファイルレス」のマルウェアが利用される事例が増えております。本講義ではそれらのマルウェアを検知するためのエンジンを開発していきます。
講義は以下のパートに分かれます。
ジュニア開発ゼミ
ジュニア開発ゼミでは、すでに様々な開発をされているみなさんに、今後の開発に役立つさまざまな基礎的なスキル・知識を身に着けていただくことを目的として講義を行います。
まずは多くのソフトウェア開発の現場で活用されているGit/Dockerについて学び、効率的な開発を行えるようにしましょう。
その後はみなさんが当たり前のように使っている「ネットワーク」、およびネットワークの「セキュリティ」に目を向けます。
PCやスマートフォンをはじめとした機器を使う際に、どのような通信が行われているのかを観察し、あわせて、通信自体の仕組みや、不審な挙動の見つけ方を学びます。
そして、講義で得た知識を活かしながら、みなさんが思い描いているプログラムを作ってみましょう。