由于用户在用户名字段中输入错误,密码以明文形式发送

信息安全 密码 验证 日志记录 暹粒
2021-08-14 22:12:14

在查看不同 SIEM(Splunk、HP Logger Trial 和 AlienVault 平台的 SIEM)生成的日志后,我注意到由于某种原因,很多用户倾向于在用户名字段中输入密码时出错,无论是在操作系统域登录中,或在 Web 应用程序中。我猜这些人是不看键盘就无法打字的人,并且在尝试这样做时,做得很快,最终在错误的字段中输入密码。这意味着密码在网络中的任何地方都以纯文本形式发送,并最终记录在日志中,并带有类似以下内容的事件:

User P@$$w0rd does not exist [...]

或者

An account failed to login: P@$$w0rd [...]

(其中 P@$$w0rd 是实际用户的密码)

弄清楚密码属于谁变得非常明显:通常同一日志文件上的上一个或下一个(未)成功事件会告诉您由同一用户触发的事件。

任何其他分析员在查看日志时,都可能在正当所有者不知道的情况下获得其他人的凭据;最坏的情况是网络窃听或实际的日志文件泄露。

我正在寻找一般指导来帮助防止这种情况。我认为简单地屏蔽用户名是不可行的,即使是这样,这也可能会消除很多日志分析,因为无法分辨谁做了什么。

注意:已经有关于类似问题的帖子,但我正在尝试解决它的方法。 如果我不小心将密码输入到用户名字段(Windows 登录),会有什么风险?


接受的答案:我希望我能从列表中选择一些答案。不幸的是,我只能在论坛中坚持一个,但实际上我可以将它们结合起来。非常感谢所有的答案;我看到没有单一的解决方案。由于我同意添加“事物”会增加复杂性,从而增加安全漏洞的可能性,因此我必须同意大多数选民的观点,即@AJHenderson 作为第一种方法有最优雅和最简单的答案。绝对是 SSL 和服务器端甚至客户端的简单代码验证。因为我希望减轻的不是恶意用户,而是分心的用户,所以这会很好。一旦到位,我们就可以开始考虑在适当的情况下将实施扩展到恶意用户。再次感谢大家的意见。

4个回答

一种想法是如果密码框中没有值,则不允许提交表单。通常,如果他们不小心在用户名中输入了密码,那么密码对话框中可能不会有任何内容。

值得注意的是,这不必简单地在客户端完成,也可以在服务器上完成,只要使用的传输是安全的,并且在通过关于密码字段不为空的检查之前不会记录输入.

假设您的后端应用程序和 SIEM 需要查看各种应用程序的失败登录尝试(并因此显示“用户 P@$$w0rd 无效”错误消息),那么停止此操作并非易事。

但是,确保所有发送包括用户名和密码在内的敏感数据的应用程序都实现 HTTPS(使用 SSL 加密的 HTTP)是确保网络设备和网络上的任何人都无法获得错误输入用户名框中的密码的好方法!

所以问题是你不想让分析师看到敏感日志文件中的密码?

注意:即使您使用 Javascript,它也不会处理以纯文本形式存储在磁盘上的密码数据。

更好的解决方案是在分析师查看日志之前对日志进行预处理并编辑日志中的信息。

如果您将线路列入白名单或将其他线路列​​入黑名单,则可以逐行过滤。例如:

当用户名出现在日志文件中时,您可以将用户名列入白名单

  • 有一个模式 ([az] + number) 或 ([az] + period + [az])
  • 包括一个域名,后跟一个斜杠“\”用于 AD 环境
  • 多次出现
  • 可以在分析师看到之前针对已知用户名的 LDAP 目录进行清洗

您还可以通过以下方式识别密码并将其列入黑名单:

  • 密码策略通常遵循一种模式(一个符号、大写/小写、x 个字符...)

您可以使用这些知识来构建自定义日志数据清理器,以保护您不希望分析师看到的信息。

那么过滤线是什么样子的呢?

您可以简单地通过散列来编辑有问题的用户名,并为其分配一个人 ID 并将它们存储在一个安全的位置:

 eb574b236133e60c989c6f472f07827b   Redact1
 7e67b89a695bfbffc05b7ed2c38f927f   Redact2
 ..etc

如果散列频率重复,分析人员可以查看特定条目是否一遍又一遍地出现。

您选择的确切哈希方法(或加密方法)存在风险,因为此“哈希数据库”将包含高价值信息。播种(就其性质而言)会阻止频率分析,这可能对您有价值,也可能没有价值。

我只能确定您正在讨论的三个问题。

  1. 用户没有正确输入信息。
  2. 分析师可以从日志中辨别密码。
  3. 密码以明文形式发送,容易受到中间人窃听。

在我看来,这很容易解决。

  1. 勉强接受用户错误
  2. 不要记录无效的用户名,而是记录失败的尝试和 IP。
  3. 不要以明文形式发送用户名。使用 HTTPS 等技术使用 javascript 对纯文本进行编码(例如 ROT13)。

登录失败然后重试成功的示例日志。

[00:00:00] An account failed to login from 192.168.1.100
[00:21:00] Successful login 'root' from 192.168.1.100

阅读其他答案,我想包括这个。

  • 在提交之前验证所有字段。
  • 正如 Eric G 所提到的,考虑在多个页面之间拆分表单。