- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在我正在开发一个微服务系统,使用 Nginx 作为网关,使用 Keycloak 作为授权/认证。移动应用使用 openidconnect 和 grant_type=client_credentials 来获取 token 。
授予类型“client_credentials”需要在请求正文中包含 client_id、client_secret。
如果有人使用 Fiddler 作为中间人进行攻击,他可以知道客户端 ID/ secret ,而不是通过使用它们来获取访问 token 来成为中间人。
那么如何防止这种攻击呢?
我正在使用 https,但我知道 Fiddler 可以解密 https。
请帮我。非常感谢。
最佳答案
A mobile app use openidconnect with grant_type=client_credentials to get tokens.
首先,正如其他人已经指出的那样,这不是在移动应用程序中使用的正确授权类型,您可能希望使用 authorization_code
流程。
阅读更多关于 this article :
We will now go through a minimal example of how to obtain an ID token for a user from an OP, using the authorisation code flow. This is the most commonly used flow by traditional web applications.
Grant type 'client_credentials' need client_id, client_secret in request body. If someone use Fiddler to attack as man in the middle, he can know client id/secret, than he can be man-in-the-middle by using them to get access token.
考虑到您决定为您的移动应用实现正确的 OpenID Connect 授权流程,因此不再泄露您的 client_secret
,攻击者仍然可以使用 Fidller 中间人攻击您的连接并提取结果Authorization
token ,用于在 API 服务器中验证移动应用程序的用户,就像我在文章中展示的那样 Steal that Api Key with a Man in the Middle Attack :
In order to help to demonstrate how to steal an API key, I have built and released in Github the Currency Converter Demo app for Android, which uses the same JNI/NDK technique we used in the earlier Android Hide Secrets app to hide the API key.
So, in this article you will learn how to setup and run a MitM attack to intercept https traffic in a mobile device under your control, so that you can steal the API key. Finally, you will see at a high level how MitM attacks can be mitigated.
虽然本文展示的是窃取 Api key 的攻击,但从请求中窃取任何其他 secret 或数据的原理是相同的。
攻击者还可以借助检测框架在运行时 Hook 到您的移动应用程序代码并从中窃取任何 secret ,此类工具的一个很好的例子是 Frida :
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.
So how to prevent this case of attack?
在一定程度上防止客户端攻击是可能的,但最终您无法看到攻击者何时能够绕过您在移动应用程序 APK 中提供的安全措施,因为当熟练的攻击者知道如何正确使用检测框架,他将研究执行安全决策的代码并使其始终返回一切正常。
因此,您希望转移注意力,让您的 API 服务器能够可靠地知道它确实在与您发布的完全相同的 APK 对话,而不是与被篡改和破坏的 APK 对话,或者请求来自机器人.
自 DeviceCheck 发布以来适用于 iOS 和 SafetyNet对于 Android,我看到越来越多的开发人员将它们作为证明其移动应用程序的一种形式,但有些人未能理解此解决方案的真正设计目的。
让我们用谷歌自己的话来说 SafetyNet :
- Using the SafetyNet Attestation API results as the only signal to attack abuse
It may be tempting to think that the SafetyNet Attestation API provides all the necessary signals for protecting an app against abusers, and use it as the only signal for building an anti-abuse system.
The SafetyNet Attestation API can only give signals about the state of a device, not the intent of a user, which is what an anti-abuse system should be designed to detect. Therefore, you might want to consider including other signals, such as access logs and behavioral patterns, to more accurately detect abusive users, and consider not blocking users solely on a failed attestation. Furthermore, there are many other conditions that cause an attestation to fail, such as network connection problems, quota issues, and other transient problems.
In other words, not all users who fail attestation are necessarily abusers, and not all abusers will necessarily fail attestation. By blocking users solely on their attestation results, you might be missing abusive users that don't fail attestations. Furthermore, you might also be blocking legitimate, loyal customers who fail attestations for reasons other than abuse.
我在 this answer 上详细说明了开发人员必须了解的内容问题 Android 等同于 ios devicecheck。
所以最重要的是,就 SafetyNet 而言,它证明移动设备不是您的移动应用程序,但它仍然是一个很好的安全机制。
要证明移动应用确实没有受到危害或滥用,您需要采用移动应用证明解决方案。
移动应用证明的作用是证明您上传的 APK 没有被破坏的风险或尚未被破坏,从而使您的 API 服务器具有高度的信心,确实与真正的实例通信您的移动应用程序。
我邀请你阅读this answer我给出了另一个问题,该问题更详细地解释了这个概念,同时为您提供了更多背景信息,说明它可能更适合解决您的问题。
因此,如果您将移动应用证明与移动设备证明放在一起,那么您可能已经找到了保护您的移动应用免遭 OAuth 凭据泄露导致滥用的最佳解决方案。
在任何对安全问题的回答中,我总是喜欢引用 OWASP 基金会的出色工作,因此它是这样的:
OWASP Mobile Security Project - Top 10 risks
The OWASP Mobile Security Project is a centralized resource intended to give developers and security teams the resources they need to build and maintain secure mobile applications. Through the project, our goal is to classify mobile security risks and provide developmental controls to reduce their impact or likelihood of exploitation.
OWASP - Mobile Security Testing Guide :
The Mobile Security Testing Guide (MSTG) is a comprehensive manual for mobile app security development, testing and reverse engineering.
The OWASP API Security Project seeks to provide value to software developers and security assessors by underscoring the potential risks in insecure APIs, and illustrating how these risks may be mitigated. In order to facilitate this goal, the OWASP API Security Project will create and maintain a Top 10 API Security Risks document, as well as a documentation portal for best practices when creating or assessing APIs.
关于security - 使用 oauth2 客户端凭据防止中间人攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62020494/
请帮助我的建议。 我需要通过 xml 文件中的某个变量在我的应用程序上禁用/启用 spring 安全性。 我的 spring-security.xml 文件
我做了很多研究,对我来说一切看起来都是正确的......但我无法让它发挥作用!有人有什么想法吗? 无论我做什么,相关映射仍然对任何人公开(匿名或登录,无论他们具有什么角色)。 理想情况下,我希望所有请
我们正在考虑为我们网站的一部分启用 SSL,但某些页面包含来自第三方供应商(如 Google AdSense)的广告。 我认为这会给我们的用户带来一个恼人的问题,因为他们在查看带有广告的页面时会看到类
我正在开发一个休息服务,它将通过浏览器提供 浏览器单页应用程序和移动应用程序。目前我的服务正在运行 根本没有 Spring 。 oauth2 客户端是在过滤器内部实现的,所以可以说是“手动”。 我正在
我正在为我公司的网站添加 Content-Security-Policy-Report-Only 标题。在我研究它时,我发现一些页面已经设置了 Content-Security-Policy head
在 XML 配置中,我可以使用 security 命名空间来启用对安全性的支持,例如: 我尝试使用没有 XML 的 Spring,只有 @Configuration 类。与上述 XM
我正在使用 Spring Security 3.0.2,但找不到从数据库加载匿名用户角色的方法(我有动态角色,可以将角色分配给每个人)。 我尝试使用自定义的anonymousAuthenticatio
我有那个代码。但是当我在浏览器中进入 app_dev.php/login浏览器说:该页面进行了太多重定向 安全.yml安全: 编码器: Symfony\Component\Security\Core\
我正在使用SSH Secure Shell客户端,这是一个连接服务器的好工具。 但是,我想知道是否可以记录通过SSH Secure Shell客户端运行的程序中所有即将出现的消息。例如:./ test
我有那个代码。但是当我在浏览器中进入 app_dev.php/login浏览器说:该页面进行了太多重定向 安全.yml安全: 编码器: Symfony\Component\Security\Core\
如何为表单例份验证提供程序设置 success_handler(和 failure_handler)? Silex 使用此配置忽略我: register(new Silex\Provider\Secu
新手问题...我已成功实现自定义处理程序和服务(自定义用户详细信息服务、身份验证成功、身份验证失败)并且一切正常。我现在还实现了如果 3 次并发身份验证失败将锁定帐户(一定时间)的功能。 我现在继续处
我正在使用 Spring security java 配置,我想知道一种实现多个 url 注销的方法。即 logout().logoutRequestMatcher(new AntPathReques
我正在为我的 SP 使用 Spring Security SAML 扩展。用户通过 IDP 身份验证后,SP 使用某种方法允许后续调用不必通过 IDP 重新进行身份验证。这是如何在 Spring Se
spring security 有没有办法防止下面的最后一点?我正在使用 3.0.5 - 用户登录我的网站 - 用户转到网站中的任何页面并单击注销 -注销链接使用户 session 无效并将它们发送到
要么我迟到了,要么我做错了什么。我正在使用 Visual Studio 2013,但是我试图使用 Membership 类,using System.Web.Security;我的程序集中不存在命名空
我有一个具有依赖性的oauth2客户端spring-boot应用程序: - Spring 靴1.2.0.RC1 -spring-security-oauth2 2.0.4.RELEASE - Spri
我想在控制台应用程序中生成 HashPasswordForStoringInConfigFile。 它是在 Web 应用程序中使用以下类完成的 System.Web.Security.FormsAut
我需要有多个 PRE_AUTH Spring 安全过滤器。特别是我需要使用 PRE_AUTH除了配置为 PRE_AUTH 的两个过滤器之外的过滤器在 Spring Security 3.0 的 SAM
我猜这里没有答案,但我想知道是否有办法创建这样的自定义注释: @Documented @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({E
我是一名优秀的程序员,十分优秀!