【问题标题】:C: Simple way to input and store string securely in console?C:在控制台中安全地输入和存储字符串的简单方法?
【发布时间】:2011-07-03 07:20:40
【问题描述】:

我正在创建一个控制台应用程序,它将一些敏感字符串存储在内存中,以发送到另一个客户端。在这种情况下,它几乎就像一个安全的信使(可以接受百分之几的不安全感),尽管没有那么复杂。

在分配的内存部分中接受用户输入(一次接受一个字母以用于处理目的,例如查找关键字母的功能)是完全不安全的,因为不受其他进程的保护可以间谍吗?

我很想在将每个字符发送到字符串之前对其进行编码,尽管这看起来有点傻。是否有任何方法可以“锁定”对该 malloc 的访问(至少对内存查看的微不足道的尝试)或类似技术来保护内存中的字符串?

谢谢。

我对许多想法持开放态度,目前只是在计划。

【问题讨论】:

  • 我认为——但我可能错了——在现代系统中,进程 X 无法访问为进程 Y 分配的内存,除非进程 X 具有特殊特权(与内核相同);如果内核中毒,一切都可能不安全。此外,键盘记录器可以在您将输入混淆到您的字符串之前读取输入。
  • @Shin,键盘记录器可能是录制的神奇答案,但是可能存在许多“较小”的不安全感,我希望至少盲目地加以防范,尤其是当我存储平原时记忆中的文字。如果它无法访问,但正如你所说,我很喜欢它。
  • @Shin:在大多数操作系统(包括 Windows 和 Linux)中,都有用于从另一个进程读取内存的 API 调用(需要管理权限,但不需要内核级进程)。这就是调试器的工作方式。
  • @BlueRaja,我是这么认为的(谢谢),幸运的是我可以不用纯文本存储在内存中,这样调试器就会返回,如果不是无法识别的结果被认为是无稽之谈。跨度>
  • @BlueRaja 我在写这篇评论时忘记了它......当然,调试器使用某些功能工作,该功能只需要调试器与要调试的进程或 root 使用相同的用户运行。所以至少用户账户或者root/admin账户应该被攻破,这本身就是一个威胁整个机器的问题

标签: c security memory input console


【解决方案1】:

如果您想要真正的安全性以防止任何人看到您存储在内存中的内容,那么在您阅读时加密(或至少混淆)每个字符是可行的方法。否则,您几乎无法阻止坚定的攻击者查看内存中的明文数据。事实上,我认为蓝光主密钥被破解是因为设备将密钥的未加密表示加载到其内存中。

【讨论】:

  • 但是一个坚定的攻击者可以将一个调试器(他/她已经作为正在运行的进程的同一用户或作为 root 进入机器)附加到正在运行的程序并在很短的时间内击败混淆,如果值得。如果他/她有可执行文件,他可以反汇编它以了解混淆算法并将其应用于整个感兴趣的内存......即,如果周围有坚定的攻击者,即使是复杂的保护措施也会被击败,所以对于小型个人程序我会说不值得花时间保护它们;在这种情况下,对我来说,弱点是它发送给其他客户
  • “以这种方式保护它们”我的意思是...我会花更多时间思考数据是如何发送的,以及如何让它们“安全”地发送到另一端。
  • 非常明智@all,也许我会非常了解资源使用加密或具有随机种子的存储方法,其中加密发送给另一个客户端(或其他东西,我确信我可以想出一个办法。)我不担心他们在电脑上,所以一些随机密码之类的方法对我来说是最安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 2023-03-29
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
相关资源
最近更新 更多