移动应用安全问题
MobileApps Security Issue
我首先要回答一个非常有说服力的问题。但这与代码级别无关,只是为了衡量我的理解。如果我错了请纠正我,现在 MobileApps 按照设计使用会话令牌方法进行请求。
目前,第一次使用的用户将从后端传递他们的设备 ID、密码和时间戳以获取加密值。随后,前端系统将发送此参数进行请求,并得到响应成功。令牌的有效期为 30 分钟。
最近发生了一起事件,黑客能够通过欺骗来操纵来自脚本的请求。因此,黑客正在模仿与移动应用程序相同的行为。我们如何迎合这种场景?有没有办法阻止这类请求?
令牌方法
Correct me if i'm wrong, now days MobileApps as per design utilizes the session token method for a request.
我认为您指的是 OAUTH2 或 OpenID 令牌。
OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.
OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. It allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server, as well as to obtain basic profile information about the End-User in an interoperable and REST-like manner.
OpenID Connect allows clients of all types, including Web-based, mobile, and JavaScript clients, to request and receive information about authenticated sessions and end-users. The specification suite is extensible, allowing participants to use optional features such as encryption of identity data, discovery of OpenID Providers, and session management, when it makes sense for them.
API
的移动应用识别
Currently, for first time user will pass in their deviceID, pin, and timestamp for an encrypted value from the back-end. Subsequently , the front-end system will send this parameter for request and get a response success. The token has expiration date of 30 minutes.
通常,开发人员使用通常称为 api-key
或某种命名令牌 *-token
的秘密向 API 服务器识别手机。无论使用什么约定名称,这个标识符始终是一个秘密,它有时是一个简单的唯一字符串来标识移动应用程序,有时更复杂,就像您的情况一样。
With a recent event, hackers are able to manipulate the request from a script by spoofing.
问题是客户端中的任何东西 运行 都可以被逆向工程
很容易被攻击者在他控制的设备上。他将使用 Frida or xPosed to intercept at runtime the running code of the mobile app or will use a proxy tool like MiTM for watching the communications between the mobile app and the API server. Normally their first step in reverse engineer a mobile app will be to use the Mobile Security Framework 等自省框架对您的移动应用程序的二进制文件进行逆向工程,以提取所有静态机密并识别攻击向量。
Inject your own scripts into black box processes. Hook any function, spy on crypto APIs or trace private application code, no source code needed. Edit, hit save, and instantly see the results. All without compilation steps or program restarts.
Xposed is a framework for modules that can change the behavior of the system and apps without touching any APKs. That's great because it means that modules can work for different versions and even ROMs without any changes (as long as the original code was not changed too much). It's also easy to undo.
Mobile Security Framework is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing framework capable of performing static analysis, dynamic analysis, malware analysis and web API testing.
An interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.
因此,在使用所有这些工具后,攻击者有可能重播您的移动应用程序为从 API 服务器获取令牌所做的所有步骤,然后使用它来自动对 API服务器。
可能的解决方案
So the hackers are imitating the same behavior as from mobileapps. How do we cater for this kind of scenario? Is there a way to block these kind of request?
因此,任何在客户端运行并需要一些秘密才能访问 API 的东西都可能以不同的方式被滥用,您可以在 this series 的有关移动设备的文章中了解更多信息 api 安全技术。本文将教您如何使用 API 密钥、用户访问令牌、HMAC、TLS Pinning 来保护 API 以及如何绕过它们。
可以采用更好的解决方案,即使用移动应用认证解决方案,使 API 服务器知道只接收来自真实移动应用的请求。
移动应用证明服务将在 run-time 保证您的移动应用未被篡改或 运行 在 rooted/jail 损坏的设备中 运行 SDK在后台(不影响用户体验),它将与云中的服务 运行 通信,以证明移动应用程序的完整性并且设备 运行 打开。
在成功证明移动应用程序完整性后,将发布一个短时间的 JWT 令牌并使用只有 API 服务器和云中的移动应用程序证明服务知道的秘密进行签名。如果移动应用证明失败,JWT 令牌将使用 API 服务器不知道的秘密进行签名。
现在,应用程序必须在请求的 headers 中随每个 API 调用发送 JWT 令牌。这将允许 API 服务器仅在可以验证 JWT 令牌中的签名和过期时间时才为请求提供服务,并在验证失败时拒绝请求。
一旦移动应用程序不知道移动应用程序证明服务使用的秘密,即使应用程序被篡改,也无法在 run-time 对其进行逆向工程,运行 root 设备或通过成为中间人攻击目标的连接进行通信。
Approov(我在这里工作),移动应用证明服务已经作为 SAAS 解决方案存在,它为多个平台提供 SDK,包括 iOS、Android、React Native 和其他。集成还需要在 API 服务器代码中进行少量检查,以验证云服务发布的 JWT 令牌。此检查对于 API 服务器来说是必要的,以便能够决定服务哪些请求以及拒绝哪些请求。您当前的令牌可以用作 Approov 令牌中的有效负载声明,以允许 API 服务器继续使用它并保证未被篡改。
我首先要回答一个非常有说服力的问题。但这与代码级别无关,只是为了衡量我的理解。如果我错了请纠正我,现在 MobileApps 按照设计使用会话令牌方法进行请求。
目前,第一次使用的用户将从后端传递他们的设备 ID、密码和时间戳以获取加密值。随后,前端系统将发送此参数进行请求,并得到响应成功。令牌的有效期为 30 分钟。
最近发生了一起事件,黑客能够通过欺骗来操纵来自脚本的请求。因此,黑客正在模仿与移动应用程序相同的行为。我们如何迎合这种场景?有没有办法阻止这类请求?
令牌方法
Correct me if i'm wrong, now days MobileApps as per design utilizes the session token method for a request.
我认为您指的是 OAUTH2 或 OpenID 令牌。
OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.
OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. It allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server, as well as to obtain basic profile information about the End-User in an interoperable and REST-like manner.
OpenID Connect allows clients of all types, including Web-based, mobile, and JavaScript clients, to request and receive information about authenticated sessions and end-users. The specification suite is extensible, allowing participants to use optional features such as encryption of identity data, discovery of OpenID Providers, and session management, when it makes sense for them.
API
的移动应用识别Currently, for first time user will pass in their deviceID, pin, and timestamp for an encrypted value from the back-end. Subsequently , the front-end system will send this parameter for request and get a response success. The token has expiration date of 30 minutes.
通常,开发人员使用通常称为 api-key
或某种命名令牌 *-token
的秘密向 API 服务器识别手机。无论使用什么约定名称,这个标识符始终是一个秘密,它有时是一个简单的唯一字符串来标识移动应用程序,有时更复杂,就像您的情况一样。
With a recent event, hackers are able to manipulate the request from a script by spoofing.
问题是客户端中的任何东西 运行 都可以被逆向工程 很容易被攻击者在他控制的设备上。他将使用 Frida or xPosed to intercept at runtime the running code of the mobile app or will use a proxy tool like MiTM for watching the communications between the mobile app and the API server. Normally their first step in reverse engineer a mobile app will be to use the Mobile Security Framework 等自省框架对您的移动应用程序的二进制文件进行逆向工程,以提取所有静态机密并识别攻击向量。
Inject your own scripts into black box processes. Hook any function, spy on crypto APIs or trace private application code, no source code needed. Edit, hit save, and instantly see the results. All without compilation steps or program restarts.
Xposed is a framework for modules that can change the behavior of the system and apps without touching any APKs. That's great because it means that modules can work for different versions and even ROMs without any changes (as long as the original code was not changed too much). It's also easy to undo.
Mobile Security Framework is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing framework capable of performing static analysis, dynamic analysis, malware analysis and web API testing.
An interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.
因此,在使用所有这些工具后,攻击者有可能重播您的移动应用程序为从 API 服务器获取令牌所做的所有步骤,然后使用它来自动对 API服务器。
可能的解决方案
So the hackers are imitating the same behavior as from mobileapps. How do we cater for this kind of scenario? Is there a way to block these kind of request?
因此,任何在客户端运行并需要一些秘密才能访问 API 的东西都可能以不同的方式被滥用,您可以在 this series 的有关移动设备的文章中了解更多信息 api 安全技术。本文将教您如何使用 API 密钥、用户访问令牌、HMAC、TLS Pinning 来保护 API 以及如何绕过它们。
可以采用更好的解决方案,即使用移动应用认证解决方案,使 API 服务器知道只接收来自真实移动应用的请求。
移动应用证明服务将在 run-time 保证您的移动应用未被篡改或 运行 在 rooted/jail 损坏的设备中 运行 SDK在后台(不影响用户体验),它将与云中的服务 运行 通信,以证明移动应用程序的完整性并且设备 运行 打开。
在成功证明移动应用程序完整性后,将发布一个短时间的 JWT 令牌并使用只有 API 服务器和云中的移动应用程序证明服务知道的秘密进行签名。如果移动应用证明失败,JWT 令牌将使用 API 服务器不知道的秘密进行签名。
现在,应用程序必须在请求的 headers 中随每个 API 调用发送 JWT 令牌。这将允许 API 服务器仅在可以验证 JWT 令牌中的签名和过期时间时才为请求提供服务,并在验证失败时拒绝请求。
一旦移动应用程序不知道移动应用程序证明服务使用的秘密,即使应用程序被篡改,也无法在 run-time 对其进行逆向工程,运行 root 设备或通过成为中间人攻击目标的连接进行通信。
Approov(我在这里工作),移动应用证明服务已经作为 SAAS 解决方案存在,它为多个平台提供 SDK,包括 iOS、Android、React Native 和其他。集成还需要在 API 服务器代码中进行少量检查,以验证云服务发布的 JWT 令牌。此检查对于 API 服务器来说是必要的,以便能够决定服务哪些请求以及拒绝哪些请求。您当前的令牌可以用作 Approov 令牌中的有效负载声明,以允许 API 服务器继续使用它并保证未被篡改。