客户端服务认证到后端

时间:2021-04-22 16:09:29

标签: android security authentication

我正在开发将与后端 API 通信的 Android 后台服务。此外,该应用程序将通过移动设备管理系统进行分发,并且没有客户端交互,例如输入用户信息。我如何安全地授权后台服务的每个实例,以便他们可以访问后端服务?我的一个想法是使用预先配置在服务器上的应用程序分发一次性邀请码,这样应用程序的每个实例都可以通过生成用户名和密码向服务注册,然后它可以使用 OAuth 来检索访问令牌。

我发现了一个类似的问题,但是,我不想允许该服务的任何任意实例访问该 API 并且它引用了一个已弃用的功能 Authorizing Client Acces to App Engine Backend

1 个答案:

答案 0 :(得分:0)

挑战

<块引用>

我正在开发将与后端 API 通信的 Android 后台服务。此外,该应用将通过移动设备管理系统进行分发,并且没有客户端交互,例如输入用户信息。

你在这里遇到了巨大的挑战:)

当涉及用户身份验证(who)时,将 API 服务器锁定到移动应用程序的真实和未修改的实例已经是一项非常艰巨的任务,但是如果缺少这一点,事情就会变得非常困难,但并非不可能。

在我们继续之前,我想首先澄清一个我通常在任何资历的开发人员中发现的误解,即什么正在访问之间的区别一个 API 服务器。

WHO 和 WHAT 访问 API 服务器的区别

我写了一系列关于 API 和移动安全的文章,在文章Why Does Your Mobile App Need An Api Key?中,您可以详细阅读什么之间的区别访问您的 API 服务器,但我将在此处提取主要内容:

<块引用>

什么是向 API 服务器发出请求的东西。它真的是您移动应用的真实实例,还是机器人、自动化脚本或攻击者使用 Postman 等工具手动访问您的 API 服务器?

<块引用>

是移动应用的用户,我们可以通过多种方式对其进行身份验证、授权和识别,例如使用 OpenID Connect 或 OAUTH2 流。

因此,请考虑将作为您的 API 服务器将能够对数据进行身份验证和授权访问的用户,并考虑什么作为实现该功能的软件代表用户请求。

在您的情况下,您没有用户,因此您需要努力创建一个解决方案,让 API 服务器具有非常高的置信度,可以确保请求来自它期望什么,一个真正的、未经修改的移动应用版本,您的 Android 后台服务在其中运行。

您应对挑战的解决方案

<块引用>

我的一个想法是使用预先配置在服务器上的应用程序分发一次性邀请码,这样应用程序的每个实例都可以通过生成用户名和密码向服务注册,然后它可以使用 OAuth 来检索访问令牌。

您现在可能已经知道,您的解决方案只会提供请求中的,而不是什么正在执行请求。当您说 I do not want to allow any arbitrary instance of the service to have access to the API 时,您已经引用了请求中的内容。这可以是在运行时检测的移动应用、重新打包的移动应用、克隆的移动应用、运行自动脚本以像真实移动应用一样发出请求的机器人,甚至攻击者手动重放的请求。

此外,可以使用逆向工程技术从 APK 二进制文件中轻松提取一次性邀请码,就像我在文章 How to Extract an API key from a Mobile App with Static Binary Analysis 中展示的那样:

<块引用>

可用于逆向工程的开源工具范围很广,我们在本文中确实无法触及该主题的皮毛,但我们将重点介绍如何使用 Mobile Security Framework(MobSF) 来演示如何逆向工程设计我们的移动应用程序的 APK。 MobSF 是一个开源工具的集合,它们在一个有吸引力的仪表板中展示他们的结果,但是在 MobSF 和其他地方使用的相同工具可以单独使用以获得相同的结果。

在本文中,我们将使用 Android Hide Secrets 研究存储库,这是一个使用多种不同技术隐藏 API 密钥的虚拟移动应用程序。

一个可能更好的解决方案

<块引用>

我如何安全地授权后台服务的每个实例,以便他们可以访问后端服务?

我建议您阅读this answer我针对如何保护移动应用程序的 API REST?提出的问题,尤其是强化和屏蔽移动应用程序部分em>、保护 API 服务器一个可能的更好的解决方案

链接的答案将让您了解您可能想要考虑的几个选项,并强调移动应用证明的概念,因为该概念将使 API 服务器具有非常高的置信度,只接受来自运行 Android 后台服务的移动应用的真实且未经修改的实例。

你想走得更远吗?

在回答安全问题时,我总是喜欢引用 OWASP 基金会的优秀作品。

对于 APIS

OWASP API Security Top 10

<块引用>

OWASP API 安全项目旨在通过强调不安全 API 中的潜在风险并说明如何降低这些风险来为软件开发人员和安全评估人员提供价值。为实现这一目标,OWASP API 安全项目将创建和维护 10 大 API 安全风险文档,以及创建或评估 API 时最佳实践的文档门户。

对于移动应用

OWASP Mobile Security Project - Top 10 risks

<块引用>

OWASP 移动安全项目是一个集中式资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类并提供开发控制以减少其影响或被利用的可能性。

OWASP - Mobile Security Testing Guide

<块引用>

移动安全测试指南 (MSTG) 是一本关于移动应用安全开发、测试和逆向工程的综合手册。