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

news2024/11/25 1:32:17

安全无忧的软件开发最佳实践实在是很有必要,因为安全风险无处不在。在网络攻击盛行的时代,它们可能影响到每个人,包括个人、公司和政府。因此,确保软件开发的安全性至关重要。

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

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

网络攻击占据了新闻的头条位置。恶意软件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.威胁建模

威胁建模包括分析软件体系结构,并识别潜在的安全威胁和漏洞。这有助于在设计时就考虑到软件的安全性,并实施必要的安全控制。

2. 安全编码

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

3. 代码审查

代码审查包括审查开发人员编写的代码,识别潜在的安全问题。这有助于在开发过程的早期检测和纠正安全漏洞。

4. 测试

定期进行安全测试,包括渗透测试和漏洞扫描,可以帮助识别软件中潜在的安全漏洞,有助于在部署软件之前修复安全问题。

5. 安全配置管理

配置管理能确保软件系统以安全的配置部署。这包括了配置访问控制、网络设置和其他与安全相关的设置,降低未经授权的访问风险。

6. 访问控制

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

7. 定期更新和补丁

定期更新软件和补丁可以帮助解决安全漏洞,并降低安全漏洞的风险。保持系统中使用的所有软件组件的安全补丁和更新非常重要。

8. 安全培训

参与软件开发过程的开发人员和其他人员都应该定期的接受安全培训,确保他们了解安全的重要性和安全软件开发的最佳实践。

9. 事件响应

企业应制定明确定义的事件响应计划,来应对安全事件。这包括识别潜在的安全事件、控制安全事件的影响,以及从安全事件中恢复。

10. 持续监控

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

通过遵循这些最佳实践,企业可以开发安全可靠的软件应用程序,抵御潜在的安全威胁和漏洞。在软件开发的每个阶段都应该优先考虑安全,以防止未经授权的访问并保护敏感数据。

使用静态代码分析工具来确保安全的软件开发

静态代码分析能够为安全的开发过程提供支持,因为半数以上的安全缺陷是在源代码级别引入的。因此,在编写代码后尽早找到并修复错误非常关键。

然而,许多开发人员缺乏安全培训。而且,在代码审查期间识别安全问题可能很困难,甚至是不可能的事。安全错误可能是很微妙的,即使是训练有素的开发人员也很容易忽视它。

静态代码分析工具可以帮助您弥补这些差距,因为它们会标记出安全漏洞并加速代码审查。

使用静态分析,开发人员可以识别以下错误:

  • 内存泄漏
  • 违规访问
  • 算数错误
  • 数组和字符串溢出

这可以最大限度地提高代码质量,并最小化错误对最终产品和项目进度的影响。

此外,静态代码分析工具,例如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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你了解C语言中的柔性数组吗?

本篇博客主要讲解C99中的新语法:柔性数组。 1.什么是柔性数组? 柔性数组就是大小可以变化的数组。 注意跟C99中的变长数组区分开来,变长数组指的是可以使用变量来指定大小,并且不能初始化的数组,比如: i…

实例方法、类方法、静态方法、实例属性、类属性

背景:今天在复习类相关知识的时候,突然想到这几种类型的方法的区别和用法,感觉有点模棱两可,于是总结一下,加深记忆。 定义:想要区别和理解几种方法,首先要定义一个类,要在类中加深…

mysql如何修改时区

mysql 里CST时区的坑 一、 问题简述 mysql里CST时区是个非常坑的概念,因为在mysql里CST既表示中国也表示美国的时区。但是在JDK代码里,CST这个字符串被理解为CenTral Standard Time(USA)(GMT-6)&#xff…

java框架都有哪些

Java框架是对Java2中的一些基本概念进行抽象,封装成能被开发者使用的类库,使之能快速开发应用程序。它让开发者能够专注于业务逻辑而不是实现细节。可以说, Java框架是 Java开发中的重要组成部分,它极大地方便了开发者。下面为大家…

腾讯云GPU服务器NVIDIA P40 GPU、P4、T4和GPU自由卡详解

腾讯云GPU云服务器,GPU云服务器实例可选GN8机型、GN6S机型、GN7机型等规格,搭载 NVIDIA P40 GPU,最长可3年,云服务器吧来详细说下腾讯云GPU云服务器: 目录 腾讯云GPU云服务器 腾讯云GPU自由卡 腾讯云GPU云服务器 腾…

选品趋势分析 | 2023开斋节将至,穆斯林时尚在TIKTOK上增长势头正劲!

2023年Q1 穆斯林时尚的销售额环比2022年Q4 暴涨153%,领跑TikTok电商大盘,成为2023年Q1的超级黑马品类。加之开斋节临近,人民陆续开始为庆祝开斋节作采购准备,购物需求相应激增,其中,穆斯林群体会在开斋节的…

