本文由小茆同学编译,由金恒源、Roe校对,转载请注明。

移动应用程序逆向工程意味着拆解Android或iOS二进制程序,了解其构成。具备这种洞察力能够更容易地以开发者最初没有想到的方式操纵应用程序。作为一名移动渗透测试员,安全分析师及研究人员,了解如何对移动应用程序进行逆向工程可以提高分析的质量和深度,有助于移动应用程序安全测试工作。

然而,安全分析师和研究人员不是唯一经常对移动二进制文件进行逆向工程的人。攻击者也为自己的恶意意图逆向工程二进制文件。了解安全从业者和攻击者对移动应用程序进行逆向工程的技术,可以确保在安全开发过程中不会错过这一重点领域。

安全分析师或攻击者使用移动应用程序进行逆向工程技术有几个原因。其一,试图对移动应用程序进行逆向工程的人可能希望获取有关后端服务和服务器的信息,以便对这些实体发起攻击。其二,可能会尝试逆向工程策略,来获取静态加密值,并识别应用程序运行时中使用的特定密码。其三,可能会利用逆向移动应用程序,来更好地了解其整体逻辑,确定后续代码修改的方式,甚至窃取知识产权。

无论意图如何,每次成功的逆向工程尝试都应该识别应用程序通信的服务,找到可能允许访问敏感数据的硬编码加密值,确定绕过特定深度防御或防篡改技术所需的工作量,或发现未报告的应用功能。

逆向移动应用程序最常见的方法之一是使用反编译器或反汇编器。但是,您不需要这些工具来对移动应用程序进行逆向工程。您可以通过命令行界面(CLI)、自定义工具或Frida脚本执行逆向工程。本文涵盖了没有反编译器或反汇编器的逆向工程方法。

通过命令行对移动应用程序进行逆向工程

Android Package Kit(APK)或iOS app store package(IPA)可以使用简单的命令行界面(CLI)进行逆向工程。以下两个示例使用iTerm2终端,该终端仅适用于Mac设备。为其他机器使用替代CLI。

验证是否存在内存损坏内置安全保护

在调查IPA时,您可能希望快速确定该应用程序是否在其本地库或框架中使用了免费的内存损坏内置安全保护措施。通常,在二进制文件开发期间,堆栈粉碎保护和自动引用计数等免费安全功能可能会被禁用。一般来说,启用这些内置功能没有不妥,因为它们有助于二进制文件缓解潜在的缓冲区溢出和内存管理攻击。

如果无法访问IPA的源代码,可以简单地对二进制进行逆向工程来自行解答。为此,请将终端上的二进制文件解压缩到IPA文件夹和后续的.app文件夹,然后使用grep命令。要搜索IPA以查找堆栈粉碎保护的实例,只需输入grep -iER“stack_chk”。此CLI命令将递归地搜索整个二进制文件,以查找堆栈粉碎保护标志的实例,忽略单词大小写。如果出现实例,我们知道堆栈粉碎保护已启用。如果没有发现实例,我们可以进行进一步分析,看看二进制文件是否容易受到缓冲区溢出攻击。您还可以使用如下所示的方法通过grep -IER“objc_release”命令检查ARC保护。使用可从GitHub下载的iOS Damn Vulnerable iOS应用程序(DVIA)应用程序,我们输入了上述命令来手动验证二进制文件是否启用了堆栈粉碎保护。

监控设备日志中的敏感数据输入

在调查Android二进制程序时,您可能会好奇在使用应用程序时,设备日志中是否会暴露任何敏感数据。您可以使用adb logcat命令通过CLI对二进制文件进行逆向工程。要让该命令在终端上运行,必须先在Android设备上启用USB调试。然后,输入该命令,你会看到许多日志条目。启动应用程序后,您就可以在日志条目中搜索特定应用程序的条目。在下面的示例中,我们安装了 InsecureShop Android 二进制程序。在应用程序启动和随后的登录流程中使用 adb logcat,您可以看到设备记录了此条目。该条目包括敏感信息,如设备的用户名和密码。

通过定制工具逆向移动应用程序

逆向工程IPA或APK的另一种方法需要定制工具。例如,用于安卓和iOS逆向工程的Objection 工具。Objection是一款运行时移动探索工具,可在越狱/获得超级权限和非越狱设备上运行。Frida为Objection提供支持,因此你需要先安装Frida才能使用该工具包。

要运行Objection,请输入"objection -gadget [应用程序软件包名称] explore"。

在应用程序运行期间监控加密功能

在探索移动应用程序如何实时运行时,Objection经常会派上用场。你想了解一个应用程序在运行时使用了哪些加密函数吗?Objection可以帮到你。启动Objection,进入iOS monitor crypto。当你浏览应用程序时,Objection会显示在每个动作或活动中使用了哪些加密函数。如果想知道移动应用程序是否在关键的安全操作中使用了较弱的加密算法,Objection可以帮助你回答这个问题。

