使用SharedPreferences进行安全性

Edm*_*oid 15 android sharedpreferences

我正在开发一个应用程序,我必须存储非常敏感的数据,它不应该与用户联系.我从这个来源得知,如果一个设备是root用户,那么访问SharedPreferences和修改它就是一个很好的例子.我不想要它.那么有什么方法可以保护我SharedPreferences不被任何地方访问.或者更好的是,如果有人可以建议更安全的数据存储选项

pat*_*ckf 27

有不同的要点:

无根设备上的共享首选项

这里的数据在代码级别是安全的.它只能通过应用程序访问(恶意或正常方式)

无根设备上的加密共享首选项

与上述相同.您的数据是安全的.安全级别没有区别,它与未加密的安全或不安全一样.

有根设备上的共享首选项

任何应用程序都可以访问和操作数据.但是你必须考虑到只有很小的百分比(我猜不到1-2%,但互联网上没有可靠的数据)的设备根深蒂固,如果用户根据他的设备他/她故意让自己变得脆弱.这不是Android系统设置,如果您是root用户,则应对后果负责.

已植根设备上的加密共享首选项

因此,您可以选择加密数据.有一个现成的解决方案.但问题是要保守密钥.源代码中的一个带密码的密钥可以很容易地被反编译(即使使用像Proguard这样的字节代码混淆器).每个应用程序生成的密钥必须保存在某个地方,并且最终在根设备上,可以访问与位置无关的访问(共享的pref,sql,file).每个用户密钥的服务器端仅保存在RAM中更安全,但由于您需要在应用程序第一次启动或每次收集垃圾时发出服务器请求,因此会降低可用性.这可能会干扰离线功能.

除了最后一种方法,加密您的共享偏好几乎不会提供任何真正的安全增强功能.

开发恶意应用程序的含义

自14年4月以来,Google 在设备上的播放服务(也在播放商店服务器端)中嵌入恶意软件扫描程序,可检测恶意应用程序,并且其定义经常更新(至少每6周一次,因为该游戏的发布周期商店应用)并适用于每个谷歌Android 2.3+.

作为一个读取数据的恶意应用程序的潜在开发者,我必须考虑我的应用程序仅适用于一小部分设备,然后也只是短暂的一段时间,我的主要分发渠道是让人们下载apk并手动安装应用程序,并希望立即被恶意软件扫描程序识别,这是一个非常不可能的情况.这将使我倾向于使用其他具有更好的努力回报率的入侵手段.

我想这就是为什么Android仍然只有少数恶意应用程序,至少我知道没有广泛的"感染"(2015年中期).

应用程序应该存储敏感数据吗?

如果您的设计符合您的要求,我会重新考虑.通常,您希望存储最不敏感的数据,并且只在需要时才从服务器获取数据,然后只要您需要它就将其保存在RAM中.因此,可能非常具有破坏性的数据不应永久保存在设备上(如果可能).正如我们所讨论的那样,Android手机上的数据无法以满足各种安全要求的方式进行保护.

除此之外,您还必须考虑在UI级别上保护数据,否则任何人都可以通过应用程序拿走您的手机并访问核弹代码.

TL;博士

  • 仅保留手机上的敏感数据,您基本上需要保持应用的合理可用性.其他所有内容都属于RAM(例如对象成员),应该按需提取并保持尽可能简短
  • 不太可能存在针对您的应用的有效恶意软件
  • 共享Prefrence在所有非故意易受攻击的设备上都是安全的.您对此没有任何影响,因此您不能承担责任,因为它不是手机的标准功能
  • 在Android手机上加密您的数据几乎不会提供任何真正的安全增强功能

更新:我对加密数据的描述并不完全正确.有关如何加密易受攻击设备上的数据的解决方案,请参阅whitebox加密.