セプキャン2010 セキュリティコースに参加します

セキュリティ&プログラミングキャンプ2010 セキュリティコース ソフトウェアセキュリティ組に参加が決定しました.

ソフトウェアセキュリティ組では,主にソフトウェアの脆弱性について勉強を行います.
が,自分はソフトウェアセキュリティの勉強を最近始めた新参なので,足を引っ張ることになるかもしれませんがよろしくお願いします!

一部で応募用紙を晒す流れなので,以下に晒します.(中2病要素あるけど,気にしないでね!
あくまでも,自分の経験や思ったことを述べただけですが,参考になれば幸いです.
応募用紙は締切日の締切3時間前から書き始めたので誤字と脱字がありました.
良い子のみんなは,ちゃんと文章を遂行してから提出するんだよ!

セキュリティ&プログラミングキャンプ2010の開催を、何で知りましたか?

・公式ホームページ
・友人からの紹介
・そのほか(Twitter

事前質問

[A] ソフトウェアの脆弱性、およびそれらによる攻撃・防御の仕組みに興味がありますか はい 
[B] Cやアセンブラによるプログラミングに興味はありますか? ある 
[C]キャンプの公式Webページの講義科目に記載されたこの組の講義科目の[概要]と[詳細]と[補足]をよく読んで納得できましたか?  できた

1. この組を希望した自分なりの理由を教えてください。また、何を学びたいか教えてください。
  • 学びたいこと

 キャンプでは,ソフトウェアの脆弱性の発生原因・発見方法,脆弱性の対策について学びたいと思っています.また,プログラムが動く仕組み,セキュアなコードを書く方法についても同様です.さらに,キャンプでの講義や実習だけではなく,キャンプ参加者間で行われるであろう,コースには関係ない些細な会話からも,さまざまな知識を吸収したり刺激を受けたいと思っています.

  • 理由

 今までは,キャンプのネットワークセキュリティ組に近いことに一番興味があり,VPNサーバを立てたり,パケットを眺めたり,ルーティングをいじるなどして遊んでいました.しかし,今年2月,盛岡で行われた第3回東北情報セキュリティ勉強会に参加して衝撃を受けました.それは,愛甲氏のexploit codeのデモです.その時は,恥ずかしいことにexploit codeという言葉すら知りませんでした.すなわち,脆弱性を突いて侵入するようなことは,自分の実力が到底及ばない,魔法のようなものだとも思っていたのです.結局,その時は勉強会に参加したのにもかかわらず,あまり理解することができず,勉強不足であると強く痛感しました.また,その後の懇親会で竹迫氏といろいろと話したのですが,そこでも自分の知識不足が分かってしまいました.
 その反動から,その後はソフトウェア脆弱性について一番興味を持つようになりさまざまなことを調査し始めました.そこで分かったことは脆弱性をつくコードは,決して魔法ではなく,システムのアーキテクチャや動作原理,ソフトウェアの癖を理解し,それを実現するためのc言語アセンブリといった知識があれば,書けることです.魔法が魔法ではなく,単に技術の集まりであるとわかったら,あとは幅広い知識をつけるだけです.無論,ソフトウェアの脆弱性IT技術者として,避けては通れない問題であるとも再認識しました.
 それまでまともに使った時のあるOSはWindowsしかありませんでした.しかし幅広いソフトウェアの脆弱性に対応するには,UnixLinuxの知識は必須であると考え,現在では, Mac OS Xをメインに変え,サーバのOSをUbuntu変えて使用しています.もちろん使うだけではなく,管理者権限やデーモンといったWindowsにはない概念や違いの勉強もしています.しかし,これらのことをインターネットで調べたり,本を読んだりして調べるだけでは,時間がかかったり理解ができないことがどうしてもありました.
 そこで,このきっかけを与えてくれた講師陣の下で,再び教えてもらえる機会を得て,一気に知識を習得したいと思い,このコースに応募しました.

2. プログラミング歴を教えて下さい。また、今までに作ったプログラム (特にシステムプログラム(※1))があれば、差し障りのない範囲で具体的に教えてください。

プログラミング歴は5年です.主にcやc++c#を利用しています.システムプログラムは今までに作ったことがありませんが興味はあります.今後,システムプログラムをしてみたいと思っています.

以下に作ったことのあるプログラムについて書きます.
残念ながらブログでは書けないことがあったので,一部改編し概要のみ書きました.
応募用紙に書いたことの概略:
・既存のソフトと互換性のあるネットワークプログラムを作った.
・通信仕様を特定するためにWiresharkでパケット解析し,Visual c# 2005を用いて作成した.
・既存のソフトが使用するファイル(バイナリ形式)をStirlingで解析した.
・通信結果のログをメールで投げる機能を付けた
大体こんな感じです.

3. これまでに開発したプログラムで経験したバグ、およびその影響について差し障りのない範囲で具体的に教えてください。

これも一部改編します.
未知のネットワークストリームに対する処理とか,ネットワークエラー時の対策について書きました.
メール爆弾をやってしまった.メール転送プログラムをテストするときは実環境ではなく,テスト環境でテストする.

4. セキュリティホールは放置しておくとなぜ危険なのでしょうか。自分の言葉で説明してください。

 ソフトウェアの脆弱性を突かれ,意図せぬ動作をさせられるのは,放置されていた時間と比べると一瞬である.
また,セキュリティホールをいつ突かれるかは攻撃者しか分からず,攻撃されたら既に問題となってしまう.また,その後,攻撃に踏み台にされてしまう可能性もある.
 セキュリティホールを突く人なんてなんていないだろうと考え,対策を怠っているとそれが癖になってしまい,セキュリティホールに対応しないことに慣れてしまう.また,問題が見つかってもすぐに対応せず,さらに他のセキュリティホールが見つかった場合,片方の対応に追われ,片方がないがしろになってしまうことも考えられる.

 したがって,セキュリティホールを放置しておくと,それが癖になったり,必要な時にふさぐといったことができなくなるので,セキュリティホールは早急に埋めることが必要である.また,自分だけではなく他の人にも迷惑となることにも注意する.

5. ソフトウェアの脆弱性をなくすには何が必要でしょうか。

ソフトウェアの脆弱性をなくす方法は,1)意識的な問題,2)技術的な問題,3)発見後の対策といった3つの観点に分けることができると考える.
1) 意識的な問題
プログラムをある目的のために動かすことだけではなく,脆弱性を持たないようにするという意識が必要である.また,ソフトウェアは人間が作ることから,何か問題が見つかるのが必然と考える.ソフトウェアの開発終了後も脆弱性に対応できるような心構えが必要.
2) 技術的な問題
たとえば,バッファオーバーフローの場合,必要以上の入力を受け付けいないといったバッファオーバーフロー対策が必要.また,通信等で暗号化するプログラムなど機密性が必要なプログラムは,特に理由がない場合,広く検証されているライブラリ(アルゴリズム)を使用する.
また,わからないときは専門家に相談するといったことも場合によっては必要である.
3) 発見後の対策
 自分が作成したプログラムや使用ライブラリ等で脆弱性が見つかったら,脆弱性を埋める.また,ソフトウェアを配布している場合は,自動アップデート機能搭載するなど,できる限り最新版のソフトウェアに保ってもらうことで脆弱性をなくすことが必要.

