【问题标题】:Hiding password field in command line在命令行中隐藏密码字段
【发布时间】:2019-09-10 00:08:24
【问题描述】:

我正在 FreeBSD 上编写一个系统服务,我需要获取用户凭据来验证身份,如下所示:

./compression_bin -i <input_file> --type=<type> --password=<secret key>

在这里,密钥用于在压缩给定文件之前对用户进行身份验证。目前,密钥出现在历史记录中,这是不好的并且可以被利用。有没有一种方法可以在不显示密码字段的情况下调用上述内容:

./compression_bin -i <input_file> --type=<type> --password=*********

【问题讨论】:

  • 如果你正在编写这个程序,让它从文件中读取密码并像./compression_bin -i <input_file> --type=<type> --passwordfile=some_file一样调用它,或者实现一个从stdin/dev/tty读取密码的选项。跨度>
  • 这是一场失败的战斗。在进程初始化和您可以替换任何攻击者可以获取该密码的字符之间总会有一小段时间。 MySQL 曾经以这种方式进行命令行身份验证,但现在如果你这样做,你会收到一个关于它不安全的BIG WARNING。使用密码文件。不要把它当作论据。
  • 这不仅仅是历史。 它也用“ps”表示! 正如Bodo所说:使用文件。替代解决方案:使用标准输入。

标签: c security unix freebsd


【解决方案1】:

历史将始终记录发出命令时的文本。可以想象,您可以返回并修改历史文件,但这不仅令人讨厌,而且还提供了一个可以读取密码的窗口。

此外,这甚至不是最简单的漏洞利用。如果密码是在命令行中给出的,那么在命令运行时可以通过其他方式读取密码,例如从所有用户都可以访问的ps 命令的输出中读取。

所以不要将密码作为命令行参数。从文件、标准输入、套接字或其他类似的东西中读取它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2022-10-24
    • 2021-08-13
    • 2011-04-08
    • 2013-12-28
    相关资源
    最近更新 更多