加密内存过多的密码?

时间:2017-09-03 13:44:50

标签: macos security passwords

我需要为Mac构建一个安全的应用程序。为此,我使用的密码只存在于创建者的头部。

要检索密码,首先需要在安全的文本字段中输入密码*然后可以使用它来加密和解密文件。当应用程序保持打开状态时,主密码将存储在变量中,这意味着它存在于内存中。在内存中加密这个密码是否有点过分?

我之所以提出这个问题的原因是,在主密码可以加密为内存之前,它已经作为变量存在,这意味着它已经开放用于内存扫描攻击。这是我应该担心的事情吗?

我在https://www.apple.com/macos/security/上阅读了以下内容:

  

运行时保护在核心保护。技术上很复杂   macOS中的运行时保护工作在Mac的核心部分提供帮助   保持系统安全。内置于处理器,XD(执行   禁用)功能在用于数据的内存之间创建一个强大的墙   和用于可执行指令的内存。这可以防止   试图欺骗Mac以同样的方式处理数据的恶意软件   它会对程序进行处理以破坏您的系统。地址空间   布局随机化(ASLR)更改了内存位置   应用程序的不同部分存储。这使得它很难   攻击者通过查找和重新排序应用程序的某些部分来造成伤害   它做了一些不打算做的事情。 macOS带来了ASLR   内核使用的内存是操作系统的核心,所以   相同的防御措施适用于Mac中的每个级别。

我可以断定Mac已经建立了防止内存扫描和劫持的保护措施吗?

(*我知道这可能会导致键盘记录器漏洞)

2 个答案:

答案 0 :(得分:3)

在每种情况下,您都应首先从用户密码中获取密钥,然后使用此密钥加密文件。因此,不是将密码保存在内存中,而是可以使用密钥派生函数立即计算密钥,并将密钥保存在内存中。您获得的优势是,攻击者只能学习允许解密文件的密钥,而不能学习可能重复使用的原始密码。

某些操作系统提供了一个专门的SecureString,它可能是您可以获得的最接近的内容,它包含一个在内存中加密的字符串并可以从那里删除它。我不知道OSX是否提供了这样的东西。

我怀疑内存中的加密密钥有多大用处。如果攻击者能够分析内存,他也可能能够解密内存,应用程序必须能够解密密钥。但肯定会提高标准,还需要做更多的工作。

链接文章解决了我认为的另一个问题,它阻止将可执行代码放在内存中(作为输入数据)并欺骗处理器以后执行它。

答案 1 :(得分:1)

mach_injectCycript等工具的存在清楚地表明您的程序内存永远不会安全。在iOS世界中,钥匙串的安全性来自于钥匙被刻在单独的硬件芯片中并且它永远不会被复制到应用程序存储器的事实。如果您根据定义在程序中进行加密/解密,则它很容易被某种形式的劫持。需要考虑的关键事项:

  • 你想要保护什么?数据?加密方法?既?
  • 有权访问您的二进制程序,攻击者可能会对其进行逆向工程,有什么影响?
  • 您是否需要在程序中进行实际的加密/解密?如果数据有用所需的至少一个关键步骤将被移动到外部后端,则可能更安全
  • 使用FileVaultTrueCrypt等文件系统加密补充您的解决方案将始终提高安全性