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

» 2011年04月19日 00時00分 公開
[杉山俊春, Illustrated by はるぷ株式会社ユービーセキュア]
前のページへ 1|2|3       

3種類ある端末へのデータ保存方法

ナツ 「よし。基本的なことはなんとなく分かったよね」

クウ 「う〜ん。いま初めて知ったことばっかりで、ほんと、なんとなくですけど」

ナツ 「じゃあ、ここで“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>
PreferenceActivityを利用したパスワード保存時の記述例:android:passwordをtrueに設定
図4 画面上の表示とデータの保持形式 図4 画面上の表示とデータの保持形式

クウ 「ひえー。なるほどー。これは、実際にどう保存されているか分からないと思い至らないですね……」

ナツ 「うん。今までのフィーチャーフォンとかだと、中身を見るすべ自体がなかったから気にしてなかったかもだけど、これからは気にしていかないといけないね」

クウ 「ふむふむ……。あれ? けど、これroot権限が必要なんですよね」

ナツ 「そうだね。だから……」

クウ 「ってことは、ユウヤは勝手に端末をroot化したってことに?!」

ユウヤ 「だな。手っ取り早いとこでroot化してみた」(※Android端末のroot化は利用規約に反する場合があります)」

クウ 「ほんとに壊してるじゃんか!」

ユウヤ 「一時的にrootにしただけなんだから、いいじゃん。たぶん再起動で元に戻るし」

クウ 「よくない!」

ユウヤに怒るクウ

きょうの格言

きょうの格言

スマートフォン内でのデータの保存方法を把握しよう!

画面上からは保護されているように見えても、実際の重要データは平文で保存されている場合がある。

実際の保存状態を確認することで、安全性を高めよう。


クウ

【クウたちの壁紙カレンダー、配布中!】

本連載のイラストを担当しているはるぷさんによる、毎月更新のカレンダーが配布されています。ぜひご利用ください!

特製ウォールペーパー

http://www.ubsecure.jp/wallpaper.php


Profile

杉山 俊春(すぎやま としはる)

株式会社ユービーセキュア
技術本部 VEXグループ リーダー 兼 セキュリティオーディットコンサルタント

セキュリティコンサルタントとして、主にWebアプリケーションのセキュリティ検査やWebアプリケーション検査ツールの開発などに従事している。大手ショッピングサイトなどの検査実績を持つ。



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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