ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

セキュア・プログラミング講座(Webアプリケーション編)第2弾:マッシュアップ

2013-12-13 19:45:48 | JavaとWeb

『セキュア・プログラミング講座(Webアプリケーション編)』第2弾:マッシュアップ(12/13)
http://topse.or.jp/2013/10/2068

に行ってきた!その内容をメモメモ




従来のWebアプリケーション
・紙芝居的な画面遷移
  わりとゆっくりとした動き
AJAX流アプリケーション
・滑らかな画面変化
  反応速度はやい
構図の変化
 従来は、サーバー側が動的
 AJAXは、ブラウザで動き、サーバーはデータを与える

1.WebAPI
 Webアプリケーションとなに違う?
  →ユーザーの会話を想定しない
 クライアントへデータや演算結果
・REST
  Representational State Transfer

 HTTPリクエストと対応付ける
 特徴4つ
  ・ステートレスな通信プロトコル
  ・リソースでステートを表現
  ・簡素化されたオペレーション
  ・URIのパス部分でリソースを識別

 RPC,SOAPはソフト複雑になる
  →REST風

 Ruby on Railのresourcesタイプルーティング

2.マッシュアップの構図
・マッシュアップ
  音楽DJの世界におけるマッシュアップ
 →Webにおける「マッシュアップ」
    複数の既存WebAPIを組み合わせ
    新たなWebアプリケーションを作成

 2種類のマッシュアップ
  クライアント側マッシュアップ
  サーバー側マッシュアップ

マッシュアップに対する侵害パターン
  悪意のAPI→ゆーざー
  悪意のAPI→API
  無関係のサイト→API
  無関係のクライアント→API

今回はブラウザが侵害される「悪意のAPI→ゆーざー」を考える

Javascript
 インタプリタ言語
 Javaに似た構造(似て非なる言語)
 動的型言語(実行時に型が決まる)
 オブジェクト指向(プロトタイプを使う)
 リテラル表記の表現力
 関数型プログラミング

制御構造
 分岐
 ループ
 ループから脱出

コンストラクタとプロトタイプ
 コンストラクタ関数/new Foo() 新しいオブジェクト
   →プロトタイプオブジェクト
      →プロパティ

 コンストラクタはオブジェクトに振る舞いを与える
 プロトタイプがチェーンにより、継承に相当することができる

ブラウザのJavascript実行環境
・ECMAスクリプトオブジェクト
・ブラウザオブジェクト
・DOM
・Javascriptアプリケーションコード

windowとグローバルオブジェクト
・グローバルオブジェクト:
  すべてを収容するトップレベルオブジェクト
・ブラウザのグローバルオブジェクト=window
  document = window.document

4.クライアント側コードに起因するスクリプト注入
・innerHTML
  スクリプト注入攻撃できる
  →ID,パスワードを入れるようにさせる&のっとりできる
 →imgタグで src=/でかならず、失敗させ、
  onerrorの先に、実行したいことを記述する。

病理メカニズム
・スクリプトはどこにある
  head,bodyのscriptタグ
  イベントハンドラ
・スクリプトはいつ実行されるか?
  (1)HTMLが読み込まれたとき
  (2)イベントハンドラ:イベント起きたとき
  (3)動的に:動的についたとき
  (4)くっつけたときにイベントが起きればすぐに
      →onerror
・スクリプト注入
 外から来た値
  HTTPリクエスト
  クッキー
  WebAPI
  別のクライアント

 DOM,eval関数→スクリプト動く

・攻撃パターンの入口
  location
  クッキー
  XMLhttpRequest
  WebSocket:第三者
  postMessage()
  Window.name
  WebStorage

・どこに行くと危ない
  eval系
   eval
   function→文字列から関数
   settimer
  scriptタグ
  IFRAMEタグ→サンドボックス属性,
  イベントハンドラ
  innerHTML
  document.write

対策
・インラインスクリプトを避ける
  →スクリプトを分離する
 サーバー側コードでスクリプトを出力せず、別ファイルで
・入力を警戒する:仕様を決めて、入力チェックする
・正規表現のバグに注意する
 .+,.*は貪欲なので、工夫する
 .は改行文字にはマッチしない
   ユニコード2028攻撃
 ^と$を忘れない
  (\A,\zはjavascriptではサポートされていない)
・タグではなく、テキストとして出力する
・JQueryで$(検索式)→検索式のところで、タグが生成されることも
  →findを使う
・html()は危ない→innerHTMLと同じ
  →text()で書く
・$.parseHTML()の使用も避ける

5.同一源泉と他源泉
・これまでの脅威の構図
  クライアントから脅威
 最近は
  サーバーが脅威
源泉:Webコンテンツの出所
 スキーム、ホスト、ポートの3つ組み
 これが違うと、源泉が違うかも
   例:ポート80、ポート8080

セキュリティ確保のための源泉
・同一源泉ポリシー
  かつての制約
  →マッシュアップにとっては不便
抜け道
・JSONP
・iframeの3重
・iframe+postMessage
・webワーカー+importScript

→XMLHttpRequest level2 XHR2
→IEではXDomainRequest
Originリクエストヘッダー→Access-Control-Allow-Origin
 →サーバーには拒否権がある
 →ブラウザには、歯止めがない
   :スクリプト注入攻撃
対策にはCSP
・ContentSecurityPolicy
  アクセスできる源泉のホワイトリスト
 実装:FireFoxから
 W3CではCSP1.1がドラフト、Androidでもサポート予定

他のマッシュアップ論点
・CSP
・クライアント側マッシュアップにおける
 リクエスト強要(CSRF)
・HTML5の新機能
・javascript向けフレームワーク
・サーバー側マッシュアップ
・IE固有

パーフェクトJavaScript
JQuery 9521
古いバージョン(1.6)などは危ない
でも、前のバージョンも修正されている

HTML5でタグ増えた
onの着かない属性:危ない属性

脆弱性をチェックする仕組み
有償の検査ツール:出始めてはいる

性能、負荷テストのかわりに
セキュリティ用のテストがあっていいはず。

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Wordファイル内の画像の解像... | トップ | JQueryの脆弱性って、ウィル... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事