软件安全开发意识

news2025/1/20 18:29:01

国务院印发的《“十四五”数字经济发展规划》中指出数字经济是继农业经济、工业经济之后的主要经济形态,是以数据资源为关键要素,以现代信息网络为主要载体,以信息通信技术融合应用、全要素数字化转型为重要推动力,促进公平与效率更加统一的新经济形态。规范健康可持续是数字经济高质量发展的迫切要求。我国数字经济规模快速扩张,但发展不平衡、不充分、不规范的问题较为突出,迫切需要转变传统发展方式,加快补齐短板弱项,提高我国数字经济治理水平,走出一条高质量发展道路。

软件作为信息技术基石,如何从软件开发层面保障数字经济高质量发展成为当下软件开发者需要思考的问题。从信息安全角度出发,软件漏洞是造成安全问题的一大根源。绝大多数系统和应用漏洞源于在软件开发的需求分析、总体设计和代码编制等过程中引入的缺陷。

软件产生安全漏洞的原因有很多,如

  1. 软件开发周期短,工作量大,无暇顾及安全;

  2. 软件设计时缺乏安全设计;

  3. 软件开发人员缺乏安全编程经验;

  4. 功能越来越多,软件越来越复杂;

  5. 软件模块复用,可扩展性/灵活性要求高;

  6. 互联网环境下攻击挑战越来越多;

但其根本威胁只有两项,或来自于软件内部存在漏洞,或来自于外部攻击威胁。

从开发环境与开发人员侧分析,软件开发者通常缺乏安全开发的动机,开发者收到的要求通常是在短时间内满足某某业务功能;同时公司也缺乏对开发者的专业安全知识教育,同时在流程与工具,没有为软件开发安全提供有力支撑。

CMMI(Capability Maturity Model Integration,即能力成熟度模型集成)提出对软件每千行的代码缺陷率如下:

等级

千行缺陷率

CMMI1

11.95‰

CMMI2

5.52‰

CMMI3

2.39‰

CMMI4

0.92‰

CMMI5

0.32‰

但实际能通过CMMI5认证的组织在全国甚至全球范围寥寥无几。所以在组织编写代码过程中,存在大题代码缺陷(BUG)是事实,当然这些缺陷并不一定都会造成信息安全问题,但极有可能是信息安全问题发生的根本原因。

作为开发人员,在面对安全的攻击时往往会把解决安全事件的希望寄托在安全厂商的安全设备或安全服务上,但是他们忽略了一点——安全厂商所提供的设备或服务,通常是基于已知漏洞的防护,而面对未知漏洞或较新的漏洞,设备和服务较难发现。同时依托于安服设备或服务,从本质上也没有改变软件存在安全漏洞的事实,只是针对攻击行为做了阻断或告警防护。所以要想从本质上改变软件存在安全漏洞的现状,必须要对软件做出修改或打上补丁。此时开发人员的工作量会显得非常巨大。分析攻击产生的原因,分析软件中漏洞是如何被攻击者利用对开发人员而言都存在一定困难。因为开发人员没有经过专业的安全训练。

举一个简单的例子:比如某攻击者通过公司OA网站的后台上传页面,上传了一个WebShell。在这个攻击过程中,作为研发人员优先解决什么问题?是防止攻击者破解或盗用管理员账号,还是防止从后台上传WebShell。在整个事件处理的视角,在公司层面可以优先使用一些安全设备防止攻击者破解或盗用管理员账号,但这些工作是属于网络安全部门职责,作为研发人员,我们要从本质上解决问题,首要防止上传WebShell。其次可以根据网络安全部门要求,加强对网站登录的账号管理,如登录时,是否有安全的验证码,防止暴破,OA管理员是否强制要求使用高强度密码。而作为网络安全人员,则要分析OA后台密码被盗用的其他可能性,比如网站是否使用了安全的传输协议,防止窃听。所以想要解决安全漏洞,从本质上还是要回归到开发人员对漏洞代码的修复。

再举一个例子,比如下面的代码

​当攻击者传递恶意参数id,会导致SQL语句的执行。如传递参数

id=1' and SELECT user() -- +

后台就会执行

select name from users where id =1' and SELECT user() -- +;

这样会查询当前数据库连接的用户名。如果攻击者构造更多的恶意语句,甚至可以将数据库所有的内容都dump下来,也就是我们俗称的“脱库”。此类的问题,发生过程是在代码中,虽然我们今天有WAF防火墙可以防止SQL注入攻击,但是并不能改变我们的代码存在SQL注入漏洞的事实。并且一旦发生了SQL注入,导致数据或信息泄漏,对公司的影响是非常巨大的。此时再来从研发侧修复漏洞,或使用安全防护设备来阻断攻击,都为时已晚。

