对iOS应用进行渗透测试的一个重要方面就是分析应用程序的runtime 。本文中,我将介绍怎样对iOS应用进行堆内容转储,并发布一个可以在iOS设备上转储App堆内容的小脚本。
你可以在 NetSPI Github 下载这段脚本。该脚本基本上围绕着GDB做文章,只能转储内存中拥有“子区域(sub-regions)”的部分。
我通常会在这些子区域中发现有效的认证 信息,当前正在使用的界面UI,以及实例化后的类属性。
目前,该技术只适用于iOS7及以下版本。对iOS8而言,除非有一个可用的GDB版本,否则无法 正常使用。
你不要使用从Cydia仓库中下载的默认GDB版本,而应该使用从“ http://cydia.radare.org ”下载的修正版。你可以点击这里 直接下载deb包 。下面将展示该过程中的截图,并演示脚本如何工作:
首先,启动我们想要捕获堆数据并登入的App,本文以Facebook示例:
然后我们登入App,此时主屏上显示的应该是Facebook的用户时间线,我们保持这种状态不要动。
接下来,我们使用SSH链接该设备,这样就能让App继续保持运行而不会被iOS变成后台应用。
./heapdump.sh <binary>
以下是在 运行时 期间该脚本所输出的内容。这里我们能看到我们想要转储的二进制内容的名称
下面列出了所有转储后的.dmp文件,现在我们就能从中搜索认证信息和其他敏感数据。
你通常能在其中发现密钥,或是在负责加密以及处理登录过程的实例化的类当中发现密码。
我个人倾向于组合使用“string”和“xxd”命令来查看十六进制内容,但你可以选择使用任何顺手的十六进制编辑器。
该技术可用于检测App中处理敏感数据的类,查看其在完成实例化之后是否已从内存中删除了这些敏感信息。
所有的App都应当释放用于处理敏感数据的类和方法的内存空间,否则你就要承担被入傁者看到内存中所有可用数据的风险。
下面,我列出了在该脚本中用到的GDB命令
gdb –pid=”<PID>” info mach-regions (look for sub-regions) dump binary memory heap1.dmp <sub-region range from above>
【原文:ios-tutorial-dumping-the-application-heap-from-memory 翻译:yiyanghuadan 】