Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)

12,252 views

Published on

DeNA Techcon 2016で発表した資料です。デモとかで頑張りました!

Published in: Software

DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)

  1. 1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. DeNA Technology Conference 2016 DeNAのセキュリティの取り組みと、スマート フォンセキュリティ(Same-Origin Policy) 株式会社ディー・エヌ・エー システム本部セキュリティ部 セキュリティ技術グループ 杉山俊春 1
  2. 2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 自己紹介  会社 ⁃ 株式会社ディー・エヌ・エー • システム本部 セキュリティ部 セキュリティ技術グループ  名前 ⁃ 杉山 俊春 (はるぷ, @harupuxa)  属性 ⁃ セキュリティ ⁃ プログラマー ⁃ イラストレーター ⁃ ラテアート ⁃ 猫 2
  3. 3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 自己紹介 – べつやくメソッド 3
  4. 4. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 自己紹介 –最近書いたセキュリティ記事  2014.04.15 ⁃ 巷を賑わすHeartbleedの脆弱性とは?! • http://developers.mobage.jp/blog/2014/4/15/heartbleed  2014.07.03 ⁃ 不正なJSONデータによるSQL Injectionへの対策について (Json.pm+SQLクエリビルダー) • http://developers.mobage.jp/blog/2014/7/3/jsonsql-injection  2014.10.23 ⁃ SSL v3.0の脆弱性「POODLE」ってかわいい名前だけど何?? - Padding Oracle On Downgraded Legacy Encryptionの仕組み – • http://developers.mobage.jp/blog/poodle  2015.06.15 ⁃ 脆弱性ってどういうものなの? - AFNetworkingにおけるSSL証明 書検証不備の脆弱性 – • http://developers.mobage.jp/blog/2015/afnetworkingssl
  5. 5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 自己紹介 - 最近公開された脆弱性報告  2015/06/25 ⁃ namshi/jose におけるトークンの署名検証回避の脆弱性 (CVE-2015-2964) • https://jvn.jp/jp/JVN25336719/  2015/06/03 ⁃ F21 製 JWT におけるトークンの署名検証回避の脆弱性 (CVE-2015-2951) • http://jvn.jp/jp/JVN06120222/  2015/05/27 ⁃ Apache Sling の Sling API コンポーネントおよび Servlets Post コンポーネ ントにおけるクロスサイトスクリプティングの脆弱性 (CVE-2015-2944) • http://jvn.jp/jp/JVN61328139/  2014/12/9 ⁃ Security updates available for Adobe Flash Player - circumvent the same-origin policy (CVE-2014-0580). • https://helpx.adobe.com/security/products/flash-player/apsb14-27.html  2014/09/25 ⁃ iOS 版 jigbrowser+ における同一生成元ポリシー回避の脆弱性 (CVE-2014- 5318) • http://jvn.jp/jp/JVN80531230/index.html
  6. 6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Agenda  お仕事紹介 ⁃ ゲームにおけるチート、不正行為への対策  脆弱性のお話 ⁃ Apache/IIS/iOS UIWebView/SOP Bypass/Android 6
  7. 7. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームにおけるチート、不正行為への対策 7
  8. 8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームにおけるチート、不正行為 - チートとは -  チートとは…… チート(cheat)とは、広義にはコンピュータゲームに おいて本来とは異なる動作をさせる行為である。…(略)… 日本では狭義に、オンラインゲームにおいてゲームを優 位に進めるため、制作者の意図しない動作をさせる不正 行為を指す。チートを行うプレイヤーのことをチーター (cheater)と呼ぶ。 Wikipedia(https://ja.wikipedia.org/wiki/チート)より チートに該当するかや、不正行為となるかは、ゲーム の仕様に深く関わってくる 8
  9. 9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームにおけるチート、不正行為 - チートとは -  例えばこんな感じ ※イメージ画像のため実在しないゲーム画面です。9 何かがおかしい
  10. 10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームにおけるチート、不正行為 - 一般の脆弱性との違い -  一般的な脆弱性の代表例 ⁃ Cross-Site Scripting ⁃ SQL Injection ⁃ Cross-Site Request Forgery ⁃ など 情報漏洩などが主な被害 情報漏洩、嫌がらせなどが主な被害 10
  11. 11. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームにおけるチート、不正行為 - 一般の脆弱性との違い -  チートの代表例 ⁃ アイテム・通貨増殖、複製(Dupe) ⁃ レアアイテム入手 ⁃ 能力強化 ⁃ 敵弱体化 ⁃ 未開放ステージ開放 ⁃ 時間、位置制約の回避 ⁃ 他ユーザの妨害 ⁃ ツールによる自動化・高速化(bot) ゲーム上の制約の回避 嫌がらせ、条件の有利化 プレイ条件を有利化 → ユーザのプレイ時間、操作速度の物理的制約の回避 11
  12. 12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ゲームにおけるチート、不正行為 - 一般の脆弱性との違い -  プレイ条件を有利化  ゲーム上の制約の回避  嫌がらせ、相対的条件の有利化  ユーザのプレイ時間、操作速度の物理的制約の回 避 通常プレイではできない or 時間を要する or 条件が必要なものを無理やり実施 12
  13. 13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント 13 アプリダウンロード 課金処理 IAP、IAB App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金処理 メモリ改ざん 不正な通信 (リクエスト) データ ファイル改ざん アプリ改ざん 通信改ざん (レスポンス)
  14. 14. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント 14 アプリダウンロード 課金処理 IAP、IAB App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金処理 不正な通信 (リクエスト)
  15. 15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント - 不正な通信(リクエスト) -  クライアントでの処理結果の改ざん ⁃ クライアントで生成した結果(バトル、パズル ゲームの結果など)の改ざん ⁃ 通常入力し得ない範囲の値 • マイナス値 • 小数 • 指定可能範囲外の数値 など  再送  同時複数リクエスト送信  サーバへのアクセスの自動化(いわゆるBOT)  なりすまし 15
  16. 16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント 16 アプリダウンロード 課金処理 IAP、IAB App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金処理 通信改ざん (レスポンス)
  17. 17. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント -通信改ざん(レスポンス)-  ゲーム内で利用するためにサーバから読み込む データの改ざん ⁃ プレイヤーの能力値の不正強化 ⁃ 敵の能力値の弱体化 ⁃ パズルゲームの難易度の容易化 • 初期配置 • 確率変更 • 補助アイテム増加 • クリア条件変更 など ⁃ ゲームの進行状況、各種フラグの変更 ⁃ プレイヤーの現在位置の変更 17
  18. 18. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント 18 アプリダウンロード 課金処理 IAP、IAB App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金処理 メモリ改ざん
  19. 19. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント - メモリ改ざん -  ゲーム内で利用中のデータの変更(画面上に見え ているデータが対象) ⁃ プレイヤーの能力値の不正強化 • 特にバトルゲームでのHP、攻撃力 ⁃ 敵の能力値の弱体化 • 特にバトルゲームでのHP、攻撃力 ⁃ 補助アイテムの数量変更 19
  20. 20. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント 20 アプリダウンロード 課金処理 IAP、IAB App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金処理 データ ファイル改ざん
  21. 21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント - データファイル改ざん -  状態やマスターデータを保持しているデータファ イルの改ざん ⁃ プレイヤーの能力値の不正強化 ⁃ 敵の能力値の弱体化 ⁃ プレイデータ全般の変更 • 特にサーバを持たない、サーバとの通信を極力減らしている ゲームの場合 21
  22. 22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント 22 アプリダウンロード 課金処理 IAP、IAB App Store Google Play ゲームサーバ データ読み込み、処理結果 処理実行 課金処理 アプリ改ざん
  23. 23. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 攻撃されうるポイント - アプリ改ざん -  アプリ側で管理している各種制約の変更 ⁃ 各種ゲームパラメータの変更 ⁃ 各種ゲーム進行条件の変更 ⁃ ゲーム性自体の変更 • プレイ開始→即クリア など ⁃ チート対策のロジックの変更・削除 23
  24. 24. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Same-Origin Policy Apache/IIS/iOS UIWebView/SOP Bypass/Android 24
  25. 25. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Same-Origin Policyとは  Same-Origin Policyとは、スキーム、ホスト、ポートの組み合わせが 同じリソースの範囲にリソースの利用を制限する仕組みで、重要なコン テンツを保護するために必須となるセキュリティ上の仕組みです。 25 http://www.example.com/ XHR等 http://www.example.com/ JavaScript リソースの読み込み 読み込みOK! XHR等 http://dena.com/ リソースの読み込み
  26. 26. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Same-Origin Policyの範囲  http://www.example.com/test/test.htmlとSame Originなのは? 26 URL Same? http://dena.com/test/test.html http://www.example.com:8080/test/test.html http://abc.example.com/test/test.html https://www.example.com/test/test.html http://www.example.com/aaaa/test.html
  27. 27. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Same-Origin PolicyとCross-Site Scripting(XSS)  もし、異なるOriginのWebページ上で、JavaScriptが実行できたら… 27 http://www.example.com/ http://www.example.com/ JavaScript http://dena.com/ Scriptの埋め込み
  28. 28. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Same-Origin PolicyとCross-Site Scripting(XSS)  Same-Origin Policyが正しく動作している例 28 Uncaught DOMException: Blocked a frame with origin "http://attack.example.com" from accessing a cross-origin frame.
  29. 29. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Same-Origin PolicyとCross-Site Scripting(XSS)  XSSの仕方色々 ⁃ <script>alert('xss')</script> ⁃ <img src=x onerror="alert('xss')"> ⁃ +ADw-script+AD4-alert('xss')+ADw-/script+AD4- 29
  30. 30. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Same-Origin PolicyとCross-Site Scripting(XSS) 30 今日はあまり見かけなくなった XSSを改めて紹介します!
  31. 31. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 302 Foundの画面とXSS 31 ※画面はハメコミ合成です 昔見た302 Foundの画面
  32. 32. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 302 Foundの画面とXSS 32 表示してみましょう! ※もちろんデフォルト設定で!
  33. 33. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 302 Foundの画面とXSS Chrome IE Firefox Opera(Presto) 通常 × × × × 空 ○ × ○ ○ data:text/html…. △ × △ ○ javascript:xxx × × × ◎ 33 XSS動きます! 古いブラウザだけど……  Locationヘッダ(302 Found)の扱いの違いとXSS
  34. 34. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 302 FoundでXSSが動作する組み合わせ  Apache + CGI(perl) + Opera(Presto) 34
  35. 35. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 302 FoundでXSSが動作する組み合わせ  IIS + asp + Opera(Presto) 35 投げやりな メッセージが素敵
  36. 36. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 302 FoundでXSSが動作する組み合わせ  WEBRick 36 HTTP/1.1 302 Found X-Frame-Options: SAMEORIGIN X-Xss-Protection: 1; mode=block X-Content-Type-Options: nosniff Location: javascript:alert(0) Content-Type: text/html; charset=utf-8 Cache-Control: no-cache X-Request-Id: bb768842-983e-4ef8-b0e7-795193db1a96 X-Runtime: 0.007491 Server: WEBrick/1.3.1 (Ruby/2.1.2/2014-05-08) Date: Sun, 06 Jul 2014 12:00:51 GMT Content-Length: 89 Connection: Keep-Alive <html><body>You are being <a href="javascript:alert('xss')">redirected</a>.</body></html> 何故かOpera(Presto)では表示されない! (最後に改行入れるといける) <a href="javascript:alert('xss')">
  37. 37. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 302 FoundでXSSが動作する組み合わせ  WEBrick + FireFox 5.0 37
  38. 38. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマートフォン(Android)の場合 38
  39. 39. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Android(WebView)の場合 – Location: javascript:xxxxx  端末側上のエラーページで表示 39 実は結構危ない状態!
  40. 40. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Android(WebView)の場合 – 何が危ないのか?  Same Origin Policyが効かない範囲がある 40 ⁃ 特定の条件(「file://」で開かれたページ 等)でSame Origin Policyの制約がなくな る場合がある ※ブラウザによって挙動はまちまち事が多い ⁃ エラーページは「file://」と同等、または、 一般のページより高い権限が設定されて いる場合がある
  41. 41. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Android(WebView)の場合 – 「file://」に関する制約例  「file://」に関する制約例 ⁃ 通常のWebページからは呼び出せない • 例:http://www.example.com上にiframeで埋め込 めない ⁃ 通常のWebページからは遷移ができない • 例:aタグで指定しても遷移ができない • 例:Locationヘッダで遷移ができない ⇒ 何らかの方法で「file://xxx」を開く事ができれば、Same Origin Policyの回避まで後一歩! 41※ブラウザやレンダリングエンジンによって結構違います
  42. 42. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Android(WebView)の場合 – Location:javascript:xxxが有効なケース  影響を受けるバージョン ⁃ Android OS 4.0 (API 14) 以降 4.4(API 19) 未満  再現条件 WebViewを使っているアプリで ⁃ 下記設定が true になっている • setAllowFileAccessFromFileURLs • setAllowUniversalAccessFromFileU RLs または ⁃ AndroidManifest.xml の android:targetSdkVersion が 15 以下になっている 42 ※端末によってはエラー画面がカスタマイズ されていて動作しません。
  43. 43. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Android(WebView)の場合 – Same-Origin Policy回避例(Android 4.2.2) 43
  44. 44. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Android(WebView)の場合 – 詳細なSame Origin Policyの回避手順 1. 任意のページでCookieに”<script>xxxx…</script>”のような攻撃 コードをセットする 44 2. 「Location: javascript:xxxx」でリダイレクトするページへアクセス する 4. JavaScriptでiframeを作り 「file:///data/.../webViewCookiesChromium.db」を開く ⁃ エラーページは、「file://」を呼び出せるが、「file://」で呼び出 したコンテンツの中身は読めない 5. 手順1でセットしたスクリプトが 発動する! 6. 「file:///data/.../webViewCookiesChromium.db」は「file://」で開 かれているため、Same Origin Policyの例外になり、任意のローカル ファイル、Webページのコンテンツを読み込める 3. エラー画面上のリンクをユーザがクリックする
  45. 45. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Android(WebView)の場合 – WebViewはNativeアプリの脅威か?  WebViewをメインで使っていないアプリでも以下のような場所で使っ ているケースが多くある ⁃ おしらせ ⁃ 利用規約 ⁃ ヘルプ ⁃ お問い合わせ などのWebと相性が良い機能 45 WebViewを利用していない箇所の重要情報が漏洩する可能性! WebView経由でアプリ内の任意のファイルが読み込める
  46. 46. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Android(WebView)の場合 – WebViewはNativeアプリの脅威か? 46 WebView 保護 データ 領域 Native アプリ 部分 重要データの 保存、読込 サーバ側 アプリ 攻撃コード SOP Bypass!! 情報漏洩 Man In The Middle等
  47. 47. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. スマートフォン(iOS)の場合 47
  48. 48. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. iOS(WebView)の場合  iOSのWebViewのデフォルトでは、Locationヘッダを不正 に処理する事は無いが、ドメインの扱いに注意が必要 48 脆弱な利用方法の実行例
  49. 49. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. iOS(WebView)の場合 – 動作ドメイン確認のSampleコード抜粋 49 func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { let urlStr = request.URL?.absoluteString; print("--------------------------------------"); print("CurrentDomain:" + webView.stringByEvaluatingJavaScriptFromString("document. domain")!); print("NextURL:" + urlStr!); if((urlStr?.hasPrefix("javascript:")) != nil) { webView.stringByEvaluatingJavaScriptFromString(urlStr!); } return true } }
  50. 50. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. iOS(WebView)の場合 -リダイレクト中のドメインの扱い 1. 「https://www.example.com/」へアクセス(起動直後) ⁃ document.domain: 空 2. 1の読み込みが完了 ⁃ document.domain: www.example.com 3. 「http://192.168.56.104/」へアクセス開始 ⁃ document.domain: www.example.com 4. Locationヘッダで「javascript:alert(1)」へリダイレクト ⁃ document.domain: www.example.com 5. Locationヘッダをコード上でJavaScriptとして実行 ⁃ document.domain: www.example.com 50
  51. 51. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. iOS(WebView)の場合 - 脆弱なアプリの例 51 ブラウザAの場合: ブラウザBの場合: ※100件 程度調査して、5アプリ(うち2つは派生アプリ)で確認(2014/07時点) ※前述の挙動が原因かは不明
  52. 52. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. まとめ 普段見えない部分の挙動は結構変な事 になりがち 新しいものを作るときに、意外とこう いった細かいとこが再燃したりするの でまあまあ重要 52
  53. 53. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. まとめ 53 Enjoy!

×