所以,作为软件开发人员,从开发过程中就需要考虑安全问题,可以参照安全的编码规范,从管理角度,引入以安全为导向的软件开发生命周期管理。典型的模型可以参照微软的SDL模型。

安全开发生命周期(SDL)是侧重于软件开发的安全保证过程。SDL(Security Development Lifecycle)或S-SDLC(Security -Software Development Life Cycle)即软件安全开发生命周期,是指在软件开发的各个阶段(规划、设计、编码、测试、发布、运营等)增加一系列的安全活动,确保软件安全隐患能尽早识别并及时消除。也是在今天非常多的开发安全中提到的安全左移。美国国家标准与技术研究院(National Institute of Standards and Technology,简称NIST)也指出,在软件发布以后进行修复的代价是在软件设计和编码阶段即进行修复所花代价的30倍。下面我们分别从软件开发的不同阶段的安全活动进行简单讲解。

  1. 在软件开发的全过程中,有必要进行开发安全意识的培训,比如我们这篇文章目标也是在此。

  2. 在规范阶段,我们可以进行风险评估;

  3. 在设计阶段,我们可以进行威胁建模

  4. 在编码阶段,我们需要约束编码规范、使用SAST静态扫描代码、使用开源组件分析工具进行开源组件的安全审计;

  5. 在测试阶段,我们可以引入DAST或IAST等扫描手段,进行充分的安全测试;

  6. 在发布阶段,我们可以引入基线管理、补丁管理、渗透测试等手段提高安全性;

  7. 在运营阶段,我们可以引入安全防护设备、应急响应机制加强最后的闭环过程。

同时,在今天还有非常流行的DevSecOps模型。DevSecOps 是“开发、安全和运营”的缩写,在软件开发生命周期的每个阶段自动集成安全性 - 从最初的设计到集成、测试、部署直至软件交付。这里强调的是自动集成,因为我们今天的开发模型有很多场景下是一种敏捷开发,版本迭代周期很短。在这种场景下,我们对开发安全的自动化集成能力就非常重要。比如我们可以使用SAST静态代码扫描系统,对接代码托管仓库,只要代码发生更新,SAST就能自动化的实现扫描,自动生成扫描报告发送到相关人员邮箱,以减少该版本的代码中的缺陷。如下图:

通过本文,希望各位开发者,能加强自己的安全开发意识,从软件开发层面为我国数字经济高质量发展保驾护航!

本期作者:

黄浩,深信服教学教研中心副主任,深信服安全服务认证专家(SCSE-S)

产业教育中心资深讲师,CISSP认证注册信息系统安全师,中国计算机学会会员,暨南大学网络空间学院校外实践指导老师,深圳大学专业学位研究生校外导师,深圳信息职业技术学院产业学院副教授;对企业网络安全框架设计、业务逻辑安全与防御体系有深刻认识;擅长DDoS攻击防御、操作系统安全防护、密码学、企业安全架构、取证溯源、应急响应等多个方向的课程。

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

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

相关文章

MYSQL高可用配置(MHA)

1、什么是MHA MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…

fastapi高性能异步框架,极速上手

fastapi项目开发快速上手 简介 FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6 并基于标准的 Python 类型提示。 特性: 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和…

全流程各工程类型地下水环境影响评价【一级】方法与MODFLOW Flex建模

目录 专题一 地下水基础知识学习 专题二 地下水环境影响评价过程讲解 专题三 地下水数值软件的学习及操作 专题四 相关专业软件(Surfer、Aquifer test)的学习 专题五 化工类建设项目地下水环评关键技术处理及上机操作 专题六 化工类建设项目地下水…

顶象助力如祺出行打造高品质服务

近日,广东省自然资源厅审批通过了如祺出行提交的测绘资质申请,如祺出行获得地理信息系统工程和互联网地图服务两个专业的乙级测绘资质。此次获批意味着,如祺出行能够在许可区域内依法合规开展数据标注和场景仿真等相关业务,构建全…

Oracle11g全新讲解之触发器和视图索引

触发器 1.触发器的基本讲解 当特定事件出现时自动执行的存储过程 语法结构 CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS]…

探索Jetpack Compose的Material You主题

探索Jetpack Compose的Material You主题 在本文中,我们将了解可用于 Jetpack Compose 的新 Material You 库,并了解我们如何将其动态颜色应用到 Stream Chat Compose SDK,以获得有趣、多彩和个性化的消息传递体验。 在本文中,您…

Spark大数据处理讲课笔记4.7 Spark SQL内置函数

