連載
» 2011年04月19日 00時00分 公開

イチから始める! Androidセキュリティ(2):知ってるつもりで知らない端末のほんとの挙動 (2/3)

[杉山俊春, Illustrated by はるぷ,株式会社ユービーセキュア]

Android端末で何ができるか、ほんとに知ってる?

 次の日、クウは早速ユウヤに通信経路上でパスワードが閲覧できない状態にしたAndroidアプリケーションを見せることとした。

クウ 「ふふ。今日は一味違うぜ!」

ユウヤ 「何が?」

クウ 「まあ、見たまえ。今度はパスワード……。あ、電池残量がほとんどない……」

ユウヤ 「確かに一味違うな」

クウ 「むう……。充電しなきゃ〜。USBポートの空きがないからどうしよ」

ユウヤ 「俺のPCのUSBポート貸してやろうか?」

クウ 「ありがとー」

 クウは、ユウヤに言われるままに、ユウヤのPCのUSBポートに自分のAndroid端末を接続した。

ユウヤのPCでAndroid端末の充電を始めるクウ

ユウヤ 「で、何だったっけ?」

クウ 「あ! 忘れるところだった! 今回はパスワード分からないようにしたのだ!」

ユウヤ 「パスワードって、“pa$$kuu!”ってやつ? 前のやつの前後入れ替わっただけじゃん」

クウ 「え?? なんでなんで?? まだ端末に触ってすらいないのに!?」

ユウヤ 「クウはバカだなぁ……」

クウ 「むー!」

 Android端末に対して、実際に「何がどこまでできるのか」という部分は、Android端末自体をフィーチャーフォン(従来の携帯電話)の延長として捉えてしまった場合、ユーザーの視点からは非常に分かりにくいのが現状である。

 そのため、Android端末が一般ユーザーの視点からではなく、攻撃または不正を行おうとするユーザーの視点からはどのように見えるものなのか、あらかじめ知った上でアプリケーションを作成することが望ましいといえる。

 Android端末の基本的な構成・動作を把握しないでアプリケーションを作成した場合、根本的な設計のレベルから変更を余儀なくされることもあり得る。このため、運用時のトラブルや開発の手戻りの発生を回避するために必須の知識となる。

adbコマンドで動作を把握

 Android端末の動きを把握するに当たって、まずAndroid端末を操作するための仕組みを理解する必要がある。

 開発環境からAndroid端末を操作するには、主に「adbコマンド」が利用される。このadbコマンドを利用するには、USBデバッグ設定が有効になっているAndroid端末とPCをUSBケーブルでつなぐ必要がある(※USBデバッグ設定が有効になっている場合でも充電が可能である)。

 ここで、クウのAndroid端末がどういう状態になっていたかを考えると、

  • 開発を行っていたため、USBデバッグ設定が有効になっている
  • ユウヤのPCにUSBケーブルで接続されている

という条件がそろってしまっている。このため、ユウヤがPCからクウに気付かれることなくAndroid端末の内部を探ることが可能な状態にあったといえる。

 「開発なんてしてないから大丈夫」という場合でも、開発用ではなく、画面キャプチャを撮るためだけにUSBデバッグ設定を有効にしているユーザーも多い。そのため、“たとえ端末ロックを掛けていたとしても”USBケーブルでつなげば、端末を操作できてしまうので注意が必要だ。

パスワードがばれた理由をユウヤから聞き出そうとするクウ

クウ 「うぬー! 何でだ! そもそも、見れたとしても見ないでよ!」

ナツ 「おはよー。どしたの??」

クウ 「なんか、ユウヤが僕のパスワードを知ってるんです! 意味が分からないよ!」

ナツ 「ん?……あー、なるほど。冷静に自分のAndroid端末がどうなってるか見たら、分かるよ」

クウ 「んーと……。ユウヤのPCから充電してもらってて〜……。あ! USBデバッグ有効なままだけど……。パスワード見るとかまでできちゃうんですか?」

ナツ 「まあ、強引にやればできないこともないけど……。まあ、とりあえず今日はそこらへんの基本を教えようか」

 Android端末で何ができるかを知るには、adbコマンドを利用して、実際に端末を操作してみるのがよい。adbコマンドは、SDKインストールパス配下のbinフォルダ内にある。

 adbコマンドにはさまざまな便利な機能が含まれているが、最もよく利用されるのが「adb shell」コマンドだろう。adb shellコマンドでは、コマンドラインによってAndroid端末を操作できる。しかし、コマンドラインで操作できるといっても、実際にAndroid端末上で利用できるOSコマンドはごく一部となる。

 ただし、端末内の情報閲覧が目的であれば、lsコマンドやcatコマンドが利用できれば十分だ。また、ほかのOSコマンドを利用したい場合、Android OS向けにビルドしたコマンドをadb pushコマンドなどでインストールすることによって、環境にさまざまなコマンドを追加することも可能となる。

図2 追加コマンドの実行例 図2 追加コマンドの実行例

root権限を取られたときのことも検証しておこう

クウ 「うへー。開発環境から操作してたから知らなかったけど、なんかいろいろできるんですね〜」

ナツ 「情報をいろいろ入れっぱなしにしたPCを持ち歩いてるって思っておいた方がいいね」

クウ 「端末を落としてしまったときにどこまでやられちゃうかって考えると、アプリを作るにも結構考えて作らないとダメですね……」

ナツ 「そうだね。拾ったモノに悪さをしようとする人だったら、利用規約とか関係なしにroot化とかされちゃうだろうし、実際には、もっといろんな情報見れちゃうだろうね」

クウ 「むむぅ……。でも、どこまで見られるかを試すために、root化するわけにもいかないし……」

ナツ 「そこは大丈夫! エミュレータを使えばroot権限でどう動くか分かるよー」

 root権限が取れる場合も想定しなければならないといっても、実機をroot化するなどの手法を試すと、利用規約などに反してしまう場合がある。そのため、開発用のroot権限が利用できる実機を用意する必要が生じ、気軽にroot権限での動作を試すことができない場合も少なくない。

 その場合、Android SDKで用意されているエミュレータを利用することで、root権限を得た状態でのAndroid OS操作を確認できる。

図3 実機とエミュレータの違い 図3 実機とエミュレータの違い

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。