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

2019年5月16日发布
作者:Jaap Karan Singh
案例研究

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

2019年5月16日发布
作者:Jaap Karan Singh
查看资源
查看资源

代码注入攻击是最常见的,也是最危险的,许多网站和应用程序都会遇到。它们在复杂程度和所造成的危险方面都有不同,但几乎所有接受用户输入的网站或应用程序都可能受到攻击。事实上,这种攻击几乎是每个网络安全防御者在其职业生涯的某个阶段都需要处理的问题,而且可能会多次处理。

只要一个应用程序或网站接受用户的输入,就会发生代码注入攻击。这可以简单到提供一个搜索功能或要求用户输入他们的身份信息。当一个恶意的用户将代码输入到开放区域而不是正常的文本输入时,攻击就会发生。他们的目标是让服务器误以为输入的是有效代码,然后执行攻击者想要的任何功能。

虽然代码注入攻击极为普遍,但可用来阻止它们的防御措施也很普遍。在这一集里,我们将学习。

  • 它们是如何工作的
  • 为什么它们如此危险
  • 你如何能把防御措施放在适当的位置来阻止他们。

攻击者如何使用代码注入?

虽然关于代码注入攻击的具体细节因所使用的编程语言而变化,但只要允许用户输入数据,任何应用程序或网站都可能受到攻击。SQL、HTML、XML、CSS和其他每一种常见的编程语言都被触发了代码注入攻击。

首先,攻击者必须在应用程序中找到有漏洞的代码,通常是在允许用户自己输入的地方。例如,这段代码采用了PHP eval()函数,并将其传递给用户进行修改,而没有对返回的字符串进行任何形式的验证。

$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;") 。

一个聪明的攻击者可以很容易地将自己的字符串添加到评估函数中,如果他们选择的话,甚至可以执行系统命令。

/index.php?arg=1; system(id)

值得注意的是,虽然代码注入攻击可能涉及发送系统命令,但它们并不局限于只做这些。事实上,对于代码注入攻击,黑客只受限于语言本身的功能。在我们的例子中,攻击者可以对目标系统进行编程,做几乎所有PHP框架允许的事情。

为什么代码注入攻击如此危险?

代码注入攻击有可能非常危险,这取决于攻击者的技能。他们可以做任何编程语言允许的事情,这使他们与应用程序的程序员处于相同的地位。攻击者实际上可以编写自己的应用程序并在目标环境中执行。

即使是不太熟练的攻击者也会有危险。他们可以不编写自己的应用程序或代码串,而是简单地命令目标系统接受并安装预编程的恶意软件。这可能导致网站污损、勒索软件攻击,甚至成为针对网站用户的网络钓鱼活动的基础。

大多数时候,代码注入攻击被用来窃取诸如用户名单和密码之类的东西,或者对一个目标系统进行有价值的侦查,以便进一步破坏。但请注意,一个熟练的编码员几乎可以用代码注入攻击做任何事情,这就是为什么发现并从你的环境中删除每一个潜在的代码注入实例是至关重要的。

不要相信任何人!(至少不是用户)

在消除代码注入攻击漏洞时,首先要看的是要求或允许用户输入的任何地方。在任何情况下,用户的任何输入都是不可信任的。如果你允许用户输入而不进行过滤或检查,你基本上是在邀请攻击者自由地攻击你的系统,甚至是你的网络。

虽然这并不总是可能的,但挫败代码注入攻击的最好方法是防止函数直接执行或解释用户输入。也许可以给用户一个静态选项的选择,而不是自由支配来输入他们自己的查询,应用程序被编程为只接受那些有限的选择为有效。这样做可能并不总是合适的,但在可能的情况下使用它可以在代码注入开始之前消除它们。

对于用户需要自己输入的领域,必须对这些数据进行严格控制。假设所有的东西都是潜在的攻击,这是一个好的开始。在客户端和服务器端执行最小权限政策,如只读用户访问,可以防止大多数代码的执行。

另一个很好的防御措施是对所有用户输入的东西实施应用范围内的过滤器和消毒。开发人员多年来已经意识到了代码注入攻击,而且每一种框架和语言都有成熟的过滤器库。当应用这些过滤器时,要确保不仅仅是在明显的用户输入区域或针对像Get和Post命令这样的常见参数,而且还要针对cookies和HTTP头。

适用于代码注入的修正

从你的环境中删除不必要的用户输入区域,执行最小权限原则,并使用最新的过滤和净化工具来检查和检测潜在的攻击,可以关闭这个危险的漏洞的大门。拥有绝不相信用户输入的心态也会对你的发展有好处。做好这一切,你就能在这种危险的攻击类型面前领先一步。

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

现在就直面代码注入的问题。在我们的游戏化培训平台上接受挑战。 [从这里开始]

查看资源
查看资源

