iOS/Android 笔测试

信息安全 渗透测试 移动的 安卓 IOS
2021-08-28 12:18:43

这个问题可能很模糊,那是因为我不知道从哪里开始。

有很多关于网络、系统和操作系统(如 windows)的 pentest 书籍和课程,但我在 iOS/Android 等移动平台上找不到任何东西。

我对学习如何渗透测试和保护移动平台非常感兴趣。实时内容(位置、电话状态、电话...)是有价值的信息,这使得它非常有趣。

据我了解,由于硬件/组件的原因,在处理手机时,渗透方法是不同的。

我如何以及从哪里开始并可能在移动渗透测试上创建未来的职业?

3个回答

从模拟器和模拟器开始,它们是标准 SDK 的一部分。如果您更喜欢某些环境而不是其他环境,那么您将倾向于使用可靠的框架来对这些平台进行渗透测试。

例如,对于一个 iOS 应用程序,我总是在 Xcode 中构建代码后从 iOS 模拟器开始。我将我的 Mac OS X 系统 HTTP 和 SSL/TLS 代理设置为运行 Burp Suite Professional 的本地主机。然后我启动应用程序并利用命令行 dtruss 工具中的 Xcode DTrace 功能。我倾向于使用smartphonedumbapps 工具查看plist 文件。

对于 Android 应用程序,情况类似。这些天来,我在 IntelliJ IDEA 和 Eclipse 之间来回切换,但两者都有非常有用的 Android SDK 集成点。对于 Eclipse,它是 ADT。我喜欢通过 ADT 启动模拟器。我喜欢使用 DDMS 与文件系统和内存进行交互,这主要用于调试。不过,当涉及到软件跟踪时,我倾向于使用 adb shell 并跟踪我感兴趣的进程,以及同步的 logcat。对于代理,我通常使用 DNS 黑洞,使用 Emulator 的 -dns-server 标志为 Burp Suite Professional 创建透明代理。查看 ADT 中的清单也很有用,尤其是查看权限和意图。

如果您没有可构建的源代码,那么大部分情况都会发生变化。更糟糕的是,您的目标可能是具有自我修改或自我检查代码的应用程序。在这些情况下,您将需要一种涉及反汇编和反编译应用程序的方法。对于 iOS,class-dump-z、otool、otx 和 i386codedump 工具与 IDA Pro 一起是安全的选择。您可以找到很多关于反编译 Android 应用程序的信息,尽管 ARM 调试器和 IDA Pro 对于那些在自修改或自检查代码保护方面投入巨资的应用程序会派上用场。有很多关于 Android 平台上的恶意软件和工具的信息都与此类问题相关。例如,有一个移动恶意软件邮件列表。

其他一些很棒的资源恰好是开发人员文档与动手工作相结合。Pluralsight 和 Raywenderlich 有一些涵盖这些平台的优秀教程——我已经阅读了他们所有的材料。Syngress 和 OReilly 有很多关于 Android 和 iOS 的书籍——其中许多都非常深入地涵盖了安全和取证主题。Wrox Press 有一本关于 Cocoa Application Security 的书也值得一看,尽管已经过时了。大多数涵盖基础语言(Obj-C 和 Java)的书籍都会很有用,尽管了解移动应用程序语言和概念在哪里融合(例如 PhoneGap、MonoTouch 等)也很有用。

** 2012 年 3 月 26 日更新 **

我倾向于使用类似的工具,尽管我更多地使用了 DTrace-Toolkit 和 iprofiler/Instruments for iOS Simulator 应用程序。我倾向于在越狱的 iPad 2 上使用 cycript 做更多的工作,这让我大开眼界(尤其是与 class-dump-z 一起使用)。对于 Android,我相信我忘了提到 Activity Monitor,它对于启动 Intent 非常有用。

许多运行时可以通过使用运行时 Obj-C 或 Java/Smali 来查看/分析/修改,因此了解这些语言及其在目标设备上的平台细节并不是非常可选的。

有时,我被要求对另一种格式的应用程序(例如 AIR for iOS/Android、HTML5、Titanium、NDK 等)进行渗透测试,但可以编译为原生应用程序。在这种情况下,最好使用二进制、静态和动态分析的组合来构建(就像原始开发人员一样)和/或逆向工程每个组件。这可能需要使用 Flash Professional 或其他 IDE/构建工具。

攻击系统的第一步是了解其攻击面。话虽如此,移动设备真的有那么不同吗?漏洞是针对所有软件平台编写的,包括移动平台的应用程序最常见的漏洞利用是目录遍历,然后是缓冲区溢出。

你应该研究已经做过的事情。阅读漏洞利用代码,编写漏洞利用代码。

如果我是你,我会从定义与平台相关的威胁场景开始,然后你可以从那里将最相关的方法、工具、技术和一般方法归因于每个场景。

现实情况是,正如 espengra 所提到的,可以使用许多不同的方法来了解攻击面的各个方面以及攻击向量,您只需将其分解为不同的测试即可。对于这种或任何其他类型的测试,没有“单一测试来统治它们”的方法。

首先针对设备构建攻击树(如果您以前从未听说过该术语,请使用 Google Schneier 和攻击树)我发现一个不错的思维导图工具是处理此问题的最佳方法。一旦有了树,您就可以将攻击细化为组,然后为每个主要分支定义主要测试方法。