Firebase:反编译apk可以访问我的数据和文件吗?

8
如果有人想通过获取apk文件并自定义它来执行其他不应该执行的操作来逆向工程我的安卓应用程序。请记住,apk文件将具有我们从firebase下载的google-services.json文件,当我们创建firebase项目以链接安卓应用程序时会用到。
问题是:尽管实时数据库或firebase存储上存在仅允许经过身份验证的用户才能访问的安全规则。但黑客可以反向工程应用程序并创建一个具有相同google-services.json文件的应用程序,然后在编译时创建帐户并登录到应用程序(使其经过身份验证),然后也许他可以删除和写入实时数据库中的数据。
有人可以解释一下这时安全措施如何生效吗?
2个回答

2
一般而言,你应该假定任何你提供给客户的代码都有可能被攻击。你需要假设他们所运行的设备完全由他们控制,并且他们可以更改你的代码在该设备上的执行方式。问题不在于你的应用程序被反编译,而在于你无法以任何方式控制执行环境(除非你制造设备并在其中内置硬件安全性)。
google-services.json 中的数据并非私人数据。你应该假定一旦发布应用程序,所有人都会知道该文件中的所有信息。将这些数据视为唯一标识符,告诉你的应用程序从哪里获取数据。该文件中没有密码或凭据,允许攻击者执行你未经授权的任何操作。
使用 Firebase Authentication 结合安全规则来控制托管在 Firebase 中的数据的访问权限取决于你。无法阻止人们在你的应用程序中创建随机帐户,但可以限制他们可以执行的操作。
如果发现你的应用程序受到某种形式的滥用,可以关闭滥用者的帐户,并联系 Firebase 支持报告滥用行为。

如果攻击者从我的Java代码中发现存在一个名为chat_node的节点,并且知道这个chat_node必须由经过身份验证的用户进行写入......那么攻击者可能会将null写入高节点,即chat_node,并删除所有其他用户的数据......这是一种可能性吗? - data
如果你允许它发生,那么它就会发生。你需要设计你的安全规则来禁止那些你不希望发生的行为。 - Doug Stevenson
我的应用程序不应该是 Firebase 控制台的特殊实例吗? - data
我认为你忽略了我的主要观点 - 你可以通过安全规则来控制谁能在你的项目中做什么。这是你唯一控制访问权限的方法,其他所有方法都可能会受到威胁。 - Doug Stevenson
现在你提出的问题与最初的问题完全不同。请在Stack Overflow上制定一个新问题,并描述问题、你尝试解决它的方法以及没有按照你期望的方式工作的内容。 - Doug Stevenson
显示剩余4条评论

1
我在几个月前遇到了同样的情况。
据我所知,当您生成项目时(从Firebase控制台或Android Studio创建),它会要求您提供一个SHA-1密钥。
这个SHA-1密钥是唯一的,并且作为您的项目与Firebase服务连接的授权。例如,如果用户拥有您的google-services.json文件,没有SHA-1密钥允许他们使用您的项目,他们甚至无法登录或进行身份验证。
我还检查了google-services.json文件,其中包含与包名称相关的SHA1-1密钥。
 "android_info": {
            "package_name": "com.packagename.debug",
            "certificate_hash": "SHA1-KEY"
          }

如果您需要添加新的SHA-1,您还需要使用Gmail进行身份验证,前往Firebase控制台并自行添加(在这种情况下,黑客几乎无法访问您的Gmail帐户),或者从Android Studio执行相同的操作并同步项目。
正如我之前所说,这是我对这种情况的理解,而且针对保护API密钥的一些小研究表明,您需要担心应用程序中的客户端API,而不是公共API。
问题在于,在客户端加密您的API会暴露加密代码并且可以被解码,这就是为什么有时最好从Firebase运行某种函数并将敏感的API发送到您的项目中。
再次说明,我回答问题是基于我拥有和检查过的项目的理解,这不是官方答案,请谨慎参考。

但这是否意味着,如果数据节点可以通过身份验证访问,那么反转的代码可以更改我的数据节点? - data
我认为攻击者需要在您的Firebase控制台中拥有他项目的sha1,如果没有Gmail登录,则不可能。 - Gastón Saillén
你的意思是一旦我将应用程序与 Firebase 链接,Firebase 控制台上就会创建一个 sha1 吗? - data
一旦您将其与Android Studio链接,是的,并且在手动创建项目时也会请求,您可以转到项目设置并在那里查看您的包名称和sha1。 - Gastón Saillén
是的,但当攻击者获取我的apk文件时,它已经与Firebase链接了...所以唯一剩下的就是在Android Studio中重新编译并开始向我的数据库写入内容了? - data
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接