新知一下
海量新知
6 5 1 6 1 1 2

专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

国舜股份 | 致力于打造世界一流网络安全企业 2022/09/23 17:33

(一)开发安全能力的理解

开发安全能力简单的理解,就是在必要的情况下,具备开发出一个安全的系统的能力。实践角度说,就是能完成你提的安全需求。

看起来是简单的要求,完成并不容易。一方面当下开发团队对信息安全、对常见的攻防并不了解,缺少基础性的知识,严重影响他们响应安全要求;另一方面,当下的IT技术变化很快,信息安全的攻防变化也很快,开发团队要不断适应新的攻防变化是非常困难的,所以,必须下大力气提升开发安全能力。

开发安全能力的提升主要是需求阶段、设计阶段、编码阶段;测试阶段一般是专业安全团队来实施;其他阶段都是这三个阶段的扩展。

(二)需求阶段

开发安全能力在需求阶段体现在安全需求理解和安全需求分析。

安全需求理解取决于两个关键点:

(1) 需求的描述形式:

以下是两种描述形式的对比:

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

看起来,两个需求都容易理解,但可能操作型安全需求才是真正理解,能够真正知道开发团队的后续安全设计、编码等动作。

 

(2)背景知识的理解

 

比如你要防SQL注入,你要对SQL注入理解充分,自然能够更好地理解,也能够更准确地实现。

当你给开发团队介绍SQL注入时,你可以选择介绍:

“SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。”

 

也可以选择附上资料——

 

SQL 注入

 概述

这一攻击利用目标软件基于用户输入构建SQL语句的特性。攻击者精心编辑输入的字符串,以便当目标软件根据输入构建SQL语句时,生成的结果语句会执行超出应用程序预期的事件。SQL注入源于应用程序对输入有效性的验证失败。当包含了SQL语法的经特殊编辑的用户可控输入未被正确验证有效性成为SQL查询语句的一部分时,就有可能通过在软件设计时从未被想到过的方式从数据库收集信息了。根据数据库和应用程序设计的不同,也有可能利用注入让数据库根据攻击者的选择执行系统相关的命令。SQL注入允许攻击者直接与数据库进行通讯,因而完全绕过应用程序。成功的注入可以引起信息泄露,还有能力增加或修改数据库中的数据。为了成功注入SQL语句并从数据库获取信息,攻击者:

 攻击执行顺序

Explore探索阶段

探索应用:

攻击者首先为应用程序暴露的功能列一个清单。

每一步攻击所用的技术

 新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

结果新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设Experiment 实验阶段

确定会受注入影响的用户可控输入点:确定会受注入影响的用户可控输入点。对于每个能受到攻击者影响的用户可控输入点都是存在SQL注入漏洞的,尝试注入对SQL来说存在特殊意义的字符(比如单引号(‘)、双引号(“)、双连字符(--)、圆括号“(”和圆括号“)”).目标是使用非法语法创建SQL查询语句。每一步攻击所用的技术

 新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

 指标

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

结果

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

安全控制措施

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

实验并尝试利用SQL注入漏洞:在确定一处指定输入点能够受到SQL注入的影响后,对背后的查询语句结构做出假设。迭代地尝试增加逻辑到查询语句中提取数据库的信息,或修改、删除数据库中的信息。每一步攻击所用的技术新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设指标新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

结果

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

 

 执行攻击的前提条件

应用程序使用SQL查询语句存储、检索或修改数据。应用程序未能很好地执行对用户可控输入的有效性验证,使其成为了SQL查询语句的一部分。

 

严重程度

 

被利用的可能性

可能性:非常高

 

攻击方法

·注入

 

实例

描述:

在PHP-Nuke的7.9及以前版本中,攻击者可以通过SQL注入成功访问并修改数据,包括敏感内容如用户名和密码的哈希,并沦陷应用。其SQL注入保护机制使用了黑名单方法对输入的有效性进行验证。但是,由于黑名单设置得不合理,仍然可以注入如"foo'/**/UNION"或"foo UNION/**/"这样的内容绕过有效性验证并收集数据库的敏感信息。相关漏洞CVE-2006-5525

 

 攻击者所需具备的知识或技能

知识或技能等级:低通常对于有基础的SQL知识的人来说,执行SQL注入非常简单。但是在某些情况下,需要拥有对于部署的数据库的特定知识。

 

所需资源

 

 探测技术

