跳过内容

MASTG-TEST-0060: 测试内存中的敏感数据

此测试即将更新

此测试目前可使用,但将作为新的 OWASP MASTG v2 指南 的一部分进行全面修订。

请提交 PR 来帮助我们完成:MASTG v1->v2 MASTG-TEST-0060: 敏感数据内存测试 (ios)

发送反馈

概述

静态分析

当执行静态分析以查找通过内存暴露的敏感数据时,您应该

  • 尝试识别应用程序组件并映射数据的使用位置,
  • 确保尽可能少的组件处理敏感数据,
  • 确保包含敏感数据的对象的引用在不再需要时被正确移除,
  • 确保高度敏感的数据在不再需要时立即被覆盖,
  • 不要通过不可变的数据类型传递此类数据,例如 StringNSString
  • 避免使用非原始数据类型(因为它们可能会留下数据),
  • 在移除引用之前覆盖内存中的值,
  • 关注第三方组件(库和框架)。拥有一个根据上述建议处理数据的公共 API 是一个很好的指标,表明开发人员考虑了此处讨论的问题。

动态分析

有几种方法和工具可用于动态测试 iOS 应用程序的内存中是否存在敏感数据。

检索和分析内存转储

无论您使用的是越狱设备还是非越狱设备,都可以使用 objection Fridump转储应用程序的进程内存。 您可以在 进程探索中找到对该过程的详细说明。

内存转储后(例如,转储到一个名为“memory”的文件中),根据您要查找的数据的性质,您需要一组不同的工具来处理和分析该内存转储。 例如,如果您专注于字符串,那么执行 strings 命令或 rabin2 中的 rabin2 -zz 就足够了。

# using strings
$ strings memory > strings.txt

# using rabin2
$ rabin2 -ZZ memory > strings.txt

在您喜欢的编辑器中打开 strings.txt 并仔细查看它以识别敏感信息。

但是,如果您想检查其他类型的数据,您可能更想使用 radare2 及其搜索功能。 请参阅 radare2 搜索命令的帮助 (/?) 以获取更多信息和选项列表。 以下仅显示其中的一个子集

$ r2 <name_of_your_dump_file>

[0x00000000]> /?
Usage: /[!bf] [arg]  Search stuff (see 'e??search' for options)
|Use io.va for searching in non virtual addressing spaces
| / foo\x00                    search for string 'foo\0'
| /c[ar]                       search for crypto materials
| /e /E.F/i                    match regular expression
| /i foo                       search for string 'foo' ignoring case
| /m[?][ebm] magicfile         search for magic, filesystems or binary headers
| /v[1248] value               look for an `cfg.bigendian` 32bit value
| /w foo                       search for wide string 'f\0o\0o\0'
| /x ff0033                    search for hex string
| /z min max                   search for strings of given size
...

运行时内存分析

执行 进程探索,例如,使用 r2frida,以便在应用程序运行时分析和检查应用程序的内存,而无需转储它。

例如,您可以从 r2frida 运行之前的搜索命令,并在内存中搜索字符串、十六进制值等。执行此操作时,请记住在使用 r2 frida://usb//<name_of_your_app> 启动会话后,在搜索命令(和任何其他 r2frida 特定命令)前添加反斜杠 :