Noblesse Oblige

App/iOS/Android/Unity/cocos2d/VR/GameJam/Hackathon/肉 ブログの記事は勉強会の書きなぐりメモが多め

【DroidKaigi 2017】Android Security 最前線

セッション情報

speakerdeck.com

発表者

アジェンダ

  • 7.0で追加されたセキュリティに関するAPIのお話

Using Spcoped Directory Access

  • Android 6.0 以前
    • Manifestにpermissionを定義
    • 外部ストレージ全てへのアクセスを許可
  • 7.0
  • アクセスしたいディレクトリのStorageVolumeを作成しリクエストを投げる

Storage Volume createAcceessIntent

  • Standard Directoryは10個ほど用意されている

OpenExternalDirectoryActivity

  • intentを作るときにはディレクトリーを指定する
    • 指定しない場合はルートが呼ばれる

感想

  • ディレクトリ毎にアクセス許可を必要とするのは使う側としても安心できる
  • プライマリストレージとそれ以外でAPIが変わってくるので注意

Direct Bopot

  • 6.0以前
    • 端末が暗号化されている場合、既存の保存先は、ユーザーがロックを解除した後にだけ使用できる
  • 7.0 以降
    • ロック解除されていない状態では、ダイレクトブートモードをで動作する
    • 端末暗号化ストレージにアクセスできる

新規API

  • android:directBootAware
  • android.intent.action.LOCKED_BOOT_COMPLETED
    • 暗号化ストレージが使用可能になったことを通知する
  • Context#createDeviceProtectedStorageContext()
    • 端末暗号化ストレージにアクセスするためのContextを生成する

AndroidManifest

  • BootBroadcastReceiverを定義する

BroadCast

  • BOOT_COMPLETEDの通知位置が変わった

メモ

  • ApplicationInfoからどこに保存されているかみることができる

感想

  • 端末暗号化ストレージでは、セキュリティレベルが下がるため、何を保存するか精査が必要
  • BOOT_COMPLETEの呼ばれる位置が変わったよ

Network Security Config

  • 7.0
    • カスタムCA証明書を信頼するための安全で簡単なAPIの提供
    • デフォルトではユーザーが追加したCAを信頼しない

Manifest

  • metadetaを定義するだけで使えるようになる
  • カスタム証明書は network-security-configタグで定義する
  • trust-ancorsは使い方が3種類ある 組み合わせて使うこともできる
    • アプリが持っている証明書を使用
    • システムデフォルトのものを使用
    • ユーザーが追加した証明書を使用
  • debaggable=true
  • クリアテキストの通信を禁止できる

感想

  • 設定アプリからCA入れる必要がなくなって嬉しい
  • 7.0以前でも使えるといいな
    • 無理な話だけど

全体まとめ

  • それぞれ注意ポイントはあるが、、気をつけて使えばよりセキュアなアプリが作れそう
  • 各機能の動きをしっかり理解して開発しましょう