MASTG-TEST-0060: 测试内存中的敏感数据
此测试即将更新
此测试目前可使用,但将作为新的 OWASP MASTG v2 指南 的一部分进行全面修订。
请提交 PR 来帮助我们完成:MASTG v1->v2 MASTG-TEST-0060: 敏感数据内存测试 (ios)
概述¶
静态分析¶
当执行静态分析以查找通过内存暴露的敏感数据时,您应该
- 尝试识别应用程序组件并映射数据的使用位置,
- 确保尽可能少的组件处理敏感数据,
- 确保包含敏感数据的对象的引用在不再需要时被正确移除,
- 确保高度敏感的数据在不再需要时立即被覆盖,
- 不要通过不可变的数据类型传递此类数据,例如
String
和NSString
, - 避免使用非原始数据类型(因为它们可能会留下数据),
- 在移除引用之前覆盖内存中的值,
- 关注第三方组件(库和框架)。拥有一个根据上述建议处理数据的公共 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 特定命令)前添加反斜杠 :
。