漫谈软件缺陷与漏洞

简介: 尽管自编码有了一些进展,但现在开发软件主要仍然得靠人工。

软件缺陷

尽管自编码有了一些进展,但现在开发软件主要仍然得靠人工。

然而,人非圣贤,孰能无过?因此,我们可以得到一个合理的推测:由人生产出来的产品和服务,必然包含某种形式的缺陷。所以,软件缺陷不可避免,并且是软件开发过程的固有部分。

软件缺陷是逻辑或配置上的错误,会导致系统产生我们不期望的行为。

软件应用程序中的一些主要和常见缺陷包括业务逻辑错误、复杂性问题、文件处理问题、封装问题、数据验证问题、身份认证和授权错误。

常见弱点枚举 (CWE) 清单描述了常见的软件和硬件弱点,会导致安全方面的相关问题。 该清单对可能存在的软件弱点进行了全面分类。

在业务研发过程中,我们通常通过比较内部质量和风险指标以及对需求、规范、标准和截止日期等方面的遵守程度,来衡量和评估软件质量等级的可接受度。

因此,我们应该可以得到这样一个结论:软件质量是主观的,受业务承诺、高级管理人员的参与情况和组织文化的影响。

软件开发中一个重要的关注点涉及到在预算、进度、范围、质量和安全性这些方面之间保持适当的平衡。一个方面的变化会影响其他方面。虽然都不希望改变计划,但这在软件开发生命周期中并不少见。这些场景反映了组织为了控制预算和进度,不得不在软件质量和安全性方面做出妥协。

软件质量并不总是软件的安全性指标。软件安全性的衡量标准,是在测试期间和生产部署之后发现的漏洞数量。软件漏洞是一类软件缺陷,潜在的攻击者经常利用这些漏洞,绕过授权,访问计算机系统或执行操作。有时,授权的用户也会出于恶意,利用系统中这些未修补的已知漏洞。

这些用户还可能会输入不能通过校验的数据,无意中利用了软件漏洞,从而损害数据完整性和使用这些数据的功能的可靠性。对漏洞的利用会针对下面三个安全支柱中的一个或多个:机密性、完整性和可用性,它们通常称为 CIA 三元组。

机密性指保护数据在未经授权时不会被泄漏;完整性指保护数据在未经授权时不会被修改,以保证数据的真实性;可用性指系统在需要时可供授权用户使用,并拒绝未经授权的用户访问。了解软件错误和漏洞之间的区别,是为创建安全的软件和及时减少缺陷和漏洞的整体战略的关键。

软件漏洞

现在已公布的漏洞利用行为,以及OWASP十大、MITRE常见漏洞和暴露 (CVE) 列表、美国国家漏洞数据库和其他来源提供的见解都在讲软件漏洞。总体而言,这些信息强调了技术创新如何打破了所需的平衡,我们可以根据这些信息采取更有效的措施,在产品部署之前更好地检测和减少软件漏洞。

软件安全瑕疵越来越多,影响最大的因素是我们对软件安全性不思进取的态度、在软件安全性方面缺乏有效的最佳实践、软件开发人员和潜在攻击者之间的知识差异以及不安全的遗留软件。

由于威胁在不断变化,因此,在安全方面与时俱进的态度对于达成软件安全性很有必要。组织在开发和部署软件时,如果对安全的态度原地踏步,有可能会把内部合规跟有效、安全的软件开发周期过程混为一谈;对不断发展的威胁向量认识不足;从而无意中增加客户在各方面的风险。安全策略一成不变,只依赖内部合规来证明开发的软件很安全,这是短视的行为。

随着时间的推移,这种依赖性将导致利益相关者对组织开发安全软件的能力产生盲目的信心,并降低软件开发团队充分审查和应对不断变化的威胁的能力。若我所料不差,这些组织很可能没有有效的补丁管理程序,也没有在产品或解决方案实施过程中集成软件安全方面的设计原则。他们也不太可能添加安全相关场景的测试套件,或将软件安全的最佳实践纳入软件开发流程。

想要研发安全的软件,在研发生命周期中就应该应用软件安全方面的最佳实践。最佳实践涵盖安全设计原则、编码、测试、工具以及针对开发人员和测试人员的培训,有助于在将产品和解决方案部署到生产环境之前主动检测和修复漏洞。在合适的情况下,应用“故障安全”、“最小权限”、“深度防御”和“职责分离”等安全设计原则,可以增强应用程序的安全性。此外,还必须优先对开发人员和测试人员进行软件安全性方面的常规培训。

