【问题标题】:Securely overwrite Python variables in RAM? [duplicate]安全地覆盖 RAM 中的 Python 变量? [复制]
【发布时间】:2013-10-10 06:21:24
【问题描述】:

我正在用 Python 编写一个涉及对密码进行哈希处理的程序。假设我用它来获取密码:

import getpass
password = getpass.getpass("Password: ")

然后对其进行哈希处理,有什么方法可以安全地从 RAM 中删除所有未哈希密码的痕迹?

【问题讨论】:

  • 您为什么要这样做?为了能够读取(真的很难)你的记忆,黑客无论如何都应该获得 root 访问权限。请把你的精力集中在更明智/常见的attack vectors 上,而不是创造这种虚假的安全感。
  • @RickyA 你不知道 tkbx 想要做什么,这实际上是一个好问题。
  • @RickyA:如果交换文件没有加密,那么你不需要root,你只需要硬盘(并且包含密码的页面已经被交换而不是被覆盖,课程)。窃取硬件即使不是高价值的攻击也是一种合理的攻击,因为攻击者不知道他们将在交换文件中获得什么,这取决于运气。但结论是一样的,你无能为力。
  • @RickyA:我不一定需要在交换文件中找到密码,而是使用交换文件作为字符串的来源来猜测密码。无论如何,我的观点只是未加密的交换文件破坏了内存内容由操作系统保护的原则(至少,一旦操作系统没有运行并且您将磁盘安装在其他位置)。正如我所说,它并没有真正影响您评论的主旨,只是假设并不总是成立。当然,操作系统也可以在正常关机时清理交换文件。

标签: python security memory hashlib


【解决方案1】:

如前所述,即使您有自定义实现,在 python 中也没有万无一失的方法(尽管这可能是一种方法)。

现在我不知道您的应用程序应该做什么,但我可以毫无疑问地告诉您,您的数据在 RAM 中比在数据库中更安全,即使经过哈希处理后也是如此。

记忆的工作方式是如此复杂。每个进程都有自己的虚拟内存空间,不必是连续的。完整的内存块被交换到磁盘并放回另一个内存块。整个内存只是一组字节,几乎不可能区分整数数组、字符串、猫或简单的随机数据。

部分数据块被部分重新分配,从而产生大量部分数据。想象一下这会是什么样子,1、2、8 甚至 16Gb 的随机数据,潜在的黑客必须在所有这些 0 和 1 中找到密码。

如果有人想在执行过程中破解您的密码,他需要以 root 身份实时访问机器;由于我之前所说的原因,他不能仅仅通过查看交换来做到这一点。

但是,如果有人拥有这种访问权限,那么还有很多其他方法可以获取密码。例如简单地调试程序,或者更好的是,只需更改源并使其打印密码:)

大多数黑客都不会费心经历这样的麻烦。黑客攻击主要是关于social engineering,这基本上是让用户心甘情愿地给黑客密码。 Phishing 就是这样一种方法。

【讨论】:

  • 您应该投票结束这个问题,因为它是重复的,而不是回答它。如果你有新的答案,你可以把它放在原来的问题上。
  • 这家伙有道理!
  • “潜在的黑客必须在所有这些 0 和 1 中找到密码”。首先,黑客不可能做到这一点的想法是一个重要的声明。有很多实际的利用依赖于在内存中找到特定的东西或交换你不会认为有很多东西可以开始的地方。其次,您实际上要做的是扫描交换文件以查找任何看起来像文本的内容。您发现的不仅仅是密码,然后将其用作猜测列表。也就是说,你可以在大海捞针中找到一根针,依次尝试用每一片干草缝制直到有一根干草可以工作。
  • 顺便说一句,我并不是说提问者的应用程序实际上会陷入这种交换文件攻击。我是说这个论点所依据的假设并不完全准确。如果你假设交换文件是坚不可摧的,或者不可能在一个大的二进制块中搜索敏感数据,那么这个特定的应用程序可能会或可能不会受到影响(很可能不会),但肯定有人最终会受到影响。跨度>
  • 我所做的假设是,黑客会简单地使用其他类型的攻击,这些攻击更容易应用,并以更高的成功率提供更快的结果。现在,一个好的密码中包含标点符号、数字和特殊字符,很难判断一组这样的字符是随机垃圾还是密码。我同意这样一个事实,这并不意味着它是完全证明的。我只是说这比对数据库进行彩虹攻击或简单地要求客户端自愿提供密码要难:p
猜你喜欢
  • 1970-01-01
  • 2015-11-16
  • 2019-04-20
  • 2013-05-27
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多