セキュリティキャンプ
Youtube
専門コース
A1・A5『ロボットカーで体験するC/C++セキュアコーディング』
自動車のコネクティッド化、CANへアクセスするツールの普及により、自動車に対するハッキングのハードルが下がっています。
設計段階で脆弱性への対処を行うことで攻撃を受けるリスクをある程度低減可能ですが、セキュアコーディングの不備により実装段階で発生する脆弱性があった場合、深刻な被害につながる可能性があります。
本講義では、自動車業界で一般的に利用されるCERT C/C++やMISRA C/C++などのコーディングスタンダードを理解し、Arduinoが搭載されたロボットカーをモデルに実際に手を動かしながら脆弱性を未然に防ぐセキュアコーディングを体験します。
A2『SBOMとシステム情報を元にした IoT機器のセキュリティリスク分析』
IoTシステムは多数のサブシステムをネットワークで繋ぎ合わせることで構成され、必要な機能を随時追加・変更あるいは削除することが可能です。また、それらのサブシステムを構成するソフトウェアにはオープンソースソフトウェアから、OS、データベース、UIやプロトコルのライブラリ、業種固有の専用アプリケーション(クレジットカード処理やデータ可視化、ウェブアプリケーション)を実装するための商用ソフトウェアなど多岐にわたります。これらを管理するための手法はSCA(Software Composition Analysis)と呼ばれ、ソースコード、パッケージ、バイナリーなど流通する形態を問わず解析するためのツールが存在しており、SCAの技術を用いて生成管理されるソフトウェア部品表(Software Bill of Materials/SBOM)は、ソフトウェアのリスク管理の最新手法として世界中で利用が拡大しています。
例えば、直近ではApache Log4jの脆弱性が昨年末に公開されたものの、産業用制御システムや医療システムで用いられるアプリケーションでも利用されていたため、大きな問題に発展しました(現在も対処中のメーカーがあります)が、SBOMを用意することで脆弱性に限らず、ソフトウェア利用の際に、ライセンスや来歴、オリジンなどのリスクを可視化することができます。
講義では、SCAツールを使い、組み込まれているソフトウェアにどのような部品(コンポーネント)が含まれているかを解析し、それらのソフトウェア部品が抱える脆弱性から必要なセキュリティ対策を、JPCERT/CCと共同で作成したガイドを用いて導き出します。
A3『医療情報システムの情報セキュリティについて考える』
医療でもAIや医療機器、ウェアラブルセンサーが普及の兆しをみせています。このようなデータと通信、AIの融合はこれまでに考えられなかった新しいかたちの医療を実現に寄与しえます。一方で、これまで以上に情報システムへの依存が高まることで、情報システムの情報セキュリティの安全性が脅かされることが患者の命にも関わりうることが知られるようになっています。しかし、医療情報システムや医療機器が患者にどのようにつながっているのか、情報セキュリティ上の懸念が具体的にどのように医療に関わっていくのか想像がつきにくいと思われます。そこで、本講では医療機関のバーチャル見学(調整中)を通して、医療機関と医療情報システム、医療機器の実態を理解いただき、セキュリティ上の瑕疵が命に直結しうる経路について具体的に想像できるようにして、受講生がセキュリティと現実社会の関わりに関する具体的なビジョンを持てるようになること、そして社会的に具体的に貢献できるという自負心を持っていただけるようにしたいと思います。
A4『ローレイヤーから見るファイルシステムの理解』
本講義では物理の SDカードと BusPirate を用い、ファイルシステムの理解と SPI を用いた物理機器との通信を体験します。
講義は SDカードに対して直接命令を送り、FAT32フォーマットされた SDカードから内容を読みだすことがゴールになります。
最初にファイルシステムの構造について詳しく解説を行いバイナリエディタと電卓で FAT32 の世界を行き来できるようになった後、
SDカードに対して具体的に命令を送出して、物理カードからファイルコンテンツを読み出すところまでを全員で一緒に体験します。
手厚くサポートを掛けますので、基本的な Linuxの操作ができてバイナリダンプをひたすら眺めることが苦でないのであれば、楽しく体験することが出来ると思います。
A6『チップレベルでカスタマイズができることで見える世界の体験』
集積回路(LSI)はコンピュータのCPUをはじめ、あらゆる電子機器の基本パーツで、その進化はコンピュータの進化と表裏一体です。その進化の結果、あまりに高度化、複雑化したLSIはブラックボックスとなり、中身を知らなくても多くのことができるようになりました。しかしそのことは、以前あったCPUの根本的な脆弱性「MeltDown」のような深刻な問題の遠因ともなりえます。 この講義では、LSIを設計することに立ち返り、その視点からコンピュータというものを改めて見つめ直すことを目指しています。 具体的には、論理ゲートレベルの単純なものから、徐々にARMやRISC-V等の複雑なLSIを、それぞれにあった手法で設計しながら、その仕組み、その可能性を体験します。そしてそれを通してコンピュータというものに対する新たな視点を得ることを目標とします。
A7『車載ネットワークを流れるCANパケット解析演習』
現在の自動車には数十のECU(制御コンピュータ)が搭載されており、CANやLINまた最近だとEthernetなどの車載ネットワークで相互に結ばれています。演習では、ECUやCANネットワークで構成される実習用ネットワークとLinuxノードを教室に設置し、CANにつながるECUをエミュレーションするLinuxノードに各人のPCからアクセスし、CANネットワークに流れているパケットを取得し解析する方法をPythonを使った簡単なプログラムを作成しながらハンズオン形式で解説します。また、実車からキャプチャしたパケットを実習用ネットワークに流して解析したり、なりすましデータを作って実車のメータパネルやハンドルの動きを観察したりすることで、車載ネットワークの挙動を理解していきます。
B1『Webプロダクトセキュリティへのいざない』
Webセキュリティクラスとしては1コマ目となる本講義では、Webプロダクトセキュリティや、よりマクロなプロダクトセキュリティの概観を捉えることで、5日間で学ぶ要素技術の関連性を大まかに理解していただきます。その後は5日間、同じクラスの受講生間でいい刺激が発生するよう、アイスブレークとしての事前課題の成果発表と、全講義共通で求められる知識・技術に関する技術的なコラボレーションの機会を持つ予定です。
B2『開発プロセスを攻撃者の視点で捉える』
本講義では、攻撃者の思考・感情・判断基準に関する深い理解を受講者に与えることにより、ベストプラクティスの確立されていない領域においても攻撃者目線で脅威分析を行い、自らセキュリティ対策を立案できる人材の育成を目指します。
【前半(講師:白石)】攻撃者の視点を知る(2時間)
架空の組織に対して行われるサイバー攻撃の一連のプロセスを解説することにより、受講生が攻撃者の視点で物事を評価するスキルを身に着けることを支援します。
セキュリティエンジニアを目指す人にとって、単体のセキュリティ技術あるいはトレンドとなる攻撃技術について学ぶ機会は多くあり、良質なコンテンツに個人が自由にアクセスできる時代になりました。しかし、個々のセキュリティ技術や攻撃手法を理解することと、攻撃者の思考や感情を理解することには大きな違いがあります。ほとんどの人にとって、現実世界に対してサイバー攻撃を実施し、攻撃者の見る世界を肌で感じる機会はごく限られています。
本講義は、講師が従事するサイバー攻撃シミュレーションサービス「レッドチーム演習」での経験に基づいています。業種やIT環境の異なる多様な組織に対するサイバー攻撃シミュレーションの経験を元に、Windows/macOS/クラウド/AV・EDR/マルウェア/MFA/物理侵入/ソーシャルエンジニアリングなど多様な切り口から、組織に対するサイバー攻撃がどのように行われていくのかを解説します。その目的は、研究やリサーチだけでは得られない、実体験に基づくナレッジを可能な限り共有することにより、攻撃者の思考、感情、判断基準、マインドセットを受講者に理解してもらうことです。
本講義を通じて、開発するプロダクトやそこで利用するテクノロジに関わらず、あらゆる環境に適用可能な「攻撃者が何を狙うかを自ら考える力」を体得することにより、広くITに関わるすべての受講者に、セキュリティを意識した業務を行なうための地図を提供することを目指します。
【後半(講師:末澤)】攻撃者の視点を対策に活かす(2時間)
前半で学んだ攻撃者の考え方をどのように対策として活かせるかを、実際に脅威分析や対策(防御・監視)を行う立場から解説します。
セキュリティ業界では、様々な対策方法・ベストプラクティス・フレームワークが提唱されていますが、攻撃者の視点から見ることで足りないポイントを見つけることが出来ますし、そもそも未成熟な領域も多く残っています。
講師は、この10年で普及してきた"ゼロトラスト"、"CI/CD"、 "クラウド"などを用いる、成熟したベストプラクティスの確立していないようなIT環境・プロダクション環境で働いてきました。
本講義では、そういった未成熟な環境における開発プロセスに対して攻撃者の視点を適用することで、どういった攻撃が可能であり何がセキュリティ対策になるのか、脅威分析および攻撃・対策をハンズオン形式で実践しながら、現状の限界も含めて理解していきます。最終的に、受講者が企業や今後の世の中をセキュアにしていくための力を身につけることを目指します。
B3『クラウドネイティブセキュリティの実践と戦略』
本講義では、コンテナ型仮想化やクラウド環境などのインフラセキュリティに関する考え方や知識の習得を目的としています。
Linux コンテナや、その実行基盤である Kubernetes などの仕組みについて学び、そのセキュリティについても学んでいきます。また、実際の運用を見据えたセキュリティとして、それらの環境における予防的統制(防御)と発見的統制(検知)の考え方を学び、実装してもらいます。IaC の解析やカスタムコントローラー、eBPF によるモニタリングなどについて紹介する予定です。
B4『Webサービスにおける安全な認証とID連携の実装』
本講義では、Webサービスにおける認証とID連携の技術と実装について学びます。
SMSやメールを利用したパスワードレス認証や端末を利用したFIDOによる認証などが普及し始め、従来のパスワードによる認証が置き換わりつつあります。
また、サービスごとに認証システムを自独実装しなくともID連携技術を用いたソーシャルログインによってユーザーのID管理の負担を減らすこともできるようになってきています。それらのID技術を取り巻く状況に加えて、FIDO、WebAuthn、Passkeyといった最新の認証技術や、多くのサービスで普及しているOpenID Connect(OAuth 2.0)のID連携技術をご紹介します。
また、座学に加えてハンズオン形式で実際にWebアプリケーションのプログラムに触れながら認証・認可技術の実装の注意点やセキュリティー対策についての解説を行います。(実装する技術やプログラミング言語についての詳細は後日公開)
B5『適応し続けるプロダクトとセキュリティ』
プロダクトを通じて価値を提供することは、複数のステークホルダーが絡む不確実性に向き合うことを意味します。
不確実性は、内的・外的に関わらず絶え間なく変化し続け、その変化の幅・スピードはあがるばかりです。
また、マルチプロダクトから始まる新興プロダクトも近年では見られるようになってきています。
プロダクトを支えるにあたって、プロダクトにおける情報セキュリティも原則に従いつつ、常に最善手を変化させていく必要があります。
本講義では、プロダクトの価値を確保するにあたって取り組むべき要素や、変化し続けるにあたってみるべき姿勢・指標をハンズオン等で提供したいと思います。
B6『ソースコード解析によるWebアプリケーションの脆弱性調査』
脆弱性を見つける上で、ソースコード解析のスキルがあれば実装を理解したうえで効率的な脆弱性調査が可能です。
また、脆弱性の原因となった実装について分析することで、開発時にそのような脆弱性を作り込まないよう活かすことが可能です。
本講義では手動のソースコード解析に加えて、CodeQL等の静的解析ツールをOSSのWebアプリケーションに用いることで、脆弱性の検出を効率的に行う方法をハンズオン形式で学びます。
B7『Policy as Code入門』
情報セキュリティの分野でも、いままで人が作業していたようなことをソフトウェアの力を使って置き換えるようなエンジニアリングの動きが近年広がっています。その一つとして、組織やチームで定めたポリシーにしたがって判断をしたり、ポリシーに準拠しているかのチェックをコード化によって機械的に実施する「Policy as Code」という考え方があります。この講義では「Policy as Code」がどのような取り組みなのか、具体的にどのようなことができるのかについて実例とともに紹介していきます。また、Policy as Codeの分野で注目されている実装のOpen Policy Agent(OPA)とその記述言語であるRegoについても簡単に紹介し、実際にポリシーをコードで記述するハンズオンまで実施したいと思います。
C1・C5『トリアージ技術を活用したバグ・脆弱性情報の分類および解析の自動化』
ソフトウェアのサービスを公開する前に、開発者がすべてのバグや脆弱性を発見・修正することは困難です。そのため、多くのサービスでは、顧客から自動的にクラッシュの報告を収集し、それを基にサービスを公開した後にバグや脆弱性を修正しています。顧客体験やセキュリティレベルの低下を抑えるためには、顧客に大きな影響を与えるバグや脆弱性を特定し、優先度の高いものから迅速に修正することが重要です。しかし、大規模なサービスでは、毎日数百万件の報告を受け取ることがあり、開発者がそれらを手動で確認することは不可能です。この問題を解決するために、自動化された様々なトリアージ技術が提案されています。
トリアージはクラッシュ原因となる入力を分析し、報告するプロセスです。トリアージは一般に以下のようなプロセスで構成されます:
- クラス分類:同じバグや脆弱性に属するクラッシュの報告をクラスに分けます。
- 根本原因解析:分類された各クラスの代表ケースを解析して、そのバグや脆弱性を引き起こす原因を分析します。
- 優先順位付け:顧客への影響度(クラス分類に基づく各クラスの報告数)やセキュリティ上の脅威度(根本原因解析に基づく脆弱性の悪用可能性)から、各クラスを修正する優先度を決定します。
このようなプロセスにより、開発者が確認すべき報告の数が減り、適切な順序でバグや脆弱性を修正するためのパッチを作成することができるようになります。
本講義では、実世界で使われているトリアージ手法から、研究レベルの最先端な手法まで、様々な手法を幅広く学びます。また、いくつかの手法を実装し、トリアージが適切にできる事例やできない事例を体験します。最終的に、トリアージ技術の全体像を理解し、実務レベルでトリアージ手法を扱えるようになることを目指します。
C2『手を動かして理解する Linux Kernel Exploit』
Linux Kernelは私達が日常的に利用するプログラムの中で最も身近で大規模なものの一つです。カーネルにおけるバグは高い技術力を持った攻撃者に悪用されることで権限昇格等の重大なリスクに繋がる可能性を持っています。本講義ではCTF-likeな問題を題材としてカーネル領域で動くプログラムの脆弱性を扱い、演習形式で実際に攻撃を行います。演習はLinux Kernelに対する攻撃手法・脆弱性のRoot Causeの特定・カーネルの解析手法等を手を動かして経験・理解し、キャンプ後に自主的に学習を継続できる力を身につけることを目的としています。
Kernel Exploitには、攻撃を通してLinuxやその周辺技術に対する理解を加速させる働きがあります。また、カーネル内の複数の要素をコントロールして権限昇格を行う過程は純粋なパズル的面白さを含んでいます。実際に手を動かしながらの試行錯誤を介して、これらの楽しさを経験していただきます。
講義で扱う内容の詳細・難易度は、参加者の決定後皆さんの経験とスキルをもとに調整します。
現段階では、ユーザランドの基本的なExploitの知識とスキル・x64アーキテクチャの基礎的知識・C製大規模プログラムのコードリーディングやGDBを用いたデバッグスキルがあることを想定しています。但し、ユーザランドにおけるこれらの前提知識・スキルは事前課題で扱う予定のため、現段階で持ち合わせている必要はありません。
C3『脅威・攻撃手法を読み解こう:脅威インテリジェンスの活用・作成技法』
高度な攻撃グループが行う攻撃を未然に防いだり、類似した攻撃を受けないようにするためには、攻撃グループや攻撃手法について様々な情報を収集・分析し、予防・検知に役立てる技術「脅威インテリジェンス」が重要となります。また、分析・作成した脅威インテリジェンスを組織内外に共有することにより、早期警戒を促すことも可能です。
一方、攻撃手法の分析といえば、マルウェア解析、脆弱性分析、フォレンジック分析などが思い浮かぶかもしれませんが、ここから得られた情報をどのように予防・検知に役立てていくべきでしょうか?本講義では、マルウェア解析・フォレンジック分析などで判明した情報を前提として、MITRE ATT&CKフレームワークなどを活用し、攻撃グループが利用した攻撃手法を分析し、攻撃者の攻撃プロセスを理解するとともに、予防・検知に役立つIOC(Indicator of Compromise)の作成技法、脅威ハンティング(Threat Hunting)や侵入テストへの応用、対策手法の検討などについて取り組みます。
C4『ポートスキャナ自作から始めるペネトレーションテスト入門〜Linux環境で学ぶ攻撃者の思考〜 』
脆弱性診断やペネトレーションテストで使われる技術のひとつにポートスキャンがあります。 セキュリティエンジニアがネットワークやインフラに対するネットワーク診断やペネトレーションテストを行う際には最初にポートスキャンを行います。 開いているポートがあれば、何かおもしろい情報が返ってこないか確認し、古いミドルウェアが動いていることがわかれば、脆弱性情報を調べて攻撃を試行します。
本講義では、ポートスキャナを自作し、動作原理について理解を深めた後、Dockerコンテナで構成されたLinux環境に対して演習を行い、脆弱性の発見/攻撃手法、端末に侵入後の攻撃者の思考について学びます。侵入後の攻撃者の活動のことを広義にPost-Exploitationと呼びます。
パケットを自由に操作できるようになっておくことや、PoC(Proof of Concept)のコードを素早く実装できることは、ペンテストに必要なスキルです。
例えば、Nmapに実装されていない特殊なプロトコルで通信するソフトウェアの脆弱性を調査したい場合は、プロトコルの仕様に従ったパケットで通信するためのツールを自作する必要があります。このような理由から本講義では、ポートスキャナの自作を行います。
攻撃者の思考を知ることは、マルウェア解析や通信監視業務に従事している人たちも含め、すべてのセキュリティエンジニアが知っておくべき内容であり、 セキュリティエンジニアを目指す初学者にとっても必要不可欠な知識です。 また、セキュリティエンジニアのみならず開発者にとっても大切です。 開発者は日々発見される、OSやライブラリなどの大量の脆弱性の対応を日常的に迫られていますが、 攻撃者の思考を分かっていなければ、何が脅威なのか分からず脆弱性のリスクレベルを評価できません。 脆弱性診断やペネトレーションテストに従事している講師が攻撃手法を解説し、攻撃者側の思考プロセスや、攻撃されないようにするにはどうすればいいのかといった防御側の手法までを解説します。
※本講義では、リバースエンジニアリングは行いません。
C6『 Malware Analysis Crash Course for Against the Cyber War』
現代社会において、サイバー空間は新たな戦場となっている。従来の戦争においては、陸、海、空、宇宙が戦場とされてきたが、ネットが星を被い、高度に情報化された現代ではインターネットやネットワーク上での攻撃や諜報活動が重要になっている。2022年に発生したロシアのウクライナ侵攻では、現実世界の侵攻に合わせてサイバー攻撃が実施された。この講義では、マルウェア解析の基礎から最新のテクニックまでを習得し、サイバー戦争の最前線で対抗するスキルを身につけます。
講義ではまず、サイバー戦争の概要と最新事例、マルウェアの機能と解析方法、脅威アクターと攻撃の目的など基礎概論を学びます。その後、Ghidraの使い方を学びながら、マルウェア解析の基礎技術を習得します。
最終的には、現実世界のサイバー戦争で脅威となったマルウェアを解析して、高度なマルウェアのテクニックや解析手法を理解します。
C7『Event Reconstruction in Digital Forensics』
サイバー攻撃や内部不正などのインシデントへの対応において、デジタルフォレンジックが必要となることがあります。特に被害が深刻なケースにおいて原因や被害状況を明らかにすることを目的として実施しますが、その際に求められる手法や技術は様々です。
本講義では、デジタルフォレンジックの要素技術であるイベント再構築の各種手法に焦点を当て、コンピュータに記録されているデータからいかに意味のある情報を抽出し、インシデントの解明に役立てられるかを学びます。
D1・D3・D6『実践 AIシステム Attack&Defense』
本講義では、「AIシステムに対する攻撃手法と防御手法」を実践形式で学びます。
攻撃パートでは受講生の皆さんに攻撃者になりきってもらい、攻撃者の視点で実製品を想定したAIシステムに攻撃を行います。ここでは、標的AIの情報を収集する偵察行為や攻撃、攻撃で得られた情報を基にさらなる攻撃を行うなど、「実践形式でAIに対する攻撃手法・戦略」を学びます。防御パートではシステム運用者になりきってもらい、「実践形式でAIシステム特有の防御手法」を学びます。
本講義は機械学習の知識が必要になりますが、充実した事前学習コンテンツを用意いたします。
また、本講義は複数回(数日)にわたって開催されますが、初回で攻撃や防御が上手くいかなかった方でも、次回の講義までに講師陣がサポートしますので、安心してご参加ください。
D2『これからのAIにとってのセキュリティを考える 2023』
本講義では、凄まじい勢いで進化し続けるAIとの「付き合い方」を法律や倫理の観点から考えます。
AIにまつわるトピックを冒頭30分ほどレクチャーした後、諸問題をいくつか提示しますので、受講生の皆様には検討及び発表をしていただきます。
この講義により、AIに関わる様々な課題への解決策やその糸口を考えていただく予定です。
D4・D7『AIが作った文章を見分けろ!ワークショップ』
本講義では、「AIが生成した文章を見分ける」アイデアをワークショップ形式で議論します。
生成系AI(Generative AI)の隆盛により、誰でも簡単に高精細な画像や人間が書いたのと見紛うほどの”まことしやかな文章”を高速・大量に生成できるようになりました。このようなAIは社会にとって有用である一方で、悪意を持って使うと他人を貶める画像(DeepFake)や、偽情報(Disinformation)の拡散等に悪用される例もあります。AI時代を生きる私たちにとって、目の前にある画像や文章が真実なのか見極める”目”を養う必要があります。
本講義では、AIが生成する「文章」に着目し、見分けるアイデアを披露または実装し、議論します。
D5『AI技術最前線 2023』
本講義では、AIに関する最先端のトレンドを学びます。
ここ数年AIに関する研究論文は爆発的に増え続けていて、ビジネスへの活用も急速に進んでいます。
医療、物流、翻訳、そしてセキュリティなど、AIが普及した後の世界について様々な構想が進んでいる反面、特に国内では普及しきれていないのが現状です。
本講義ではAIに関する最先端の技術トレンドとビジネストレンドをお話しし、AIが十分普及するために必要なものは何か考えていただきます。そして、「AIとセキュリティのあり方」について深く理解することを目指します。
開発コース
L1『暗号化通信ゼミ』
セキュリティを学び始める際, 必ずどこかでSSL/TLSという用語を耳にすることと思います. この用語は暗号化通信の方法の一つを表すもので, TLSは2023年時点のネットワーク・セキュリティに欠かせない基盤技術です. 本ゼミで学ぶのはこのような暗号化通信にまつわる技術であり, 特に実装を通じてこれを学びます.
暗号化通信において, 「プロトコル」「プリミティブ」の2観点は安全性を推し量る基準観点の基本です. プリミティブは暗号そのもの(AESやECDSA, RSA等が著名ですね)であり, プロトコルはその使い方・通信の手順です. どちらも安全性に深く影響します.
本当はプロトコル・プリミティブを両方同時に学べれば良いのですが, しかしそれには量が多すぎます. このため, 本ゼミではそのうち片方を選択する形となっています. そして講義の中で「自分でもう片方を埋められる力」を身につけて頂ければと考えています.
また, 本ゼミでは2コースに共通して「原典を読めること」を重要な目標とします. 簡単な要約は世の中枚挙にいとまがありませんが, ことセキュリティの文脈においては妥協・要約では済まされません. ゼロからの自作を目指す場合にも原典は必須です. このための基礎体力を養うこと, それが「原典を読めること」の意義です.
暗号技術は理論から実装まで幅広くまたがった横断的な分野です. 暗号化通信もそのほんの一部ですが, しかし尻込みする必要はありません. 喩えて言うなら, 我々は船の材料を一隻分提供し, 加えて船の造り方と操舵法, 海図の読み書きまでの全てを提供します. 皆さんに用意していただきたいのは, 船を造り乗りこなすための多少のプログラミングの知識と, 「あの島を目指すのだ」という知的好奇心だけです. 本ゼミを卒業した後には, 暗号技術のみならず情報セキュリティ, はては情報技術の海全体で開拓劇を繰り広げることを期待します.
【プロトコルコース】
「プロトコルコース」は今年から新しく作られたコースです. 暗号プロトコルの実装を通して, 暗号技術は現実世界でどのように利用されているのかを見ていこう!というのが本コースの目的です. 情報を秘密にするだけが暗号ではありません. 鍵管理や認証にも暗号技術が使われています. 暗号化通信では, 機密性と認証の両方を維持しないと, 本当の意味で”暗号化”したことにはなりません。
暗号技術を正しく理解し, 暗号プロトコルに組み込むことができ, その上で安全性の評価もできる. そんな暗号プロトコルに通じた人材を目標として, 学んでいきます。
実装するプロトコルはTLS 1.3を中心としたものを想定していますが, それ以外でも問題ありません。自分の興味がある暗号プロトコルでの応募をお待ちしております.
【プリミティブコース】
暗号の安全性は常に解読手法と隣り合わせです. 昨年まで実施されていた「暗号解読チャレンジゼミ」はこの点を特に強調し, 暗号における解読手法を軸としたゼミを実施していました.
しかしながら, プリミティブに偏ったゼミになっていたことは否定できません. 今回設定されたこの「プリミティブコース」はその流れを汲みますが, 特に「暗号プリミティブはどのように使われるのか」という視点をより重視するようになります.
プリミティブの構成・解読はいわば研究者の目線に近く, 「その実装が安全に使われるための条件は何か」「可能な限り少ない仮定で, 便利かつ安全に使われるためにはどうすればいいのか」といった視点はそこにありません. 本コースは, プロトコルコースと協調しながらこれらを学んでいきます.
ゼミで学ぶ対象となる暗号プリミティブは, 受講決定の後, 応募課題での選択肢等をもとに相談して決定します. 特に興味のあるプリミティブが存在するのであれば, 応募課題の時点でお知らせいただいても構いません.
L2『暗号のままで計算しようゼミ』
「暗号のままで計算ができる」のが準同型暗号です。このゼミではその中でも「任意の回数論理演算ができる」TFHEという暗号を実装します。このゼミは、「準同型暗号の応用」よりも、「準同型暗号そのものを構成するにはどうしたらよいか?」という「暗号学の理論とその実装」を軸としたゼミです。本ゼミでは「暗号のままで計算ができる」ということを目指しますので、準同型暗号の「暗号としての安全性や攻撃法」はあまり扱いません。 進め方としては、まず暗号を数式として考え、それをプログラムに落とし込むということを繰り返して進めます。ですので、数学へ忌避感がないことが望ましく、初等的なベクトルと確率がわかっているとベターです。
TFHEは恐らくみなさんが考えるよりは簡潔で、数学として美しく、エンジニアリングとしても高速化や応用の余地があって楽しいものです。 準同型暗号は今も新しい研究成果が次々に出ています。今年は整数演算の評価も扱えれば良いと思っています。皆さんのやる気次第ではこのゼミの内容が学術的未踏領域に入ることもありえるでしょう。誰もやったことのないことに挑戦する意志のある人を期待しています。
過去3年度分のスライド
L3『Cコンパイラゼミ』
普段何気なく書いているプログラミング言語というものが、いったいどうやって実装されているのか、気になったことがある人も多いでしょう。プログラムを書く人であればコンパイラはそれなりに身近な存在かと思いますが、コンパイラが内部で何をしているのか、どのようにできているのかという点に目を向けてみたらますます面白いと思いませんか?
本ゼミでは、C言語のソースコードを受け取って対応するアセンブリを出力する「Cコンパイラ」をゼロから自作します。自分の力でゼロからCコンパイラを作り上げていくことで、身近で遠い存在だったコンパイラの中身がどんどんと明らかになり、C言語の仕様やアセンブリの知識も自然と身についていきます。
コンパイラなどという複雑怪奇で大きなソフトウェアを作るなんて大変そうだと思うかもしれませんし、実際簡単なことではありません。ですが、最初は極限まで小規模なものから始め、そこから少しずつ機能を増やしていくので、実装・テスト・デバッグの繰り返しを続けるうちにどんどんコンパイルできるコードが増えていきます。あっという間に書いている本人よりもコンパイラの方が賢くなっていって驚くことでしょう。その過程を十全に楽しめるよう、大会期間前には多めに事前学習期間を設けてじっくりと開発できるようにします。実装のためのテクニックやC言語のややこしい仕様に関するフォロー、豊富なテストの提供やデバッグなどといった様々な面で講師陣がサポートしていきますので、ご安心ください。
C言語は長年にわたって多岐にわたる使われ方をしてきた言語ですから、Cコンパイラを自作することにより様々な目標を狙うことができます。たとえば、自作コンパイラのソースコードを自作コンパイラ自身でコンパイルする「セルフホスト」。自分のコードのバグが予測外の箇所に悪影響を及ぼし、頭を抱えながらバグを探す経験は、セルフホスト以外ではなかなか味わえない醍醐味と言えるでしょう。他にも、既存のOSSの大きなコードを動かすことを目標としても面白いでしょう。そんなのをコンパイルできるほど完成度を上げるなんて気が遠くなると思うかもしれませんが、穴だらけの自作コンパイラであっても実は既存資産が結構読めたり動かせたりします。他人の書いた実用的なコードをコンパイルする過程で自分の実装の思わぬミスを見つけることができるため、何を動かせて何をまだ動かせないか調べていくことでコンパイラがどんどん磨かれていきます。
もちろん、これらの目標を達成できるコンパイラを作るには、それなりに多くの構文や仕様に対応する必要がありますし、出力される大量のアセンブリをかき分けてデバッグする必要もあり、決して簡単な道筋ではありません。しかしながら、このゼミを通じて、低レイヤと高レイヤの橋渡しをするための共通言語としての地位を確立している言語である C 言語と必ずや真剣に向き合うことができるでしょう。皆さんが今後どのような道を進むのかは我々には知るよしもありませんが、そのような経験は、今後いかなる方面でセキュリティや低レイヤに触れようとも必ず役立つものとなると信じております。皆さんの応募、お待ちしております。
L4『分散型アプリケーション脆弱性解析ゼミ』
分散型アプリケーションの脆弱性は、ときに多額の資金流出やガバナンスの乗っ取りなど甚大な被害をもたらします。2022年だけでも約5000億円に相当する資産が攻撃により失われたと報告されています。このゼミでは、現実世界で起こった分散型アプリケーションのエクスプロイトを解析し、その理論の理解および攻撃コードの実装を行い、(テスト環境で)実際に攻撃を再現することを通して、安全な分散型アプリケーションの構築技術を学びます。
詳細(昨年の内容等)
L5『TEEの活用と攻撃実践ゼミ』
あるデータをマシン内外の脅威から厳密に保護しながらそのデータを用いた処理を行うという試みは、一昔前までは実現が不可能であるか、実現するにしても外部から遮断された隔離部屋での缶詰作業のような、極めて非効率な手法に依存する必要がありました。
しかしながら、最近では技術の発展も相まって、この問題を解決する様々な技術が提案されてきています。中でも、データを保護しながら計算や分析を行う「秘密計算」やそれに関連する要素技術(準同型暗号、秘密分散など)の発展には目覚ましいものがあります。
そんな中、近年頭角を現しつつある比較的新しい技術に「TEE(Trusted Execution Environment; 信頼可能な実行環境)」というものがあります。
TEEとは、ハードウェア(多くの場合CPU)の機能でRAM上に(ユーザが動作定義を実装可能な)保護領域を生成し、秘密情報をその保護領域と安全なCPUパッケージ内でのみ取り扱い処理を進める事で、上記のようなデータを保護しながらの処理を実現する技術です。
TEEには、秘密計算に利用されるような関連技術、即ち準同型暗号や秘密分散と比較してみても計算コストが小さめで効率的であり、その上で高度な安全性を提供できるというメリットがあります。
一方で、ハードウェアに依存する以上ベンダを信頼する必要がある、サイドチャネル攻撃にはデフォルトでは脆弱といった独特な性質などにより、特に準同型暗号には相対的に安全面で劣ります。
殊に、TEEの代表的な実例である「Intel SGX(Software Guard Extensions)」は、そういったTEEの性質や、CPU及びSGX自身の抱える脆弱性を突かれ、おびただしい数の攻撃の餌食となっています。
本講義では、TEEの基本的な背景をご紹介した後、特にIntel SGXを用いた開発を実践的に行います。
SGXを用いた基礎的なプログラミングから、最終的にはSGXを利用した鍵管理ソフトウェア等の開発を行う事で、現代の情報技術における安全性と速度のトレードオフの最適解の1つである「TEE」という技術の魅力に迫ります。
一方で、本講義ではTEE特有の性質やSGXに対する攻撃についても実践的に体験し、TEEが決して秘密計算実現の上でのワイルドカードではない事を確かめます。
SGXに対する攻撃には、Controlled-Channel Attacks、Sealing Replay Attack、Foreshadow、Plundervolt、LVI、ÆPIC Leakなど、名だたる高度かつ難しい攻撃が無尽蔵に存在しますが、あくまでもゼミ内で取り扱える範囲に簡略化して実践していきます。
本ゼミを通して、TEEといういい意味でも悪い意味でも混沌としたからくり屋敷の魅力に迫っていきましょう。
X1『リバースエンジニアリングゼミ』
リバエンゼミではIoT機器を分解、解析してものが動く動作を明らかにするリバースエンジニアリングを中心に行います。
また実際のIoT機器を分解、解析してどのような仕組みで動くかを明らかにし、可能であれば脆弱性が無いかを検証します。
今後 IoT 製品がどんどん増えていく世の中に向けて、分解しながら物作りのためのアイディアの源泉を得るもよし、徹底的に分解を進めてすべてを明らかにする喜びを全力で満たすもよしの内容となっています。仕組みを知ること、解析することに興味がある方からの応募をぜひお待ちしています。
X2『電子回路・プリント基板を作ろうゼミ』
本講義では受講者のみなさまに「電子回路・基板を作る」選択肢を加えていただくことを目的として、みなさまと一緒にIoT機器の解析にも利用できるマイコンを使ったデバッガー基板を作ります。
講義は「電子回路とは何か」という初歩から始め、回路図の読み方や部品の種類等を紹介しつつ、最後には回路図CAD・基板設計アプリ(kicad)を使った基板の設計、発注、および実装(はんだづけ)を行います。
この講義を受けることで、日常の小さな「困った」を電子回路の知識や基板設計技術を用いて解決できるようになるでしょう。
この講義は「電子回路に興味はあるけど作ったことがない」という方も大歓迎です。
実際に手を動かすものづくりに興味のあるみなさまからの応募をお待ちしています。
【受講を考えていただいている方へのお願い】
基板の製造や部品発注を行う都合上、講義内容のほとんどを事前学習期間内に行う必要があります。
そのため、受講を希望される方は以下の期間の予定の確認と確保をお願いします。
(学業優先のため、テスト期間等はそちらを優先してください)
講義予定
・キャンプ参加(6月初旬)〜 6月末: 事前学習
・配布資料を用いた自習(随時質問可)
・最低週1度程度のオンラインもくもく会(進捗に応じて増減)
・7月1日〜7月16日: 回路および基板設計
・オンラインもくもく会
(例年締切に近づくにつれてもくもく会の時間が伸びる傾向にあります)
・毎日平日夜に1時間以上
・毎週休日どちらか半日
・7月17日: 基板発注締め切り & 発注
・8月7日〜8月11日(開催期間): 会場にて基板実装
X3『ハードウェア魔改造ゼミ』
本ゼミでは市販の無線ルーターにモーターと履帯(「キャタピラ」とも)を着けてラジコンに変貌させます。その過程で電気回路からHTTPに至るまで全レイヤーに触れるため、コンピューターを構成する技術スタックの全体像をハードやソフトの枠を超えて具体的に知ることができます。電波法令に定められた技術基準適合証明(いわゆる「技適」)への対応も含むため、魔改造にあたって遵守する事柄も同時に理解できます。コードは書けるけど低いレイヤーに触れたことがない・一風変わった技術の学び方に興味がある・見た目に楽しいハードを作ってみたい・改造の具体的手法が知りたい…といった方を主に想定しています。
X4『無線通信ハッキングゼミ』
無線通信ハッキングゼミでは、実際の無線通信で使われている技術を学んだ後、SDR(Software Defined Radio)を使用して実際の無線通信を受信し、通信内容の解析を行います。また、無線機を解析したり、実際にジャミングやリプレイ攻撃などを行って、意図しない動作を起こせるかどうかの検証も行います。
無線通信に興味がある方、ちょっと違うレイヤーのセキュリティを学んでみたい方の応募をお待ちしています。
Y1『OS自作ゼミ』
「OSを作ってみたい、でも自分には難しそう」と思った事はありませんか?確かに、よく使われているOSは巨大で、長い歳月をかけ、多くの人の手によって作られています。しかし、OSは個人でも思ったより簡単に書けるものなんです。この「OS自作ゼミ」では、さまざまなアーキテクチャ(x86_64, ARM64, RISC-V)のOS作りに詳しい2人の講師がみなさんのOS作りをサポートします。既に自分でOSを作っている方はもちろん、このゼミをきっかけに作り始めようとする方も、チャレンジ精神さえあれば幅広く対応します。また、講師がそれぞれ作っているOSを改造するというアイディアも大歓迎です!
このゼミでは、みなさんの興味に応じて、OSのつくりかたを教えます。必要に応じて、コードの書き方、仕様書や研究論文の読み方なども手ほどきします。この講義を通じて得られる低レイヤの確かな知識は、高性能でセキュアなソフトウエアを開発する際にも大いに役立つでしょう。
より詳しい説明については、osdev-jpサイトをご覧ください。多くの皆さんのご応募をお待ちしています!
osdev-jpサイト
Y2『RISC-V CPU自作ゼミ』
普段なにげなくCPUをつかってプログラムを実行していますが、このCPUを作ってみたいと思ったことが少なからずあるのではないかと思います。 CPUの自作というと難しそうに感じるかもしれませんが、実はそこまで難しくありません。
特に、近年ではオープンソースの命令セット・アーキテクチャ規格であるRISC-Vの登場により、CPUコアを実装して実際に動作させるハードルがかなり下がっています。
本講義ではRISC-V CPUコアの作成を通じて、CPUの内部構造と動作原理を学びます。
作成するCPUコアは非常に単純なものではありますが、動作原理を理解することによりSpectreやMeltdownといったCPUの動作に関連した脆弱性の理解につながります。
講義の内容としては、書籍「RISC-VとChiselで学ぶ はじめてのCPU自作」で解説する RISC-Vの規格で定められる RV32I 命令セットを実装したCPUコアを、FPGA上に実装できるように修正して動作を確認します。
FPGAボード上にはCPUコアおよび動作に必要な周辺回路を実装します。またCPUコア上で実行するプログラムも作成します。
キャンプ期間の3日間でFPGAボードの基本的な使い方からRISC-VコアのFPGA実装のすべてを行うのは難しいため、事前学習期間に書籍およびFPGAボードを配ります。
使用するFPGAボードはある程度周辺回路構成を変更可能なものを用意しますので、
CPUの周辺回路を実装することにより、LEDの点灯制御やスイッチ入力、UARTによる通信、Ethernetによる通信、DVI出力によるディスプレイへの映像表示などを試すことができます。
Y3『故障を乗り越えて動くシステムのための分散合意ゼミ』
現代では,コンピュータシステムは基本的には常時アクセスが可能で,動き続けていてくれるような安心感のあるものになっているかもしれません.しかしながら,コンピュータだって機械ですので,裏で動いているモノは「すでに故障しているもの」か「まだ故障していないもの (いずれ故障するもの)」のどちらかです.また,物理的な故障だけではなく,ソフトウェアの不良動作や悪意のある不正動作に対する備えも重要です.このような様々な故障に対応しながらサービスを継続的に提供する能力 (耐故障性) は,コンピュータシステムの信頼性を支える重要な役割を担っています.
このゼミでは耐故障性を高める基盤技術としての「分散システム」と,それをうまく動かすための仕組みの一つである「分散合意」について,代表的なプロトコルの実装を通して学びます.多くの方にとってあまり馴染みのないテーマかと思いますが,複数のコンピュータが通信によって一つのシステムのように振る舞う仕組みや,通信が必要であることから生じる課題とその解決方法などに興味がある方の参加を歓迎いたします.
Y4『CPU+コンパイラ自作ゼミ』
このゼミでは独自のCPUとコンパイラを作ります。自作コンパイラ(とアセンブラ)が自作CPU用の機械語を出力し、それを自作CPUで実行するという流れです。CPUとコンパイラは既存のアーキテクチャを参考にはしますが、模倣せず自分で一から仕組みを考えます。基本的に、CPUはVerilog、コンパイラはCで開発します。
このゼミの特徴は、単に「どっちも作る」だけではなく、両方を「並行して作る」ところにあります。最初は整数を表示するだけのCPU(機能が少ないためCPUとは呼べないかもしれない)と、1つだけ整数を読み込むコンパイラを作ります。次はCPUを加算に対応させ、コンパイラが「整数+整数」を認識できるようにする、というように、段々と機能を追加していきます。このゼミでの目標は加減算と乗算が実行できるCPUとコンパイラを作ることですが、余裕のある人は独自の機能をいくつ追加してもかまいません。
CPUとコンパイラを並行して作ることで、両方を学ぶことができるという自明なこと以外に、次のような利点があります。
A.コンパイラの実現に必要な最小限の機能をCPUに追加すれば済むため、プロジェクトをコンパクトに維持できる。
B.CPUとコンパイラの両者が作りやすいように、互いの役割分担を調整できる。
CPUの作り方は様々ですが、このゼミではCPUボードをはんだ付けにより組み立てるところから始めます。CPUボードはFPGAボードを中核として、いくつかの表示素子、スイッチ、USBシリアル変換モジュール等から構成されています。キャンプ期間でそれらを組み立て、自作CPUのプログラムを書き込み、動作させます。集中して取り組める開発期間は3日間しかなく、非常に短いです。事前学習期間に受講者の皆さんにFPGAボードが配る予定ですので、キャンプ当日までにFPGAの扱い方を練習しておくことをお勧めします。また、CPUボードの組み立てに必要な部品も事前に送付しようと思っています。はんだ付けの腕前に自信がある方は事前にCPUボードを組み立てておけば、キャンプ期間でより応用的なことができるでしょう。
コンピュータがプログラムを実行する仕組みを一気通貫で体験したい、自分でその仕組みを作ってみたい方の応募をお待ちしております。3日間という短期間でCPUとコンパイラを作る必要があるため、それらの開発に必要なスキルを持っている必要があります。具体的にはVerilogとCを使いこなせる必要があります。ただし、今それらが未経験であっても、熱意があり、応募時点までにある程度の知識を身につけられたなら、是非応募してください!
Z2『Rust製Linux向けアンチウィルス実装ゼミ』
アンチウィルスやEDRといったセキュリティ対策ソフトウェアはシステムプログラミングの塊です。更にマルウェアのスキャンという信頼できないファイルをパースしたり、エミュレーションしたりなど、処理が重く、危険度の高い処理をおこなわなければなりません。本テーマでは、Rustと一部Pythonを用いて、アンチウィルスの検知通知や検知ログ管理システムの実装、マルウェアの特徴抽出用DSLの設計と実装、実際のマルウェアデータセットを用いてマルウェア検知エンジンの検知率の向上などについて、取り扱います。なお、Rustはあくまでシステムプログラミングに適しているという理由で使います。そのため、ある程度Rustでのプログラミングに慣れている人、もしくはキャンプ期間までに自習できる人のみ応募してください。
Z6『アイデアを形にするWindowsアンチウイルス実装ゼミ』
最近、サイバー攻撃の波がどんな分野でも押し寄せており、防衛側はこの攻撃を見つけて対策を講じることが緊急課題となっています。
サイバー攻撃を検知する第一歩として、狡猾なマルウェアを見つけ出すことが大切です。
マルウェア検知のロジック開発では、解析、特徴抽出、検知回避対策など、さまざまなスキルが求められます。
時代は進み、マルウェア解析の和書もたくさん出版され、以前よりもずっと手に入れやすい情報が揃っています。
しかし、検知対象の製品作成に必要な知識を整理したものはほとんど存在せず、アンチウイルス開発はいわば謎に包まれたブラックボックスとも言えるでしょう。
そこで、開発の裏側は一体どうなっているのか?
この講義では、皆さんにとって馴染みのないアンチウイルスソフトを、自分で考えながら作り上げて理解することを目指します。
日本で唯一の国産アンチウイルスベンダーの講師陣が、皆さんが創る最強のアンチウイルスソフト開発を全力でサポートします。
さあ、楽しく学びながら、サイバー攻撃から世界を守る冒険に一緒に挑みましょう!
Z7『EDR強化ゼミ - Adversary Emulationを通じて学ぶ、Detection Engineering』
EDR(Endpoint Detection and Response)は、エンドポイント上の脅威を検知し、迅速に対応するための機能を提供するセキュリティソリューションです。エンドポイントで生成されるテレメトリ(プロセスの作成などの様々なアクティビティ)は膨大なため、脅威を効果的に検知するためには検知ロジックの作りこみが必要不可欠です。また、脅威の可視性を高めたり、被害を最小限に食い止めるために、検知された脅威に対してリアルタイムに対応することも重要です。
本ゼミでは、EDRの仕組みを解説したうえで、「Wazuh」をはじめとするOSS(オープンソースソフトウェア)を活用し、検知ルール、および、自動レスポンスルールの開発をセキュリティ演習を通じておこないます。
演習では、Redチーム(攻撃側)役の講師がOSSのEDRが導入された環境に対して攻撃を実施し、受講生にはBlueチーム(防御側)役として、EDRが収集したテレメトリから攻撃の全体像を明らかにしてもらいます。その後、同攻撃に対抗するための検知ルールと自動レスポンスルールを開発してもらい、再度攻撃がおこなわれた際に正しく検知・対応できるかどうか確認します。発展課題として、独自のテレメトリ収集機能を実装して、それを活用した検知ルールの開発にチャレンジしていただくことも可能です。
本演習は、実際に悪用されている攻撃手法を再現(Adversary Emulation)したシナリオのため、実践的なDetection Engineeringを学ぶことができます。
検知ルールの開発においては、マルウェア解析の経験が、自動レスポンスルールの開発においては、プログラミングの経験が活用できますが、これらの経験があまりない方でも講師による個別サポートがあるため、どのような技術的なバックグラウンドをお持ちの方でも参加可能です。本ゼミを通じて脅威に対抗するための実践的なスキルを一緒に磨いていきましょう!
Z8『ブロックチェーンゲームを作って学ぶWebセキュリティゼミ』
ブロックチェーン技術が様々な業界にも進出し、その利用が急速に広がっています。いわゆるWeb3技術を活用したブロックチェーンゲームは、従来のゲームにはない新たな体験を楽しめますが、同時にセキュリティの脆弱性が悪用される事例も増加しており、開発者のWebセキュリティ対策のスキルがますます重要になっています。
この演習では、ブロックチェーンゲーム開発におけるWebセキュリティの理解を深めることを目的としています。参加者は、サーバサイドサーバ、Solidity、およびWeb3を使用して実際にゲーム開発を実践し、その過程でWebセキュリティ対策を適切に取り入れます。
Z10『OSINTによるランサムウェア攻撃者の攻撃戦術特定ゼミ』
【概要】
ここ数年、重大なセキュリティインシデントが発生し続けています。その勢いは従来の標的型攻撃に加え、ランサム攻撃を仕掛ける攻撃者の相次ぐ参入と活動の活発化により、留まる事がありません。これらの重大なインシデントの発生原因は、メールに添付された不正ファイルの感染によるものだけではなく、外部に公開された管理不十分なアセット(サーバ/NW機器)からの侵入によるものが多くなっています。また2019年以降では、標的の企業や組織から窃取した情報や、攻撃の事実を一方的に暴露する「二重脅迫型ランサム」が特に猛威を振るっています。
本ゼミでは、上記のように侵入経路となったサーバがインターネットに露出しているという点と、攻撃者が被害企業・組織名を一方的かつ盛んにリークしているという、この2つの性質を利用して攻撃者の戦術変化を捉える、OSINTをベースとした全く新しい調査手法について、調査手法そのものの習得と、調査自動化のシステム開発を行っていただきます。
【詳細】
各企業や組織が所有する外部公開資産は、ShodanやCensysなどのデバイス検索エンジンを活用することで、どのような用途のサーバがどこ何台あるのかまで洗い出すことが可能です。また、ここ数年はランサム攻撃者によるリーク行為が月間あたり200~300件行われます。これらのリークされた企業や組織の外部公開資産を継続的に調査し、攻撃者毎に分類を行うことで、攻撃者がいつどの機器をターゲットしているか、その変遷が見いだせる場合があります。
【講義内容】
1:ランサム系攻撃者の動向について解説(最近の被害傾向、特に狙われるサーバとはなにか)
2:ShodanやCensysなどのデバイス検索エンジンの利用方法について解説(特に狙われるサーバを発見する方法)
3:ランサム系攻撃者のリークサイト参照
4:2と3を組み合わせた調査
5:システム開発