SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
徳丸本に載っていないWebアプリケーションセキュリティ
Report
Hiroshi Tokumaru
Follow
Security Engineer at EG Secure Solutions Inc.
Apr. 24, 2012
•
0 likes
•
51,089 views
1
of
75
徳丸本に載っていないWebアプリケーションセキュリティ
Apr. 24, 2012
•
0 likes
•
51,089 views
Report
PHPカンファレンス北海道にて 2012/04/21
Hiroshi Tokumaru
Follow
Security Engineer at EG Secure Solutions Inc.
Recommended
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
97.8K views
•
107 slides
とある診断員とSQLインジェクション
zaki4649
78.5K views
•
47 slides
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
CODE BLUE
7.7K views
•
84 slides
SQLインジェクション再考
Hiroshi Tokumaru
1.1K views
•
31 slides
最近のやられアプリを試してみた
zaki4649
24.4K views
•
16 slides
ウェブセキュリティのありがちな誤解を解説する
Hiroshi Tokumaru
5.2K views
•
64 slides
More Related Content
What's hot
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
33.9K views
•
57 slides
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
ssuser070fa9
9.6K views
•
84 slides
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
159.4K views
•
16 slides
Redisの特徴と活用方法について
Yuji Otani
100.2K views
•
65 slides
脱RESTful API設計の提案
樽八 仲川
13.9K views
•
53 slides
[BurpSuiteJapan]HTTP基礎入門
Burp Suite Japan User Group
11.9K views
•
23 slides
What's hot
(20)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
•
33.9K views
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
ssuser070fa9
•
9.6K views
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
•
159.4K views
Redisの特徴と活用方法について
Yuji Otani
•
100.2K views
脱RESTful API設計の提案
樽八 仲川
•
13.9K views
[BurpSuiteJapan]HTTP基礎入門
Burp Suite Japan User Group
•
11.9K views
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
•
145.1K views
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
•
137.9K views
Spring Day 2016 - Web API アクセス制御の最適解
都元ダイスケ Miyamoto
•
22.6K views
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
•
74.1K views
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Masaru Kurahayashi
•
146.1K views
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
•
88.8K views
react-scriptsはwebpackで何をしているのか
暁 三宅
•
9.9K views
[BurpSuiteJapan]Burp Suite実践編
Burp Suite Japan User Group
•
7.8K views
マーブル図で怖くないRxJS
bitbank, Inc. Tokyo, Japan
•
6.5K views
CircleCI vs. CodePipeline
HonMarkHunt
•
5.5K views
基礎からのOAuth 2.0とSpring Security 5.1による実装
Masatoshi Tada
•
30.5K views
Keycloak拡張入門
Hiroyuki Wada
•
10.1K views
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
Hiroshi Tokumaru
•
25.7K views
CloudFront経由でのCORS利用
Yuta Imai
•
12K views
Viewers also liked
Management for Security Life Cycle (日本語版)
Akitsugu Ito
10.8K views
•
72 slides
Ipsj77フォレンジック研究動向
UEHARA, Tetsutaro
9.9K views
•
25 slides
SECCON CTF セキュリティ競技会コンテスト開催について
takesako
12K views
•
18 slides
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
Sen Ueno
19.2K views
•
44 slides
Metasploitでペネトレーションテスト
super_a1ice
23.6K views
•
49 slides
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
21.2K views
•
73 slides
Viewers also liked
(14)
Management for Security Life Cycle (日本語版)
Akitsugu Ito
•
10.8K views
Ipsj77フォレンジック研究動向
UEHARA, Tetsutaro
•
9.9K views
SECCON CTF セキュリティ競技会コンテスト開催について
takesako
•
12K views
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
Sen Ueno
•
19.2K views
Metasploitでペネトレーションテスト
super_a1ice
•
23.6K views
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
•
21.2K views
[CEDEC2017] LINEゲームのセキュリティ診断手法
LINE Corporation
•
12.2K views
osc2016do ひげで学ぶWebアプリケーションに潜むリスク
Ierae Security
•
4.9K views
[BurpSuiteJapan]Burp Suite回答編
Burp Suite Japan User Group
•
5.9K views
初心者向けインターネットの仕組みと8/25の障害についての説明
Ken SASAKI
•
14.7K views
ノリとその場の勢いでPocを作った話
zaki4649
•
6K views
[AVTOKYO 2017] What is red team?
Tomohisa Ishikawa, CISSP, CSSLP, CISA, CISM, CFE
•
5.6K views
CpawCTF 勉強会 Network
Takaaki Hoyo
•
19.4K views
SSL/TLSの基礎と最新動向
shigeki_ohtsu
•
56.7K views
Similar to 徳丸本に載っていないWebアプリケーションセキュリティ
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
近藤 繁延
388 views
•
71 slides
BPStudy20121221
Shinichiro Takezaki
2.6K views
•
65 slides
PHP開発者のためのNoSQL入門
じゅん なかざ
6.3K views
•
66 slides
Webシステム脆弱性LT資料
Tomohito Adachi
1.1K views
•
23 slides
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
3.1K views
•
284 slides
「html5 boilerplate」から考える、これからのマークアップ
Yasuhito Yabe
6K views
•
60 slides
Similar to 徳丸本に載っていないWebアプリケーションセキュリティ
(20)
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
近藤 繁延
•
388 views
BPStudy20121221
Shinichiro Takezaki
•
2.6K views
PHP開発者のためのNoSQL入門
じゅん なかざ
•
6.3K views
Webシステム脆弱性LT資料
Tomohito Adachi
•
1.1K views
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
•
3.1K views
「html5 boilerplate」から考える、これからのマークアップ
Yasuhito Yabe
•
6K views
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
純生 野田
•
3K views
AWSとmod_pagespeedで楽々サクサク高速化!!
aasakawa
•
2.4K views
Oracle R Advanced Analytics for Hadoop利用方法
オラクルエンジニア通信
•
5.6K views
The road of Apache CloudStack Contributor (Translation and Patch)
Kimihiko Kitase
•
1.6K views
PHPの今とこれから2020
Rui Hirokawa
•
2.8K views
Cloud Foundry: Open Platform as a Service
Shunsuke Kurumatani
•
1.6K views
12 総合演習Word Pressの利用
文樹 高橋
•
614 views
Google Compute EngineとPipe API
maruyama097
•
2K views
Google Compute EngineとGAE Pipeline API
maruyama097
•
3.1K views
多要素認証による Amazon WorkSpaces の利用
Amazon Web Services Japan
•
15.2K views
20170809 AWS code series
Atsushi Fukui
•
509 views
汎用性の高い大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善
Ryosuke MATSUMOTO
•
2.5K views
AnsibleおよびDockerで始めるInfrastructure as a Code
Satoru Yoshida
•
548 views
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Kazumi Hirose
•
1.8K views
More from Hiroshi Tokumaru
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
Hiroshi Tokumaru
1.8K views
•
27 slides
徳丸本VMに脆弱なWordPressを導入する
Hiroshi Tokumaru
811 views
•
8 slides
introduction to unsafe deserialization part1
Hiroshi Tokumaru
513 views
•
19 slides
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
Hiroshi Tokumaru
2.6K views
•
50 slides
XXE、SSRF、安全でないデシリアライゼーション入門
Hiroshi Tokumaru
3.6K views
•
48 slides
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Hiroshi Tokumaru
9.4K views
•
84 slides
More from Hiroshi Tokumaru
(20)
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
Hiroshi Tokumaru
•
1.8K views
徳丸本VMに脆弱なWordPressを導入する
Hiroshi Tokumaru
•
811 views
introduction to unsafe deserialization part1
Hiroshi Tokumaru
•
513 views
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
Hiroshi Tokumaru
•
2.6K views
XXE、SSRF、安全でないデシリアライゼーション入門
Hiroshi Tokumaru
•
3.6K views
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Hiroshi Tokumaru
•
9.4K views
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
•
23.9K views
安全なWebアプリケーションの作り方2018
Hiroshi Tokumaru
•
30.1K views
秀スクリプトの話
Hiroshi Tokumaru
•
31.4K views
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
Hiroshi Tokumaru
•
30.4K views
若手エンジニアのためのセキュリティ講座
Hiroshi Tokumaru
•
31.7K views
ウェブセキュリティの常識
Hiroshi Tokumaru
•
31.4K views
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
Hiroshi Tokumaru
•
71.3K views
ウェブアプリケーションセキュリティ超入門
Hiroshi Tokumaru
•
48.4K views
ウェブセキュリティの最近の話題早分かり
Hiroshi Tokumaru
•
71.5K views
安全なPHPアプリケーションの作り方2016
Hiroshi Tokumaru
•
36.8K views
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
Hiroshi Tokumaru
•
52.7K views
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
Hiroshi Tokumaru
•
9K views
セキュアコーディング方法論再構築の試み
Hiroshi Tokumaru
•
38.4K views
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
Hiroshi Tokumaru
•
33K views
徳丸本に載っていないWebアプリケーションセキュリティ
1.
PHPカンファレンス北海道 徳丸本に載っていない
Webアプリケーションセキュリティ 2012年4月21日 徳丸 浩
2.
本日お話しする内容 • キャッシュからの情報漏洩に注意 • クリックジャッキング入門 •
Ajaxセキュリティ入門 • ドリランド カード増殖祭りはこうしておこった…かも? Copyright © 2012 HASH Consulting Corp. 2
3.
徳丸浩の自己紹介 • 経歴
– 1985年 京セラ株式会社入社 – 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍 – 2008年 KCCS退職、HASHコンサルティング株式会社設立 • 経験したこと – 京セラ入社当時はCAD、計算幾何学、数値シミュレーションなどを担当 – その後、企業向けパッケージソフトの企画・開発・事業化を担当 – 1999年から、携帯電話向けインフラ、プラットフォームの企画・開発を担当 Webアプリケーションのセキュリティ問題に直面、研究、社内展開、寄稿など を開始 – 2004年にKCCS社内ベンチャーとしてWebアプリケーションセキュリティ事業を立 ち上げ • その他 – 1990年にPascalコンパイラをCabezonを開発、オープンソースで公開 「大学時代のPascal演習がCabezonでした」という方にお目にかかることも • 現在 – HASHコンサルティング株式会社 代表 http://www.hash-c.co.jp/ – 京セラコミュニケーションシステム株式会社 技術顧問 http://www.kccs.co.jp/security/ – 独立行政法人情報処理推進機構2012 HASH Consulting Corp. http://www.ipa.go.jp/security/ Copyright © 非常勤研究員 3
4.
本を書きました
2011年3月5日初版第1刷 2011年12月13日 初版第5刷 Copyright © 2012 HASH Consulting Corp. 4
5.
キャッシュからの情報漏洩に注意
Copyright © 2012 HASH Consulting Corp. 5
6.
Webアプリケーションとキャッシュ • フレームワークのキャッシュ機能 • リバースプロキシ •
フォワードプロキシ • ブラウザのキャッシュ機能 • キャッシュは、Webアプリケーションの負荷を軽減し、 応答を高速化するために用いられる • サイト運営側が設置するキャッシュと、閲覧側(ISP等 を含む)が設置するものがある Copyright © 2012 HASH Consulting Corp. 6
7.
キャッシュからの情報漏洩とは? • いわゆる「別人問題」 • 秘密情報がキャッシュされて、それを別人が見る状況
– 最初のアクセスは正当な権限あり →表示内容がキャッシュされるに – 次のアクセスは権限のないユーザ →同一URLを参照すると、キャッシュされた情報を閲覧してし まう • 続きはデモで Copyright © 2012 HASH Consulting Corp. 7
8.
Demoの構成 ブラウザ
OpenPNE 3.4.12.1 PROXY squid PHP/MySQL Ubuntu 10.04LTS refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|?) 0 0% 0 refresh_pattern (Release|Package(.gz)*)$ 0 20% 2880 refresh_pattern . 1440 20% 4320 override-lastmod ※デモ環境では、WebサーバーとProxyサーバーは同一VM上で稼 働 Copyright © 2012 HASH Consulting Corp. 8
9.
サトーさん
タナカさん Demo Copyright © 2012 HASH Consulting Corp. 9
10.
ブラウザキャッシュのデモ
デフォルト Copyright © 2012 HASH Consulting Corp. 10
11.
そもそもこれは脆弱性なのか? • PROXY設定の問題ではないのか?
– PROXY設定の問題とは言い切れない – squidの標準的な機能の範囲である – PROXY設定の基準が明確にあるわけではない • RFC2616 13.4 Response Cacheability – (原文)A response received with a status code of 200, 203, 206, 300, 301 or 410 MAY be stored by a cache and used in reply to a subsequent request, subject to the expiration mechanism, unless a cache-control directive prohibits caching. – (日本語訳)200, 203, 206, 300, 301, 410 のステータスコードと 共に受信されたレスポンスは、cache-control 指示子がキャッ シングを禁止していなければ、キャッシュによって保存され、 以降のリクエストへの応答に使用され、期限メカニズムに従う 事ができる。 http://tools.ietf.org/html/rfc2616#section-13.4 http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec13.1.3 より引用 Copyright © 2012 HASH Consulting Corp. 11
12.
ブラウザのキャッシュはどうか • ブラウザのキャッシュも同様だが • そもそも、ブラウザを共有することが問題 •
Windows95,98,MEの時代ならともかく、2012年の時点 では、端末は共有しても、ユーザは別にすべし。そうす れば問題は発生しない • つまり、「はてなブックマークでのデモ事例」は許容可 能 • とはいえ、Webサイト提供者としては対策することが望 ましい Copyright © 2012 HASH Consulting Corp. 12
13.
対策 • HTTPレスポンスヘッダで「キャッシュを禁止するヘッダ」を応
答することが根本対策 • セキュアプログラミング講座には… 1. Cache-Control: private Webサーバから返されるコンテンツがただ一人のユーザのためのものであること を示す。このコンテンツは、複数のユーザが共有されるキャッシュに記録されるべ きではないことを表している。ただし、これは、一人のユーザのみが利用するキャ ッシュ(ブラウザのキャッシュ等)への記録を禁じるものではない。Cache- Control: private のみが指定されている場合、何らかのキャッシュへの記録が行わ れるおそれがある。 2. Cache-Control: no-store このヘッダは、Webサーバから返されてくるコンテンツをキャッシュに記録する な、という指示である。 3. Cache-Control: no-cache 一見「キャッシュを使うな」のように見えるこのヘッダが実際に意味するところ は少々ニュアンスが異なる。このヘッダの意味は、いちどキャッシュに記録された コンテンツは、現在でも有効か否かを本来のWebサーバに問い合わせて確認がと れない限り再利用してはならない、という意味である。 4. Cache-Control: must-revalidate このヘッダは、キャッシュに記録されているコンテンツが現在も有効であるか否 かをWebサーバに必ず問い合わせよ、という指示である。 http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/405.html より引用 13
14.
対策(続き) • HTTP/1.0対策として –
Pragma: no-cache – 非標準の方法であり、確実なものではない • その他の手法 – 「現場の知恵」としてURL(クエリ文字列)にランダムな数字 を付加することが行われる • 例: http://example.jp/private.php?rand=8314329428479210 – HTTPSにする • 通常のPROXYはHTTPSのメッセージをキャッシュしない(できない) • リバースPROXY、ブラウザはキャッシュする可能性があるので過信し ないこと – テストする • 別ユーザ or 非ログイン状態で、同じURLをアクセスする Copyright © 2012 HASH Consulting Corp. 14
15.
乱数をURLにつける例 Copyright © 2012
HASH Consulting Corp. 15
16.
クリックジャッキング入門 Copyright
© 2012 HASH Consulting Corp. 16
17.
クリックジャッキング攻撃 • ターゲットの画面をiframe上で「透明に」表示する • その下にダミーの画面を表示させる。ユーザにはダミー
の画面が透けて見える • 利用者がダミーの画面上のボタンを押すと、実際には全 面のターゲット画面のボタンが押される 本当の画面(前面、透明) ダミーの画面(後面) • 続きはデモで Copyright © 2012 HASH Consulting Corp. 17
18.
クリックジャッキングの対策 • クリックジャッキングの影響はクロスサイト・リクエス
トフォージェリ(CSRF)と同等 – ユーザの意識とは無関係に、ユーザの権限で操作が行われる • クリックジャッキングされると困るページには、X- FRAME-OPTIONSヘッダを指定する(徳丸本P63) – frame/iframeを禁止して良い場合 header('X-FRAME-OPTIONS', 'DENY'); – frame/iframeを禁止できないが単一ホストの場合 header('X-FRAME-OPTIONS', 'SAMEORIGIN'); • CSRF対策のトークン発行しているページが対象となる • メタ要素によるX-FRAME-OPTIONS指定は無効です。 徳丸本第3刷までの記述は間違いです(_ _) Copyright © 2012 HASH Consulting Corp. 18
19.
CSRF対策との関係
入力/確認画面 更新・実行画面 更新してよろしいですか? 更新しました 実行 トップへ •トークン埋め込み •トークン確認 •X-FRAME-OPTIONS ヘッダ出力 トークン埋め込みしている画面に、X-FRAME- OPTIONS ヘッダを出力する(全ての画面で出力しても良い) Copyright © 2012 HASH Consulting Corp. 19
20.
Ajaxセキュリティ入門 Copyright ©
2012 HASH Consulting Corp. 20
21.
Ajaxはあたりまえになったけど、 Ajaxのセキュリティは当たり前に なってない
Copyright © 2012 HASH Consulting Corp. 21
22.
たとえば入門書の問題 Copyright ©
2012 HASH Consulting Corp. 22
23.
とある入門書のサンプル
Copyright © 2012 HASH Consulting Corp. 23 よくわかるJavaScriptの教科書、たにぐちまこと著、2012 P228より引用
24.
この本です
24
25.
動かしてみる Copyright © 2012
HASH Consulting Corp. 25
26.
結果 Copyright © 2012
HASH Consulting Corp. 26
27.
JSON作成をPHPに 生成されるJSON [{"image":"img/1.jpg","image_big":"i mg/1_big.jpg","caption":"u30adu30e 3u30d7u30b7u30e7u30f31"}]
Copyright © 2012 HASH Consulting Corp. 27
28.
結果 Copyright © 2012
HASH Consulting Corp. 28
29.
データにJavaScriptを入れてみる 生成されるJSON [{"image":"img/1.jpg","image_big":"i mg/1_big.jpg","caption":"u30adu30e 3u30d7u30b7u30e7u30f31<script>ale rt(1)</script>"}]
Copyright © 2012 HASH Consulting Corp. 29
30.
結果 Copyright © 2012
HASH Consulting Corp. 30
31.
脆弱性の原因と対策 • htmlメソッドによりHTMLテキストを設定しているにも
関わらず、データをHTMLエスケープしていない • ただし、元文献は固定テキストなので、必ずしも脆弱性 とは言えない • HTMLエスケープするタイミングは、以下の候補がある – ブラウザでレンダリングする箇所 – JSONを組み立てる段階で、あらかじめHTMLエスケープして おく Copyright © 2012 HASH Consulting Corp. 31
32.
次の話題 evalインジェクション Copyright ©
2012 HASH Consulting Corp. 32
33.
JSON解釈をevalでやってみる
Copyright © 2012 HASH Consulting Corp. 33
34.
JSON作成も自前で <?php $image
= 'img/1.jpg'; $image_big = 'img/1_big.jpg'; $caption = 'キャプション2'; $a = '[{"image":"' . $image . '","image_big":"' . $image_big . '","caption":"' . $caption . '"}]'; echo $a; 生成されるJSON [{"image":"img/1.jpg","image_big":"img/1_b ig.jpg","caption":"キャプション2 "}] Copyright © 2012 HASH Consulting Corp. 34
35.
結果 Copyright © 2012
HASH Consulting Corp. 35
36.
データにJavaScriptを入れてみる <?php $image
= 'img/1.jpg'; $image_big = 'img/1_big.jpg'; $caption = 'キャプション2x"+alert("1")+"'; $a = '[{"image":"' . $image . '","image_big":"' . $image_big . '","caption":"' . $caption . '"}]'; echo $a; 生成されるJSON [{"image":"img/1.jpg","image_big": "img/1_big.jpg","caption": "キャプション2x"+alert("1")+""}] Copyright © 2012 HASH Consulting Corp. 36
37.
結果 Copyright © 2012
HASH Consulting Corp. 37
38.
脆弱性の原因と対策 • JSON/JavaScriptとしての適切なエスケープを怠ってい
ることが根本原因 • 根本単位策:JSON生成を自前でしないで、信頼できる ライブラリを用いる • 保険的対策(強く推奨):evalでJSONを解釈しない。 Copyright © 2012 HASH Consulting Corp. 38
39.
次の話題 json.phpを直接ブラウズしてみる
Copyright © 2012 HASH Consulting Corp. 39
40.
データを少しいじりましょう Copyright
© 2012 HASH Consulting Corp. 40
41.
さまざまなブラウザでの結果 Copyright
© 2012 HASH Consulting Corp. 41
42.
で、IE9は? Copyright © 2012
HASH Consulting Corp. 42
43.
大丈夫なのか Copyright © 2012
HASH Consulting Corp. 43
44.
でも、だめ http://example.jp/json.php/a.html
Copyright © 2012 HASH Consulting Corp. 44
45.
Copyright © 2012
HASH Consulting Corp. 45 http://d.hatena.ne.jp/hasegawayosuke/20110106/p1 より引用
46.
Copyright © 2012
HASH Consulting Corp. 46 http://d.hatena.ne.jp/hasegawayosuke/20110106/p1 より引用
47.
X-Content-Type-Options: nosniff を入れてみる
生成される JSON X-Content-Type-Options: nosniff Content-Length: 125 Content-Type: application/json; charset=utf8 [{"image":"img/1.jpg","image_big":"img/1_b ig.jpg","caption":"u30adu30e3u30d7u30b7 u30e7u30f31<body onload=alert(1)>"}] Copyright © 2012 HASH Consulting Corp. 47
48.
IE9だとOK(IE8以上) Copyright © 2012
HASH Consulting Corp. 48
49.
IE7だとだめ Copyright © 2012
HASH Consulting Corp. 49
50.
50
51.
対策 • 必須対策(全ブラウザ共通)
– レスポンスがブラウザによりtext/htmlと解釈されないようにす る X-Content-Type-Options: nosniff Content-Type: application/json; charset=utf8 • IE6,7対策 – IE7以前をサポートしない – ブラウザからの直接リクエストを受け付けない – 「<」、「>」などもエスケープする Copyright © 2012 HASH Consulting Corp. 51
52.
Json_encodeのパラメータを追加 生成される JSON [{"image":"img/1.jpg","image_big":"img/1_bi g.jpg","caption":"u30adu30e3u30d7u30b7u3 0e7u30f31u003Cbody onload=alert(1)u003E"}]
Copyright © 2012 HASH Consulting Corp. 52
53.
今度は大丈夫 Copyright © 2012
HASH Consulting Corp. 53
54.
次の話題はJSONハイジャック
Copyright © 2012 HASH Consulting Corp. 54
55.
Firefox3などで発現。現在の主要ブ
ラウザでは対策されている Copyright © 2012 HASH Consulting Corp. 55
56.
JSONハイジャックとは • JSONを罠サイトからscript要素で読み出す • 利用者のブラウザからは、正規のCookieが送信されるの
で、認証ずみの状態でJSONが取得できる • なんらかの手法で、このJSONの中味を読むのがJSONハ イジャック これは罠サイト <script> ここにJSONを読み出す仕掛けを置く // script要素で読み出したJSON [{"name":"Yamada", "mail":"yama@example.jp"}] </script> Copyright © 2012 HASH Consulting Corp. 56
57.
サンプルスクリプト(罠) Copyright ©
2012 HASH Consulting Corp. 57
58.
結果 Copyright © 2012
HASH Consulting Corp. 58
59.
Firefox11.0だと問題なし Copyright ©
2012 HASH Consulting Corp. 59
60.
Androidの標準ブラウザでハイジャック成功
Xperia ARC(SO-01C) Android 2.3.4 でキャプチャ Galaxy Nexus Android 4.0.3では取得できず Copyright © 2012 HASH Consulting Corp. 60
61.
対策 • script要素からのリクエストにはレスポンスを返さない
ようにする – XMLHttpRequestからのリクエストに特別なヘッダを入れてお き、JSON提供側でチェックするなど Jqueryの以下のヘッダを使っても良いかも X-Requested-With: XMLHttpRequest – POSTにのみ応答(個人的には好みません) • JSONデータを、JavaScriptとして実行できない形にする – 1行目に for(;;) ; を置く(個人的には好みません) – JSONデータをJavaScriptとして実行できない形にする(同 上) • JSONハイジャック可能なブラウザを使わない(利用者 側でとれる対策) Copyright © 2012 HASH Consulting Corp. 61
62.
まとめ • HTML5の話題が盛り上がる中、HTML4のAjaxのセキュ
リティが当たり前になっていない • 分かっている人と分かってない人の二極化が進んでい る? • どうすればよいか、よく考えよう • CSRF等もふつーに発生するので、ふつーに対策するこ と Copyright © 2012 HASH Consulting Corp. 62
63.
ドリランド カード増殖祭りはこうし ておこった…かも?
Copyright © 2012 HASH Consulting Corp. 63
64.
64 https://help.gree.jp/app/answers/detail/a_id/3231 より引用
65.
こんな感じだった? 必要なもの 携帯もしくはPCを二台 gleeアカウント二つ 二台の機器でそれぞれのgleeアカウントでログインしてドリ ランド起動後お互いでトレードさせる トレード(受け取りはしない)が終わったら片方の機器はログア ウトして二つの機器のアカウントを同じにする それぞれトレード品受け取り画面にして受け取るボタン同時 押し カード毎にID振って無いのかよ。。。。 馬鹿じゃねぇの? >>277 ちゃんとふってあるけど、トレード時にトレードされる側と する側で ちゃんとアイテムIDが変わる仕様だったw
65 http://jin115.com/archives/51849925.html より引用
66.
こんな感じだった? DBからトレード元のカードのデータを読み取る 新しいIDをつけてトレード先に保存する トレード元のデータを削除する
http://bakera.jp/ebi/topic/4722 より引用 66
67.
作ってみた // トレードするカードのidと新オーナーのidがパラメータ $item_id =
(int)$_GET['item_id']; $newowner = (int)$_GET['newowner']; // カード情報を取得 $stmt = $pdo->query( "SELECT * FROM cards WHERE item_id=$item_id"); $row = $stmt->fetch(PDO::FETCH_ASSOC); $kind = $row['kind']; $owner_id = $row['owner_id']; // トレード後のカードを作成 $stmt = $pdo->exec("INSERT INTO cards VALUES (NULL, $kind,". "$newowner, $item_id, $owner_id, NOW())"); // 元のカードを削除 $stmt = $pdo->exec( "DELETE FROM cards WHERE item_id= $item_id "); ※デモスクリプトはプレースホルダをちゃんと使っています! Copyright © 2012 HASH Consulting Corp. 67
68.
DEMO Copyright © 2012
HASH Consulting Corp. 68
69.
中ではこうなった Copyright © 2012
HASH Consulting Corp. 69
70.
対策 • トランザクションを使う –
PDOの場合は、begeinTransaction ~ commit / rollbackの間 • ロック(排他制御) – SELECT … FOR UPDATE など • 上記の両方が必須 – トランザクションを使うだけでは排他制御にならない場合が多 い 厳密にはDB依存 および モードに依存 • 「クリティカルセクション」に注意 – このスクリプトの場合は、SELECT ~ DELETE FROMまでは クリティカルセクションであり、同一カードIDについては並行 動作してはいけない • ちゃんとRDBを基礎から勉強しよう Copyright © 2012 HASH Consulting Corp. 70
71.
トランザクションと行ロックで対策 try {
$pdo->beginTransaction(); $item_id = (int)$_GET['item_id']; $stmt = $pdo->query( "SELECT * FROM cards WHERE item_id=$item_id FOR UPDATE"); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (! $row) throw new DataNotFoundException(); $kind = $row['kind']; $owner_id = $row['owner_id']; $stmt = $pdo->exec("INSERT INTO cards VALUES (NULL, $kind,". "$newowner, $item_id, $owner_id, NOW())"); $stmt = $pdo->exec( "DELETE FROM cards WHERE item_id=$item_id"); $pdo->commit(); } catch (DataNotFoundException $e) { $pdo->rollback(); } catch (Exception $e) { // …… ※上記は概要でありデモスクリプトはプレースホルダをちゃんと使っています! Copyright © 2012 HASH Consulting Corp. 71
72.
中ではこうなる Copyright © 2012
HASH Consulting Corp. 72
73.
トランザクションを難しくする要因 • NoSQL • Memcached •
データベースのパーティショニング、シャーディング • データベースのレプリケーション • LDAP、ファイル等トランザクション非対応のストレー ジ • … • 完全なロールバックが難しい場合でも、排他制御だけな ら比較的容易に実装できる場合がある Copyright © 2012 HASH Consulting Corp. 73
74.
まとめ • 徳丸本に載っていない脆弱性をいくつか紹介しました • 「徳丸本に載っていることだけやっていればおk」ではない •
プログラミングの基礎(並行処理、トランザクション、etc)を勉 強しよう • そうは言っても、まずは「徳丸本」のマスターから始めよう(宣 伝) Copyright © 2012 HASH Consulting Corp. 74
75.
Thank you!
Copyright © 2012 HASH Consulting Corp. 75