まめ畑

ゆるゆると書いていきます

セキュリティ&プログラミングキャンプキャラバンに行ってきた【前半】

という事で、今回も簡単にまとめたいと思います。
毎度の事ですが、抜けがあるかもしれないのでご注意を。
404 Not Found
長丁場だったので、前半と後半2回に分けてエントリを書きます。
後半はセキュリティ&プログラミングキャンプキャラバンに行ってきた - まめ畑

プログラミング基礎(吉岡 弘隆さん)

ソースコードを読むための方針という話を始めて聞いたので大変参考になった。
コードを読むためには複数の視点を持つ事が大切であり、多角的にコードと向き合う事必要があると感じた。

  • プログラミングが好きな人と出会うこと、そのような人を増やすこと
  • アルゴリズムとは
    • 問題を解くための手順を定式化して表現したもの
    • コンピュータにアルゴリズムを指示するための命令がプログラム
  • なぜアルゴリズムを学ぶのか
    • 優れた先人の知恵がある
    • 優れたアルゴリズムとは何かを学ぶ
    • アルゴリズムとデータ構造を全く新たに考案しなければならない事はめったにない
    • 基本的なアルゴリズムの組み合わせで多くの問題は解ける
    • 何が既に解明されているか調べないと、車輪の再開発になってしまう
    • 自己流アルゴリズムは、開発に時間がかかったり、実行時間も遅くて拡張性も低い・・・
  • なんで読むの?
    • 仕事・趣味・不順な動機色々あるよね
    • コードは読むな、理解しろ
  • ソースコードを読む視点
    • 静的理解(字面での理解)
    • 動的理解(動作による理解)
    • 動的構造(規模・ディレクトリ構造・命名規則)
    • 動的構造(呼び出し経路・往路ファイリング・実行結果)
    • 微視的(細部からの理解)
    • 巨視的(全体からの理解)
  • 規模の把握
    • 規模を知らないと作戦を立てられない
    • 大規模になるほど、システマティックな方法論がいる
  • トップディレクトリは、ソフトウェアの論理的構造を表している
  • ソースツリーの把握は重要
  • 変更履歴を読むとソフトの成長の歴史がわかる
  • 情報収集
    • ML
    • 開発者に直接聞く
    • Bug DB
    • Googleに聞く
  • インターネットが変えた社会〜OSSについて〜
    • インターネットが全てを変えた
    • 大規模ソフトウェアを作る場合も、同じ場所に集まる必要が無くなった
    • 商品としてのソフトウェアはコードだけでなく、マニュアルやサポート・教育も含まれる
  • フリーソフトウェア
    • ソフトウェアは自由に利用出来るべきだと考える人がいる(80年代から積極的に活動している)
  • OSS
    • 90年台になってインターネットが普及した
    • 公開して自由に利用・改良・配布できるようにしたもの
    • フリーソフトという言葉を嫌った
    • 楽しいと作ったソフトウェアがどんどん普及していく
    • インターネットを動かしているソフトウェアの殆どがOSS
    • 誰もコントロール出来ない
    • 混沌の世界から開発される
    • 誰かに命令されているわけではない
    • 金銭的な報酬は無い
  • コミュニティによる開発
    • 見たこともあったことも無い人達が協力している
    • 技術はみんなのもの
    • 技術は会社に独占されるべきではなく、みんなの物でありそれが社会を豊かにする
    • OSSはみんなのものにしたら進化・進歩した例
    • ソフトウェアによって世界を良い方向へ変えていける
    • 誰でも参加出来る
    • 参加資格は、情熱、ちょっとした勇気と行動力
  • 勉強会へ行こう!
    • 楽しい
    • 専門家と知り合いになれる かも
  • 勉強会への参加の仕方
    1. IT勉強会カレンダーで興味のあるものを探す
    2. 行く(名刺を持っていくといいよ)
    3. 感想をBlogに書く
    • 人と出会うことの重要性
  • U20プログラミング・コンテスト
  • まとめ
    • ソフトウェアを作るのは楽しい
    • 世界中の人と協力して作るのはもっと楽しい
    • 世界規模の開発コミュニティがある