软件开发人员和潜在攻击者之间的知识差距正在扩大。这种现象的原因不尽相同,其中一些原因是心态、主要关注领域不同和缺乏学习机会。此外,一些软件开发人员对系统妥协持零和态度。这种心态与深度防御的安全设计原则背道而驰,并认为网络和设备漏洞实际上是“天国的钥匙”事件(译注:keys-to-the-kingdom,基督教典故,此处是指通过漏洞获得极大权限是漏洞发现者应得的)。因此,他们认为试图尽量减少妥协是徒劳的。有许多被爆出来的系统数据泄露事件,正是这种心态引发的后果,它们因缺少安全性或分层安全性不足,导致未加密的个人数据被盗。

这种“零和”心态,无意中助长了潜在攻击者通过各种技术深入到网络中进一步破坏生态系统的能力,从而可能获得对包含个人和业务数据的其他系统的访问权限。仔细审查代码是常见的深度防御措施,但一些软件开发人员未能有效利用。这些开发人员完全依赖自动代码扫描工具,而没有审查代码,或者只是粗略地审查代码。使用自动代码扫描工具并仔细审查代码才是一种有效的深度防御策略,可以在解决方案或产品部署到生产环境之前检测出漏洞。

软件开发人员和潜在攻击者有不同的优先级和重点领域。软件开发人员的重点领域包括实现业务逻辑;修复软件缺陷以满足质量要求;确保他们实施的功能或解决方案满足内部实用性、可用性和性能指标或服务水平协议 (SLA) 中的指标。显而易见,软件开发人员会在其主要关注领域获得专业知识。而潜在攻击者主要关注领域包括系统和软件行为分析,他们不断磨练技能以增加收入、满足好奇心、实现工具集、侦察和探索。所以同样地,潜在攻击者在其关注领域里也能获得专业知识。

潜在攻击者和软件开发人员之间的技能差异,让组织需要在软件安全方面持续地对软件开发人员进行培训。软件开发人员还必须了解当前的和不断拓展的攻击向量,并了解软件攻击面的概念,以避免在软件实现和修改过程中误入雷区。此外,软件开发人员必须转变观念,将软件安全原则和最佳实践纳入到软件开发生命周期中,它们与功能实现具有同等优先级。

在开发现在被称为“遗留”软件的那些年里,功能实现通常有最高优先级。对于许多软件供应商而言,软件安全跟功能的优先级不同,而且不是软件开发流程的一部分。在这种优先级安排以及威胁形势不断增长的长期影响下,其结果就是现在“遗留”软件中那些漏洞会被人发现和利用。为什么优先考虑功能实现,原因各不相同。

竞争、上市时间问题以及对软件安全缺乏关注,是组织不能遵循软件安全最佳实践和维持软件安全开发流程的主要原因。某些组织为了更好地保护“遗留”软件,给它们分配了资金和资源,在所需功能的实现上做出牺牲;并且由于持续关注在“遗留”软件的保护上,可能会丧失潜在的竞争优势。而其他组织通过检查软件漏洞来主动评估其“遗留”系统。尽管如此,在代码库被完全修补、升级到最新最安全或被废弃之前,遗留软件都将是漏洞利用方面的沃土。

结论

软件是潜在攻击者最常用的攻击媒介之一。因此,许多组织意识到,为了实现和维护安全的软件开发流程和基础架构,尽职尽责的调查非常重要。这些组织独立而又协同地为推进网络和软件安全领域的防御策略做出贡献。企业贡献包括:创建描述网络攻击阶段的安全模型和框架(例如洛克希德马丁公司的网络杀伤链),从而使组织能够规划相应的缓解措施;设立赏金计划,奖励查找漏洞,让安全研究人员和其他人可以因发现可利用的软件缺陷而挣到钱;对开源网络安全工具集的贡献;编写应用程序安全白皮书,描述最佳实践并促进软件安全向开发-安全-运维(DevSecOps)自然过渡。

不断发展的软件攻击向量使得我们不可能在生产部署之前消除所有软件漏洞。尽管如此,软件开发人员还是必须持续学习软件安全开发。也有人正关注于使用机器学习来检测软件漏洞,这将有助于更快、更有效地检测软件漏洞。然而,这种在专业领域采用机器学习的结果是否符合预期,目前还不确定。与此同时,各组织还是必须继续在同一战线上持续投入,共同抗衡潜在攻击者。

作者简介

Cynthia Freeney 目前就职于一家专门从事生物医学人工智能和自然语言处理技术的组织,担任软件项目经理和安全官的双重角色。她拥有 Scrum Master 认证和 ISC2 认证软件安全生命周期专家(CSSLP)认证,并且是网络安全的狂热爱好者。

原文链接:

https://www.infoq.com/articles/emerging-software-vulnerabilities/

了解更多软件开发与相关领域知识,点击访问 InfoQ 官网:https://www.infoq.cn/,获取更多精彩内容!

