ナツ 「よし。基本的なことはなんとなく分かったよね」
クウ 「う〜ん。いま初めて知ったことばっかりで、ほんと、なんとなくですけど」
ナツ 「じゃあ、ここで“Hello World!”作ってみようか」
クウ 「お、ここでやっとコーディングですね」
ナツ 「コーディングするっていうより、作ってインストールしたものが端末上でどう動くか、データがどう扱われるかというとこを見るのが先だね」
クウ 「むむ。なるほど」
Androidアプリケーションにおいて、データの端末への保存方法は、大きく3つが利用される。ファイルへの保存、データベースへの保存、設定ファイルへの保存の3種類だ。
特に指定がない場合、/data/data/フォルダ内の各アプリケーション用の領域に保存される。この領域に保存されたデータは、通常、ほかのアプリケーションやコマンドラインからは閲覧できないように保護される。そのため、コマンドラインから確認するには、エミュレータのようにroot権限が付与された環境が必要だ。
アプリケーションごとの領域は、それぞれパッケージ名のフォルダ内に格納される。パッケージ名とは、Androidアプリケーションを作成する際に設定ファイル(AndroidManifest.xml)に記載されるもので、アプリケーションごとに一意になる名前が付けられる。実際にどのようなパッケージ名が付いているかは、AndroidマーケットのURL(https://market.android.com/details?id=[パッケージ名]&feature=search_resultの形式)などでも確認が可能である。
例えば、パッケージ名がjp.example.helloworldに設定されている場合は、/data/data/jp.example.helloworld/がデータ格納先となる。
ローカルファイルへの保存:/data/data/[パッケージ名]/files/[ファイル名] データベースへの保存:/data/data/[パッケージ名]/databases/[データベース名].db 設定ファイルへの保存:/data/data/[パッケージ名]/shared_prefs/[設定ファイル名].xml
クウ 「ふむ。アプリケーションの扱うデータはこんな場所に保存されてるんですね」
ナツ 「クウが作ってたアプリはどうやってパスワード保存してたの?」
クウ 「PreferenceActivityを使ってるから、Preferenceのやつですね」
ナツ 「あー、あー。それ使うとパスワードの保護がちょっと複雑になるね」
クウ 「え? なんか伏せ字にしてくれてるし大丈夫じゃないんですか?」
ナツ 「パスワード保存して、エミュレータで見てごらん」
クウ 「あ! そのまま見えてる! 困る!」
通常のデータ保存方法では、パスワードはすべて平文で保存されるため、重要な情報を格納する際には注意が必要となる。
例えば、上記の例の設定ファイルの場合、以下のように端末の画面上では伏字になっている。しかしコマンドラインから閲覧すると、ほかの設定項目と同様に平文で保存されていることが分かる。
そのため、PreferenceActivityを利用してパスワードを保存しようとした場合、独自に暗号化やハッシュ化を施す必要があるが、処理が非常に複雑になってしまう。従って、PreferenceActivityを利用しない設定ファイルか、ファイルやデータベースに暗号化したものを保存することが望ましいと考えられる(※この場合でも、暗号化やハッシュ化をせずに保存した場合は同様に平文で閲覧が可能となる)。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="設定"> <EditTextPreference android:key="password_key" android:title="パスワード設定" android:summary="パスワードを設定します。" android:dialogTitle="パスワード" android:password="true" /> </PreferenceCategory> </PreferenceScreen>
クウ 「ひえー。なるほどー。これは、実際にどう保存されているか分からないと思い至らないですね……」
ナツ 「うん。今までのフィーチャーフォンとかだと、中身を見るすべ自体がなかったから気にしてなかったかもだけど、これからは気にしていかないといけないね」
クウ 「ふむふむ……。あれ? けど、これroot権限が必要なんですよね」
ナツ 「そうだね。だから……」
クウ 「ってことは、ユウヤは勝手に端末をroot化したってことに?!」
ユウヤ 「だな。手っ取り早いとこでroot化してみた」(※Android端末のroot化は利用規約に反する場合があります)」
クウ 「ほんとに壊してるじゃんか!」
ユウヤ 「一時的にrootにしただけなんだから、いいじゃん。たぶん再起動で元に戻るし」
クウ 「よくない!」
【クウたちの壁紙カレンダー、配布中!】
本連載のイラストを担当しているはるぷさんによる、毎月更新のカレンダーが配布されています。ぜひご利用ください!
特製ウォールペーパー
http://www.ubsecure.jp/wallpaper.php
杉山 俊春(すぎやま としはる)
株式会社ユービーセキュア
技術本部 VEXグループ リーダー 兼 セキュリティオーディットコンサルタント
セキュリティコンサルタントとして、主にWebアプリケーションのセキュリティ検査やWebアプリケーション検査ツールの開発などに従事している。大手ショッピングサイトなどの検査実績を持つ。
Copyright © ITmedia, Inc. All Rights Reserved.