gpt4 book ai didi

c# - 针对 Active Directory 验证 NT 和 LM 哈希

转载 作者:可可西里 更新时间:2023-11-01 09:25:25 26 4
gpt4 key购买 nike

我正在编写使用 NTLM 协议(protocol)对用户进行身份验证的 Web 应用程序。

我已成功从客户端获取密码的 NT 和 LM 哈希值。我如何根据 Active Directory 验证它们以确保密码正确。

我正在使用 C#,但我认为我也可以调用 native 库。

编辑:我看不出反对票的理由。 NTLM(v2) 协议(protocol)已过时,因此很难找到有关如何处理它的相关信息。尤其是在 C# 这样的现代语言中。

但我发现了两种可能的方法:

  • 使用 Windows 的 native SSPI 调用(Microsoft 不推荐),但可以通过适当的包装实现。幸运的是,有一个例子:http://pinvoke.net/default.aspx/secur32/InitializeSecurityContext.html这种方法似乎有效。我能够验证帐户。但仍然存在一些问题。例如在客户端的 HTTP 请求之间传输有关服务器安全上下文的信息、调用不安全代码以及无法在其他系统上执行此类操作。
  • 尝试解开通过 System.Net.Security.NegotiateStream 完成的调用。这个想法很好,但不知道如何实现。

最佳答案

我强烈建议您做一些研究 - 阅读 document来自你的other question的答案将是一个好的开始 - 在这个问题收集更多反对票之前。

您尝试实现的 - 密码验证 - 是安全敏感的,这意味着正确理解底层技术和现代安全概念非常重要。

现代安全架构的一个重要设计方面是抵御所谓的重放攻击:防止窃听客户端和服务器之间连接的人记录身份验证质询并在以后重放。

NTLMv2/NTLMv2 Session 使用这种技术 - 传统的 NT/LM(现在非常不鼓励)没有。

您不能将客户端对生成的一些挑战的响应传递给某个工具进行验证——因为这将完全丧失抵抗重放攻击的目的:那怎么会工具区分你和 Joe Hacker,他记录了你得到的响应或生成了他自己的响应?

其工作方式是验证密码的实体(即 Active Directory)生成质询,而不是想要验证其用户的 Web 服务器。

请不要在您的网络服务器中实现遗留的 NT/LM 并将其称为“安全性” - 事实上,它只会为您提供很少的保护,而不是以纯文本形式发送密码 - 它真的很简单而且速度很快使用当今的现代硬件破解所谓的“加密”。阅读那个 davenport 文档,它列出了遗留 NT/LM 的问题。

如果您确实需要 NTLM(它的更安全版本),可以使用一些外部帮助程序。例如,看看 Samba、Apache 和 Squid。 Squid 使用一些外部工具来处理 NTLM,我认为这是基于 Samba 的工具。

使用积极维护的外部工具(例如 Samba 的工具)也意味着您将获得安全更新,因为如果您自己编写,不仅仅是编写代码,还需要维护,您需要提防安全问题并修复它们。

关于c# - 针对 Active Directory 验证 NT 和 LM 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13840679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com