关于安全:打造安全无忧软件应用的十大最佳实践

2次阅读

共计 3669 个字符,预计需要花费 10 分钟才能阅读完成。

平安无忧的软件开发最佳实际切实是很有必要,因为平安危险无处不在。在网络攻击流行的时代,它们可能影响到每个人,包含集体、公司和政府。因而,确保软件开发的安全性至关重要。

本篇文章将解释了什么是平安的软件,如何确保安全性,以及为您提供平安软件开发的最佳实际。

不平安的软件开发会产生什么?

网络攻击占据了新闻的头条地位。恶意软件 Duqu 和 Stuxnet 在 2010 年和 2011 年引起了宽泛关注。从那个时候开始,网络攻击变得越来越重大。WannaCry 在 2017 年攻打了包含英国国家医疗服务体系在内的重要零碎。GitHub 在 2018 年初蒙受了一次拒绝服务攻打。而 2021 年的 Log4j 破绽至今仍在被利用(咱们在 2021 年也公布了 Log4j 破绽解读文章,点此浏览)……

嵌入式零碎也无奈幸免于难

嵌入式零碎越来越容易受到危险的威逼。这曾经导致了医疗设施和汽车行业的召回事件。而且,汽车行业尤其容易受到网络威逼。

这是一个超大的问题。

针对嵌入式零碎的网络攻击可能会造成对以下方面的大规模侵害:

  • 要害基础设施,包含发电、石油和天然气精炼;
  • 电信;
  • 交通运输;
  • 水务和废物控制系统。

平安软件开发的五大要害危险因素

  1. 相互依赖的零碎使软件成为最单薄的环节;
  2. 软件规模和复杂性使测试变得复杂;
  3. 外包软件供应链减少了危险裸露;
  4. 简单的攻打可能找到更多危险;
  5. 重复使用旧版软件。

当今应用程序平安(AppSec)畛域的常见问题

现在,各种类型的软件应用程序被开发用于嵌入式零碎、挪动设施、电动汽车、银行和交易服务。然而,人们经常疏忽的是,许多应用程序和数字体验的设计和运行都没有安全措施,如果平安不是首要思考的话,可能会带来危险。

即便优先思考安全性并施行了平安的软件开发实际,公司依然可能被攻打搞得措手不及。当今应用程序平安环境中的常见问题包含:

  • 第三方库和框架的破绽:许多应用程序依赖于第三方库和框架,如果不定期更新,就会在应用程序中引入破绽;
  • 注入攻打:注入攻打包含攻击者向应用程序的输出字段(如登录表单或搜寻框)中注入恶意代码或命令,以取得对应用程序或其根底数据库的未经受权的拜访;
  • 跨站脚本攻打(XSS):XSS 攻打包含攻击者向网站或 Web 应用程序中注入恶意代码,而后在用户的浏览器中执行,可能窃取敏感数据或代表用户执行未经受权的操作;
  • 不平安的认证和受权:设计不良或施行不当的身份验证和受权机制能够让攻击者绕过安全控制,拜访敏感数据或性能;
  • 日志记录和监控有余:如果没有足够的日志和监控,就很难发现和应答安全事件或确定平安问题的根本原因;
  • 挪动应用程序平安:随着挪动设施的遍及,确保挪动应用程序的平安变得越来越重要。挪动利用可能会受到各种攻打的影响,包含针对设施自身或应用程序后盾服务器的攻打;
  • 云平安:随着云计算的广泛应用,确保基于云应用程序的平安已变得至关重要。基于云的应用程序可能会受到各种攻打的影响,包含针对云基础设施、应用程序自身或存储在云中的数据的攻打。

能够利用一种或多种平安编码合规措施,如 OWASP Top 10、CWE Top 25 和 CERT 规定集,来检测上述列表中的我的项目,以实现平安软件开发。

SAST 工具如何帮忙确保安全软件工程的最佳实际?

越来越多的企业开始投资软件平安开发和网络安全技术,其中包含像 Klocwork 这样的 SAST 工具。只管企业在网络安全覆盖范围方面曾经有了很大的停顿,但大部分工作还是集中在预先增强安全性和改良威逼检测上。

当初曾经有越来越多人意识到 SAST 的重要性,并在施行平安的开发过程中加以强制执行。

仅仅利用新的平安技术是不够的。软件自身须要填补危险破绽。因为如果窗户是开着的,那么在门上装再坚硬的锁也没用。

为什么保障软件开发的平安很艰难?

安全软件的优先级不够

对于大多数开发人员来说,软件开发中的安全性并不是一个足够重要的优先事项。

有一个陈词滥调的观点,即您须要的是:

  • 疾速进入市场;
  • 包含打算的所有性能;
  • 放弃高水平的品质。

然而,您只能在这三者中抉择两者。尽管品质也经常被拿进去探讨是否能够摈弃,但通常被摈弃的是安全性。

性能和截止日期推动着开发的查看清单。而软件的安全性通常不是一个个性或要求,因而很少被关注到。

品质并不一定能保障平安

进步软件品质和完整性能够缩小缺点导致的安全漏洞。然而,质量保证(QA)通常不会思考黑客攻击。

嵌入式开发中的流动部件太多

嵌入式零碎宏大而简单。

包含新代码、遗留代码以及连贯组件。而且,嵌入式零碎在各种操作系统上运行。

