使用共享首选项进行持久登录,这是漏洞吗?

lit*_*019 4 security android

最近我发现很多Android应用使用共享首选项进行持久登录,此类应用首次登录时需要用户提供用户名和密码,但此后不需要用户进行其他操作。

在极少数情况下,该应用程序会将密码存储在 shared_prefs 文件夹的 login_account.xml 等文件中,一旦用户 root 了他的 Android 手机,其他恶意应用程序可能会读取此文件以获取用户的密码。

在大多数情况下,我发现应用程序会在 shared_prefs 文件夹的 login_account.xml 中存储登录密钥(而不是密码),这似乎是安全的,因为邪恶的应用程序无法窃取密码。但是它仍然可以获得受害者的登录状态,因为他可以用受害者的登录密钥替换他的登录密钥。

我想知道是否有某种方法可以保护我们的用户免于登录密钥被盗,并且不需要我们的用户每次都输入他的密码来加载我们的应用程序

Phi*_*ami 5

设备本质上是不安全的,所以无论你做什么,“邪恶的家伙”总是有可能做一些事情。对此绝对没有解决办法。但是,您可以按照 Chirag Raval 的建议在一定程度上降低风险:只存储登录信息和登录成功的事实。我会在有限的时间内将其添加到仅“自动”登录,然后再次显示登录对话框以重新确认密码。

您可以通过生成手机签名,在第一次登录时发送它并让服务器发送一个响应字符串,您可以在随后登录时使用,从而使其更安全一些。由于很难猜到,它在另一部手机上不起作用并且仍然需要密码,因此这在某种程度上是安全的。为了生成这样的签名,我将连接来自 Build 类的许多字段值、电话的 id 和可能在 TelephonyManager(家庭网络)中获得的值,然后从中生成一个摘要。最安全的方法是使用 SHA-1 HMAC(查看 Bouncy 城堡库)。

当然,这一切都是针对一个专门的对手:他可以将调试器附加到您的应用程序,跟踪其所有调用并找出签名算法。那是因为正如我在顶部所写的那样,该设备是不安全的。(PS:当客户测试应用程序的安全性时,这实际上发生在我身上)。