今年のセキュリティキャンプのセキュアなシステムを作ろうクラス・組込みゼミでは,テーマが10個提示されています.
が,タイトルだけでは何をやるのかわかりにくいかと思いますので,クラスの説明のほうに書いてあるゼミ説明を,ここに再掲します.

モノづくりが好きで好きでしょうがなく,昼も夜も寝ても醒めてもモノづくりのことばかり考えているというかた,アセンブラやコンピュータ・アーキテクチャなどの低レイヤーの学習を「面白そう」と思えるかたは,ぜひ応募を検討してほしいです.

アセンブラは事前学習で勉強するので,始めから知っている必要は無いです.ただ学習することに抵抗感が無いことが重要です.

各テーマでは,基本として開発ターゲット(OS,アーキテクチャなど)はしぼりません.自由に使えるものならば,基本,何でもOKです.

テーマは「組込み系テーマ」と「アーキテクチャ系テーマ」の2通りがあります.組込み系はマイコンボードをガシガシいじりたおす感じ,アーキテクチャ系はアセンブラとにらめっこしながらモノ作りする感じです.

■ 選択テーマ一覧

・テーマ#01「マイコンボードでの不正実行の検出機能を作ってみよう」(組込み)

マイコンボード上で脆弱性のあるソフトウェアが外部から攻撃された場合を想定して,
アプリケーション・プログラムの挙動を監視し,不正実行を判断して中断・ログ保存す
るようなセキュリティ機能をマイコンボードに実装します.

ログはマイコンボード上の制限されたメモリ内に保存することと,PC側にアップロー
ドできることが必要になります.

・テーマ#02「セキュリティソフトを作ってみよう」(アーキテクチャ)

UNIX系のシステムではptrace()のようなデバッガ向け機能を利用することで,アプリケ
ーションの挙動を高度に制御することができます.

デバッガ向け機能を利用してアプリケーションの挙動を能動的に監視しチェックするこ
とで,PC上で動作するセキュリティソフト「もどき」を作成してみましょう.

・テーマ#03「アプリケーションの挙動を見える化してみよう」(アーキテクチャ)

「セキュリティソフトを作ってみよう」の発展系です.

ptrace()のようなデバッグ機能によりアプリケーションの挙動を見張り,レジスタやス
タックの状態を動的に取得し変化をリアルタイム表示することで,動作を見える化して
みましょう.さらにバッファオーバーランの脆弱性の攻撃等を実験的に行い,視覚的に
見てみましょう.
なお本テーマはPCでの開発を想定していますが,マイコンボードをターゲットとした
開発でも構いません.(この場合はGDBによるリモートデバッグ機能が利用できます)

・テーマ#04「セキュアな組込みOSを自作してみよう」(組込み)

既存の組込みOSに独自に機能を追加することで,セキュアな組込みOSを自由なアイ
ディアのもとで開発してみます.

何らかのオープンソースな組込みOSが動く,マイコンボードをターゲットとします.

・テーマ#05「アーキテクチャの違いを検証してみよう」(アーキテクチャ)

バッファオーバーラン等による脆弱性の既存の攻撃方法を,様々なアーキテクチャにつ
いて検証し横断的に比較することで,スタックやレジスタの扱い,命令コードの特徴,
命令セットの違いなどによるアーキテクチャごとの脆弱性の特徴を検討します.シェル
コード挿入やROP,Exploitコード作成をエミュレータ環境により実験します.

想定するアーキテクチャはx86,ARM,MIPS,PowerPC,SH,H8,V850,AVR,RX,6502,
Z80,VAXなどですが,可能な限り多く扱い横並びにして比較することを目的とします.

・テーマ#06「エミュレータでの不正実行の検出機能を作ってみよう」(組込み)

エミュレータ上で組込みOSのカーネルやアプリケーション・プログラムを動作させ,
OSへのシステムコールや特権命令の実行,メモリ読み書きなどの詳細なトレースを採
取する機能をエミュレータに実装します.さらに実行中のプログラムの動作のチェック
を行うことを可能にします.

エミュレータでの開発がベースとなるため,マイコンボードは利用しません.

・テーマ#07「組込みシステムをセーフティに設計してみよう」(組込み)

組込みシステムでは「セキュリティ」(脅威対策)に対して「セーフティ」(機能安全)と
いう考え方も重要になります.

エレベータ制御や踏切制御等を題材として制御プログラムを作成し,シミュレーション
動作させ,ドアの開閉・ボタンの押下・人がドアにはさまれたことの検知などをして適
切に振舞うかどうか,検証してみましょう.なおシミュレータも自作することを前提と
します.シミュレータでの確認がベースとなるため,マイコンボードは利用しません.

・テーマ#08「プロセッサのセキュリティアシスト機能を設計してみよう」(組込み)

プログラムの不正実行や不正領域アクセスなどの検出を考えた場合,既存のプロセッサ
に対して専用のハードウェアアシスト機能を搭載しOS側から適切に利用することで,
高速かつ確実に検出できる可能性があります.

既存のプロセッサに追加する形でそのような専用機能や特殊命令を設計し,OSと協調
してセキュリティを確保する方法を検討します.さらにプロセッサのエミュレータ上で
特殊命令の実装を行い,命令の動作やOSからの利用などの動作検証を行ってみます.

エミュレータでの開発がベースとなるため,マイコンボードは利用しません.

・テーマ#09「セキュアなインターフェースを設計してみよう」(アーキテクチャ)