有多个开发团队独特参加软件开发,并且散布在世界各地。

更不用说确保软件失常运行曾经足够艰难了,确保软件平安只会更艰难。

不足足够的平安培训

遗憾的是,许多参加软件开发的人不晓得如何分别平安问题。他们可能没有意识到软件需要对安全性的影响,或者他们意识不到不足平安需要会带来什么影响。

而且,他们不晓得安全性是如何从以下方面影响软件的:

  • 建模
  • 架构
  • 设计
  • 实现
  • 测试
  • 筹备公布和部署

因而,开发人员可能无奈设计平安的软件,平安的需要可能缺失,他们可能不理解谬误如何演变成了安全漏洞。

没有专门负责平安的团队

大多数的嵌入式开发团队都没有专门负责软件平安的岗位。相同,他们依附各种角色(从产品治理到开发再到 QA)来确保软件平安,然而不肯定有用。

平安软件开发的十个最佳实际

在理解到有可能存在上述一个或多个常见的 AppSec 问题的状况下,您无妨问问本人:” 在代码开发、实际、流程或方法学中,有哪些无效的办法能够确保安全?”

古代的观点认为,在软件开发过程中要无意识地思考和施行安全措施,以确保软件的安全性。

即便您能够应用最佳的测试工具链来扫描和剖析软件,在软件开发过程中也应该采纳各种实际和办法,能力在软件开发生命周期的每个阶段辨认和缩小潜在的平安威逼和弱点。

以下是平安软件开发的十个最佳实际:

1. 威逼建模

威逼建模包含剖析软件体系结构,并辨认潜在的平安威逼和破绽。这有助于在设计时就思考到软件的安全性,并施行必要的安全控制。

  1. 平安编码

开发人员必须恪守平安编码实际,例如输出验证、平安数据存储和平安通信协议。平安编码实际有助于避免常见的安全漏洞,例如 SQL 注入、跨站点脚本和缓冲区溢出攻打等。

  1. 代码审查

代码审查包含审查开发人员编写的代码,辨认潜在的平安问题。这有助于在开发过程的晚期检测和纠正安全漏洞。

  1. 测试

定期进行平安测试,包含浸透测试和破绽扫描,能够帮忙辨认软件中潜在的安全漏洞,有助于在部署软件之前修复平安问题。

  1. 平安配置管理

配置管理能确保软件系统以平安的配置部署。这包含了配置访问控制、网络设置和其余与平安相干的设置,升高未经受权的拜访危险。

  1. 访问控制

访问控制确保只有受权的人员能力拜访软件系统。这包含施行用户身份验证和受权机制,以及基于角色的访问控制。

  1. 定期更新和补丁

定期更新软件和补丁能够帮忙解决安全漏洞,并升高安全漏洞的危险。放弃零碎中应用的所有软件组件的安全补丁和更新十分重要。

  1. 平安培训

参加软件开发过程的开发人员和其余人员都应该定期的承受平安培训,确保他们理解平安的重要性和平安软件开发的最佳实际。

  1. 事件响应

企业应制订明确定义的事件响应打算,来应答安全事件。这包含辨认潜在的安全事件、管制安全事件的影响,以及从安全事件中复原。

  1. 继续监控

继续监控有助于实时检测和应答安全事件。这包含监控系统日志、网络流量和用户行为,以寻找任何安全漏洞的形迹。

通过遵循这些最佳实际,企业能够开发安全可靠的软件应用程序,抵挡潜在的平安威逼和破绽。在软件开发的每个阶段都应该优先思考平安,以避免未经受权的拜访并爱护敏感数据。

应用动态代码剖析工具来确保安全的软件开发

动态代码剖析可能为平安的开发过程提供反对,因为半数以上的平安缺点是在源代码级别引入的。因而,在编写代码后尽早找到并修复谬误十分要害。

然而,许多开发人员不足平安培训。而且,在代码审查期间辨认平安问题可能很艰难,甚至是不可能的事。平安谬误可能是很奥妙的,即便是训练有素的开发人员也很容易漠视它。

动态代码剖析工具能够帮忙您补救这些差距,因为它们会标记出安全漏洞并减速代码审查。

应用动态剖析,开发人员能够辨认以下谬误:

  • 内存透露
  • 违规拜访
  • 算数谬误
  • 数组和字符串溢出

这能够最大限度地进步代码品质,并最小化谬误对最终产品和我的项目进度的影响。

此外,动态代码剖析工具,例如 Helix QAC(用于 C / C++)和 Klocwork(用于 C,C++,C#,Java,JavaScript,Python 和 Kotlin),能够用于恪守 CERT C 或 MISRA 编码规定。它们还能更快辨认 CWE 编码谬误。

作者简介:

**Dzuy Tran
Klocwork 和 Helix QAC 高级解决方案架构师,Perforce 公司 **

DzuyTran 在硬件和软件嵌入式零碎,RTOS,挪动应用程序和企业零碎的设计和开发方面有超过 30 年的教训。当客户遇到技术问题时,他会帮忙他们,帮助进行概念验证,并演示动态代码剖析工具,并帮忙领导客户进行 DevOps 施行流程和继续集成部署。Dzuy 领有国立理工大学计算机科学和计算机工程硕士学位。
文章起源:http://bit.ly/41rdMPn

正文完
 0