Androidセキュリティ勉強会 〜WebViewの脆弱性編〜 参加メモ

スライド

Ust

2012/10/06(#securedroid)Androidセキュリティ勉強会 - Togetter

今日覚えてほしいキーワード

  • WebViewキャッシュ
  • addJavascriptInterface
  • fileスキーマ

WebViewキャッシュ

  • ブラウザでブラウズするときにフォームのデータなどを保存するデータベース
  • Androidでの問題点
    • WebViewキャッシュの保存場所が一意に決まってしまっているため、攻撃がしやすい点
      • /data/data//databases/webview.db
    • データベース自体はsqliteというデータベースファイルであり、バイナリデータなのだが、パスワードやID部分は特に暗号化されておらず、WebView上で目視ができる
    • WebViewキャッシュ自体は他アプリからの読出しに関してはパーミッションで保護されているが、WebView自身からの攻撃は保護できない

fileスキーマ

  • WebViewにURLを指定するときにfile://が利用できる
  • 端末ローカルのファイルが見れる
  • ファイルのパーミッション的に読めるものは基本いける
  • キャッシュの問題点
    • ブラウザから簡単にWebViewキャッシュが目視できる - 目grepでパスワード&ID入手!
    • 標準ブラウザの問題点と組み合わせることでサーバにWebViewキャッシュをアップロード
    • 3.0まで
      • file:///data/data/com.android.browser/databases/webview.db
    • 4.0以降
      • file:///data/data/com.google.android.browser/databases/webview.db

Android標準ブラウザの問題

  • ファイルのダウンロードの自動開始問題
  • ダウンロードされるファイルの場所が大体決まっている
    • /sdcard/Download/の下
    • ファイル名はそのまま
  • ダウンロードの終わるタイミングを推測して、ダウンロード済みのファイルに自動遷移させることが可能
  • ダウンロード済みのファイルでもJavaScriptが有効
  • その際ユーザへの確認はなし
  • 読み取ったファイルはPOSTなり、GETなりでサーバーにアップロード可能
  • Androidのこういった使用の積み重ねでワンクリックでWebViewキャッシュをアップロードするまでのコンボ攻撃が完成してしまう
  • 対策
    • fileスキームは本当に必要?いらないなら使えないように
    • fileスキームを使う場合は必ずパスをチェックしよう
      • 相対パスを利用した抜け穴を作らないためにも利用するAPIには注意
    • JavaScriptも必要ないなら有効にしないこと
    • WebViewキャッシュは…
      • こまめに削除するとか...

addJavascriptInterfaceの話

  • リフレクションが使えてしまう問題
  • リフレクションが使えるということは、クラスのstaticなメンバーは誰からでも参照できる
  • Context取得可能
    • Intent発行
    • アプリ一覧取得
  • java.lang.Runtimeが使える。
    • execメソッド:任意のプログラムをWebViewを実装したアプリのユーザー権限で実行できる
    • loadメソッド:任意のJNIライブラリをWebviewを実装したアプリのユーザー権限で実行できる。アプリそのものに寄生・改造することも可能
  • 対策
    • addJavascriptInterfaceは使わないでください

iOSでもWebView問題はある。ただしJavaとの連携はないし、execはできない。