我应该混淆Android应用程序存储的OAuth消费者秘密吗?

时间:2011-08-19 13:00:43

标签: android security oauth storage

我的Android应用包含Twitter API的OAuth消费者秘密。目前它在.properties文件中以纯文本格式显示,因此有人无需花费精力在APK中查找。

我是否应该采取措施来掩盖它(例如,rot13或存储在混淆的Java代码中)?或者我应该避免做任何这样的事情,因为它会造成虚假的安全感?

人们通常如何在Android应用中分发/存储OAuth秘密? 这个秘密被盗和被滥用的常见程度如何?

4 个答案:

答案 0 :(得分:41)

真正的问题是攻击者从窃取它中获得了什么......

你应该尽力保护秘密,但最后,一个积极性高的黑客总能在一个已安装的应用程序中找到它。所以它是秘密与提取难度的价值。

客户端密钥的值是模拟应用程序。它不提供对用户数据的任何访问。但是,由于Twitter支持自动向以前批准的应用程序发布凭据(他们使用Twitter流程登录),攻击者可能会使用您的秘密构建一个Web应用程序并使用盲目重定向窃取用户数据。

Twitter实施的问题在于他们不会向开发人员询问应用程序的性质。如果他们这样做了,他们就不会给你一个秘密,并阻止任何人使用你的客户端凭据构建一个Web应用程序,并窃取已经批准它的用户的数据。

混淆是一种选择,但却是一种弱选择。将秘密移动到充当API代理的Web服务器是另一个,但这只会将问题移到别处,因为现在您的应用必须对代理服务器进行身份验证。但是,如果您要求用户登录您的站点(可以通过Web视图使用Twitter登录),则此模式可以相当安全。这样,有人试图滥用您的代理将需要他们的用户在您的服务上打开帐户,这不是很吸引人。

简而言之,继续进行模糊处理。它没有伤害。考虑使用代理模式。也许让Twitter知道他们的安全政策“不太好”。

答案 1 :(得分:4)

我肯定会读到其中一位OAuth作者Eran Hammer-Lahav的this analysis,其中引用了另一位article dissecting Twitter's OAuth secret problems

我的建议是对密钥进行模糊处理,以便无法轻易提取密钥,并且您应该对机会和垃圾邮件发送者保密。

Hammer-Lahav的观点是OAuth的秘密不应该被撤销,只能用于收集统计数据。希望Twitter能够遵循这一建议。

答案 2 :(得分:0)

要在Android应用中隐藏OAuth密钥,可以使用我们开发的gradle插件。它是Dexguard的免费开源替代方案。我们的hidden-secrets-gradle-plugin使用NDK和XOR运算符来混淆密钥,以防止进行反向工程。

您可以选择提供自定义编码/解码算法,以提高密钥的安全性。

访问插件和所有详细信息:https://github.com/klaxit/hidden-secrets-gradle-plugin

答案 3 :(得分:-3)

0Auth的要点是您不会在设备上存储任何珍贵的敏感信息 - 所以可以在设备上存储密码(比真实用户凭证更好)。如果您的设备机密被盗,用户可以随时使访问无效,而无需更改其凭据