目录
相关文章
|
2月前
|
设计模式 测试技术
什么是缺陷预防和缺陷改进?
什么是缺陷预防和缺陷改进?
|
7月前
|
安全
漏洞扫描和漏洞评估
漏洞扫描和漏洞评估
134 0
|
11月前
|
缓存 安全 网络安全
心脏滴血漏洞复现(CVE-2014-0160)
心脏滴血漏洞复现(CVE-2014-0160)
155 0
|
12月前
|
Web App开发 SQL 安全
五种类型的渗透测试使潜在漏洞为零
一个渗透测试或笔测试是软件或硬件系统,寻求有意计划的攻击,以揭露可能违反系统的完整性,并最终损害用户的机密数据固有的安全漏洞。在这篇文章中,我们将讨论不同类型的渗透测试,以便您了解要覆盖的内容、估算工作量、高效执行。
117 1
|
人工智能 供应链 监控
【墨菲安全漏洞预警】livehelperchat < 3.9.6 存在 SSRF 漏洞
【墨菲安全漏洞预警】livehelperchat < 3.9.6 存在 SSRF 漏洞
【墨菲安全漏洞预警】livehelperchat < 3.9.6 存在 SSRF 漏洞
|
安全 网络协议 测试技术
如何对网站进行漏洞安全测试服务
进一步提高平台网站的安全系数,保证客户信息、输入数据、传送数据和有关数据在网站服务器实际操作中的安全系数。企业网站信息系统的安全测试范围实际有以下几条:服务器程序的代码经常组成网络安全问题,这一些安全漏洞又经常被网络黑客使用。因此还需要检测都没有通过认证,就不可以在服务器程序置放和编写代码的现象。安全系数在网站建设全过程中尤为重要,关联到企业网站将来发展的安全防护,不容忽视,也可以找专业的网站安全公司对网站进行安全测试,国内SINE安全,绿盟,深信服,启明星辰,鹰盾安全都是比较有名的。
99 0
|
安全 Linux 网络安全
【网络安全】复现CVE-2019-14287漏洞
Sudo的全称是"superuserdo”,它是Linux系统管理指令,允许用户在不需要切换环境的前提下,以其它用户的权限运行应用程序或命令,通常是以root用户身份运行命令,以减少root用户的登录和管理时间,同时提高安全性,当在Linux操作系统上执行命令时,只有得到许可或者知道root密码,普通用户才可以使用sudo命令以root身份执行命令. 个人理解:(直白点讲就是,如果你入侵了他人的主机,可以利用该漏洞,进行权限升级,不用切换root,因为切换root的时候需要输入密码,用该漏洞可以跳过该步骤,获得权限)
157 0
【网络安全】复现CVE-2019-14287漏洞
|
安全 前端开发 JavaScript
渗透测试 越权漏洞的检测与修复
渗透测试在网站,APP刚上线之前是一定要做的一项安全服务,提前检测网站,APP存在的漏洞以及安全隐患,避免在后期出现漏洞,给网站APP运营者带来重大经济损失,很多客户找到我们SINE安全公司做渗透测试服务的同时,我们积累了十多年的漏洞检测经验,对客户的网站各项功能以及APP进行全面的安全检测,下面我们就对渗透测试中的一些知识点跟大家科普一下:
568 0
渗透测试 越权漏洞的检测与修复
|
SQL 安全 测试技术
渗透测试网站漏洞寻找过程
渗透测试系统漏洞如何找到:在信息收集的根本上找到目标软件系统的系统漏洞。系统漏洞找到我来为大伙儿梳理了4个层面:框架结构模块透明化系统漏洞:依据所APP的的框架结构模块版本号状况,检索透明化系统漏洞认证payload,根据人工或是软件的方法认证系统漏洞。通常这类系统漏洞,存有全部都是许多非常大的系统漏洞。过去系统漏洞:像例如xss\sql注入\ssrf等过去的信息安全系统漏洞,这部分可以运用人工或是软件开展鉴别,就考察大伙儿应对系统漏洞的熟练掌握水平了。动态口令系统漏洞:系统对登录界面点采取动态口令攻击。代码审计0day:在开源代码或未开源代码的状况下,获得目标APP系统源码,开展代码审计。
152 0
渗透测试网站漏洞寻找过程
|
安全 前端开发 关系型数据库
网站漏洞修复之逻辑漏洞修补的方法
在网站安全的日常安全检测当中,我们SINE安全公司发现网站的逻辑漏洞占比也是很高的,前段时间某酒店网站被爆出存在高危的逻辑漏洞,该漏洞导致酒店的几亿客户的信息遭泄露,包括手机号,姓名,地址都被泄露,后续带来的损失很大,最近几年用户信息泄露的事件时有发生,给很多企业,酒店都上了一堂生动的安全课。关于网站逻辑漏洞的总结,今天跟大家详细讲解一下。
451 0
网站漏洞修复之逻辑漏洞修补的方法