Soumettre la recherche
Mettre en ligne
徳丸本に載っていないWebアプリケーションセキュリティ
•
165 j'aime
•
51,219 vues
Hiroshi Tokumaru
Suivre
PHPカンファレンス北海道にて 2012/04/21
Lire moins
Lire la suite
Signaler
Partager
Signaler
Partager
1 sur 75
Recommandé
とある診断員とSQLインジェクション
とある診断員とSQLインジェクション
zaki4649
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
Hiroshi Tokumaru
XSS再入門
XSS再入門
Hiroshi Tokumaru
ウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説する
Hiroshi Tokumaru
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
今さら聞けないXSS
今さら聞けないXSS
Sota Sugiura
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
zaki4649
Contenu connexe
Tendances
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
abend_cve_9999_0001
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
とある診断員とAWS
とある診断員とAWS
zaki4649
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
Yuta Imai
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
Hiroshi Tokumaru
SQLインジェクション総”習”編
SQLインジェクション総”習”編
Yasuo Ohgaki
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
Hiroshi Tokumaru
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
[BurpSuiteJapan]Burp Suite実践編
[BurpSuiteJapan]Burp Suite実践編
Burp Suite Japan User Group
例外設計における大罪
例外設計における大罪
Takuto Wada
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
ログ管理のベストプラクティス
ログ管理のベストプラクティス
Akihiro Kuwano
負荷試験入門公開資料 201611
負荷試験入門公開資料 201611
樽八 仲川
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
Amazon Web Services Japan
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
ウェブアプリケーションセキュリティ超入門
ウェブアプリケーションセキュリティ超入門
Hiroshi Tokumaru
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
Tendances
(20)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
とある診断員とAWS
とある診断員とAWS
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
SQLインジェクション総”習”編
SQLインジェクション総”習”編
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
[BurpSuiteJapan]Burp Suite実践編
[BurpSuiteJapan]Burp Suite実践編
例外設計における大罪
例外設計における大罪
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
ログ管理のベストプラクティス
ログ管理のベストプラクティス
負荷試験入門公開資料 201611
負荷試験入門公開資料 201611
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
Mavenの真実とウソ
Mavenの真実とウソ
ウェブアプリケーションセキュリティ超入門
ウェブアプリケーションセキュリティ超入門
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
TLS, HTTP/2演習
TLS, HTTP/2演習
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
En vedette
Management for Security Life Cycle (日本語版)
Management for Security Life Cycle (日本語版)
Akitsugu Ito
Ipsj77フォレンジック研究動向
Ipsj77フォレンジック研究動向
UEHARA, Tetsutaro
SECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催について
takesako
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
Sen Ueno
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
super_a1ice
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
LINE Corporation
osc2016do ひげで学ぶWebアプリケーションに潜むリスク
osc2016do ひげで学ぶWebアプリケーションに潜むリスク
Ierae Security
[BurpSuiteJapan]Burp Suite回答編
[BurpSuiteJapan]Burp Suite回答編
Burp Suite Japan User Group
初心者向けインターネットの仕組みと8/25の障害についての説明
初心者向けインターネットの仕組みと8/25の障害についての説明
Ken SASAKI
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話
zaki4649
[AVTOKYO 2017] What is red team?
[AVTOKYO 2017] What is red team?
Tomohisa Ishikawa, CISSP, CSSLP, CISA, CISM, CFE
CpawCTF 勉強会 Network
CpawCTF 勉強会 Network
Takaaki Hoyo
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向
shigeki_ohtsu
En vedette
(15)
Management for Security Life Cycle (日本語版)
Management for Security Life Cycle (日本語版)
Ipsj77フォレンジック研究動向
Ipsj77フォレンジック研究動向
SECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催について
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
osc2016do ひげで学ぶWebアプリケーションに潜むリスク
osc2016do ひげで学ぶWebアプリケーションに潜むリスク
[BurpSuiteJapan]Burp Suite回答編
[BurpSuiteJapan]Burp Suite回答編
初心者向けインターネットの仕組みと8/25の障害についての説明
初心者向けインターネットの仕組みと8/25の障害についての説明
脱RESTful API設計の提案
脱RESTful API設計の提案
ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話
[AVTOKYO 2017] What is red team?
[AVTOKYO 2017] What is red team?
CpawCTF 勉強会 Network
CpawCTF 勉強会 Network
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向
Similaire à 徳丸本に載っていないWebアプリケーションセキュリティ
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
近藤 繁延
BPStudy20121221
BPStudy20121221
Shinichiro Takezaki
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
じゅん なかざ
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料
Tomohito Adachi
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
Yasuhito Yabe
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
純生 野田
AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!
aasakawa
Oracle R Advanced Analytics for Hadoop利用方法
Oracle R Advanced Analytics for Hadoop利用方法
オラクルエンジニア通信
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
Kimihiko Kitase
PHPの今とこれから2020
PHPの今とこれから2020
Rui Hirokawa
Cloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a Service
Shunsuke Kurumatani
12 総合演習Word Pressの利用
12 総合演習Word Pressの利用
文樹 高橋
Google Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline API
maruyama097
Google Compute EngineとPipe API
Google Compute EngineとPipe API
maruyama097
多要素認証による Amazon WorkSpaces の利用
多要素認証による Amazon WorkSpaces の利用
Amazon Web Services Japan
20170809 AWS code series
20170809 AWS code series
Atsushi Fukui
汎用性の高い大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善
汎用性の高い大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善
Ryosuke MATSUMOTO
AnsibleおよびDockerで始めるInfrastructure as a Code
AnsibleおよびDockerで始めるInfrastructure as a Code
Satoru Yoshida
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Kazumi Hirose
Similaire à 徳丸本に載っていないWebアプリケーションセキュリティ
(20)
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
BPStudy20121221
BPStudy20121221
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!
Oracle R Advanced Analytics for Hadoop利用方法
Oracle R Advanced Analytics for Hadoop利用方法
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
PHPの今とこれから2020
PHPの今とこれから2020
Cloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a Service
12 総合演習Word Pressの利用
12 総合演習Word Pressの利用
Google Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline API
Google Compute EngineとPipe API
Google Compute EngineとPipe API
多要素認証による Amazon WorkSpaces の利用
多要素認証による Amazon WorkSpaces の利用
20170809 AWS code series
20170809 AWS code series
汎用性の高い大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善
汎用性の高い大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善
AnsibleおよびDockerで始めるInfrastructure as a Code
AnsibleおよびDockerで始めるInfrastructure as a Code
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Plus de Hiroshi Tokumaru
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
Hiroshi Tokumaru
SQLインジェクション再考
SQLインジェクション再考
Hiroshi Tokumaru
徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入する
Hiroshi Tokumaru
introduction to unsafe deserialization part1
introduction to unsafe deserialization part1
Hiroshi Tokumaru
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Hiroshi Tokumaru
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
Hiroshi Tokumaru
秀スクリプトの話
秀スクリプトの話
Hiroshi Tokumaru
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
Hiroshi Tokumaru
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座
Hiroshi Tokumaru
ウェブセキュリティの常識
ウェブセキュリティの常識
Hiroshi Tokumaru
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
Hiroshi Tokumaru
ウェブセキュリティの最近の話題早分かり
ウェブセキュリティの最近の話題早分かり
Hiroshi Tokumaru
セキュリティの都市伝説を暴く
セキュリティの都市伝説を暴く
Hiroshi Tokumaru
安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016
Hiroshi Tokumaru
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
Hiroshi Tokumaru
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
Hiroshi Tokumaru
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
Hiroshi Tokumaru
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
Hiroshi Tokumaru
Plus de Hiroshi Tokumaru
(20)
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
SQLインジェクション再考
SQLインジェクション再考
徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入する
introduction to unsafe deserialization part1
introduction to unsafe deserialization part1
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
秀スクリプトの話
秀スクリプトの話
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座
ウェブセキュリティの常識
ウェブセキュリティの常識
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
ウェブセキュリティの最近の話題早分かり
ウェブセキュリティの最近の話題早分かり
セキュリティの都市伝説を暴く
セキュリティの都市伝説を暴く
安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
徳丸本に載っていない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