攻击者尝试注入能引发SQL错误的字符,比如单引号(‘)或关键词如"UNION"或"OR"。如果将这样的内容注入到输入点引起了一个SQL错误,并且错误信息未被过滤,攻击者就可以开始确认输入有效性验证机制的本质和使用的SQL查询语句的结构了。一个典型的引发错误的注入例子可能会是这样:

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

拥有有效的设计文档和代码,攻击者可以确定是否所有的用户可控输入都被验证了有效性,以及确定这些输入所进入的SQL查询语句的结构。

 

 攻击发生的告警指示

数据库生成了过多的错误或无效信息,特别是一些由畸形的输入引发的信息。

 解决、缓解方案

使用强的输入有效性验证—所有用户可控输入都必须被验证有效性并过滤非法字符,包括SQL查询语句的内容。关键词如UNION, SELECT或INSERT必须被过滤,单引号(')或表示SQL注释的(--)根据所在上下文环境进行处理。

使用参数化的查询语句或存储过程—对语句的参数化使得输入被限制进某些域,比如字符串型或整型,任何超出此范围的输入都被认为是无效的并且会生成查询失败。要注意的是,如果最终的查询语句是动态生成的,即使使用了存储过程,SQL注入仍然有可能发生。使用定制的错误页面—攻击者可能会从描述性的错误消息中收集有关查询语句本质的信息。输入有效性验证必须与定制的错误页面同时使用,确保在提示错误的时候不会泄露有关数据库或应用程序的信息。

 攻击动机和影响

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

 

 注入向量

被用作非参数化的SQL查询语句一部分的用户可控输入:这可能包括在网页表单的输入字段、在用户可以访问到的文件中的数据甚至命令行的参数(形参)。

 攻击负载

意图泄露信息或运行恶意代码的SQL语句

 生效区域

后台数据库

 攻击负载生效会带来的影响

当恶意的SQL内容被数据库执行后,会使得任意查询被执行,引起信息泄露、未授权访问、权限提升和可能的系统沦陷。

 相关漏洞

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

 

 相关攻击模式

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

 

 相关的安全性要求

在用户可控输入中的特殊字符必须在被使用前进行转义。仅使用参数化的存储过程查询数据库。对参数化的存储过程中的输入数据必须重新验证其有效性。必须使用定制的错误页面处理异常,这样就不会泄露任何有关应用程序结构或数据库的信息。

 相关安全原则

·宁可不信原则·安全地失败·深度防御原则

 相关指南

·对于内部组件,永远不要使用用户的输入作为指令的一部分·安全地处理所有错误

 目的

·渗透·漏洞利用

 对信息安全三元素(机密性、完整性、可用性)的影响

 新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

 

影响范围

新知达人, 专栏特辑 | 开发安全铁三角纵横谈(十一)开发安全能力建设

 

 参考文献

[R.66.1] [REF-3] "Common Weakness Enumeration (CWE)". CWE-89 - SQL Injection. Draft. The MITRE Corporation. 2007. <http://cwe.mitre.org/data/definitions/89.html>.[R.66.2] [REF-3] "Common Weakness Enumeration (CWE)". CWE-20 - Input Validation. Draft. The MITRE Corporation. 2007. <http://cwe.mitre.org/data/definitions/20.html>.[R.66.3] [REF-3] "Common Weakness Enumeration (CWE)". CWE-390 - Improper Error Handling. Draft. The MITRE Corporation. 2007. <http://cwe.mitre.org/data/definitions/390.html>

显然,后一种方式对开发团队的支持要好得多。后一种方式所呈现的内容,国舜叫威胁资源库。把所有的攻击方式、威胁模式总结起来,作为资源支持那些爱学习的开发团队,对提升整体开发能力都是很有帮助的。

通过以上分析,要提升开发团队的安全需求理解能力,你需要帮开发团队整理一个威胁资源库,还需要保证你的安全需求向操作型靠拢。

 

在安全需求分析这个阶段,你让开发团队去完成一个完整的安全需求分析是不现实的,在安全团队整理的成型、分类的安全需求或者安全需求基线(参考前期需求阶段的规),开发团队去确认是否有必要、是否合理,这是他们能胜任的。因此安全需求分析阶段的能力提升关键,是安全团队能否把安全需求库和安全需求基线整理好、整理充分。

更多“开发安全”相关内容

更多“开发安全”相关内容

新知精选

更多新知精选