Android 未经授权的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,除非我手动允许 我想要什么:

我在Laravel中有后端api,并使用Laravel Passport(OAuth2)。我看到OAuth2非常酷,它保护了我的身份验证请求(使用laravel中的api中间件),并且只允许授权用户访问

但我可以访问未经授权的使用,例如后端api

路由:
/register
)或(
/login
)不带任何api密钥。大多数攻击者将在网络选项卡中看到此api调用,并可发送DDOS攻击。由于Laravel Passport内置了速率限制,我仍然不希望人们访问我的后端api,除非我手动允许

我想要什么:

我有两个前端应用程序

  • Android原生移动应用程序
  • Nuxt SPA前端应用程序
  • 我的API只能从这些前端工作。不应通过任何其他邮递员或浏览器请求,并且可能会显示不受支持的平台json msg。

    OAUTH令牌它们真的足以保护您的后端吗? 我看到OAuth2非常酷,它保护了我的身份验证请求(使用laravel中的api中间件),并且只允许授权用户访问

    它不仅允许授权用户访问任何提供有效OAuth令牌的请求。这在开发人员中是一个常见的误解,因为OAuth令牌只表示请求中的人,而不是发出请求的内容,我在中更详细地讨论了这一点,您可以阅读:

    什么是向API服务器发出请求的东西。它真的是你的移动应用程序的真实实例,还是一个机器人、一个自动脚本或一个攻击者用Postman之类的工具在你的API服务器上手动戳来戳去

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

    本文以移动应用程序为背景,但对于
    移动应用程序
    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