前 言
数字化时代,软件安全已成为不可忽视的问题。软件安全不仅关系到数据的保密性、完整性和可用性,还直接影响到企业和个人的声誉和经济利益。本文剖析软件开发中的软件设计、可能存在的安全问题和相应的防护措施,从五个方面对安全软件开发进行简要介绍,主要包括安全软件设计、安全Web应用程序设计、Web应用程序攻击、Web应用程序防护和漏洞挖掘,旨在帮助读者对安全软件开发有初步的认识。
安全软件设计
安全软件设计和开发的重要组成部分包括安全设计原则、软件组件清单、应用程序安全性测试。
开发以安全设计原则制定应用程序真实性和完整性的检验机制,以安全的方式进行软件配置,提高软件安全。
软件组件清单是应用程序开发中使用的开源和商业软件组件的列表。通过组件清单可以更容易地识别和管理与应用程序使用的单个软件组件相关的安全风险,为用户提供更大的网络供应链透明度。
应用程序安全性测试可以帮助软件开发人员识别其应用程序中的漏洞。在此过程中,开发人员应该执行静态应用程序安全性测试和动态应用程序安全性测试,以实现全面的测试覆盖。此外,软件开发人员可以选择使用一个额外的独立方来帮助消除他们在测试自己的应用程序时可能出现的潜在问题。
安全Web应用程序设计
软件开发人员可以利用Web应用程序框架来增强Web应用程序的安全性,同时减少开发时间。
HTTPS (Hypertext Transfer Protocol Secure)是采用TLS (Transport Layer Security)加密的超文本传输协议。在web应用程序中使用HTTPS可以帮助确保与web应用程序的交互是保密的,并且还可以维护这些交互的完整性。
Web应用程序编程接口(Application Programming Interfaces,API)可以促进计算设备之间的数据交换。因此,软件开发人员应该在开发过程中减轻与它们使用相关的常见安全风险,比如减少使用安全性较差的web API,这些API会促进未经授权的数据修改或访问未经授权发布到公共领域的数据。当客户端调用web API时,确保客户端的身份验证和授权可以减少未经授权的数据修改或访问。最后,集中记录和分析web API的使用可以帮助检测恶意行为,并有助于在网络安全事件之后进行调查。
Web应用程序攻击
结构化查询语言(Structured Query Language ,SQL)注入攻击,通过使用动态生成的查询,对数据库内容的机密性、完整性和可用性构成了重大威胁。
SQL注入攻击允许恶意行为者窃取数据库内容、修改数据库内容、删除整个数据库,甚至在某些情况下获得对底层数据库服务器的控制。此外,当来自web应用程序的数据库查询失败时,它们可能会显示有关数据库结构的详细错误信息。这可以被恶意行为者用来进一步定制他们的SQL注入攻击。
Web应用程序防护
Web应用程序安全防护包括输入验证、输出编码、web应用程序防火墙、Web浏览器的控件防护策略和数据库查询集中记录和分析。
输入验证。Web应用程序漏洞大多数是由于缺乏安全的输入处理造成的。因此,在没有进行验证或清理的情况下,web应用程序不信任任何输入,如网站地址及其参数、超文本标记语言(HTML)表单数据、cookie值或请求头。验证和清理包括确保表单字段只包含数字,确保结构化查询语言查询中使用的数据得到正确的清理,以及确保Unicode输入得到适当的处理。
输出编码。输出编码可以减少跨站点脚本和其他内容注入攻击的可能性。特别是,当外部数据源输出给用户时,输出编码非常有用,因为外部数据源可能不受相同级别的输入过滤的约束。最常见的输出编码示例是将潜在危险的HTML字符转换为其编码的等效字符,例如将' < '、' > '和' & '转换为'< '、'> '和'& '。
Web应用程序防火墙。当使用web应用程序防火墙时,应注意其配置,以确保软件开发人员web服务器的互联网协议(Internet Protocol ,IP)地址不会被恶意行为者识别,因为源服务器IP地址的知识可以允许WAF提供的保护被绕过。
Web浏览器的控件防护策略。Web应用程序可以使用基于Web浏览器的控件,如内容安全策略、超文本传输协议严格传输安全来帮助保护自己和用户,这是通过在web应用程序的响应头中设置安全策略来实现的。
数据库查询集中记录和分析。集中记录和分析由用户发起的web应用程序对数据库的所有查询,可以帮助监控数据库的安全状态,检测恶意行为,并有助于网络安全事件后的调查。集中记录和分析web应用程序崩溃和错误消息可以帮助监控web应用程序的安全状态,检测恶意行为并有助于调查网络安全事件。
漏洞挖掘
漏洞挖掘可以帮助软件开发人员提高其产品和服务的安全性,它为安全研究人员和其他公众成员提供了一种以协调的方式负责任地通知他们漏洞的方法。在验证和解决报告的漏洞后,它可以帮助软件开发人员通知其客户在其产品和服务中发现的漏洞,以及应该应用的任何补丁、更新或供应商缓解措施。
漏洞挖掘应包括接收、核实、解决和报告内部、外部各方披露的漏洞。软件开发人员在通过内部应用程序安全测试或外部安全研究人员识别漏洞之后,应该确保及时报告和解决这些漏洞。在这过程中,软件开发人员应该进行根本原因分析,并尽可能地寻求修复整个漏洞类。如果软件开发人员不能通过补丁或更新及时解决漏洞,软件开发人员应该就如何尽可能减少漏洞被利用的可能性、减少漏洞被利用的影响或两者兼而有之提供建议。
小 结
本文主要从安全软件设计、安全Web应用程序设计、Web应用程序攻击、Web应用程序防护和漏洞挖掘五个方面从软件设计、攻击于防护等方面展开对安全软件开发的分析,期望可以对想要初步了解安全软件开发的读者有所帮助。
参考文献
[1] Australian Signals Directorate. Information Security Manual [EB/OL]. June, 2024. https://www.cyber.gov.au/resources-business-and-government/essential-cyber-security/ism.