博客

程序员征服安全:分享与学习系列 - LDAP 注入

January 17, 2019
Jaap Karan Singh

绝大多数计算机系统都使用轻量级目录访问协议(LDAP)。它用于在任何互联网协议(IP)网络上维护分布式目录信息服务。简单来说,它的作用就是跟踪和管理用户。

LDAP 常被应用程序用作身份验证源,以检查用户是否有权执行各种操作,特别是与其在组织内定义的角色相关的操作。例如,只有会计部门的人员才能使用公司会计软件。应用程序通常会被编程为检查 LDAP 表,以确保用户的行为在其既定的权限范围内。

当恶意用户能够操纵 LDAP 查询时,问题就会随之而来。这种操作可以诱骗接收服务器执行本不被允许的无效查询,甚至在没有密码的情况下,让无效或低安全级别的用户获得高级别或管理员权限。  

LDAP 注入可能很棘手,但在本集中,我们将学习:

  • 它们的工作原理
  • 它们为何如此危险
  • 如何部署防御措施来阻止它们。

攻击者如何利用 LDAP 注入?

基于 LDAP 的攻击多年来一直很猖獗,原因之一是几乎所有的计算机系统都在使用它。LDAP 是开源的且运行效率极高,因此目前还没有出现太多替代方案。

从本质上讲,LDAP 是一个数据库,用于跟踪基于 IP 的计算机系统或网络中的有效用户。它允许用户共享有关系统、网络、服务器、应用程序甚至同一网络中其他用户的信息。

LDAP 以类似于数据库行或记录的形式存储信息,称为“专有名称”,通常缩写为 DN。每个 DN 都是唯一的。例如,对于在大型企业芝加哥会计办公室工作的用户,其 DN 可能如下所示。

cn=James Smith, ou=Corporate Accounts, dc=Chicago, do=Parkview  

为了确保每个 DN 的唯一性,可以在记录中添加各种代码,例如“+”、“/”、“=”等。也可以在记录前后插入空格,以确保即使芝加哥 Parkview 办公室的企业会计部门有两名 James Smith,他们每个人也会拥有各自独立的 DN。

应用程序通常使用 LDAP 允许用户发送有关特定 DN 的查询,例如,当用户试图找到工资单部门的正确联系人以讨论工资单错误时。当搜索查询中提供的用户参数未经校验时,就可能发生 LDAP 注入。在这种情况下,黑客可以操纵良性搜索来绕过身份验证机制或执行额外的任意查询。这会诱骗服务器显示本不应被允许查看的结果(如用户密码),甚至导致应用程序授予对网络内高安全区域的访问权限,无论是否有有效密码。

为什么 LDAP 注入如此危险?

LDAP 注入最大的危险可能在于该协议在全球大多数 IP 计算机网络中的广泛普及。对于试图窃取信息或提升网络权限的黑客来说,这是一个极佳的切入点。没有受过训练的黑客会放过检查 LDAP 注入可能性的机会,因此安全团队必须确保这些漏洞始终被封堵。

具体来说,相当多的应用程序被编程为帮助有效用户查找有关组织内用户和组的有限信息,或 DN 中包含的任何其他信息。例如,应用程序可能允许某人使用 LDAP 搜索在芝加哥工作的企业会计师的联系信息,这将返回上述示例中的 James Smith。根据权限设置,这很可能是一个完全合法的 LDAP 查询用途。

当恶意用户能够在查询中添加未经筛选的参数,从而改变搜索性质并诱骗服务器提供本不应公开的信息时,危险就出现了。例如,通过添加 user=* 字符串,攻击者可以获取整个组织中每一个用户的信息,这通常是不被允许的。

对于使用 LDAP 进行身份验证的应用程序,问题可能更为严重。攻击者可以使用例如 LDAP 查询末尾的 (&) 字符串来诱骗服务器认为参数为真。如果应用程序使用 LDAP 来验证密码,通过 LDAP 注入强制执行“真”参数,可能会允许未经授权的用户以管理员身份登录网络,甚至无需密码。

让 LDAP 注入在您的网络中成为“不可能”

防止 LDAP 注入的最佳方法之一是实施 LINQtoAD 或其他专门为抵御此类攻击而设计的框架。如果网络中已经存在利用 LDAP 查询的应用程序,这可能无法实现。然而,即便如此,对于每一个新开发的应用程序,在未来使用抗注入框架仍然是一个明智的选择。

现有的 LDAP 应用程序也可以通过白名单验证和输入清理来防范注入攻击。在可能的情况下,应将用户输入限制在有限的受信任值范围内。否则,作为 LDAP 查询一部分的用户输入必须先进行清理;同时不要忘记包含 GET 和 POST 参数、Cookie 以及 HTTP 标头,因为它们也可能成为攻击媒介。请勿自行编写输入清理函数,而应使用受信任的第三方安全库或框架内置的 API。

除了针对性的修复外,良好的计算实践(例如为 LDAP 查询应用程序分配网络所需的最小权限)也能提供帮助。这样,即使发生最坏的情况且 LDAP 注入攻击得逞,也能将损失降至最低。

关于 LDAP 注入的更多信息

如需深入了解,您可以查看 OWASP 关于 LDAP 注入的说明,或参阅 注入防御 速查表。您还可以通过 免费演示 来测试您新掌握的防御知识,该演示来自 Secure Code Warrior 平台,旨在将网络安全团队培养成顶尖的网络战士。若要了解更多关于攻克此漏洞及其他各类威胁的信息,请访问 Secure Code Warrior 博客。

标语

在 AI 驱动的开发成果发布前实现有效治理

评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。