Android OS 4.2.2で、正式名はわかりませんが、USB デバッグホワイトリスト機能とかSecure USB deuggingとかいう機能が追加されました。adb接続をすると何やらダイアログが出てくるやつです。

手持ちのNexus7に降ってきたのと、ちょっとおもしろそうだったので試してみてぐぬぬな点がありましたので、基本的な所も含めてまとめてみました。

画面ロック設定

アンドロイド端末を落とした時の保護策としては、「設定」「セキュリティ」の「画面のロック」を使用する。この設定を「なし」や「スライド」に設定してしまうと端末を拾った人は、電話帳、メール内容などの情報を見る事が可能になる。そのため、「パターン、PIN、パスワード、フェイスアンロック」をいずれかを設定することで端末情報の保護を行う。

アンドロイドアプリケーションを作成する場合はエミュレータは速度が遅いため実機を用いる事が多い、実機において画面のロックを有効にすると、開発中に端末がスリープする度に再度端末上でパターンやパスワードを入力する必要があり非常に煩雑である。

このため多くの人が以下のような対策を行う事となる

  • 開発中は「画面ロック」を「なし」に設定する
  • 開発中は「ディスプレイ」→「スリープ」時間を長くする(10分等)
  • 開発中は、「セキュリティ」→「自動ロック」時間を長くする(30分等)
  • 開発中は、「{}開発者向けオプション」の「スリープモードにしない」

しかしながら、上記の設定はどれもロックを表示しないように・ロック時間を長くする設定変更であるので、セキュリティ・バッテリーの持ち量側面から開発が終わった後に必ず元に戻す必要がある。

前置きが長すぎるような気もしますが… 続きます。

USBデバック設定

実機で開発するためには「設定」「{}開発者向けオプション」の「USBデバック」を有効にする必要があるが、有効にしたまま端末を落としたりすると、PCとUSBケーブルで接続しアンドロイドSDKに含まれるADBツールを利用して端末内の情報を抜き取る事ができてしまう。(端末画面は画面ロックで保護されるが、ADBを利用してアンドロイドの操作が可能)

このため、画面のロックを有効にしたとしても、開発終了後は必ず「USBデバック」は無効にする必要がある。

「USBデバック」設定にはこのような危険性があるので、初心者が間違って有効にしてしまわないように、Android 4.2から「{}開発者向けオプション」自体が隠される仕様変更が行われた。

Android4.2以降{}開発者向けオプションの表示の仕方

初期状態では、「{}開発者向けオプション」は表示されない。
「設定」「端末情報(タブレット情報)」のビルド番号を7回タップすると設定画面に{}開発者向けオプションが表示される。

アンドロイドの仕様上の注意事項としては、USBデバックをON/OFF関係なく、アンドロイド端末をPCに接続した場合は、写真、音楽、ファイル転送のためにアンドロイドの外部記憶装置にアクセス可能である。

USBデバック許可ダイアログ

Android OS 4.2で加わった「{}開発者向けオプション」を隠す仕様変更は開発者以外のユーザへの対応であり、開発者にとっては依然以下の危険性が存在する。

  • 画面ロック設定を元に戻すのを忘れる
  • USBデバックを元に戻すのを忘れる

そこで、Android4.2.2にて、「USBデバック許可ダイアログ」が追加された。
アンドロイド端末をUSB接続をすると以下のような「USBデバック許可」ダイアログが表示される。

OKボタンを押す事で、以後USBケーブルを抜くまで従来通りにADBツールの使用が可能になる。この状態はUSBケーブルが抜かれる状態になるまで続き、スリープ状態になったとしても再度ダイアログが出る事はない。ケーブルを抜いて再度つなげると「USBデバック許可」ダイアログが表示される。
ダイアログが表示されている状態とキャンセルが押された状態では、ADBツールは使用できません。

この機能は、画面ロック機能と組み合わす事で初めて意味を持つ、画面ロックを有効にしている場合は、画面ロックを外さない限りこの「USBデバック許可」画面のOKボタンを押す事はできない。画面ロックを有効にしていない場合は、このダイアログのOKボタンを押す事は誰でもできるため意味を持たない。
Android OS 2.2.2未満では画面を触らずにADBツールの使用が可能であったが、この変更により画面をタッチする必要となったためより安全となりました。

USBデバック設定にて記載した、PCとのファイル共有昨機能は一般的なユーザが使用する機能であるので、USBデバック許可ダイアログとは関係がない。許可しない状態でも、アンドロイド上の外部記憶装置上のファイルをPCに読み込ませたり、書き込んだりする事が可能である。

「このパソコンからのUSBデバックを常に許可する」チェックボックス

接続したPCを覚えておき再度接続した時には、USBデバック許可ダイアログを出さないようにする仕組みが用意されている。ホワイトリスト形式で接続デバイスを管理するが、チェックを付ける事でよりセキュアになるわけではない。
接続許可はUSBケーブルを抜くまで続くため、確認ダイアログがでる状況はUSBケーブルを抜き差しするような手作業が発生した状態となり端末を手に取っている状態であるのであまりメリットを感じない

現状でのメリットとすれば

  • 端末再起動を含めたような自動テストにおいてダイアログを出さないようにするため
  • 少しでも煩わしさを減少させたい
  • 開発専用端末を使用する時はセキュリティはどうでも良いので、少しでも煩わしさを減少させる

等が考えられる。また、ホワイトリストに登録されたPCを削除する機能が現在見当たらない事から、まだまだ実装途中であったり、今後の追加機能等で利用される事も考えられるが、これらの機能のバグが入っている可能性もあるので、特に理由がなければ、セキュリティを緩くする方向である、「このパソコンからのUSBデバックを常に許可する」チェックを付ける必要はないのと感じている。

この辺りに関しては、知っている方がいらしたら教えて頂けると助かります。

まとめ

最近USBデバックに関するセキュリティに関する修正が頻繁に入っていますが、全て開発時の設定を元に戻す事を忘れてしまう事への対策となっています。いくら気を付けていても凡ミスは発生します。最善の策は、普段使い端末(常用端末)を開発に使用しないと言う事です。

  • 開発端末と常用端末をわける事が最善の対処策
  • 常用端末は必ず画面ロック設定をする事
  • 常用端末を開発に使う場合
    • 開発時も画面ロック設定を外さない
    • Android 4.2.2未満の端末は、開発終了後USBデバックを無効にする

ブログ内の関連する記事