Android SharedPreferenceのセキュリティ


118

共有設定のセキュリティについて疑問に思います。

それらがMODE_PRIV(0)で作成された場合でも、sharedpreferencesへのアクセスを取得することは可能ですか?
利用可能なすべての共有設定をリストし、他のアプリからすべての設定を取得することは可能ですか?
sharedpreferencesは、パスワードや認証トークンなどの機密データを配置するのに適した場所ですか?

ありがとう



いい答えで、一見の価値があります。共有設定は、開発者のプログラミングスタイルについて多くを語ります。
Vishwa Ratna

回答:


232

共有設定は、デバイスのファイルシステムにファイルとして保存されます。デフォルトでは、特定のアプリケーションの実行に使用するUIDのみにアクセスを許可するファイルシステムの権限が設定された状態で、アプリのデータディレクトリ内に保存されます。したがって、Linuxファイルのアクセス許可がそれらへのアクセスを制限するのと同じように、それらは非公開です。これは、Linux / Unixシステムの場合と同じです。

rootはファイルシステム上のすべてにアクセスできるため、デバイスへのrootレベルのアクセス権を持つ人は誰でもそれらを見ることができます。また、作成するアプリと同じUIDで実行されるすべてのアプリケーションはそれらにアクセスできます(これは通常行われず、2つのアプリを同じUIDで実行するように特定のアクションを実行する必要があるため、これはおそらく大きな問題ではありません)懸念)。最後に、インストールされたAndroid OSを使用せずに誰かがデバイスのファイルシステムをマウントできた場合、アクセスを制限する権限をバイパスすることもできます。

設定(またはアプリケーションによって書き込まれたデータ)へのそのようなアクセスが心配な場合は、暗号化する必要があります。それらについて心配している場合は、表示されるリスクのレベルにどの程度の保護が必要かを正確に把握する必要があります。これについては、Androidプラットフォームのアプリケーションセキュリティで非常に広範な議論があります。2011年12月に公開されました(免責事項:私はこの本の著者です)。


2
これについて話す公式のドキュメントはありますか?参考文献はありますか?
CLU

26

SharedPreferencesは電話の/ data / data /フォルダーにあるXMLファイルにすぎないため、ルート化されたデバイスでスーパーユーザー権限を持つアプリケーションまたはユーザーは、MODE_PRIVで作成された場合でも、SharedPreferencesにアクセスできます

まだ誰からも守る方法があります...このリンクをチェックしてください。ここでは、暗号化を使用してデータを設定に保存できます。クラスは自明であり、非常に使いやすいです。

https://github.com/sveinungkb/encrypted-userprefs

他の人が言ったように、誰もがそれにアクセスできますが、この場合、それが暗号化されているので誰もその中のデータを読むことができません。そのsecure.Forよう最大限のセキュリティ私の提案は、実行時ではなく、ハード、それをコード化で暗号化に使用する鍵を生成することになります。それを行う方法はたくさんあります:)


8
次に、生成されたキーをどのように保存しますか?
Olayinka 2015年

3
@Olayinkaさらに別のキーで暗号化してに保存する方が安全SharedPrefです。しかし、その後、他のキーをどうすればよいでしょうか。しかし真剣に、最良のシナリオは、暗号化されたキーとデバイスUIDをSSLを使用してサーバーに送信し、そこに保存して必要に応じて取得することです。これには接続が必要ですが、デバイスをブラックリストに登録して、すべてのデータを突然破棄することができます。常時インターネット接続がなければ、データを暗号化しようとしても100%安全ではありません。
Paulo Avelar、2016

?1e06b065:暗号機能:EVP_DecryptFinal_ex:BAD_DECRYPT」times..Does誰のアイデア持っている私は、私はエラーを取得していますtimes..butそれは10のうち9が動作します...上記の溶液を使用
ラジTrivediの

3
@PauloAvelar Android KeyStoreを使用して、暗号化キーを長期間保存および取得します。キーはアプリケーション内に保存されないため、侵害されることはありません。提供されたライブラリはそれを使用しません。それはコードに秘密を保存するので安全ではありません。
apex39 '20

13

通常、いや、彼らはしかし、あなたはSharedPreferencesは中XMLファイルとして保存されていることに注意する必要があり、他のアプリがアクセスすることができない/data/data/という本質的手段、ディレクトリ、任意の持つアプリケーションは、スーパーユーザー権限根付いたデバイスができ、あなたのアクセスSharedPreference彼らがいた場合でも、Sをで作成MODE_PRIV


3

それらがMODE_PRIV(0)で作成された場合でも、sharedpreferencesへのアクセスを取得することは可能ですか?

コード番号で。ただし、スーパーユーザー権限がある場合は、アプリケーションファイルを取得できます。

利用可能なすべての共有設定をリストし、他のアプリからすべての設定を取得することは可能ですか?

スーパーユーザー(ルート権限を取得されたデバイス)の場合は、アプリのすべてのプライベートファイルをプルできます。

sharedpreferencesは、パスワードや認証トークンなどの機密データを配置するのに適した場所ですか?

いいえ、簡単にハッキングできます。機密のデータを共有prefrenceファイルに入れたい場合は、データを暗号化して保存できます。暗号化キーをNDK /サーバーに保存できます。


どうすれば簡単にハッキングできますか?
John Sardinha

はい、質問フォーム@Jo
Cuong Vo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.