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