将敏感数据安全存储在RAM中
通常,iOS开发人员会将应用程序设置存储在plist文件中,这在某些情况下可能会受到影响。
细节
当应用程序正在使用时,用户或应用程序特定的数据就可能存储在RAM中,并且在用户注销或会话超时时不会正确清除。 因为Android将应用程序存储在内存中(即使在使用后),直到内存被回收,加密密钥可能会保留在内存中。 发现或窃取设备的攻击者可以附加调试器并从应用程序转储内存,或者加载内核模块以转储RAM的全部内容。
当管理密码和其他敏感信息时,应用程序会将该信息保存在内存中,即使缓冲区已经释放了一段时间。 如果应用程序容易出现缓冲区溢出,格式化字符串,数据泄露和其他漏洞,这可能是一个安全问题,这可能允许攻击者转储进程的内存以恢复敏感信息。
修复
不要将RAM中的敏感数据(例如加密密钥)的保存时间长于所需的时间。使用后清除保存密钥的任何变量。避免为敏感的密钥或密码使用不可变对象,例如Androidjava.lang.String,并使用char数组。即使对不可变对象的引用被删除或清空,它们可能保留在内存中,直到垃圾回收发生(这不能被应用程序强制)。
这只能通过低级语言来完成,因为如果优化程序检测到缓冲区在覆盖后不再使用,编译器和即时虚拟机将因性能原因而忽略这些操作。
这里有一些建议,以清除这些缓冲区绕过编译器优化,但他们都需要依赖于工具链,语言和平台。