Android Weekly Topics

2015年9月第4週Androidの脆弱性、最新6.0動向

Androidのロック画面を解除できる脆弱性が見つかる

Android OSの脆弱性が立て続けに見つかっていますが、新たにロック画面を解除できる脆弱性が発見されています。

今回は、ThreatpostがWebサイトに掲載した9月16日の記事で、Android 5.1.1よりも古いバージョンでは特定の操作をすると、ロック画面を解除できると報じています。

Googleが9月に発表したバージョンごとのシェアは、Android 5.1が5.1%となっているので、大きく見積もれば94.9%もの端末が対象になります。

脆弱性をついてロック画面を解除する方法は、ロックスリーンの状態でカメラを起動して、その後、ロック画面のパスワード入力フィールドに長い文字列を貼り付ける動作を繰り返すとカメラアプリがクラッシュして、ホーム画面が表示されるというものです。

パスワードでロックしているにもかかわらず、適当な入力してもホーム画面にアクセスできるので注意が必要になります。ただし、ロック画面のセキュリティで「PIN」「スワイプ⁠⁠、⁠パターン」を場合は、この脆弱性の対象外となります。パスワードに設定していて、Android 5.1.1を使っていない場合は、いずれかの方法に切り替えた方が良いでしょう。

手持ちのXperia Z Ultra(Android 5.0.2)で脆弱性が確認できるのか試してみましたが、パスワード入力フィールドに一度しか貼り付けることができず、これを繰り返してカメラアプリをクラッシュすることはできませんでした。もしかすると、文字を入力し続ければクラッシュするのかもしれませんが、途中で諦めてしまいました。一機種の例ですが端末によっては、何らかの対策が行われている可能性もあります。

Android 6.0にアプリ自動バックアップ機能

9月29日に開催されるGoogleの新製品発表会で、Android 6.0が正式リリースされると思われますが、これにはアプリデータの自動バックアップ機能があるので、ご紹介します。

このバックアップ機能は、このためにコードを書く必要はなく、マニフェストに記述するtargetSdkVersionを23にするだけで、アプリデータのバックアップと復元が可能になります。バックアップ先のストレージは、アプリごとに25MBまでとなり、Googleによって無償で提供されます。このストレージは、Google Driveの容量とは関係なく確保されます。

標準では、アプリデータのすべてがバックアップの対象となりますが、以下のAPIで得られるファイルパスはバックアップの対象になりません。

  • Context.getCacheDir()
  • Context.getCodeCacheDir()
  • Context.getNoBackupFilesDir() 

SDカードなどの外部ストレージは、以下のAPIで得られたファイルパスだけがバックアップの対象になります。

  • Context.getExternalFilesDir()

バックアップの対象を指定することもできます。

以下のように、マニフェストのapplication句に、android:fullBackupContentを追加して、その先に構成ファイルを記述します。

<application
        android:fullBackupContent="@xml/mybackupscheme">
</application>

mybackupschemeの記述方法は2種類あり、バックアップおよびリストア先のファイルパスを直接指定する方法とドメインを指定する方法があります。

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" />
    <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" />
</full-backup-content>

ドメインを指定する場合は、以下のルールがありますが、仕組みさえ理解していれば、手間をかけることなく自動バックアップおよびリストアが実装できます。

fileは、getFilesDir()で得られたファイルパス、databaseは、getDatabasePath()で得られたファイルパス、sharedprefは、getSharedPreferences()で得られたファイルパス、externalは、getExternalFilesDir() で得られたファイルパス、rootは、アプリケーションのルートディレクトリのパスです。

バックアップのサイクルは、充電中かつWi-Fiに接続されている場合のみ1日1回実行されます。リストアは、アプリのインストール時に実行されます。いずれもユーザが意識することなく、実行されるすばらしい仕組みなので、アプリを開発されている方は実装を検討してはいかがでしょうか。

今週は、このあたりで。また来週。

おすすめ記事

記事・ニュース一覧