プログラミング応用(Webプログラミングの未来について)(竹迫 良範さん)

まずはこれが流れた。始めてみた。
D



NAMAZUソースコードは型紙!?
ドキュメントもビルドの方法もあるよ
オープンソースToysプロジェクト

  • Webプログラミングの未来について
    • Javascriptについてのお話
    • 地方とITについて
  • クライアント側でJSを必須とするWebアプリが増えてきた
  • RJSテンプレート(RubyでJSを自動生成するもの)
  • コンピュータの高速化でLLでも高速に動作するようになった
  • JSエンジン色々あるよね
  • V8の登場などで高速化競争激化
  • 量質転化の法則
    • 量が質に転化する時
    • 量を積み重なることで質的な変化が起こること
  • 言語処理系 → Javascript
    • logo.js
    • JsRuby
    • HotRuby
  • PHPJavascript
    • JSmarty
    • JSで動くテンプレートエンジン
    • Smartyクローン
    • 利用出来るメソッドやプロパティは殆どそのまま
  • サーバサイドでjsを共有
    • クライアントとサーバサイドで共有化
  • OPEN JSAN
    • JSのライブラリ集(CPANみたいなやつ)
    • 盛り上げていこう!
    • JSAN - Home
  • 地方におけるIT
    • インターネット → 地域の壁を簡単に越えられる
    • 地域格差は無くなる
    • 地域格差はもっと広がる(ex. 新幹線神話)
    • 情報 → 世界中どこにいても同じ情報が得られる
  • 地方にいると
    • 地方のことを第一に考える
  • 東京にいると
    • 日本全体のことを考えられるようになる
  • アメリカにいると
    • 世界全体のことをかんがえられるようになる
  • Mylingual.net
    • サイトを各言語に翻訳するサービス
    • 機械翻訳ではなく、ユーザがWiki形式でデータを編集
    • 正規表現もつなげるよ
    • セキュリティも大丈夫
  • 感想

Javascriptで実装された言語処理系は面白そう。
いくつか前から使ってみたかった物もあるので、使って何かを作ってみよう。
PCの高速化と処理系の高速化はこれからもどんどん進んでいけば、もっと面白い事が出来そうだ。

セキュリティ&プログラミングキャンプキャラバンに行ってきた【後半】

後半の内容です。
後半はセキュリティのお話。
前半はセキュリティ&プログラミングキャンプキャラバンに行ってきた - まめ畑
後半最初は、セキュリティ&プログラミングキャンプの説明と、その様子をビデオで紹介でした。
自分は、既に応募出来る年齢を超えているのですが、若いうちからこんな熱いイベントに参加出来るって凄い機会だなぁと思った。
出会いって本当に大切ですね。
今年もあるそうなので、参加資格出来る方は是非!

情報セキュリティ基礎(正しい情報セキュリティを学ぶ)(園田 道夫さん)

  • 個人情報漏洩事件発生(銀行)
    • ラップトップがいつの間にか消えたらしい
    • セキュリティ対策を聞いてみた
    • 凄く固いです
    • 認証が何十にもかかっていた
  • 最強のノートPC
    • 指紋認証
    • パスワードを覚えなくていいので便利
    • でも、指紋はノーパソに付いている
    • 「生体認証」破って入国
  • 生体認証は安全?
    • 指紋 → テープ・接着剤
    • 顔 → マスク・顔写真
    • 静脈
    • 光彩 → 同じ反射の模型
    • サイン → タイミングや筆跡の模倣訓練
  • 生体認証の弱点
    • 鍵となる情報は広義のハッシュ = オリジナル情報のダイジェスト版
    • 鍵を盗まれたときの交換など
    • 認証精度不足
  • Windowsパスワードの問題点
    • 14文字以下は脆弱な暗号化
    • 下位互換のため
    • LAN Manager
    • XPは標準だとこれ(Vistaは違う)

