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を取得することも出来るので、確実に対策をしておく必要があります。

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

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。Ruby on Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。軽度の資格マニアで、情報処理技術者試験(16区分17回 + 情報処理安全確保支援士試験)、技術士(情報工学部門)、Ruby Programmer Gold、AWSソリューションアーキテクト(アソシエイト)、日商簿記2級、漢検準1級などを保有。

babaの書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