作者

Jaap Karan Singh

想要更多吗?

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

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

查看博客
想要更多吗?

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

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

资源中心

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

2019年5月16日发布
作者:Jaap Karan Singh

代码注入攻击是最常见的,也是最危险的,许多网站和应用程序都会遇到。它们在复杂程度和所造成的危险方面都有不同,但几乎所有接受用户输入的网站或应用程序都可能受到攻击。事实上,这种攻击几乎是每个网络安全防御者在其职业生涯的某个阶段都需要处理的问题,而且可能会多次处理。

只要一个应用程序或网站接受用户的输入,就会发生代码注入攻击。这可以简单到提供一个搜索功能或要求用户输入他们的身份信息。当一个恶意的用户将代码输入到开放区域而不是正常的文本输入时,攻击就会发生。他们的目标是让服务器误以为输入的是有效代码,然后执行攻击者想要的任何功能。

虽然代码注入攻击极为普遍,但可用来阻止它们的防御措施也很普遍。在这一集里,我们将学习。

  • 它们是如何工作的
  • 为什么它们如此危险
  • 你如何能把防御措施放在适当的位置来阻止他们。

攻击者如何使用代码注入?

虽然关于代码注入攻击的具体细节因所使用的编程语言而变化,但只要允许用户输入数据,任何应用程序或网站都可能受到攻击。SQL、HTML、XML、CSS和其他每一种常见的编程语言都被触发了代码注入攻击。

首先,攻击者必须在应用程序中找到有漏洞的代码,通常是在允许用户自己输入的地方。例如,这段代码采用了PHP eval()函数,并将其传递给用户进行修改,而没有对返回的字符串进行任何形式的验证。

$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;") 。

一个聪明的攻击者可以很容易地将自己的字符串添加到评估函数中,如果他们选择的话,甚至可以执行系统命令。

/index.php?arg=1; system(id)

值得注意的是,虽然代码注入攻击可能涉及发送系统命令,但它们并不局限于只做这些。事实上,对于代码注入攻击,黑客只受限于语言本身的功能。在我们的例子中,攻击者可以对目标系统进行编程,做几乎所有PHP框架允许的事情。

为什么代码注入攻击如此危险?

代码注入攻击有可能非常危险,这取决于攻击者的技能。他们可以做任何编程语言允许的事情,这使他们与应用程序的程序员处于相同的地位。攻击者实际上可以编写自己的应用程序并在目标环境中执行。

即使是不太熟练的攻击者也会有危险。他们可以不编写自己的应用程序或代码串,而是简单地命令目标系统接受并安装预编程的恶意软件。这可能导致网站污损、勒索软件攻击,甚至成为针对网站用户的网络钓鱼活动的基础。

大多数时候,代码注入攻击被用来窃取诸如用户名单和密码之类的东西,或者对一个目标系统进行有价值的侦查,以便进一步破坏。但请注意,一个熟练的编码员几乎可以用代码注入攻击做任何事情,这就是为什么发现并从你的环境中删除每一个潜在的代码注入实例是至关重要的。

不要相信任何人!(至少不是用户)

在消除代码注入攻击漏洞时,首先要看的是要求或允许用户输入的任何地方。在任何情况下,用户的任何输入都是不可信任的。如果你允许用户输入而不进行过滤或检查,你基本上是在邀请攻击者自由地攻击你的系统,甚至是你的网络。

虽然这并不总是可能的,但挫败代码注入攻击的最好方法是防止函数直接执行或解释用户输入。也许可以给用户一个静态选项的选择,而不是自由支配来输入他们自己的查询,应用程序被编程为只接受那些有限的选择为有效。这样做可能并不总是合适的,但在可能的情况下使用它可以在代码注入开始之前消除它们。

对于用户需要自己输入的领域,必须对这些数据进行严格控制。假设所有的东西都是潜在的攻击,这是一个好的开始。在客户端和服务器端执行最小权限政策,如只读用户访问,可以防止大多数代码的执行。

另一个很好的防御措施是对所有用户输入的东西实施应用范围内的过滤器和消毒。开发人员多年来已经意识到了代码注入攻击,而且每一种框架和语言都有成熟的过滤器库。当应用这些过滤器时,要确保不仅仅是在明显的用户输入区域或针对像Get和Post命令这样的常见参数,而且还要针对cookies和HTTP头。

适用于代码注入的修正

从你的环境中删除不必要的用户输入区域,执行最小权限原则,并使用最新的过滤和净化工具来检查和检测潜在的攻击,可以关闭这个危险的漏洞的大门。拥有绝不相信用户输入的心态也会对你的发展有好处。做好这一切,你就能在这种危险的攻击类型面前领先一步。

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

现在就直面代码注入的问题。在我们的游戏化培训平台上接受挑战。 [从这里开始]

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

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