これは、XPでも無効に出来るはずだけどProfessionalだけっだった気がする。15文字以上にすればいいんだけど。

  • いつものWebサイトを汚染する
    • 2008年前半から大流行中 = SQLインジェクション
    • パッチを当てとく
    • ブラウザでも対策が進んできている
  • パスワードは短いのはだめ
  • 定期的にパスワードは変更しよう
  • 鍵の管理が重要
  • HDDの暗号化
    • HDDを外しても中身を見られないようにする
    • 暗号化の仕組み = データ+暗号化
    • EFS(低レベルだとHDDに鍵が保存されている)
    • 鍵を外部で保存するモードにしないとだめ
    • チップで暗号化を行うやつがういいよね
  • HDDの鍵はどこにある?
    • 普通は読めないHDDの領域の中
    • 上書き?
    • 同型のディスクで同設定
    • 領域特定で無力化
  • ノートPCのセキュリティ対策
    • ログオンしにくくする
    • USBキーによるログイン制限
    • 中身を直接覗かれなくする

セキュリティ応用(文字コードとセキュリティ)(はせがわ ようすけさん)

  • やる夫でわかる脆弱性
  • 脆弱性の様な仕様もあるんだ
  • でも、公表をとめられる・・・
  • みつけたらどうすんの?
  • 脆弱性と仕様のボーダーライン上にあり、文字コードに関連する事例
  • 多対一の変換が引起す問題
    • Unicodeには2種類の「\」がある
    • パス区切り(バックスラッシュ)
    • 円マーク
    • Unicodeから他の文字コードへの変換では多対一で行われる
  • Unicodeで入力された文字→検査→文字コードの変換→処理
    • 検査をすり抜ける
    • パストラバーサル発生
    • インデックス対象外のファイルも登録されたり
    • メールの添付ファイルが上書きされたり
    • Windowsが暗黙のうちにUnicodeS-JISに変換する
    • Windowsの仕様ですとの返答がMSから
    • 円記号以外にも多数の文字がこの対象
    • Windowsの仕様なのでアプリ作成側で正しく対策しないといけない
    • Unicodeのまま扱い、文字コードを変換しない
    • 変化後に検査をする
  • Unicodeを利用した拡張子の偽装
    • Unicodeは「双方向機能」を持つ
    • 文字列の一部分だけを右から左に表示出来る
    • RLOやPDF
    • (RLO)ABCD(PDF) → DCBA
    • Unicode文字の挿入
    • hoge.txt.exe → hoge.exe.txt ←反転するけど実行ファイルとして認識される
  • みつけたらどうする?
    • 脆弱性の定義を確認(ベンダーが規定している場合もある)
    • 連絡先を探す
    • 専用の連絡先だと問題が伝わらない事もある
    • 一般の連絡先だと問題点が伝わらない場合も
    • 連絡先を調べなくていい
    • 脆弱性を握りつぶられることが少ない
    • 公開や周知の手間が減る
    • 他いろいろ
    • 期待してはいけないこと
    • 確実な修正
    • 違法な手法で発見したときの保護
    • 匿名での通報
    • 他いろいろ
  • 仕様ですって言われたら・・・
    • 脆弱性でないと明確なら公開もあり
    • 原理を知らしめる事で広く注意喚起につながるなら公開
    • 脆弱性で無いことが明確でも、IPAである程度対応してくれる
  • ベンダに仕様変更を強く促す
  • 仕様変更の要望のフィードバックを提出
  • 正規のルートを通じたほうが改善の見込みが高い
  • コミュニティを通して改善を望む声を集める
  • ケースバイケースで判断する必要がある
  • 重要なのは、影響範囲を考えつつ、「どうすれば安全になるのか」を考える
  • 正しい知識を身につけ、正しい道に技術を生かそう

感想

今回のキャラバンでは、ソフトウェアとセキュリティの両方のお話を聞く事が出来て凄く勉強になった。
ソフトを作る上でも、サーバを管理する側でも安心してユーザが利用出来る状態でサービスを提供するためにセキュリティはやっぱり重要で、それを意識して作っていく事の重要性を改めて強く感じました。
こういう機会は本当に重要で刺激になります。