漏洞从哪里来?
漏洞从每一个你想得到和想不到的地方来。
本系列文章拟从“设计缺陷、编程习惯、认知局限、体系痼疾(制度化)、视而不见(风险偏好)、引狼入室(供应链)、乌合之众(你没错,我没错,咱俩在一起就是错)、技术进步”等8个方面浅析各种导致安全漏洞的直接原因。姑且称为“八方来洞”。
咱们先约定一个概念:所有的漏洞,都是软件的安全缺陷。
这样把安全漏洞问题纳入软件质量问题考虑,方便后续分析。
下面用大家熟知的两种软件工程模型(瀑布模型、敏捷开发)来看看软件安全漏洞都在哪里产生。
左侧每个环节和底部的编码环节都有可能成为安全漏洞的来源。相信这一点也和大家的认知基本相符。
图:敏捷开发模型
在敏捷开发模型下,安全漏洞则可能来自每一轮冲刺(Sprint)。
虽然根据敏捷开发"持续交付可工作软件"的核心原则,每一轮冲刺都应确认发现并排除漏洞,但实际上能够做到这点的团队少之又少。
为了看得更清楚,我们需要抽身出来,看看软件开发的“环境”因素。
人:开发人员、程序员、软件工程师、系统分析人员、项目管理人员、产品管理人员、需求方、用户、监管方、甲方领导…… 组织:所有的人都属于或大或小的组织,即使是所谓的“独立开发人员”也不例外。 管理制度与流程:每个组织都有成文或者不成文的管理制度与流程。包括为保障软件质量而设计的管理制度和流程。这些制度与流程一方面确实能够起到保障软件质量的作用;另一方面,制度与流程的副作用也会导致安全漏洞不能及时发现和纠正。特别是组织中的人员普遍倾向于僵化地执行流程,而非总是站在“质量”这个更大的目标,遵守更普适的质量原则去积极发现并解决问题。 技术与工具:技术与工具既起到了支撑管理、强化技能的作用,确实能够有效地提升软件质量;另一方面,技术与工具也会削弱使用者的思考动力,遏制了发现问题的原动力。
在开发软件时,我们还需要考虑两种常见的安全漏洞来源:一是静态组合缺陷;二是动态运行时错误。
1. 静态组合缺陷导致软件出现安全漏洞
假设你正在使用两个流行的开源库开发一个Web应用程序——一个是用于处理文件上传的库(Apache Commons FileUpload),另一个是用于生成PDF报告的库(iText)。虽然这两个库应用广泛而且相对安全,但两者搭配使用时,可能会导致一种特定场景下的安全漏洞。由于文件上传库对上传文件类型的验证不够严格,而PDF生成功能没有充分检查潜在恶意内容,攻击者有机会通过上传特制的恶意文件执行跨站脚本(XSS)或远程代码(RCE)。这就是不同组件搭配使用时存在的“空隙”导致的安全漏洞。
2. 动态运行时错误导致软件出现安全漏洞
CVE-2022-22965: Spring Framework RCE via Data Binding on JDK 9+就是一个比较典型的例子。使用Spring Framework开发的应用,运行环境是JDK 8,就不受这个漏洞影响;运行环境是JDK 9或者更高的版本,就受这个漏洞影响。
正是这种“八方来洞”的现实导致一个又一个安全漏洞经常以一种“意料之外、情理之中”的姿态蛮横地盘踞在软件中,让数字空间充斥着陷阱、沼泽、悬崖、深渊等危地,也不乏浅坑、沙眼、裂缝等安全隐患。
- End -
下期分享
02 漏洞从哪里来?——设计缺陷
“设计缺陷”可能是安全漏洞最主要的来源。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...