编码员征服安全。分享与学习系列 - LDAP注入

发表于2019年1月17日
作者:Jaap Karan Singh
案例研究

编码员征服安全。分享与学习系列 - LDAP注入

发表于2019年1月17日
作者: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是唯一的,可以在记录中加入各种代码,如 "+"、"/"、"="和其他一些。也可以在记录前后插入空格,以确保即使有两个詹姆斯-史密斯在芝加哥帕克维尤办事处的企业会计部工作,他们也会有各自的DN。

应用程序通常使用LDAP来允许用户发送关于特定DNs的查询,例如,当试图找到工资部门的正确联系人来谈论他们支票上的错误时。当搜索查询中没有对用户提供的参数进行验证时,就会发生LDAP注入。在这种情况下,黑客可以操纵良性搜索以绕过认证机制或执行额外的任意查询。这可以欺骗服务器显示不应该被允许的结果,如用户密码,甚至导致应用程序在有或没有有效密码的情况下授予网络内高安全区域的访问权。

为什么LDAP注入如此危险?

LDAP注入的最大危险可能是该协议在全球大多数IP计算机网络中的扩散。它使黑客很容易成为窃取信息的垫脚石,或者提升他们在网络上的权限。没有一个训练有素的黑客会不检查LDAP注入是否可能,所以安全团队必须确保这些漏洞总是被关闭。

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

当一个恶意的用户可以在查询中添加未经过滤的参数,改变搜索的性质并欺骗服务器提供通常不应该提供的信息时,危险就来了。例如,通过添加user=*字符串,攻击者可以获得整个组织的每一个用户的信息,这可能是永远不应该允许的。

对于使用LDAP进行认证的应用程序,问题可能更严重。攻击者可以使用,例如,LDAP查询末尾的(&)字符串来欺骗服务器,使其认为该参数为真。如果一个应用程序使用LDAP来验证密码,通过LDAP注入强迫一个 "真 "参数可能会允许一个未经授权的用户以管理员身份登录网络,即使没有密码。

让LDAP注入在你的网络中成为L-DON'T。

防止LDAP注入的最好方法之一是实施像LINQtoAD这样的东西,或者其他专门用来抵制它的框架。如果一个网络已经有利用LDAP查询的应用程序,这可能是不可能的。然而,即使在这种情况下,每个新的应用程序使用抗注入框架仍然是一个好主意。

现有的使用LDAP的应用程序也可以通过使用白名单验证和输入净化来加强对注入的防范。在可能的情况下,将用户输入限制在一组有限的可信值中。否则,作为LDAP查询的一部分的用户输入应该首先被净化,不要忘记包括GET和POST参数、cookies和HTTP头,因为它们也可以作为攻击的载体。不要编写你自己的函数来执行输入消毒;使用可信的第三方安全重点库或内置框架API来代替。

除了有针对性的修复,良好的计算实践,如分配LDAP查询应用程序在网络上所需的最低权限,也可以帮助。这样一来,如果最坏的情况发生了,LDAP的注入被通过了,损失就会被减轻。

关于LDAP注入的更多信息

要进一步阅读,你可以看看OWASP关于LDAP注入的文章,或者注入预防小抄。你也可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台可以培训网络安全团队成为终极网络战士。要了解更多关于击败这一漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

查看资源
查看资源

作者

Jaap Karan Singh

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

编码员征服安全。分享与学习系列 - LDAP注入

发表于2019年1月17日
作者: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是唯一的,可以在记录中加入各种代码,如 "+"、"/"、"="和其他一些。也可以在记录前后插入空格,以确保即使有两个詹姆斯-史密斯在芝加哥帕克维尤办事处的企业会计部工作,他们也会有各自的DN。

应用程序通常使用LDAP来允许用户发送关于特定DNs的查询,例如,当试图找到工资部门的正确联系人来谈论他们支票上的错误时。当搜索查询中没有对用户提供的参数进行验证时,就会发生LDAP注入。在这种情况下,黑客可以操纵良性搜索以绕过认证机制或执行额外的任意查询。这可以欺骗服务器显示不应该被允许的结果,如用户密码,甚至导致应用程序在有或没有有效密码的情况下授予网络内高安全区域的访问权。

为什么LDAP注入如此危险?

LDAP注入的最大危险可能是该协议在全球大多数IP计算机网络中的扩散。它使黑客很容易成为窃取信息的垫脚石,或者提升他们在网络上的权限。没有一个训练有素的黑客会不检查LDAP注入是否可能,所以安全团队必须确保这些漏洞总是被关闭。

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

当一个恶意的用户可以在查询中添加未经过滤的参数,改变搜索的性质并欺骗服务器提供通常不应该提供的信息时,危险就来了。例如,通过添加user=*字符串,攻击者可以获得整个组织的每一个用户的信息,这可能是永远不应该允许的。

对于使用LDAP进行认证的应用程序,问题可能更严重。攻击者可以使用,例如,LDAP查询末尾的(&)字符串来欺骗服务器,使其认为该参数为真。如果一个应用程序使用LDAP来验证密码,通过LDAP注入强迫一个 "真 "参数可能会允许一个未经授权的用户以管理员身份登录网络,即使没有密码。

让LDAP注入在你的网络中成为L-DON'T。

防止LDAP注入的最好方法之一是实施像LINQtoAD这样的东西,或者其他专门用来抵制它的框架。如果一个网络已经有利用LDAP查询的应用程序,这可能是不可能的。然而,即使在这种情况下,每个新的应用程序使用抗注入框架仍然是一个好主意。

现有的使用LDAP的应用程序也可以通过使用白名单验证和输入净化来加强对注入的防范。在可能的情况下,将用户输入限制在一组有限的可信值中。否则,作为LDAP查询的一部分的用户输入应该首先被净化,不要忘记包括GET和POST参数、cookies和HTTP头,因为它们也可以作为攻击的载体。不要编写你自己的函数来执行输入消毒;使用可信的第三方安全重点库或内置框架API来代替。

除了有针对性的修复,良好的计算实践,如分配LDAP查询应用程序在网络上所需的最低权限,也可以帮助。这样一来,如果最坏的情况发生了,LDAP的注入被通过了,损失就会被减轻。

关于LDAP注入的更多信息

要进一步阅读,你可以看看OWASP关于LDAP注入的文章,或者注入预防小抄。你也可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台可以培训网络安全团队成为终极网络战士。要了解更多关于击败这一漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。