既存のアーキテクチャでもABI(Application Binary Interface)を工夫することで既出の
攻撃手法を無意味にしセキュリティを高めることができる可能性があります.

セキュアなABIを定義し,アセンブラベースでプログラミングすることで効果を確認しま
す.可能ならばコンパイラやリンカを改造し,そのようなABIでコード生成してみます.

アーキテクチャは一つに絞らず,x86,ARM,MIPS,SH といった様々なものを扱います.

・テーマ#10「低レイヤー学習のための教材を作ってみよう」(アーキテクチャ)

セキュリティ理解のための低レイヤー学習の促進を目的として,2013年には「アセンブ
ラ短歌」や「バイナリかるた」「アセンブラ・クロスワード」といった新しいコンテス
トや競技,ゲームが考案され,実施されています.

勉強会で実施できるような題材として,そのような新しい教材を考案し,開発してみま
しょう.アイディア出しだけではなく,自身で実装し普及させることを前提とします.

AD
ええっと今年のセキュリティキャンプの募集がすでに開始されているのは前回書いたとおりなのですが,
募集まっさい中ということで,ちょっとつらつらと何か書いてみます.

私は「セキュアなシステムを作ろうクラス」というのに参加させていただきます.
クラス長は30日でOS作ろう本で有名な,川合秀実さんです.
川合さんはOSECPUという自作VMをテーマにしていろいろものづくりするみたいです.

今年は浅田さんが新たに講師に加わっています.FreeBSD使いとしては,BSD良く知っているかたに加わっていただいてとても嬉しいです.
半田さんのところは見える化,忠鉢さんのところはOSカーネルやハイパーバイザを扱うみたいです.
竹迫さんのところはルータ自作というこれまた面白そうなことをやるみたいです.

システムクラスは分野ごとのゼミ制になっていますが,全体としてはものづくりがメインのクラスなので,セキュリティキャンプに興味はあるけど自分は解析したりするよりもモノをガリガリ作るほうが好きなんだよなーという人むけです.

で,私はそこで「組込みのセキュリティを考えるゼミ」というのを担当させていただきます.
私のゼミについてですが,参加するためにセキュリティの知識は必要かというと,そうでもなかったりもします.
セキュリティバリバリのひとというよりも,普段はものづくりばっかしやっているひとが参加してくれて,セキュリティも意識したものづくりをできるようになってくれるというのがひとつの狙いだったりもします.
むしろとにかく手を動かして,ゼロからモノを作ることができるひとを期待してたりします.

マイコン大好き少年少女にぜひ参加してほしいです.5日間,どっぷりと漬かってひたすらマイコンをいじることができます.
ArduinoでもPICでもH8ボードでもSAKURAボードでもなんでもいいのでいじりたおしましょう.
講師も楽しいくらいだから,きっと参加者はもっと楽しくてしょうがないに違いない.笑

まあ言ってしまうと,他人の作ったものなんぞには興味無し自分が作ったものが一番好き!
車輪の再発明とか言われても全然気にしない!という人向けです.
なにせゼミ長の私自身がそんな感じだったりしますので.笑

あと今年はアーキテクチャ関連のテーマも入れています.コンピュータ・アーキテクチャに興味あるという人はぜひ応募してほしいです.RISCとかCISCとかMIPSとかARMとか命令セットアーキテクチャとかについて,5日間,ひたすら議論してものづくりすることができます.CPUアーキテクチャ大好きな私としては,ちょう楽しそうです.

ゼミとしては,参加者が,自分で考えて自分のアイディアで何か作ろうとするのを推進したいです.私は基本的に参加者が自分で考えて作ろうとするものは否定せず「面白そうだねーいいねーもっと作ってみてよ」って感じのノリです.

あと毎年この時期になると「キャンプ参加したいけどレベル高そうで応募を躊躇」みたいな話をよく聞くのですが,まーなんとしてでも応募しろ!みたいなことを言うわけではないですが,ひとつ思うこととして,
「講師の私だって,やれば絶対成功したり受かったりするようなことばっかり挑戦しているわけではないですよー」
ってのがあります.
むしろ失敗したり落ちたりするほうが多いし,そんなの日常茶飯事です.
ただ,あんまし落ちるのとか気にしてなくて,失敗してもむしろLTでのネタが増えたかくらいにしか思ってない,っていうのがあります.

だから,興味はあるけど躊躇して応募しないというのは,講師としてというよりも,フツーの一技術者として,もったいないなーと思いますね.技術力ついてから応募すれば一発合格するってもんでもないですし,受かった人も全員一発合格してるわけでもないですし(むしろ何度も応募してというのが普通かと),応募自体が次へのステップでもありますし.

成功しているように見える人っていうのは実力あるから成功してるのではなく,失敗してるから実力が自然とついてきていて,それでたまに成功したのが目立っているだけです.フツーにその10倍くらい,あたりまえのように失敗しているもんです.ただ,本人がそれをあまり気にしてないしいちいち言わないので失敗が目立たないだけ.そもそも落ちることや失敗が悪いことだとは全然思わないです.失敗しても気にせず,むしろLTネタが増えてラッキー,とか思うくらいでちょうどいいです.失敗するほうが技術者としての幅が広がるもんですほんとに.

応募することで応募人数多ければ,たとえ落ちたとしても来年からは人気ってことで人数枠が増えて次から受かりやすくなるかもしれないし,そういう良い副作用もあるかもしれないです.別にだから応募しろとかいうわけではないですが,何か行動を起こすということは,本人の気がつかないところで,けっこう良い副作用があったりするもんです.

AD