安装 ID 是否足够安全,可以根据 Web 服务 API 验证设备用户的身份?

信息安全 验证 安卓
2021-08-16 11:04:09

...或以交互方式询问密码/或拥有一些证书是不可避免的?

语境

我的 Android 应用想要通过我的 Web 服务 API 进行安全交易。但是,我不想打扰我的用户询问/注册密码,也不想要求安装证书。

所以这是一个建议的解决方案,但我严重怀疑它不能被伪造。

建议的解决方案

  • 我的 Android 应用程序和我的服务器 API 之间的连接受限于 HTTPS
  • 在应用程序首次与服务器通信之前,它会查询我的应用程序安装 ID。所有后续的 API 调用都将使用这个唯一的 id 作为第一个参数。

问题)

是否有可能任何第 3 方(犯罪分子、黑客)知道此安装 ID(例如在同一设备上安装其他恶意应用程序),然后可以使用任何自定义工具(例如桌面应用程序)向我的服务器发送虚假请求?

2个回答

攻击者可以做的是,在有根设备中,反编译您的 apk 并了解与 API 通信的内容,以在您的后端进行身份验证或识别用户。他们可以在任何应用程序(桌面或其他移动平台)中重新设计该通信过程。请记住,一旦有人在他们的设备中安装了您的 Android 应用程序,您就无法控制该应用程序。

您的解决方案将在受控环境中工作,例如公司网络(假设您仅在已知的受信任设备中安装应用程序)。在公开场合,我非常怀疑您的解决方案是否可行。

并且根据行业标准,不建议开放没有任何 Authentication 机制的公共 API(如果您的 API 是公共的)。

根设备上的恶意应用程序可以读取您将用来智取敌人的任何证书或密码。同样在您的场景中,您如何知道第一个请求(接收 API 密钥的请求)来自合法应用程序而不是来自黑客?

在这些限制内,经过验证的设备 id 1并不比其他任何东西都差。


设备 ID是指经过验证的设备唯一的任何 ID。它可能是原始格式的 64 位android.provider.Settings.Secure.ANDROID_ID,或者与一些特定于应用程序的字符串或其中的 MD5 哈希混合,以使临时观察者的请求不那么明显。


更新:鉴于识别的目的是保护用户在云上的私人数据,可以在第一次请求时从服务器返回一个用户唯一的“密码”,以后无需手动登录即可使用。请对所有请求使用 HTTPS,以防止通过无线方式嗅探此密码。

但是你应该知道,一个坚定的研究人员将能够截获密钥,至少如果她可以物理访问设备,并且可以打破解锁保护。

如果“磁盘”没有加密,甚至可以从砖块设备中检索到密钥。