セキュリティ&プログラミングキャンプキャラバン2008 レポート
この記事は、セキュリティ&プログラミングキャンプキャラバン2008 - 京都 -の実況中継です。
リンクなどはイベント終了後に貼ってみました。
セキュリティ&プログラミング~~ -京都- 開始前準備
- もっと早く行くつもりが盛大に寝坊。
- 先生、ごめんなさい。
- メディアセンター南館は朝早いと鍵が開いていないので、鍵を開けるのと誘導するのが僕の仕事になりました。
ちょっとした裏話でした。
プログラミング基礎 - ミラクル・リナックス(株) 吉岡 弘隆 さま
ブログ・日記
今日は、「プログラミングって楽しいよ!」というお話。
セキュリティ&プログラミングキャンプキャラバンとは
- 全国8か所
- キャンプを紹介
- プログラミングの楽しさを伝えたい→「プログラミングが好きな人と出会う、そのような人を増やす!」
アルゴリズム編
ユークリッド互除法などなど (C言語で例)
なぜアルゴリズムを学ぶのか
- 優れた先達の知恵がある
- 「優れたアルゴリズム」とは何かを学ぶため
アルゴリズムとデータ構造の組合わせで、多くの問題が解ける場合が多い。
どんなことが解明されているかを調べる
自己流のアルゴリズムは、開発に時間がかかって、実行時間も遅くて、バグも多く、拡張性も低い
参考書
ソースコードの読み方編
ソースコードを読む力
- プログラマの基礎体力
- 技術者の付加価値
- プロフェッショナルとしての研鑚
優れた技術者はソースコードを上手に読む!
コードの理解について
「モットー: コードは読むな、理解しろ!」
理解の仕方を静的/動的の軸と微視的/巨視的の軸の2軸で分類。
1軸目
- 静的理解
- 動的理解
2軸目
- 細部から理解していく、微視的な(ミクロな)理解
- 全体から理解していく、巨視的な(マクロな)理解
巨視的な理解は作戦を立てるときに使える
規模の把握
「規模重要!」
規模を把握したところで... ディレクトリ構造をみていく。
トップディレクトリは、ソフトウェアの論理的構造を表している。
- ドキュメント
- 変更履歴
参考書
Rubyの1.8のと1.9の差分をケーススタディとして見てみると、プログラムを読む力をつけるのに非常に役立つのでは?
インターネットが変えた社会
- 商用ソフトウェア
- フリーソフトウェア (リチャード・ストールマン)
オープンソースソフトウェア
企業の作った商用ソフトウェアではなく、楽しいから作ったソフトウェアがどんどん普及していく
誰もコントロールできない、混沌の世界から開発されている
バザールのような開発方式
参加資格は「情熱」!
なぜコミュニティに参加するのだろう
いろいろな制度は、独占するものではないですよ。
特許制度は、社会を豊かにする制度。 著作権も、同様。
初めての勉強会
「勉強会へ行こう」
( 2009/02/08
( 2009/02/09
勉強会って
- 楽しい
- 専門家と知り合いになれるかも
- ”ついでに” 知識が増える
- 出会い
プログラミング応用 (Webプログラミングの未来について) - サイボウズ・ラボ 竹迫 良範 さま
ボウズマンのPVを見せていただいた。
はじめに
- Namazuくん ぬいぐるみ型紙(ソースコード)
- Namazuくん 設計図(ドキュメント)
- ビルド!
- 完成
オープンソースToyプロジェクト
自己紹介と「サイボウズ」とは
プロフィール
id:TAKESAK
JavaScript エンジンの高速化
- id:amachan
g さん作のテトリスみたいなゲームをつくるやつ - JavaScript
やWebアプリケーションのお話。 - 言語大統一理論
- コンピュータの進化とプログラミング言語
JavaScript エンジン
- JavaScript
エンジンの速度比較
量質転化の法則
- 量が質に転化する時
- コンピュータの処理速度が向上
例) LZ77圧縮アルゴリズムの改良
JavaScript = Web2.0時代のマシン語
- いろいろなブラウザの上で動く言語。
- Serverサイドいったり、mobileにいったり
エミュ(ry
- Z80エミュレータ - jsMSX
100% JavaScript
!! ターミネータのコードはは6502のアセンブリで書かれている!
- ロボコンも同じチップだったり
JavaScript でVMを作る
Java VM → JavaScript
- ORTO
It works on iPhone!
(キーボードついてないから、すぐにゲームオーバーになっちゃうよ><)
言語処理系 → JavaScript
- Logo on JavaScript
- JsRuby
- HotRuby - Ruby on JavaScript
and Flash
JavaScript → ActionScri pt
- 早速AIRでFlash Playerを作ってみた
- Alchemy
- Flash C Compiler
- Native Client
Server Side → JavaScript
有名どころ
- Microsoft IIS
- LiveWare JavaScript
からいろいろと発展 - BroadVisio
n
Ajaja
URL: http://aja
- サーバサイドJavaScript
のオープンソース実装 - 処理系はSpiderMonk
ey - CGIを提供
- SQLite3標準サポート
PHP→JavaScript
JSmarty (PHP Template on JS)
URL: http://cod
- できるだけSmarty互換
- 利用するメソッドやプロパティとかはそのまま
- Smartyのテンプレートがそのまま利用できる
- プラグインとかも対応 (JSAN.jsを使用)
サーバ/クライアントで.jsを共有
- Validation
ロジックの共通化
OpenJSAN
最近盛り上がってないですね
Perl → JavaScript
PMconnect (JS + Perl CPAN)
- 変数に$をつけなくてもPerlライブラリが使える!
- 数が多いCPANを使える!
- JavaScript
からPerlのXLMパーサを使ってみたり
Perlプログラマについて
コミュニティ
- Shibuya.pm
- Yokohama.p
m - Kansai.pm
- Tokyo.pm (ここなのかな?) などなど
年収が高い人
- Perlの開発に参加している
- 地元以外のPerlモンガーズに参加している
- カンファレンスで発表している
男性であることが多い
年功序列ではない!
地方とITの関係
愛媛では。。。
- なかなか若い人が集まらない
- 地方のプログラマは地位が圧倒的に低い
ITは地域の壁を簡単に超える
- インターネット
- Amazon.co.
jpで買い物 - 楽天で買い物
地域格差はなくなる?地域格差はもっと広がる? (例)新幹線神話
生産業・製造業は商機
- 地域の壁を超えた商売が可能
カルビーさんが北海道から中国にじゃがいもを輸出したり
地方から世界へ!
- 地方にいる → 地方のこと第一
- 京都(大阪)にいる → 関西と関東の違いを考えてしまう
- 東京にいると → 日本全体を考えられるようになる
- アメリカにいると → 世界全体を考えられるようになる
Mylingual. net
- 翻訳データはWikiスタイル → みんなでが翻訳データを編集
- 正規表現もつかえる
- 日本の文化を世界に輸出できる!
最後に
JavaScript
By id:amachan
休憩
- 仲間うちで8号館の食堂でお昼ご飯を食べました。
先生の娘さんに懐かれ始めました。
セキュリティ&プログラミングキャンプのご紹介 - JIPDEC セキュリティ&プログラミングキャンプ事務局 福井 寛隆 さま
セキュリティ&プログラミングキャンプとは?
- すごい若い人 (別名:トンがった人)を見つけて、早い段階から育てていく
特色
- 4泊5日の合宿形式
- キャンプにかかる費用は無料
- 日本を代表するセキュリティおよびプログラミングの世界の第一線で活躍する技術者の講義を受けることができる
- 企業見学などもある
参加するには?
- 満22歳以下の学生・生徒
- 個人で自宅と会場の往復ができる
- 他の参加者と協調できる
- 基礎知識と積極性がある
主な内容
- 実習を中心とした講義と演習
- グループワーク
- キャンプ卒業生を中心としたチュータが丁寧にサポート
IT Keys 京都大学学術情報メディアセンター 上原 哲太郎先生
- URL: 文科省のITスペシャリスト育成講座
発表スライドに僕の写真がうつりまくり(笑)
講義に関しては上原先生のブログを参照
情報セキュリティ基礎 (正しい情報セキュリティを学ぶ) - サイバー大学 園田 道夫 さま
自己紹介
ブログ・日記
事件!
- わび状が届く
- 電話していろいろ聞いてみた
- セキュリティはかなり固いらしい
電話して聞いた「最強のパソコン」のセキュリティ(推定)
- 指紋認証
- BIOSパスワード
- WindowsOSのパスワード
- ハードディスクの暗号化
指紋認証は安全?
指紋がパソコンについてる(笑)
それつかえば、回避できるじゃないですか
生体認証は安全?
代替方法は、
- 指紋は、転写できる
- 顔は、マスクしたり
- 静脈は、大根でも登録できる
- サインは、タイミングと筆跡の模倣
などが考えられる
鍵となる情報は、広義のハッシュであり、弱点としては、
- 鍵が盗まれたり
- 偽造されたり
がある。
BIOS パスワードは安全か
サポートに電話したら、まほうの言葉を教えてくれたりする。
バックドアパスワード (※良い子はググらないでね♪)
WindowsOSパスワードの問題
- 14文字以下は脆弱な暗号化
- ソルトが固定
などなど
暗号文を作る
- 「あいうえお」→「こさしすせ」と暗号文のパターンが決まってると、辞書が作られる
- そこで、調味料をかける
- それが、塩(ソルト)
- でも、塩がいつも同じだと、同じ味になってしまう。。。
パスワードを狙う攻撃
- 辞書攻撃
- ブルートフォース攻撃
- キーロガー
- フィッシング
辞書攻撃
- 良く使われるパスワード(アンケート結果)がある
- ぼちぼちって感じでいらしてます(笑)
どんなことで検知できるか
- rootメールでお知らせきたり
- ログにいろいろな痕跡がのこったり
- IDSによる警告があったり
攻撃はあるものだから、過剰におびえてもダメ
Webサイトを汚染する
黒くて変な画像がいっぱいのってる「見るからに怪しいサイト」でなくても、汚染されたサイトはいろいろとある
- 2008年3月、20000サイト以上/数日で汚染された
ブラウザの機能
とりあえず、ちゃんとアップデートしましょう
各種ブラウザには防御機能がついているので、有効に使いましょう(やぶられたりしたのもあるけれど)
再び、パスワードを狙う攻撃
- パスワードには寿命がある
- 9桁の英数字だと、17年くらいが寿命?
パスワードの理想形
- 長い
- 複雑
- 定期的な変更
「鍵」の管理が重要
ハードディスクの暗号化
- 鍵はどこにあるの? ↓
- ハードディスクの中の、普通は読めない領域にある
上書きされれば・・・同型ディスクで同設定だと、領域特定で無力化されちゃう
実質役立つノートPCのセキュリティ対策
ログオンしにくくする
- Windowsのパスワードを強化
- USBキーによるログオン制限
中身をのぞかれにくくする
- ハードディスクを暗号化(ただし、鍵は外に)
セキュリティ応用 (文字コードとセキュリティ) - ネットエージェント(株) はせがわ ようすけ さま
自己紹介
ブログ・日記
テーマ
- Webアプリケーションのセキュリティがなんとかかんとか
- 一般のアプリケーションがなんとかかんとか
やる夫でわかる脆弱性
- 脆弱性みつけたお
- 脆弱性じゃなく、仕様です
- えっ
- Say Again 「脆弱性じゃなく、仕様です」
- 攻撃できるじゃん!
- 脆弱性を見極められるんです、あなたとは違うんです!
脆弱性具体例
- 多対一の変換が引き起こす問題
- Unicode を利用した拡張子の偽装
多対一の変換が引き起こす問題
- Unicodeには2種類の「¥」がある
英語なら、「\」と「¥」に分かれている
文字コードを変換すると、1つの文字にまとめられる
このような特性を使って、攻撃 (パストラバーサル) できてしまう
実例①
- JVN#84775942(メールに関するもの) 添付ファイル名に円記号を含んだものを開くことにより、ファイルの上書きができてしまう
実例②
- JVN#18282718(HyperEstra
ierに関するもの) インデックス対象外のファイルも登録される
企業の反応
この問題に対して、某M社は「某Wの仕様です」と回答した
「¥」だけでなく、「Å」などは「A」となる
対策
- Unicodeのまま文字列を扱い、文字コードを変換しない
Unicode を利用した拡張子の偽装
特性
- 制御文字を使うと文字列の一部分だけを右から左に表示させられる
ユーザとしての対策
- 難しい!
- ソフトウェアの制限ポリシーとか
- 不用意にファイルを開かないとか
見つけたらどうすればいいの?
- 脆弱性の定義の確認
- ベンダー/IPAに連絡
- 仕様なら公開してもよい(?)
ベンダに報告
- 確実に連絡できる先を探す(連絡先不明なことも多い)
- 個人なら相手にされないかも?
IPAに報告
IPAは
- ソフトウェアの脆弱性
- Webアプリケーションの脆弱性
を受け付けている
報告は、情報処理推進機構:情報セキュリティから
「仕様です」なら・・・公開?!
- 「仕様」なら、その「仕様」を直せ!
「仕様変更のフィードバック」を山盛りだしてみたり(笑)
コミュニティを通じて改善を望む声を集めて、正規のルートを通じたほうが改善の見込みが高い!
結局のところ
- ケースバイケースで判断せざるを得ない
- 重要なのは、影響範囲を考えつつ どうすれば安全になるのか を常に考えること
まとめ
- 正しい知識を身につけ、正しい道に技術を生かそう!
質疑応答およびフリーディスカッション
サイボウズに入社すると、ボウズマンの歌は歌えないとだめですか?
(竹迫さん)
- 僕は歌えますよ。入社する前は関係ないですが、入社するとガンダムのDVDを渡されます
- ぼうずまーん、ぼうずまーん、スーパーグループウェアー
ITとかに興味を持ったきっかけや、出会いはなんですか?
(吉岡さん)
- 日経サイエンスを高校の時によくよんでいた。
- マイクロプロセッサの特集号にICの顕微鏡写真がのっていた。
- セブンイレブンでバイトしてためたお金をすべてはたいて、Basicが動く4Kバイトのパソコンを買った
- 「何をやろう」と思ったのではなく、「これがほしいんだ!」というノリで。
- 大学に入って
(竹迫さん)
- 中2のときに親が買ってきたPCを触る
- 小さいときは医者になりたかった
- あれ?10代なのに20年前とか言っちゃったよ?
- パソコンのゲームが高くて買えなかったので、ぷよぷよみたいなのを自分で作っていた
(はせがわさん)
- パソコンで唯一動くアセンブリでコードかいてた。
- IT業界にきたのは、1年前
- パソコンは道具だ!
(園田さん)
- 大学入るまで興味なかった
- 初めて触ったときは、デザインファイルというものがあって、それをいじり、なんどもHDDをこわしていた
- 気づけばセキュリティしてた
脆弱性を見つけるのは法的に黒っぽいですが、みなさん、どうしてるんですか?
(はせがわさん)
- Webアプリの場合は、Webサイトの脆弱性をつつくというより、ブラウザの挙動を探ってるだけ
- リバースエンジニアリングの場合は、利用規約に反するだけ・・・?
- 著作権とかうんぬんがありますけど・・・。
(園田さん)
- 早期警戒パートナーシップ
- ここまでなら、世の中の空気的に大丈夫だろう
- リバースエンジニアリングは議論途中なので、結構危険。
- オンメモリで動作をモニタリングするのは、いいのでは?
(竹迫さん)
- 公開されてるWebサービスでやらない
- LGPLで公開されているものに関してはリバースエンジニアリングしてもよい
- 公開とかせずに内密に教えてあげて
クオリティのよいコードを読み分ける方法
(はせがわさん)
宗教的な背景があるので、読み始めるとざっと読めるよ
- djb
- qmail
(吉岡さん
日本語の情報が多い
- Ruby
(竹迫さん)
簡単なものが良いなら
- CGIのカウンタとか
コーディング標準があるもの
- Plagger
- namazu
セキュリティ&プログラミングキャンプに受かるコツ
(吉岡さん)
- 情報をさらけだす(自分が何ができるかをアピールする)
(園田さん)
- 活動が見えないと評価できないので、見える形にしてほしい
(福井さん)
- コピペは絶対落ちる
ICTスクールを盛り上げたい
(吉岡さん)
- 電子的に集まれる場所を作りましょう
- Face-to-Fa
ceの付き合いを持とう - スポンサーをつける
(竹迫さん)
- 幹事力
- あまり気張らず、集まれるひとだけ集まる
(はせがわさん)
- 感情移入できるように、すべてをさらけだす
(園田さん)
- 他のコミュニティの力を借りて、盛り上げる!
オープンソース、セキュリティホールがあったときに、
(園田さん)
- ばれないですよー
(吉岡さん)
- オープンソースで作られてるからこそ、早く解決できる
情報系の学生でも、周りにやる気が感じられない。情報教育をどうすれば良いか
(竹迫さん)
- カリキュラムが体系的になっていないというのは感じる
- 「学科で選ぶ」、ではなく、「学校で選ぶ」、するとモチベーション高い人が集まってるのでは?
- 周りがやってないのは、自分にとってはチャンス
(吉岡さん)
- IPSJとかIPAで情報教育のカリキュラムの確立に向けて動いている
- MIT、スタンフォード、CMUのカリキュラムをダウンロードして、勉強すればよい
- 知り合いで勉強会とかすると良い
(園田さん)
- 体系化されてないということは、自由になんでもできる
- やってしまったら、それが体系化される
- ひとりでやってると孤独になるので、勉強会いくなどして、仲間を探してください
(上原先生)
- 大学できちんと教えられていないのは、「ごめんなさい」
- 大学にも限界がある
- 勉強するのに、大学に頼っていてはダメです
- 自分で勉強するのが大事
できるやつがやれば良い!という風習はそのままでいいのでしょうか?
(竹迫さん)
- 底上げは、ITパスポート試験など、日本では行われ始めるので
(園田さん)
- 現物をガンガンみせていくプロモーションをしたりして、ツカミを。
- そこから、知識・興味に繋がる。
- それを全員が全員やってるのではなく、個人的にやってるだけというのが現状
関数の中身を理解できないときがあるのですが、どうすればよいでしょう
(吉岡さん)
- デバッガを使う
- 注目するところにブレイクポイントを設定し、その止まったところから道筋をたどっていく
(竹迫さん)
- 作った人に聞けば良い
感想
講師の皆様、たいへん興味深い講演、ありがとうございました。ものすごくおもしろかったです!
個別感想 (追記 2009/02/09 )
随時追加していきます。
吉岡さんの講演
心に残った一言: アルゴリズム萌え~, モットー: コードは読むな、理解しろ!
プログラミング初心者のころのことを思い出しました。(今でも全然上級者ではないのですが・・・) 大学入って初めてパソコンを触り、周りのタイプ速度にビビりながら、必死にいろいろと練習したなぁ。
しかも、それが楽しかった。
今はただの仕事&研究の道具となり下がってる気がするので、初心に戻って楽しんでコンピュータと触れ合おう。
まとまった時間がとれたら、Ruby1.8とRuby1.9のコードを比較しながら読んでみるかな。
竹迫さんの講演
心に残った一言: ボウズマーン、ボウズマーン、スーパーg(ry , JavaScript
やっぱり、 JavaScript
JSANとかAjajaとか当時は盛り上がってたけど、最近はちょっと盛り下がってる感じ。どうにかできないものなのか・・・。
PMConnectに対抗して、RBConnect作るぞ! (いつになることやら・・・)
大好きな言語なので、ほんまにどうにかして盛り上げたい!
それと、Cybozuはやっぱりおもしろそうな企業だなと思いました。
(ガンダムとか、PVとか)
園田さんの講演
心に残った一言: パソコンに指紋ついてるじゃん(笑), ログ眺めてるのが好きなんですよ
僕もログを眺めるのが好きな人間なんですが、あの、「いらっしゃった」ときのログの流れのすさまじさがたまりません(笑)
パスワードをアンケートに答えちゃ、だめですね・・・。何を考えてるんだか。
それと、パスワードは英数字9文字以上にするように、周りに勧めたい。
誰でも気をつければできる、ごくごく簡単なとこからきっちりしていかないとね。
しかし、まさか、最強のセキュリティを誇る(笑)ノートPCが僕の大好きなアノ黒いやつとは・・・。
それでも愛用し続けますけど!
はせがわさんの講演
心に残った一言: 悪用厳禁 , 脆弱性みつかったお! → 仕様です(By Design)
Unicode制御文字を埋め込むという例の手法。あんなことを「仕様だから」で終わらせたら絶対だめですね。
デモで仕様の恐ろしさを見せられたときは、ゾクっとしました。怖い怖い。
「仕様なら、その仕様を変更しろ!」 というお言葉は、確かにその通り!グッときました。
せっかく脆弱性を報告しても、受け流されるだけという風習はどうにかしてほしいものです。
実害が出てから動き出しても、遅いんですよ。 ベンダーといい、警察といい。
全体感想
内容についての感想は力尽きたので、また明日にでも・・・
明日必ず!!
他の人のレポート
講師陣の方々(発表者順)
- 2009-02-08
- 未来のいつか/hyoshiokの日記 - TAKESAKO @ Yet another Cybozu Labs: キャラバン京都に来ています
- キャラバン京都終了 - 極楽せきゅあ日記
- セキュリティ&プログラミング キャンプ・キャラバン 京都 - 葉っぱ日記
実況中継編
端的なまとめ・感想編
- キャラバン京都参加しました - hitode909のダイアリー
- セキュリティ&プログラミングキャンプ・キャラバン2008 -京都- に行ってきました - い~さねっと
- 「セキュリティ&プログラミングキャンプ・キャラバン2008 -京都-」に参加して - orz blog
- セキュリティ&プログラミングキャンプキャラバンに行ってきたお(^ω^) - ねこかぶりのさけびごえ
後日談 (追記 2009/02/09 )
上原先生にこのブログの存在がばれてしまいました。
ブロバレ(笑)