Android 未经授权的API调用-安全且仅允许注册的前端应用
我在Laravel中有后端api,并使用Laravel Passport(OAuth2)。我看到OAuth2非常酷,它保护了我的身份验证请求(使用laravel中的api中间件),并且只允许授权用户访问 但我可以访问未经授权的使用,例如后端api 路由:(Android 未经授权的API调用-安全且仅允许注册的前端应用,android,laravel,api,security,laravel-passport,Android,Laravel,Api,Security,Laravel Passport,我在Laravel中有后端api,并使用Laravel Passport(OAuth2)。我看到OAuth2非常酷,它保护了我的身份验证请求(使用laravel中的api中间件),并且只允许授权用户访问 但我可以访问未经授权的使用,例如后端api 路由:(/register)或(/login)不带任何api密钥。大多数攻击者将在网络选项卡中看到此api调用,并可发送DDOS攻击。由于Laravel Passport内置了速率限制,我仍然不希望人们访问我的后端api,除非我手动允许 我想要什么:
/register
)或(/login
)不带任何api密钥。大多数攻击者将在网络选项卡中看到此api调用,并可发送DDOS攻击。由于Laravel Passport内置了速率限制,我仍然不希望人们访问我的后端api,除非我手动允许
我想要什么:
我有两个前端应用程序
移动应用程序
和web应用程序
而言,其概念是相同的,即了解向后端服务器发出请求的谁和什么之间的区别
未经授权使用后端
但我可以访问未经授权的使用,例如后端api
我希望到现在为止,您已经意识到,不仅仅是您的/注册
和/登录
路线有被滥用的危险,因为此刻您只知道是谁提出请求,而不知道是什么提出请求
路由:(/register)或(/login),不带任何api密钥
即使此路由上有API密钥,也无法防止它被滥用进行凭据填充攻击
你为什么会问
在web应用程序中,提取API密钥所需的只是点击F12
打开开发者工具选项卡并搜索它,或者查看页面源代码
你现在可能会想,哦,但在我的移动应用程序中,这是不可能的,因为它是二进制的,我甚至使用模糊处理。尽管有点困难,但并不难,因为有很多开源工具可以帮助完成这项任务
逆向工程
您可以使用一个工具,如对任何移动应用程序二进制文件进行反向工程,并从中提取API密钥或任何机密。我写了一篇文章,您可以跟随它来实现这一点,并向您展示了一些技术,可以在带有Github的repo的移动应用程序中隐藏API密钥
:
移动安全框架(MobSF)是一个自动化、一体化的移动应用程序(Android/iOS/Windows)笔试、恶意软件分析和安全评估框架,能够执行静态和动态分析
如果无法通过静态分析提取API密钥,则可以借助开源工具进行动态分析,例如:
将您自己的脚本注入黑盒进程。钩住任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击保存,并立即查看结果。所有这些都没有编译步骤或程序重新启动
Frida将允许在运行时窃取您的OAuth令牌并将其发送给攻击者的控制服务器,然后他们可以在那里重新使用它来对您的后端发起自动攻击,这将信任它们是合法的,因为请求中的谁是有效的
窃取API密钥甚至OAuth令牌的另一种方法是使用其他开源工具执行中间人(MitM)攻击,如:
为渗透测试人员和软件开发人员提供的一种交互式TLS,能够拦截HTTP代理
因此,当攻击者使用mitmproxy截获向后端发出的请求时,他将看到如下内容:
图片来源于文章:
您是否注意到url位于https
中并包含API密钥
所以直到现在,您还认为https
足以确保客户端和服务器之间的通信安全吗
你想要什么
我想要的是:
我有两个前端应用程序
Android原生移动应用程序。
Nuxt SPA前端应用程序
我的API应该只能从这些前端工作。不应通过任何其他邮递员或浏览器请求,并且可能会显示不受支持的平台json msg
网络应用程序
由于web构建方式的性质,后端不可能高度自信地确定是什么要求任何类型的web应用,无论是SPA还是传统应用
您所能做的就是尽最大努力告诉appart谁和什么正在访问您的后端:
Gartner定义的用户行为分析(UBA)是一个网络安全过程,用于检测内部威胁、目标攻击和f