像这样的类变量:
@property (strong, nonatomic) NSString *privateValue;
有人可以在内存中读取该变量的值吗?我在苹果文档上找不到任何关于这个的东西,我也缺乏理解。有人可以给我提示可能的攻击吗?
像这样的类变量:
@property (strong, nonatomic) NSString *privateValue;
有人可以在内存中读取该变量的值吗?我在苹果文档上找不到任何关于这个的东西,我也缺乏理解。有人可以给我提示可能的攻击吗?
是的,可以从应用程序外部读取 iOS 类变量。根据您对越狱或越狱设备的看法和倾向,您可能会找到几种在运行时或内存中读取它们的方法。
通过运行时,在越狱设备上,NCC Group Introspy等工具是一种对开发人员友好的工具,不需要任何正式的逆向工程经验或经验。
为了在 iOS 模拟器或 iOS 设备上访问内存,lldb 和 gdb 可用于转储应用程序的当前内存状态。需要确定要转储的进程,并可能克服任何包含进程转储的自修改或自检查代码。这通常需要 Unix 或逆向工程背景。作为一种更轻松的方法,Xcode 确实提供了调试器、通知间谍和 DTrace 接口。在没有调试器的情况下访问内存的一种常见方法是让应用程序崩溃,然后检查通过 Xcode Organizer 找到的工件。iOS 模拟器中的另一种方法是进入菜单选项硬件并选择模拟内存警告选项。
对于那些确实有逆向工程经验和越狱设备的人,一定要查看Snoop-IT作为一流的工具,以比上面的 Introspy 提供的更深入。Snoop-IT 在移动应用黑客手册和学习 iOS 渗透测试这本书中也有大量介绍。但是,对于那些有 gdb 经验的人,我的首要建议是遵循NetSPI 概述的技术来访问完整的应用程序堆。其他技术包括通过使用调试服务器在越狱设备上使用lldb,这在mSecLab 博客上更详细,但也包括在versprite、isa56k,并通过 lifeform-labs 了解一下 lldbpy。对于越狱设备(或任何 OS X 安装),我可能会提到的最后一个技术是使用 KDebug 机制的kdv 工具,当然还有其他内核内存转储选项可用,例如readkmem。MEMSCAN和 Radare(请参阅 NetSPI 博客文章中关于将 Radare 存储库添加到 Cydia)也可用于搜索或转储 iOS 越狱设备上的进程内存。
在 iOS 模拟器中可以完成一些技术。最近的《iOS 应用程序安全》一书深入介绍了其中的许多内容。我可能还建议您查看一些反反反转技术,例如通常在 OS X 上使用的技术,因为它们也适用于 iOS。例如,可以映射一个名为Bit Slicer的 OS X 游戏训练器及其底层技术。调试的基本问题(例如,如果上面的 NetSPI gdb 技术不起作用)可以使用 idapython 解决,正如作者在 MyWi 逆向工作中遇到反调试问题时所看到的那样。正如这篇关于反反调试的文章所建议的那样,一个技术目录被形式化为一个名为pangu的 GitHub 项目可以被另一个名为Onyx-the-Black-Cat 的GitHub 项目绕过。还有许多其他逆向挑战,因此我建议您查看适用于 iOS或类似资源的ReverseEngineering.StackExchange 标记集。
对于被监禁的设备,我建议您考虑使用 cycript 和/或Frida重新打包应用程序。如果您可以获得远程 cycript shell,那么您可以使用mSecLab 方法来分析应用程序的内存,就像在越狱设备上所做的那样。
因此,您通常可以采取一些行动。我不是 Apple iOS 开发人员,所以我不知道所有这些攻击是否可行。我只是想提供一个逆向工程策略的概述。
调试器。附加一个像 XCode (LLDBG) 标准的调试器或另一个调试器可以让攻击者查看程序值。当然,如果没有调试符号等,要找到有意义的信息要困难得多。但是,只要有足够的时间、耐心和决心,你就能找到这个价值。当然,这意味着应用程序将在模拟环境之类的开发环境中运行,而不是在手机中运行。但这可以通过 Apple 的开发工具链轻松安排。
源代码/二进制修改。这类似于调试器。有些人可以轻松地解开汇编和字节码。一旦发生这种情况,他们就可以修改二进制文件以打印您的私有值。要检索 .ipa 文件(应用程序二进制文件),您只需查看设备的 iTunes 库,如Think Different Answer 中所述。
内存编辑器。这些程序可以查看分配给进程的内存地址。这些工具通常需要系统级访问权限,但 Apple 设备存在“越狱”。有人可能会创建一个内存编辑器应用程序来查看分配给您的应用程序的内存空间并查找您的私有变量。这确实需要高级技术知识才能实现。
查看设备存储。如果您在任何时候将该变量缓存到磁盘,您可以使用取证技术来读取设备存储并查看缓存的数据。这是使用此技术查看流行消息应用程序 Signal 缓存的数据的示例照片。链接到完整的推文。
SANS在其网站上发布了一份内容丰富的 iPhone 取证指南。我将在此处复制相关部分(第 1.1.6 节),但我强烈建议您阅读它以获取更多信息和个人发展。
从 iTunes 商店获取应用程序时,会在 Mobile/Application 文件夹中自动创建一个新目录。此目录将保存与每个应用程序关联的文件,并将由 Apple 分配一个 32 个字符的字母数字唯一标识符(示例:GA07A3WW-0E39-33OJ-B947-9CAA16688G22)。这个唯一的 id 在所有 iOS 设备上都是一致的。每个应用程序文件夹通常有几个公共子文件夹:与该应用程序相关的文件的文档文件夹、临时运行时文件的临时文件夹、首选项的库文件夹和缓存数据。通用文件位于大多数应用程序文件夹中,例如 info.plist、resourcerules.plist 和 applestores.db。根据应用程序,将找到不同的配置文件、plist 文件和 XML 数据。审查员偶尔可以找到有助于为调查提供证据的用户名和密码数据、cookie 或图像。©2012 TheSANS Institute
进一步阅读#1和#2的技术实现:
应用程序使用的所有变量都存储在内存中。但是内存不是受 iOS 应用沙箱影响的东西的一部分。应用沙箱关心您可以访问的文件,以限制违规可能产生的影响。
无论如何,一个应用程序无法访问另一个应用程序的内存。这是不可能的,因为操作系统管理内存并为每个进程提供虚拟地址空间。这意味着每个进程都在查看内存,就好像除了自己之外没有其他进程一样。
要访问另一个进程的内存,用户需要 root (UNIX) 或管理 (Windows) 权限。拥有这些权限的用户可以使用操作系统提供的方法来转储任何进程的内存。如果攻击者想要转储整个内存,则默认情况下没有此类工具,但可以注入驱动程序 (Windows) 或安装内核模块 (UNIX) 以直接访问内存。