home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

読書メモ/「Android Security 安全なアプリケーションを作成するために」

読書メモ/「Android Security 安全なアプリケーションを作成するために」

読書メモ / 「Android Security 安全なアプリケーションを作成するために」
id: 1052 所有者: msakamoto-sf    作成日: 2012-01-15 22:35:29
カテゴリ: Android セキュリティ 読書 

すべてのAndroidプログラマにオススメの一冊です。

自分もAndroidプログラミングを勉強していて、いくつかセキュリティ面も調査してきました。

本書籍で新しく勉強になった点など、以下、読書メモです。

  • "3.5 固有識別子"(p29 - )
    • アプリ側で生成したUUIDを識別に使用するのがオススメ
    • 以下は非推奨
      • READ_PHONE_STATE必要:IMEI, IMSI, ICCID
      • READ_PHONE_STATE不要:シリアルNo, ANDROID_ID
  • "4.2.1 ディレクトリ" p42以降:アプリケーションをSDカードに移動→apkがSDカードに移る。Audio/Videoなど容量の大きいリソースを抱えたAPKの場合は効果的。データやファイルなどは"/data/data"以下のままのようだ。
    • apkをSDカードに配置させるには、p45の"SDカードインストール"も参照。
  • p83 : "5.5.2 プリファレンスメソッド" : 3種類もある・・・
    • Context.getSharedPreferences() : MODE指定可能
    • PreferenceManager.getDefaultSharedPreferences() : MODE指定不可、MODE_PRIVATE固定
    • Activity.getPreferences() : MODE指定可能
  • p89 : データベースファイルの保護 :
    • SQLiteDatabase.openOrCDreateDatabase() : MODE指定不可、但し 644 でDBファイルが作成されるので要注意(他アプリからも読取は可)
    • Context.openOrCreateDatabase() : MODE指定可能
    • SQLiteOpenHelper : MODE指定不可、MODE_PRIVATE固定
  • "6.5 疑われやすいパーミッションの組み合わせ" (p117 - )
    • パーミッションの「組み合わせ」に対して、疑われてしまいそうなペアを示してくれているので、開発したアプリがこれらに該当する場合はユーザーへ分かりやすい形で明記する必要がある。
  • "7.6 コンテントプロバイダのパーミッション設定事例" : 事例ベースで解説してくれているので分かりやすい。
    • コンテントプロバイダのパーミッションは、他(Activity/Receiver/Service)より複雑なので、最終的にこうした事例ベースに当てはめた上で検討することになりそう。
  • "OSによるインテントデータの隠ぺい" (p153 - ) : log上でIntent内容がマスクされるか否か、抜き書き
    • "tel:" マスクされる
    • "smsto:" : マスクされる
    • "mailto:" : アドレスはそのまま表示される
    • "http://" : URLとクエリがそのまま表示される
    • "geo:" : そのまま表示される
  • "9.2.3 ProGuardの使用法" (p199)
    • "アンドロイドSDKの注意点" : まさにこれに嵌ってしまった・・・。
    • SDK r16 にアップデートしたら再発。SDKェ・・・。
  • "動作している環境からパスワードを生成し、使用する" (p233 - )
    • 当然ながら、ここに掲載されているサンプルコードをそのまま使うのではなく、改造して使う。
    • ProGuardのセクションでは特に記されていないが、SDKのクラス・メソッドの呼び出しは難読化されないので、例えばPBEKeySpec()の呼び出し箇所から変数を逆に辿り、パスワードが解析される危険性は残る。(とはいえ、カジュアルハックの防止には効果がありそう)

以下は、本書を読んでいて不足感を感じた点です。

  • ログ出力についての記述 : android.util.Log#v(), d(), i() ... はisLoggable()と組み合わせないと、なんだけど、自分の認識以上に常識化してるのかな?あるいは、そもそも秘密情報はデバッグログといえども出力しない、というのは当たり前の前提になっているのだろうか。
  • アプリケーションに焦点を絞っているから仕方ないとは思うが、サーバとの通信(HTTP, HTTPSを使ったAPI呼び出しなど)関連のトピックが無い。
    • 例1:HTTPSを使うときの証明書の扱い
      • Androidにインストール済みのルート証明書
      • 自己署名証明書の危険性、などなど
    • 例2:OAuthの2-legged/3-leggedで使われるConsumerKeyの取り扱い
      • 他、サーバサイドと絡めたtokenの適切な扱いなど。

上記のような不足感はあるものの、Androidアプリに特化した「セキュア開発」本としては日本で恐らく第一であり、内容的にも必要十分と思われます。Androidアプリの開発者全てにオススメできる一冊です。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2012-01-15 22:36:31
md5:ebc5ac52acd1699695a90fd38e18c51d
sha1:94c6b0be08cba06ec1ab05c69169ce58b858b3d4
コメント
コメントを投稿するにはログインして下さい。