欢迎!该存储库是有关实用API安全技术的一系列博客文章的一部分。该系列将为您提供捍卫移动API后端的过程,以抵御攻击者可能用来访问其持有数据的各种漏洞。在这种演示情况下,攻击使系统的真实用户可以以牺牲公司为代价获得不公平的业务优势。
该存储库保存所有三个组件,用于描述船舶快速故事:
我们将所有3个项目都保存在同一存储库中,并构建了代码,以包括博客系列进步的所有步骤。我们希望这使整个理解变得更容易。
在第一篇博客文章中设置了场景后,连续的条目显示了如何在适当的情况下使用该GitHub存储库中的代码链接来加强(或绕过)安全措施。博客系列可以通过参考每种讨论的主要安全方法来概括:
我们提供两种服务和APK的免费部署,供您下载和安装,因此您可以在阅读博客时与它们合作。以下各节简要摘要了我们部署的服务,我们提供的应用程序,在此存储库中找到相关代码的位置以及每个博客文章的更改所在的位置。
可以在服务器/Shipfast-API文件夹中找到Shipfast API代码。该代码已部署在云中,并在https://shipfast.demo.approov.io上提供。
ShipFast API从v1到v4版本以遵循博客故事,您可以使用以下URL访问每个阶段:
此存储库的版本页面包含每个阶段的APK。它们是设置的,以便您可以在Android设备上一次安装所有这些设备(对不起,目前没有iOS)。
应用程序的代码全部是一个AndroidStudio项目:App/Android/Kotlin/Shipfast。
我们在该应用程序的每个版本中都使用了不同的配色方案,因此您可以快速识别正在运行的配色方案:
颜色没有任何特殊的含义,但是显然,绿色是最好的。
Rogue Web服务Shipraider是由邪恶的海盗设置的,以帮助船舶快速驾驶员利用Ship Fast客户的满意度。该代码可以在服务器/Shipraider-Rogue-Web文件夹中找到。
该网站的每个版本都是从不同的域提供的:
Shipraider网站遵循与移动应用程序相同的配色方案,以区分版本。
在下面,我们简要概述了博客系列中用于锁定API的技术,并链接到相关的代码和相关博客文章。
开发人员用来确定对API服务器的请求的最常见方法是在请求标题中使用长字符串(通常称为Api-Key ,请参见第一篇博客文章。
API密钥非常易于在服务器和客户端中实现。此应用程序代码将密钥添加到每个请求中,并且服务器使用简单的标头检查验证请求,如本代码所示。
不幸的是,绕过API密钥保护也很容易,因为这是每个请求都传达的秘密。该系列中的第二个博客首先显示了如何使用MITM(中间)攻击提取API键。然后将钥匙添加到Shipraider网站中,以用于对ShipFast API的请求中使用。
为了改善保护,第二篇博客文章引入了HMAC,以数字签名API请求,从而防止它们被劫持或篡改。它比API密钥更好,因为秘密部分永远不会从客户端明确发送到服务器,并且在此版本中,它静态地嵌入了代码中。
HMAC实现比API密钥实现更加详尽,但仍然很简单。您可以查看此代码的API服务器实现,以及用于移动应用程序实现的代码。
但是,如果HMAC秘密是硬编码的,那么攻击者仍然很容易提取。第三篇博客文章通过使用开源二进制分析工具来揭示HMAC秘密和用于签署请求的相关算法来证明这一点。一旦将它们复制到Shipraider代码中,Rogue网站就可以重新启动并运行。
第二个攻击情况表明,使用静态秘密进行HMAC算法是一个弱点。下一个防御是使用动态秘密。一个在运行时计算的。第三篇博客文章说明了如何将静态秘密与动态数据相结合,以产生一个动态秘密,以初始化HMAC算法。
在这些代码行中可以看到移动应用程序的实现,而在此处可以看到API服务器等效的实现。
在运行时计算HMAC秘密会使绕过更难,但并非不可能。攻击者现在需要了解更大的代码部分,以便在Shipraider网站中重现该行为。第四个博客文章列出了几种方法,使用应用程序重新包装和Android Studio调试器提供了一个更详细的示例。同样,攻击者可以在Shipraider中编写等效的代码,以继续使用Shipfast API。
第四篇博客文章介绍了该系列中的最终安全措施。移动应用证明是批准中实现的API安全概念。简而言之,批准检查整个应用程序及其在启用API之前运行的环境 -应用程序是密钥。它使您对您的API访问已锁定到您的应用程序的合法实例中有很高的信心。在我们的产品概述页面和相关的白皮书中,更详细地描述了这种方法。
对于移动应用程序开发人员而言,批准集成与可能很简单。希望使用[QuickStart集成示例]](https://approov.io/docs/latest/latest/approov-integration-exampleas/mobile-app/)添加prenooov sdk,希望使用[QuickStart集成示例]](https://approov.io/docs/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest/latest示例),然后致电SDK,以获取SDK以获得API请求。您可以在shipfastapp.kt的shipfast应用程序中看到这一点,搜索以下内容的行// *** UNCOMMENT THE CODE BELOW FOR APPROOV *** 。
API服务器集成也很简单:在响应API请求之前,请使用许多JWT库之一来验证批准令牌。 Shipfast API使用Express-JWT节点软件包用checkApproovToken回调验证批准令牌。
高级用法文件描述了组成ShipFast和Shipraider服务的每个组件的构建和部署步骤。要遵循博客系列,通常可以使用批准团队部署和维护的服务和应用程序,在这种情况下,您无需遵循该文档。但是,如果您尝试在上一篇博客文章末尾描述的可选五旬节挑战,则需要它。
总体而言,博客系列通过确保要求仅来自合法来源来逐步提高API安全性。该存储库中的博客和代码用于展示如何轻松规避API开发中通常使用的某些保护机制。它最终达到了批准集成,这对Shipfast API收到的验证请求具有最高的信心。如果您想更深入地探索批准解决方案,那么为什么不尝试以下链接之一作为跳跃点: