東京では初雪を観測した翌日の寒い土曜日、三連休の初日だというのに、いつもより早く起きた。

今回のイベントは「セキュリティ&プログラミングキャラバン2008」。5年目を迎えた「セキュリティキャンプ」が2008年度から「セキュリティ&プログラミングキャンプ」となり、その成果とノウハウを広めるために「キャラバン」が行われている。

残念なことに「キャンプ」は参加資格が22歳以下だし、「キャラバン」はなぜかすべて東京以外の開催である。「キャラバン-湘南藤沢-」は、私にも参加資格があり、かつ唯一首都圏で開催される貴重なイベントなのである。そりゃ早起きしてでも行くしかないだろう。

以下概要と感想。講師の方は以下敬称略とさせていただく。

    1. セキュリティ&プログラミングキャンプの紹介

    (セキュリティ&プログラミングキャンプ事務局 福井 寛隆)

    • キャンプの目的と経緯の説明

    • キャンプのビデオ紹介

    • 感想

    • 内容がいいのでビデオはもうちょっと手をかけて作ったほうがよいのでは

    • 学生時代に現役の職業プログラマが教えてくれる合宿に参加するというのは、そのとき具体的な成果がなかったとしても一生モノの経験になるんじゃないだろうか

    • 最近がたっと評判を落としたIPAだが、意義はあると思うので頑張ってほしい

      1. プログラミング基礎

      (講師:吉岡 弘隆)

    • 「セキュリティ&プログラミングキャンプキャラバン2008」

    • アルゴリズムを学ぶことの意味 / 価値

    • 先達の知恵を学ぶ

    • 優秀なアルゴリズムを学ぶことで「優秀でない」アルゴリズムを見分けることができる

    • 車輪の再発明はたいていの場合愚かである

    • ソースコードを読むチカラ

    • プログラマの基礎体力と言える

    • ソフトウェア開発はたいていの場合保守

      >他人のコードを読んだり改修したりすることになる

    • コードは読むな、理解しろ

      >静的 / 動的、微視的 / 巨視的のマトリクスで理解することが重要

    • インターネットが変えた社会

    • 何人ものプログラマがボランティアで開発に参加し、社会基盤を成すようなソフトウェアを開発している

      >そんなことが信じられるか?

    • なぜ開発に参加するのか?

      >推測はできる(知的好奇心、名誉、愛、その他…)が、答えはわからない。だがまぁ、わからないままでいいじゃないか。

    • キャンプや勉強会に参加しよう

    • モチベーション / 技術の高い人と出会える

      >学校の友達にはいないだろう

    • 参加することによるメリット:人との出会い

    • 質疑応答

    • Q:自由にコミットできるプロジェクトはぐじゃぐじゃにならないのか?

    • A:開発コミュニティが「メンテナ」「コミッタ」を(空気で)選出するので大丈夫

    • Q:ソースコードを「書くチカラ」を身につけるには?

    • A:「書く」ほうについてはメソッド / 書籍 / ドキュメントが山ほどあるので、「読む」に比べると学習は容易。

      「読む」ことで蓄積された知識が「書くチカラ」にもプラスになる。

      読む / 書くことのスパイラルを繰り返すことで成長していく。

    • Q:プログラミングが好きじゃないプログラマに、プログラムを好きになってもらうには?

    • A:周りで楽しそうにするといいんじゃないか。

      勉強会に引っ張ってみると、モチベーション高いヤツと話をすることが刺激になるんじゃないか。

    • 感想

    • キャンプに参加できた若者がうらやましい。

    • 勉強すること、交流することの楽しさは経験してみないとわからない。その入り口として説き続けてきた吉岡氏の活動は、そりゃ金賞のひとつももらって当然と実感した。

    • 昼休み休憩に食い込んでる時間だというのに質問に答えてもらった。他の参加者には迷惑な話だが、大変嬉しかった。そうだよなぁ、まず「楽しそうに仕事をする」ところからだよなぁ。

      1. セキュリティ基礎(正しい情報セキュリティを学ぶ)

      (講師:園田 道夫)

    • 「情報セキュリティ基礎」

    • 情報漏洩の被害者になった

    • ノートPC紛失

    • 「セキュリティはすごく固いです」(漏洩元談)

    • 指紋認証

    • BIOSパスワード

    • Windowsログインパスワード

    • ハードディスクの暗号化

    • 検証してみた

    • 指紋認証

      >指紋はノートPC本体についている

    • BIOSパスワード

      >バックドアパスワード

      >筐体を開けての起動操作でBIOSパスワードをクリアできる機種も

    • Windowsログインパスワード

      >XP以前かつ14文字以下は脆弱な暗号化(LANMANハッシュ)

      >パスワードを狙う攻撃は多様化 / 高度化している

    • ハードディスクの暗号化

      >セキュリティレベルが低い設定だと鍵そのものがHDDに保存されている

    • 実質役立つセキュリティ対策

    • 守るべきものと「鍵」は離して管理する

      >モニタに付箋で貼ってあるとか論外

    • パスワードは強いものを

    • 文字種(数字/大文字/小文字/記号)

    • 十分な長さ(文字数)

    • 時々変更する

    • USBキーによるログオン制限

    • ハードディスクの保護(暗号化/パスワード)

    • ウイルスや迷惑メール

    • Windows Updateなど、OSのアップデートをきちんと適用する

      >Windows Updateがウイルス対策でもあることはあまり認識されていない

    • ウイルス対策ソフトの検出率はいいとこ9割

      >過信しない、安物買いの銭失い

    • web経由の攻撃が増えている

    • blogなどでSEO>検索ワードで攻撃サイトに誘導

      >「つづきはwebで」のキーワードが狙われる

    • 「いつもの」webサイトを汚染する

      >攻撃スクリプトが埋め込んであったりしても気づかない

    • USBメモリ経由のウイルス感染が急増中

      >自動再生はオフにしよう

    • 非専門家の対策

    • 「怪しいサイトには気をつける」

      >どう「気をつける」のか、どこが「怪しい」のかわからない

    • ツールでの防御が必要

    • ブラウザでの防御

      >フィッシングサイト警告機能など

    • プロバイダによる対策

      >webプロキシサービスなど

    • メールソフトによる対策

      PopFile、ThunderBirdなど

    • 感想

    • デバイスを紛失したときの被害は小型化/高集積化で恐ろしいことになっている。私の手持ちデバイスも対策せねば。

    • 生体認証が思ったよりヤバいということを教わった。「鍵を盗まれたらどうするのか」。

    • この手の教育はもう「セキュリティキャラバン」とか大げさなものじゃなく、学校教育レベルで行う必要があるのでは。

      1. セキュリティ応用(より深く情報セキュリティを学ぶ)

      (講師:国分 裕)

    • 「Webアプリのセキュリティテスト」

    • webサイトに対しての攻撃をデモ

    • XSS(クロスサイトスクリプティング)

    • SQLインジェクション

    • HTMLソースを保存して書き換え(CSRF:クロスサイトリクエストフォージェリ)

    • 便利なツールいろいろ

    • Web Developer

    • Fire Fox Extension

    • HTMLの各種要素を表示できる

      >hiddenエレメントとか!

    • 普通にweb開発でも便利

    • Burp SuiteProxy

    • Javaで動くLocal Proxy

    • リクエストを捕まえて表示できる

    • 内容を書き換えて投げなおすことができる

    • その他

    • 生HTTPを話してみるといい

    • プロトコルを理解することで脆弱性の芽をみつけられる

    • 知っていればこそ、のアプリが作れるかも

    • プログラム品質とセキュリティ

    • きちんとテストされた品質の高いサイトのほうが脆弱性の数も少ない場合が多い

    • 納期間際で動くのもやっと、というサイトは脆弱性の数も多い

    • 質の高いコードを書くこと、脆弱性について意識を持って書くことが需要

    • 感想

    • 各種攻撃を実際にデモすることが重要と感じた。社内勉強会でもセキュリティについての回を行う必要があるので、攻撃を実演してみよう。

    • この手のツールについての知識が不足していることが判明。もう少し情報のキャッチアップをしないと。

    • 生HTTPは以前勉強したことがある(車輪の再発明をしたんだけど)。確かに知っていて損はない。勉強会のネタにしてみようか。

      1. プログラミング応用

      (講師:宮本 久仁男)

    • 「プログラミング応用~Cのポインタを見直してみよう~」

    • プログラミング言語でのアドレス表現の必要性

    • OSやデバイスを制御するにはハードウェアに近い部分を扱う必要がある

    • デバイスドライバでは直接メモリを読み書きすることでハードウェアを制御する(Memory mapped I/O)

    • OSを書くにはアドレス表現可能な言語が必要

    • ポインタとポインタ変数

    • ポインタ:メモリ上の場所を指し示すためのもの

    • ポインタ変数:「メモリ上の場所を指し示すためのもの」を取り扱うための変数

    • ポインタと脆弱性

    • プログラムの予期しない動作がそのまま侵入や攻撃に直結することも

    • ポインタの使い方が不適切なプログラムはMalwareに「つけこまれる」、もしくはそのプログラムそのものが「天然Malware」になってしまうことも

    • まとめ

    • “*“はタンポポ、"&“はアヒル

      >…くらい気楽に考えるとよい

    • わかってしまえばこんなもの

    • とはいえ気をつけて扱う必要がある

    • 感想

    • ポインタを教えるのは大変だなぁ、と改めて実感。実は、個人的にはポインタで苦労した経験があまりないので…。

    • とはいえ理解していないと他の言語での「参照」の理解が不十分になるので、教えられるようになっておく必要はありそうだ。

    • 宣言のとき「int *a ;」ではなく「int* a ;」と書く(=「aは『int*型』である」と認識する)と理解しやすいように思うがどうだろうか。

    • 質疑応答

    • 壇上が盛り上がった質問をピックアップ。

    • ここから慶應大学の方が壇上参加するのだが、大変失礼なことにお名前を失念した。

      「**」表記してあるので、判明したら修正する。

    • Q:プログラミング能力とセキュリティ意識に関連性はあるか?

    • 宮本:能力というよりは経験年数に相関するが、何年やってもダメなヤツはダメだったりする。自分は業務でOS開発をしたりしたのでチェックは厳しくするものと教育されたが、すごくできる人のコードはセキュリティ的にもすごいかというと必ずしもそうではない

    • **:脆弱性は仕様の不理解によって作りこまれる。自分のやっていることをちゃんと理解し、プログラマとして当然の責任を持ってコーディングするべき。

    • Q:キャンプ / キャラバンで出会った「すごい若者」についてエピソードなどあれば。

    • 吉岡:まず「キャンプに応募する」という時点でモチベーションがすごい。意欲的に書かれた応募書類、合宿生活に溶け込み交流したこと、無事にキャンプが終了したことなど、とにかくすごい。それに対して大人たちが明示的にほめてあげることが重要であり、大人の側の宿題を認識した。

    • 園田:すごいというよりヘンなヤツ。衣類は全部宅急便で送り、サーバ担いで現れたヤツとか。その成長する姿を見るのが楽しい。

    • 宮本:「サーバ担いで現れた」ヤツはその後トレンドマイクロから賞をもらったり、他にもMSアワード受賞したり、推薦で大学に入学したり、出身者から芽が出ていることを実感している。

    • **:キャンプに「プログラミング」が加わったのは今年度からなので、プログラミング方面での成果はまだこれから。しかしこのキャンプで刺激を受けて成長するヤツは確実にいると思う。

    • 福井(事務局):キャンプ参加者は翌年以降「チューター」として運営や講義を手伝ったりしている。今年度は初めてチューター出身の講師が出たり、キャラバンの運営スタッフにもチューター出身者がいたりと(会場に数名いた)、成果は出ている。

    • Q:最初に触れた言語、今開発している環境などについて。

    • **:最初に本を買ったのはPerl。書くうちにプログラミングできるようになったし、他の言語もできるようになった。今はviでカーネル開発している。

    • 国分:最初はCGIの言語としてPerl。セキュリティ上の問題を起こさないためには、いずれかの言語に精通するのがよいのでは。

    • 宮本:FORTLAN以外たいていの言語は触ってる。他人が作ったものを保守 / 改良するのが仕事だったり趣味だったり。自分が書きたいものを書く場合はCが多い。vi+makeというプリミティブな環境は、使い慣れたツールがどこにでもあるという点でメリット。

    • 吉岡:現在はemacsでC。最初は中1のときアセンブラ(詳細)。職業として最初に書いたのは日本語COBOLのプリプロセッサ。Cはデータベースベンダに移って初めて職業で書いた。最近の趣味はRubyのソースリーディング。バグにパッチを送ったら採用されて嬉しかった。

    • 園田:文系出身でコンピュータ嫌いだったのにソフト屋に就職し、CADのマクロ言語でいろいろ書いていたらCADソフト本体を作るようになった(C,FORTLAN)。今はPHPとvimScriptとか。

    • Q:技術職希望で入社したのに営業に近いことをやらされている。将来開発をしたいのだがスキルアップはどうしたら?

    • 吉岡:(社内に開発部門があるのを確認して)開発したい意向をアピールするのがまず手始め。社内プロジェクトについて情報を収集しよう。開発スキルは勉強会に参加するなどしてきっかけをつかむとよいのではないか。

    • 宮本:営業スキルはとても大事だし将来開発職になっても役立つので、現状で吸収できることはするべき。顧客の要求は聞いておいてミーティングで提案するなど「考えている」「できる」ということを社内でアピールするとよい。開発現場に無理やり首を突っ込む「道場破り」は波風立つのでお勧めしない。賛否あるがスキル証明のために資格を取るのも一つの手ではないか。

    • **:勉強会に参加しよう。業務中にコードを書いてスキルアップなどは難しいだろうから、仲間を見つけるとモチベーションを維持しやすい。

    • 国分:営業スキルは大事に伸ばしたほうがいい。営業できないプログラマが多すぎる。

    • 園田:テスト部隊に名乗り出てみるとか。やがてデバッグ、開発とステップアップできるかも。開発の現場に触れる機会を増やすといいのでは。

吉岡氏の「勉強会では積極的に質問すべし」という教えに則り、2度ほど質問をさせていただいた。キャラバンでは「よい質問をしたらTシャツプレゼント」が恒例とのことなのでちょっと狙っていたのだが、ちゃっかりいただくことができてしまった。ありがとうございます。

密度の濃い時間を過ごした上にお土産までいただいてしまい、大変充実した土曜日となった。講師の皆様、事務局の方々に大感謝である。あと3回(札幌、金沢、大分)残っているので、近くの方は参加することをお勧めする。できればU-22の若者を連れて。

●セキュリティ&プログラミングキャンプ2008
http://www.jipdec.or.jp/camp/

●セキュリティ&プログラミングキャンプ・キャラバン2008
http://www.jipdec.or.jp/camp/caravan/

●キャラバン-湘南藤沢-|セキュリティ&プログラミングキャンプ・キャラバン2008
http://www.jipdec.or.jp/camp/caravan/shonan-fujisawa.html