Android 5.0 Lollipopで導入されたセキュリティ関連の変更
Material Designとかそういうのはきっと他の誰かがさくっと書いていると思うので、
あまり一般のエンジニアからは注目されないセキュリティのお話なんかを書いてみようかなと思います。
ここ最近のAndroidにおけるSecurity関連の変更については、下記のリンク先にまとまっています。
Security Enhancements in Android 5.0 | Android Developers
Security Enhancements in Android 4.4 | Android Developers
Security Enhancements in Android 4.3 | Android Developers
Security Enhancements in Android 4.2 | Android Developers
今回はAndroid 5.0 (Lollipop)での変更点に絞ってざっくりと日本語訳(意訳)したいと思います。
Encrypted by default (暗号化のデフォルトON)
Android 5.0として工場出荷されたデバイスは、出荷時点から完全な内蔵ストレージの暗号化が有効化されます。
Android 5.0に更新したデバイスについては従来通り設定画面から暗号化を有効化できます。
Improved full disk encryption (内蔵ストレージの完全な暗号化に関する改善)
scryptを使ったブルートフォースアタックからパスワードを保護します。
また、デバイスによって機能がサポートされている場合は、ハードウェアキーストアを使用して暗号化に使用される鍵を格納することで、デバイス外からの攻撃を防ぎます。
Android sandbox reinforced with SELinux (SELinuxによるAndroidサンドボックス環境の強化)
従来よりも多くの領域においてSELinuxによるエンフォーシングモード(ポリシーベースの強制アクセス制御)が要求されるようになりました。
Smart Lock (スマートロック)
デバイスをアンロックするためのより柔軟な安全な仕組みを提供します。
例えば、NFCやBluetoothを通じて信頼された他のデバイスや顔認証による自動的なアンロックを許可することができます。
Multi user, restricted profile, and guest modes for phones & tablets (複数ユーザー、制限されたプロフィル、ゲストモード)
タブレットではないデバイスに対しても複数ユーザー対応が提供されます。また、複数ユーザーにはゲストモードも含まれ、これはあなたのデータやアプリに対するアクセスを許可すること無く、あなたへのデバイスに対する一時的で簡単なアクセスを提供するものです。
Updates to WebView without OTA (OTA以外でのWebViewの更新)
OTA (On-The-Air) アップデートによる更新によらないWebViewの更新が可能になります。
Updated cryptography for HTTPS and TLS/SSL (HTTPSとTLS/SSLにおける暗号化機能の更新)
TLSv1.2とTLSv1.1が有効化されます。Forward Secrecyは推奨されています。AES-GCMが有効化されます。また、強度の低い暗号化に関するアルゴリズム (MD5, 3DESなど) は無効化されます。
各API Levelでサポートされるアルゴリズムの詳細は「SSLSocket | Android Developers」を参照してください。
non-PIE linker support removed (位置独立でない実行バイナリに対するリンカーのサポートを停止)
全ての動的にリンクされる実行バイナリについて、PIE (Position Independent Executable)をサポートする必要があります。
# JNIのライブラリなどを作るときは-fpieとか-fPIEオプションが必要になります