文章目录 零、本讲学习目标一、Spark SQL内置函数(一)内置函数概述1、10类内置函数2、两种使用方式 (二)内置函数演示1、通过编程方式使用内置函数upper()2、通过SQL语句的方式使用内置函数upper()3、演示其它内置函数的使用 二、…

MySQL的安装和卸载-Linux版

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以,Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 https://download.csdn.net/download/weixin_44373940/87784825 3. 创建目录,并解压到对应目录中 mkdir mysql 解压到mysql目录中 tar -xvf…

【Arduino疑难杂症】:报错:上传失败:上传错误:exit status Oxffffffff

项目场景: 制作arduino宠物监控系统项目的过程中,摄像头方面使用到了ESP32Cam,制作过程中遇到了如下问题。 问题描述 [ERRORJ: (annot configure port, something wert wrong. 0riginal message: WindowsError(31,"xclxacxb…

Spring笔记-教程-快速回忆

title: Spring笔记 date: 2023-05-12 00:12:55 categories: 后端Java tags:JavaSpring Spring官网https://spring.io 框架图: 为什么要使用Spring 原先代码中存在的问题如下: 业务层: public class BookServiceImpl implements BookServi…

了解Swarm 集群管理

Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 支持的工具包括但不限…

SpringCache缓存常见问题

SpringCache 解决缓存常见问题 1 缓存穿透2 缓存雪崩3 缓存击穿 1 缓存穿透 缓存穿透是指缓存和数据库中都没有数据,而用户不断发起请求则这些请求会穿过缓存直接访问数据库,如发起为id为“-1”的数据或id为特别大不存在的数据。假如有恶意攻击&#xf…

TCP 和 UDP 协议详解

文章目录 1 概述2 TCP 协议2.1 报文格式2.2 三次握手,建立连接2.3 四次挥手,断开连接2.4 窗口机制 3 UDP 协议3.1 传输头格式 4 扩展4.1 常用端口号4.2 TCP 与 UDP 区别 1 概述 #mermaid-svg-aC8G8xwQRSdze7eM {font-family:"trebuchet ms",ve…

Mysql MHA高可用集群及故障切换

文章目录 一、MHA概述1.MHA的特点2. MHA的工作原理3.故障切换时MHA会做什么 二、实验搭建MySQLMHA1.配置主从分离2.安装MHA软件 总结 一、MHA概述 MHA(MasterHigh Availability)是一套优秀的mysql高可用环境下故障切换和主从复制的软件。 MHA解决了mysq…

铁路铁鞋UWB定位系统

在铁路运输过程中,当列车到达车站时,需要用专用铁鞋将列车固定在前轮和后轮上,以防止列车打滑和前进。所以,实时掌握铁鞋的位置信息十分重要,如果工人忘记撤回铁鞋子,则可能导致车辆停车和跳轨等事故频发。…

淘宝关键词搜索分析商品价格走势(商品列表接口,销量接口,价格接口,分类ID精准商品数据接口)接口代码对接

淘宝 OpenAPI(Open application programming interface)是一套 REST 方式的开放应用程序编程接口。淘宝网根据自己提供的电子商务基础服务,抽象并做成一系列的 API 接口。通过这些接口,可以让外部用户能够通过程序的方式访问淘宝网…

Vue 实现轮播图功能

Vue 是一款流行的前端框架,它提供了一系列的工具和组件,使得开发者可以更加便捷地创建交互式的 Web 应用程序。轮播图是 Web 应用程序中常见的一种交互式组件,可以用来展示图片、新闻、广告等内容。在 Vue 中,我们可以使用第三方组…

RVMedia VCL 8.0 for Delphi Crack

RVMedia VCL 8.0 for Delphi Crack FGX Native Network Frame是制造跨平台和现代移动设备的强大工具。FG开发团队的主要目标是简化移动应用程序的开发,使大多数人都能以各种技能开发应用程序。此外,这种形式的网络最重要的功能可以在100%的用户界面中设计…

分库分表的 21 条法则,hold 住!

大家好,我是小富~ (一)好好的系统,为什么要分库分表? 本文是《分库分表ShardingSphere5.x原理与实战》系列的第二篇文章,距离上一篇文章已经过去好久了,惭愧惭愧~ 还是…

GIS应用技巧之Landsat、Sport等遥感影像去除黑边的多种方法

一、前言 当我们利用GIS对遥感影像处理过程中,有时候需要将几张小的影像图镶嵌为一张大的,但是却被黑边所阻挡,这时候就需要找到一种方法来将黑边去掉了。由于遥感影像一般都太大了,不好获取也不好处理,这里我们选用的…