Security Camp 2012

「セキュアなOSを作ろうクラス」おすすめの開発テーマの説明

1.「セグメントを利用したメモリ保護機構を作ろう(x86限定)」
2. 「OSの提供するセキュアなAPIを作ろう(x86限定)」

「30日でできる! OS自作入門」で言うと20,21,22,27日目の内容の発展形になります。

3.「不正コード実行防止機能を自作しよう」

脆弱性のあるソフトウェアが攻撃された場合でも、外部の攻撃者から任意コード実行ができないようにOS側で保護する仕組みを開発します。
既存のLinuxカーネルの修正でも構いませんし、自作OSに独自の防御機能を追加する形でも構いません。
OS側で不正なプログラムコードの実行を防止する機能を追加することを目的とします。

4.「組込みOSでの不正実行の検出機能を自作しよう」

脆弱性のあるソフトウェアが外部から攻撃された場合のコード実行を制限するために,組込みOS上で実行されるアプリケーション・プログラムの実行トレースを採取し,実行内容が許可されたものかどうかを判断してアプリケーションの挙動を制御するセキュリティ機能を組込みOS上に実装します。
トレースを採取するだけでなく、組込みシステムの制限されたメモリ内に保存し、PC側にアップロードする方法も開発します。 実現方法については講師側から提案もしますが,自分のアイディアがあれば歓迎します.
 対象とする組込みOSは、オープンソースのものならば種類は問いません。対象アーキテクチャは問いません。開発プラットホームは,自由に利用できるものならば問いません。 動作検証には,実機もしくはシミュレータなどの実行環境を想定しています.実機が必要な場合は持参してください.成果物のインターネット公開を最大目標にします.

5.「シミュレータでの不正実行の検出機能を自作しよう」

4.のテーマの発展系です。
シミュレータ上で組込みOSのカーネルやアプリケーション・プログラムを動作させ、OSへのシステムコールや特権命令の実行、メモリ読み書きなどの詳細なトレースを採取する機能をシミュレータに実装します。さらに実行中のプログラムがOSカーネルかアプリケーションかを区別し、実行内容が許可されたものかどうかを判断することを可能にします。
実現方法については講師側から提案もしますが,自分のアイディアがあれば歓迎します.
 シミュレータはオープンソースのGDBに付属しているものを対象とします。
対象アーキテクチャは,GDBのシミュレータ機能がサポートしているものならば,あとは問いません。 開発プラットホームは,自由に利用できるものならば問いません。成果物のインターネット公開を最大目標にします.

6.「組込みOSでのバッファオーバーラン防止機能を自作しよう」

メモリ保護機能を持たないマイコンで動作する組込みシステム上において,脆弱性のあるソフトウェアが外部から攻撃された場合を想定し,バッファオーバーランを検出しプログラム停止するセキュリティ機能を組込みOS上に実装します。
実現方法については講師側から提案もしますが,自分のアイディアがあれば歓迎します.
 対象とする組込みOSは、オープンソースのものならば種類は問いません。
対象アーキテクチャは問いません。
開発プラットホームは,自由に利用できるものならば問いません。
動作検証には,実機もしくはシミュレータなどの実行環境を想定しています.
実機が必要な場合は持参してください.
成果物のインターネット公開を最大目標にします.

7.「組込みOSでのデータ実行防止機能を自作しよう」

6.のテーマの発展系です。
メモリ保護機能を持たないマイコン上で動作するプログラムにおいて、バッファオーバーラン攻撃を受けた際のデータ領域上でのコード実行を検出するセキュリティ機能を組込みOS上に実装します。
MMUによるメモリ保護が利用できないため,保護ではなくいかに検出するか?が鍵となります.(そのかわり組込みシステムであるため,OSとアプリケーションも含めたトータルシステムと して考えることができます)
実現方法については講師側から提案もしますが,自分のアイディアがあれば歓迎します.
 対象とする組込みOSは、オープンソースのものならば種類は問いません。
対象アーキテクチャは問いません。
開発プラットホームは,自由に利用できるものならば問いません。
動作検証には,実機もしくはシミュレータなどの実行環境を想定しています.
実機が必要な場合は持参してください.
成果物のインターネット公開を最大目標にします.

8.「プロセッサのセキュリティアシスト機能の設計」

プログラムの不正実行や不正領域アクセスなどの検出を考えた場合、既存のプロセッサに対して専用のハードウェアアシスト機能を搭載しOS側から適切に利用することで、高速かつ確実な検出の実現の可能性があります。
(FPGAによるソフトコア・プロセッサを利用することで、このような独自機能を柔軟に実装することができます)
 本テーマでは既存のプロセッサ上に、そのような専用機能や特殊命令を設計し、OSと協調してセキュリティを確保する方法を検討します。