6. あなたがある程度読み書きできるプログラミング言語を書いてください。(いくつでも可)

c, c++, c# .現在は Objective-CJavaScriptPythonの勉強をしている.

7. そのほかアピールしたいこと、書き足りないことがあれば自由に書いてください。

 セキュリティ&プログラミングキャンプのことは,2年前から知っていましたが,時間の都合が合わずなかなか応募することができませんでした.しかしながら,セキュリティ勉強会で刺激され,ソフトウェアセキュリティに関する知識が0の状態で参加するより,少しでも知識をつけてからキャンプに応募できることができたのでよかったと思っています.
 また,キャンプに参加できたら,同じような志を持った人たちと切磋琢磨し,多くの知識を吸収したいと思っています.もちろん,キャンプ後も継続して,参加者たちと交流していきたいです.
 さらに,大学での研究や,社会でソフトウェアの開発する機会に携わった時には,ソフトウェアの脆弱性に気を使うようにしたいと思っています.また,それ以外の場所でも,セキュリティ上の問題点に気が付いたら,改善できるように指摘するなどし,社会の役立てていきたいと思います.

 最後に,項目1で述べたように,自分はセキュリティ勉強会を通じて,ソフトウェアセキュリティに関する興味を得ることができました.講師人方々の,日頃のセキュリティに関する周知活動は非常に意義があることだと思っています.またそれに感謝しています.