渗透测试 Android 应用程序:工具和分步说明(上)
导语:在本文中,我们讨论了攻击者可能用来入侵您的应用程序的不同方法。
移动应用程序经常处理敏感数据,这是许多网络犯罪分子的主要目标。在处理此类数据时,开发人员必须尽最大努力确保其受到保护。提高移动应用程序安全性的一种方法是执行移动应用程序渗透测试。
要找到应用程序代码中的缺陷,开发人员至少需要逆向工程和渗透测试 Android 应用程序方面的基本技能。在本文中,我们讨论了攻击者可能用来入侵您的应用程序的不同方法。我们还解释了来自开放 Web 应用程序安全项目 (OWASP) 移动安全测试指南 (MSTG) 的挑战如何帮助您进行 Android 应用程序的移动渗透测试,以及您可以使用哪些工具来解决这些问题。
在本文中,我们将讨论如何渗透测试 Android 应用程序以及使用哪些工具来提高移动应用程序的安全性。本文将对希望更多了解移动安全渗透测试服务并提高应用安全性的Android开发者有所帮助。
通过逆向工程加强应用程序的安全性
Android 是一个对开发人员非常友好的操作系统 (OS)。与其他移动操作系统不同,Android 是一个开源平台,您可以在该平台上激活开发人员选项和旁加载应用程序,而无需跳过太多步骤。此外,Android 允许开发人员在Android 开源项目中探索其源代码,并根据需要修改操作系统功能。
但是,使用 Android 应用程序也意味着您需要处理 Java 字节码和 Java 本机代码。一些开发人员可能认为这是一个缺点。Android 开发人员使用Java Native Interface来提高应用程序性能、支持遗留代码,当然,也会让那些试图查看其应用程序内部的人感到困惑。
在构建移动应用程序时,开发团队的首要任务之一是确保高水平的数据安全性。开发人员应尽最大努力防止网络犯罪分子获取用户的敏感信息。
有些人尝试在第三方解决方案的帮助下提高其移动应用程序的安全性。但是,在使用第三方产品时,正确配置它们至关重要。配置错误或使用不当的解决方案将无济于事,无论它多么昂贵。
其他人则试图将应用程序的功能和数据隐藏在本机层中。在某些情况下,他们构建 Android 应用程序的方式是在本机层和运行时层之间跳转执行。
也有开发人员使用更复杂的方法,例如逆向工程。在确保适当保护应用程序的敏感数据时,此技术非常有用。这就是为什么开发人员最好至少具备一些逆向工程的基本技能:
解压 APK 文件
修补 .smali 文件
修补 .so 库
使用调试工具
使用框架进行动态代码分析
有了这些技能和专业知识,移动应用程序开发人员将有更好的机会检测到可能被攻击者利用的代码缺陷。例如,为了侵入您的应用程序,黑客可能会使用质量保证 (QA) 专家在测试应用程序的安全性和性能时使用的相同技术:
动态分析用于寻找在应用程序运行时操作应用程序数据的可能方法。例如,黑客可能会尝试通过在登录期间跳过多因素代码检查来破解您的应用程序。
静态分析用于研究已经打包的应用程序并检测代码弱点,而无需直接访问源代码。通过静态分析,我们不像在动态分析期间那样查看应用程序在运行时的行为。例如,黑客可能会使用静态分析来检测弱加密算法的使用。要了解如何解决此类问题,请浏览我们关于Android 应用程序中的加密方法的文章。
开发人员有自己的方法来防止这些类型的代码分析。例如,可以对源代码进行模糊处理以防止其受到静态分析:开发人员可以更改应用程序方法和类的名称、添加对其他函数的调用以及加密代码行。
注意:虽然代码混淆有助于加强应用程序代码以抵御基于静态分析的攻击,但它也增加了引入新错误的风险。最好的逆向工程工具可以帮助您查看代码是否已被混淆并确保对应用程序进行全面测试。
还有几种方法可以保护移动应用程序免受动态代码分析。特别是,开发人员可以:
阻止应用程序在有根设备上启动
使用阻止应用程序以开发人员模式启动并拒绝连接到动态分析框架(如Frida)的库
应用额外的保护措施来防止重新打包和退出应用程序。
这些任务对于有经验的逆向工程师来说很容易。经验不足的开发人员在使用逆向工程技术渗透测试 Android 应用程序之前可能需要一些练习。值得庆幸的是,OWASP为培训和提高您的软件逆向工程技能提供了许多挑战。
在本文的后面,我们将针对两个OWASP 移动安全测试指南 CrackMe挑战提供分步解决方案:UnCrackable App for Android Level 1和UnCrackable App for Android Level 2。解决这些挑战将帮助您更好地了解如何改进移动应用程序的渗透测试并增强 Android 解决方案的安全性。我们建议您在继续阅读之前尝试自己解决它们。但首先,让我们看一下对 Android 应用程序进行逆向工程所需的工具和框架。
Android逆向工程的基本工具集
在开始为 Android 开发人员解决 OWASP CrackMe 挑战之前,您需要确保有两件事:
了解 Android 环境。您需要具有使用 Java 和 Linux 环境以及使用 Android 内核的经验。
正确的工具集。使用在 Java 虚拟机 (JVM) 上运行的字节码和本机代码需要特定的工具。
在本节中,我们列出并简要描述了可用于解决 OWASP CrackMe 挑战和提升逆向工程技能的工具。
注意:出于本文的目的,我们仅选择了免费或具有免费试用版的工具和框架。
Android Studio — Android 的官方集成开发环境 (IDE)。这是构建原生 Android 应用程序的主要 IDE;它包括 APK 分析器、代码编辑器、可视化布局编辑器等。特别是,我们将使用命令行Android 调试桥(adb) 工具。
Apktool — 这是一款流行的免费工具,用于对封闭的、第三方的和二进制的 Android 应用程序进行逆向工程。它可以将 Java 字节码反汇编为 .smali 格式,以及从 APK 存档中提取和反汇编资源。此外,您还可以使用 Apktool 来修补和更改清单文件。
注意:应用程序代码存储在 APK 文件中,其中包含带有Dalvik 二进制字节码的.dex 文件。Dalvik 是一种 Android 平台可以理解但人类完全无法读取的数据格式。因此,为了让开发人员能够使用 .dex 文件,需要将它们转换为(和自)可读格式,例如 .smali。
Cutter — 一个开源跨平台框架,提供可定制、易于使用的逆向工程平台。该框架由 radare2 提供支持,并得到大量专业逆向工程师社区的支持。
Hex Workshop Editor — 一套流行的 Windows 十六进制开发工具。该工具集使编辑二进制数据几乎与处理常规文本文档一样简单。Hex Workshop Editor 是商业软件,但有免费试用版。
注意: Hex Workshop Editor 只能在 Windows 上使用。如果您使用的是基于 Linux 的虚拟机,则可以选择任何 Linux 十六进制编辑器。
dex2jar — 将字节码从 .dex 格式转换为 Java 类文件的免费工具。
JD-GUI — Java Decompiler 项目创建的工具之一。这个图形实用程序使 Java 源代码可读,将其显示为 Java 类文件。
Mobexler — 用于 iOS 和 Android 渗透测试的基于 Elementary 的虚拟机。Mobexler 附带一组预安装的工具和脚本,用于测试移动应用程序的安全性,包括此列表中的一些工具。
Java 调试器 (jdb) — 用于调试 Java 类的免费命令行工具。
注意:在Android应用中,调试可以分两层进行:
· 运行时层——Java 运行时调试可以在Java 调试有线协议 (JDWP)的帮助下进行。
· Native 层——可以基于ptrace进行 Linux/Unix 风格的调试。
JDWP 是一种标准调试协议,可帮助调试器与目标 JVM 进行通信。所有流行的命令行工具和 Java IDE 都支持此协议,包括 Eclipse、JEB、IntelliJ,当然还有 jbd。
JDWP 调试器允许您探索 Java 代码、在 Java 方法中设置断点以及检查和修改局部变量和实例变量。它通常用于调试不会多次调用本机库的常规 Android 应用程序。
GNU 调试器 (gdb) — 一种用于分析应用程序代码的有用工具。
我们使用这些工具解决了 Android 应用程序的两个逆向工程挑战。在下一节中,我们将为您提供基于标准 OWASP 挑战的基本 Android 渗透测试教程。
发表评论