さらにシミュレータ上に特殊命令を実装し、命令の動作やOSからの利用などの動作検証を行ってみます。
設計内容については講師側から提案もしますが,自分のアイディアがあれば歓迎します.
 対象とする組込みOSは、オープンソースのものならば種類は問いません。
シミュレータはオープンソースのGDBに付属しているものを対象とします。
対象アーキテクチャは,GDBのシミュレータ機能がサポートしているものならば,あとは問いません。
開発プラットホームは,自由に利用できるものならば問いません。
成果物のインターネット公開を最大目標にします.

9.「セキュアOSのポリシー記述言語を使いやすく」

近年,多くのセキュアOSが利用できるようになりましたが,その利用の敷居は高く,検索結果の上位に「無効」という文字が出てくる程度の普及率になっています.
この背景には,セキュアOSの概念を理解しないとポリシーが書けなかったり,作成したポリシーを読むことが難しかったりなど,ポリシー記述の難しさがあります.
 このテーマでは,よりユーザーにとって分かりやすいポリシー記述を目指して,ポリシー記述言語を設計し実装していただきます.
具体的には,既存のセキュアOSメカニズムを流用し,オリジナルポリシーを既存のポリシーにコード変換するような形で実装していただくことを考えています.

10.「オリジナルセキュアOSを作ろう」

rootですらアクセスを制限するというコンセプトがセキュアOSのキモですが,その利用方法の応用としてシステムファイルの保護やアプリケーションのサンドボックス化などがあります.
また,近年はSE-PostgreSQLのようにアプリケーションと連携したセキュアOSの利用も推進されています.
このテーマでは,既存のセキュアOSに囚われない,新たなコンセプトを元にセキュアOSの設計と実装を行っていただきます.
演習では,LinuxのLSM(Linux Security Module)を使ったアクセス制御モジュールの作成と,管理ツールを出来る範囲で作成していただく予定です.
 なお,本テーマは「こういうセキュアOSが欲しい!」という強い情熱がある人を歓迎します.

11.「仮想化を用いてOSのセキュリティを向上しよう」

OSカーネルが乗っ取られた場合,OSによる監視や保護はもはやアテになりません.
このテーマでは,OSを仮想マシン上で動作させ,VMがメモリやストレージデバイスを監視することでOSへの攻撃を検知したり,重要なファイルを保護を試みます.
具体的には,ストレージ仮想化によるOSと独立したファイル保護機能や,メモリ仮想化による侵入検知機能の実装などが挙げられます.

12.「隠しファイルシステムを作成しよう」

既存ファイルシステムとの共存を前提とした隠しファイルシステムを設計&実装します.
隠しファイルシステムは往々にしてマルウェアによるデータ隠蔽に悪用されますが,既存の環境に後入れするような小さな仮想マシンモニタにおいては,設定データやログなどを格納するスペースとして有効利用できます.
アプローチとしてはファイルシステムのスラック領域を利用したり,仮想デバイスドライバによるデータ圧縮を行い,これを実現します.(他にもアイデアがあれば歓迎します)

13.「ルートキットを作成しよう」

ルートキットはシステムに密かに侵入し、見つかることなく(隠蔽)、潜入し続けて、悪意のある目的を達成します。
しかし、プログラムとしての機能や実装は通常のカーネルプログラムやデーモンなどと変わらず、特に目新しい技術が使われているわけではありません。
そこで、このテーマではルートキットを自作してみることで、特別なプログラムではないことを明らかにします。ただし、感染、拡散(再感染)の機能は作成の対象外とします。
対象とするOSは、オープンソースのものであれば種類を問いませんし、アーキテクチャは自由です。
開発プラットホームは,自由に利用できるものならば問いません。
動作検証には,実機もしくはシミュレータなどの実行環境を想定していますが、いずれの場合も必要なものは持参して下さい。

14.「ルートキットの感染の防止/検出/駆除ツールを作ろう」

13.の発展系です。
システムに潜伏するルートキットについて、侵入を防止したり、侵入を検出したり、または、すでに侵入を許しているシステムでの駆除を行うツールを作成します。
なお、このテーマでは、「既存ルートキットのシグネチャデータベース」を利用しない方法を検討します。
対象とするOSは、オープンソースのものであれば種類を問いませんし、アーキテクチャは自由です。
開発プラットホームは,自由に利用できるものならば問いません。
動作検証には,実機もしくはシミュレータなどの実行環境を想定していますが、いずれの場合も必要な ものは持参して下さい。