@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

Androidセキュリティ勉強会(1/21)

に行って来ました。

と言うことで、メモを投下します。

JSSECとセキュアコーディングガイド

  • JSSEC(ジーセック):日本スマートフォンセキュリティ協会
  • セキュアコーディングガイド
    • セキュアコーディングのTipsを集めて公開・共有しようというガイド
    • 色々ネット上にある情報を精査、他のOSバージョンまで調べてやっている
    • 間違っていることもあるかもしれないが、タイムリーに配信するのを目指している
    • 現場で使えるガイドを目指している
      • 開発者のやりたいこと視点で書いている
      • べからず集ではなく、目的を達成するための目次
      • セキュアなサンプルコードを載せる。基本的にコピペで使える
      • ソースコードの注意事項がコード上に乗っている
      • 脆弱なコードがコピペされないようにする

Androidアプリ脆弱性の事例とガイド

  • 2012年に入ってから脆弱性の報告が急増している
  • 脆弱性の傾向
  • 事例
    • これらの事例では脆弱性が報告されただけで、実際に被害はなかった。そして、修正済み。
    • 1. ネットワークへのアクセス権限を持たないアプリが某投稿アプリの権限で画像をアップロードできる
      • 修正済み
      • プラグイン機構を利用して、マルウェアが画像を探してきて本体アプリを操作している。
      • 画像アップロード用のActivityが外部に公開されていた。(公開アクティビティ)
      • 対策としては、非公開にしておく。
      • AndroidManifestのActivityの項目でandroid:exported="false"に設定する
    • 2. 某リアルタイムコミュニケーションアプリにおける暗黙的Intentの扱いに関する脆弱性
      • 修正済み
      • 暗黙的Intentの取り扱いにミスがあった
      • BroadcastReceiverを利用してメッセージを取り扱っていた
      • マルウェアがメッセージを受信してごにょごにょしていた。
      • 対策としては、明示的Intentを使う
      • 自分の中の特定の処理をしたいだけなので、明示的Intentにする
      • Androidの入門書がAndroidの便利さを説明するために暗黙的Intentの説明を先にしているからかも知れない
    • 3. 某SNSアプリにおける情報管理不備の脆弱性
      • 修正済み
      • アプリがデータをSDカードに保存
      • 保存したデータをマルウェアがごにょっていた
      • SDカードは読取りが出来てしまうので、SDカードには重要なデータを置かない
      • アプリケーション用のディレクトリに、非公開として置くこと(MODE_PRIVATE)
      • ファイルパスを直打ちしてしまうケースもあります。
    • 4. 某魔法少女アプリにおける情報漏えいの脆弱性
      • 修正済み
      • Twitter連携機能でIDとパスワードが見れてしまう
      • LogcatにIDとパスワードを出力してしまっている
      • Logには注意する
      • Progardで自動的に削除する
      • 次の版でガイドに追加される
    • 5. 某オンラインストレージアプリにおけるContentProviderアクセス範囲の脆弱性
      • 修正済み
      • ファイルの同期機能が呼び出せてしまい、ユーザのPublicフォルダにアプリの設定ファイルをアップロード
      • アップロードされたファイルを見て悪いことが出来てしまう
      • 対策として、ContentProviderも非公開にする
      • API Level 8以下では、android:exported="false"にしても公開されてしまうので、注意が必要
  • 知っていれば防げるものばかりである

Androidアプリのセキュリティ

  • セキュリティの考え方
    • 1. 資産
      • システムやアプリにおいて守るべき対象のことを資産と呼ぶ
      • 守るべき対象には情報と機能の2つがあり、それぞれを情報資産と機能資産と呼ぶ
      • Android OSが管理する情報資産:電話番号、電話帳・・・
      • アプリが管理する情報資産:メール、SMS、ブラウザ、SNS・・・
      • Android OSが提供する機能資産:ネットワーク通信、カメラ、通話などのパーミッションで定義されているもの
      • アプリが管理する機能資産:実装している機能、Intentで呼び出されるもの
    • 2. 脅威
      • セキュリティ要件に反する資産へのアクセス
      • ネットワーク上の悪意ある第三者が通信経路上にいる。盗聴とか改ざんとか。サーバへのなりすまし、アプリへのなりすまし。
      • ユーザが導入したマルウェア
      • 悪意のあるファイル:バッファオーバーフローなどを引き起こすものなど
      • 悪意あるスマフォユーザ:デバッグ機能を悪用してアプリ内にあるメーカーの機密情報を読みだしたりする
      • スマホの近くにいる悪意のある第三者:ショルダーハックBluetoothの近距離無線経由での攻撃、窃盗、破壊
      • その他色々と攻撃方法は増えてくるであると思われる
    • 3. 対策
      • 脅威から資産を守る保護施策をセキュリティ対策と言う
      • どれくらい守るのか?すべての脅威に対策するのは無理がある。
      • 資産の重要度に応じて妥当な保護施策を決定する。
      • 重要度で分類
      • 高位では、rootやdexの改造などの高度な攻撃に対しても保護する必要がある。セキュアコーディングガイドでは範囲外。
      • 中位では、Androidのセキュリティレベルを活用する。UI/UX等の要素よりセキュリティを優先させる
      • 下位では、UI/UX等の要素とを比較して、他要素を優先させても良い

ご協力のお願い

  • 第3版を出そうとしています
    • WebViewとHTTPSに関する脆弱性ネタが多いので多数報告されているので追加します
    • 第2版
    • 作業環境
    • ボランティア協力してくださる方を探しています

Android Security  安全なアプリケーションを作成するために

Android Security  安全なアプリケーションを作成するために