GELU激活函数

GELU是一种常见的激活函数,全称为“Gaussian Error Linear Unit”, 作为2020年提出的优秀激活函数,越来越多的引起了人们的注意。 GELU (Gaussian Error Linear Units) 是一种基于高斯误差函数的激活函数,相较于 ReLU 等激活函数&#xff0c…

java版工程项目管理系统-功能清单 图文解析

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…

MySQL事务的四大特性及事务的隔离级别

什么是事务?Transaction 常言道:能不麻烦就不麻烦,能简单化就简单化。但是为什么需要事务呢? 事务:用来保证一个业务的完整性,最大的优势就是回滚,并撤销正在进行的所有未提交的修改&#xff1…

linux运行串口相关的java.jar报错:java.lang.UnsatisfiedLinkError

目录 linux运行串口相关的java.jar报错如下: java.lang.UnsatisfiedLinkError是Java中的一个错误类型,通常发生在调用本地(native)方法或使用JNI(Java Native Interface)时。 在Java中,本地方…

微分中值定理—柯西中值定理

微分中值定理—柯西中值定理前面我们已经学习了罗尔中值定理,和拉格朗日中值定理,它们的相同点是,研究的曲线都能用函数来表示。那假如曲线不能被函数表示呢,用柯西中值定理。 1 定义 柯西中值定理是拉格朗日中值定理的推广。如果&#xff0c…

助力企业节能降耗:综合能效管理之场景控制

企业综合能效管理系统是为企业提供能耗管理、电能质量和用能安全监测的整套解决方案,系统可采集多种类型能源(电、水、天然气、工业气体、冷热量等)数据,并对能源消耗进行分析,包括分类分项能耗、区域能耗、部门能耗数…

海思编码:1、mpp系统详谈以及VI、VPSS、VENC之间的关系

在HiMPP手册中都会有这么一张图 1、VI部分 视频输入设备 视频输入设备支持标准 BT.656、标准 BT.1120、自定义时序等若干种时序输入,负责对时序进行解析。 视频物理通道 视频物理通道负责将输入设备解析后得到的视频数据输出到 DDR。在真正将数据输出到 DDR 之前…

FTP-----局域网内部远程桌面

此文包含详细的图文教程。有疑问评论区留言。博主第一时间解决。 目录 一、被远程桌面的电脑 1.开启远程权限 2.添加账户,有本地账户跳过这步 3.帐号隶属于 远程桌面 4.帐号隶属于 本地用户组 二、本地电脑连接远程桌面 前提条件: 1.两台电脑在…

接口自动化【二】(图形验证码处理)

文章目录 前言一、图形验证码图片获取(需要实际截图做对比补充)二、调第三方接口获取验证码三、后端登录接口(举例)总结前言 讲解了图片验证的处理;在接口测试中遇见的一些问题;多部分编码的注意点 一、图形验证码图片获取(需要实…

【4.13(补)】二叉搜索树的遍历、插入、删除

文章目录二叉搜索树的最近公共祖先二叉搜索树中的插入操作删除二叉搜索树中的节点二叉搜索树的最近公共祖先 235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) 因为二叉搜索树是有序的,第一次找到p和q中间的值,就是最近的公共祖先…

【FPGA-DSP】第六期:Black Box调用流程

目录 1. 实际操作流程 1.1 Verilog 代码编写 1.2 system generator操作 1.2.1 Black box模块 1.2.2 Simulink 搭建 2. Simulink模型优化 System Generator是一个Xilinx公司的工具,用于设计数字信号处理系统。Black Box是System Generator中的一个block&#…

【数值模型系列】CAMx编译运行中的几个小问题

最近在CAMx的编译运行工作中,遇到了几个小问题,在此记录一下。 问题1:CAMx2IOAPI编译报错 报错如下: CAMx2IOAPI依赖于IOAPI和NetCDF库,在Makefile文件中加以配置即可,但出现此错的原因其实是默认的Makef…

【大数据之Hadoop】十四、MapReduce之Combiner合并

Combiner是Mapper和Reducer之间的组件,其组件的父类是Reducer。 Combiner和Reducer的区别: Combiner是运行在每一个MapTask所在的节点,即对每一个MapTask的输出进行局部汇总,减少网络传输量。 Reducer则是接收全局是Mapper的输出…

涨点神器:Yolov5/Yolov7引入CVPR2023 InternImage:注入新机制,扩展DCNv3,助力涨点,COCO新纪录65.4mAP!

1.InternImage介绍 论文:https://arxiv.org/abs/2211.05778 代码:GitHub - OpenGVLab/InternImage: [CVPR 2023 Highlight] InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions 理论部分参考知乎:CVPR2023 Highlight | 书生模型霸…