Tech Racho エンジニアの「?」を「!」に。
  • 開発

Androidで安全にパスワードを保存する(2)

前回までの内容で、Android端末内にパスワードを保存することができるようになりました。

しかし、このままではセキュアとは言えません。どんな問題があるのか考えてみましょう。

何が危険なのか

SharedPreferenceで保存したデータは、
/data/data/[パッケージ名]/shared_prefs/
以下に保存されます。

たとえばcom.example.helloworldというアプリを作った場合、getDefaultSharedPreferences()で取得・保存したデータは
/data/data/com.example.helloworld/shared_prefs/com.example.helloworld_preferences.xml
に保存されます。

rootedな端末では、以下のようにして簡単に生パスワードを表示できます。

> adb shell
$ su
# cat /data/data/com.example.helloworld/shared_prefs/com.example.helloworld_preferences.xml

端末にインストールされた、他の悪意あるアプリからも同じ操作ができるので、もう少し対策したいですね。

このXMLファイルは、所有者・グループともにアプリIDのユーザ(例:app_100)になっていて、パーミッションは660になっています。
そのため、rootを奪取されていない端末では、対策をしなくてもここまで簡単には表示できません。
しかし、Androidはrootを取得している人が無視できないほど多いので、このままでは危険です。
また、Android 2.3.3未満では、setuid周りのバグにより、悪意のあるソフトウェアがrootを取得することも出来るので、確実に対策をしておく必要があります。

そこで、次回はパスワードを暗号化して保存する方法について考えてみましょう。

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。