在下面的示例中,我们使用Ojection来确定DVIA iOS应用程序中的密码加密函数("objection_rules")。在运行iOS监控加密用例并提交密码后,我们可以看到该过程中的加密函数。密码显示为 "dataIn",密码的加密形式显示为 "dataOut"。我们看到 KCCPBKDF2和KCCAlgorithmAES128 是该流程的主要加密算法。

如果我们使用 CCCCryptorCreate操作中的 "alg"、"key "和 "iv "值以及 "dataOut "值,就可以验证AES算法用于加密密码。有了这些知识,我们可以推测AES算法也可用于解密密文。使用CyberChef这样的简单网站可以帮助我们快速完成这项工作。

Hook和启动Android活动,揭示敏感数据

Objection可以帮助逆向工程的另一个例子是在你想启动一个Android应用程序的敏感活动时。某些活动在启动时可能会泄露敏感数据。你可以使用Objection的安卓hook功能来列出应用程序的活动、服务和接收。如果应用程序的源代码无法去伪,那么hook功能就显得尤为有用。使用Damn Insecure and Vulnerable App (DIVA),您可以使用android hooking list activities列出AndroidManifest.xml指定的所有活动。如果你想快速确定是否有活动会被滥用或泄露敏感数据,这可能会派上用场。运行该命令后,我们立即发现一个活动(".APICredsActivity")似乎很有希望。

现在,我们可以使用后续的Objection命令,即android intent launch_activity,创建一个新的Intent,并将其作为参数运行startActivity()来启动特定的活动类。启动.APICredsActivity 并运行intent会在应用程序的用户界面中显示敏感的供应商API凭据。

通过 Frida脚本逆向移动应用程序

虽然Objection是逆向工程的强大工具,但使用Frida脚本可以带来更多机会。Frida是一个专门用于逆向工程的动态工具包。您可以使用Frida将自己的自定义脚本注入应用程序的进程,也可以使用他人创建的公共可用脚本。

绕过安卓生物识别身份验证

在测试 Android 应用程序时,您经常会遇到具有指纹ID功能的应用程序。通常,大多数应用程序都需要用户名和密码才能登录。其他应用程序可能会使用 PIN、OTP 或生物识别等形式的多因素身份验证。根据应用程序的不同,生物识别配置可能设置得不安全,允许攻击者完全绕过指纹验证。在这种情况下,获得设备物理访问权限的攻击者即使无法访问原始用户的指纹,也可以逆向生物识别身份验证流程,从而登录应用程序。

在这种情况下,Frida脚本就能提供帮助。例如,如果应用程序没有正确使用BiometricPrompt.CryptoObject,F-SECURE研究人员公开的Frida脚本就可以完全绕过安卓生物识别身份验证。通常,正确使用该对象需要将用户的生物识别身份验证对象存储在安卓密钥库中,以防止在没有特定指纹的情况下解锁设备。但是,如果 BiometricPrompt.CryptoObject 为空值,那么该对象就不会存储在密钥库中,也就不需要有效指纹,从而设置了绕过。这个脚本很有用,因为很多应用程序都容易受到上述脚本的影响。不过要注意的是,只有当用户已经为应用程序设置了初始指纹 ID 时,这个脚本才会起作用。

绕过网络深度防御的运行时控制

用于逆向工程的Frida脚本可让您绕过某些可能会干扰中间人(MiTM)攻击的网络深度防御控制。虽然没有明确建议,但如果实施得当,证书锁定可以通过仅接受特定证书的client-server连接来减轻对中间人(MiTM)攻击的影响。Frida 脚本可以帮助逆向应用程序,以发现证书锁定所使用的方法,然后hook到该进程,在运行期间禁用或绕过该机制。在下面的示例中,一个iOS Flutter应用程序最初由于证书锁定而阻止了网络拦截。然而,在运行一个公开可用的Frida 脚本后,我们可以hook SecTrustEvaluate、SecTrustGetResult和SecTrustEvaluateWithError()方法。hook这些方法可确保信任管理证书对象被认为是受信任的,从而使我们能够使用拦截代理拦截流量。您可以在Frida Codeshare上找到用于其他逆向工程的其他 Frida 脚本。

结论

逆向工程是移动应用渗透测试的必要环节。本文向你展示了三种无需反编译器或反汇编器即可使用的逆向工程策略。

参考链接:

https://www.nowsecure.com/blog/2023/04/19/reverse-engineering-techniques-for-mobile-app-pen-testing/

声明:本文来自数据安全与取证,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。