摘要:软件安全检查极具挑战性,目前的主要理论和技术研究都是欧美完成的。希望有更多的软件开发人员能够投入到这个领域,为国产的静态软件分析做出贡献。

本文分享自华为云社区《一图看懂软件缺陷检查涉及的内容》,作者:Uncle_Tom 。

1. 引言

常常被老婆说:“每天弄到三更半夜,不知道你在搞什么!”。

亦或总是被朋友说:“都不知道你在说什么,尽发些看不懂的博客!”。

亦或总是被老大说:“你一句话说不清楚,就不要说了!”。

每每这个时刻,头脑中总是闪过无数的内容,千头万序,不知该从何说起。。。。。。

终于在再次被批的时候,头脑中电光一闪,是不是可以这样。。。

在回家的地铁上构思了几天。终于在晚上给小的讲完故事后,弄了个初稿出来,这下是不是能看懂些了?

2. 软件开发中缺陷的引入

2.1. 软件开发

软件是一系列按照特定顺序组织的计算机数据和指令的集合,用于完成设定的功能。软件已经融入到我们生活的方方面面,例如我们熟悉的计算数据、购物、交友、导航、游戏、点菜、支付等等。这些软件是经过软件设计人员的设计之后,由程序员通过某种程序语言完成编写。

2.2. 漏洞的形成

是人总会犯错误。这里有客观的原因,也有主观的原因。客观的原因是设计和开发人员对软件的安全缺乏认识,在设计和开发过程中,不知觉地引入了安全问题。目前来看设计引入的安全问题占了已知软件缺陷问题的一半以上;另一部分是开发过程中,由程序员引入的。所以软件的安全需要从设计阶段开始防范,加强设计和开发人员的软件安全培训;同时在软件编写阶段,通过静态检查工具检测可能发生的潜在安全问题,这也是目前流行的说法“安全左移”,而不能等到测试阶段再来完成安全检查。还有一小部分,则是由于缺少职业道德的程序员或别有用心的人员,在编写过程中直接写入的,我们通常称为“后门”。这些后门,在特定情况下会被启用,用于破环、监听、勒索等不正当的目的。对于这类软件缺陷问题,主要通过加强对程序员职业操守的培训来避免。

2.3. 缺陷漏洞的发现

这些无意的和有意的软件缺陷,在使用过程中,被人们无意或有意的发现了,成为已知漏洞。程序中还存在很多未知的漏洞。黑客往往采用嗅探(近似遍历)的方法,寻找这些已知漏洞,然后利用这些找到的漏洞,一步步的入侵你的计算机系统,得到控制权。

3. 漏洞库

为了降低漏洞造成的危害,国家层面会成立一个漏洞管理组织,用于漏洞信息的统一发布,例如我国的CNNVD,美国NVD,就是这样的组织。

3.1. 缺陷(CVE)

每一个被报告的缺陷称为一个"通用漏洞披露"(Common Vulnerabilities and Exposures (CVE)), 并按年份进行了编号。 例如,我们熟悉的心脏滴血(Heartbleed)漏洞的CVE编号是CVE-2014-0160。它可以利用网络传输协议漏洞窃取你的账号、密码等加密信息。

3.2. 缺陷分类(CWE)

为了便于缺陷的管理,于是有了"通用缺陷枚举"(Common Weakness Enumeration(CWE))对缺陷进行分类和甄别,每种分类或缺陷被赋予了一个CWE编号,便于人们交流时明确具体的问题,避免由于对缺陷描述的差异而造成歧义。

3.3. 缺陷危害评估

每个缺陷造成的危害是不一样,为了评估缺陷的危害程度,有了"通用漏洞评分系统"(Common Vulnerability Scoring System(CVSS)), 得分基于一系列维度上的测量结果进行度量打分。漏洞的最终得分最大为10,最小为0。

  • 严重漏洞:得分7~10的漏洞;
  • 中级漏洞:得分在4~6.9之间;
  • 低级漏洞:得分在0~3.9之间。

4. 高危漏洞

我们平时在软件开发的过程中,需要注意哪些高危的安全问题?或者检查工具应该重点防范那些安全问题?

4.1. 最危险的25种缺陷(CWE TOP 25)

CWE的组织每年会将过去一年缺陷库(NVD)中的漏洞, 按照发生数量和危害程度进行评分,得到最需要防范的25种软件缺陷,放到CWE的版本中进行发步。

4.2. web应用最危险的10种缺陷(OWASP TOP 10)

开放的社区"Web应用程序安全性项目(Open Web Application Security Project (OWASP))", 每3-4年也会统计Web应用中,公布危害最大的10种软件缺陷。这个信息也会被CWE收录到CWE的新版本中。

5. 各种安全规范

软件的漏洞危害会给组织带来经济或声誉上极大的伤害。所以在软件的开发过程中,通常采用编码规范的方式,来提醒和约束程序员的开发过程,以确保程序中减少安全风险。

这些规范按照来源和用途大致可以分为以下几种:

5.1. 通用编程规范

卡内基梅隆大学(Carnegie Mellon University)的软件工程院(Software Engineering Institute(SEI))的CERT部门是网络安全领域的领导者,也是政府、行业、执法和学术界的合作伙伴。CERT部门的目标是提高计算机系统和网络的安全性和弹性。 CERT专家开发了先进的方法和技术来应对大规模复杂的网络威胁,并与M国土安全局紧密合作,设定了数据收集和挖掘、统计和趋势分析、计算机和网络安全、事件管理、内部威胁和软件保证等领域的研究目标。他们先后发布了C、C++、Java的编码规范,这些规范几乎成了业界编码规范的主要参考依据或重要组成部分。

  • SEI CERT C Coding Standard (2016 Edition)
  • SEI CERT C++ Coding Standard (2016 Edition)
  • SEI CERT Oracle Coding Standard for Java

5.2. 行业规范

软件应用的各个行业依据行业特点,也先后发布了各自的行业编码规范。

  • 汽车行业

    • MISRA C 2012
    • MISRA C++ 2008
    • AUTOSAR C++14
  • 航空业
    • Joint Strike Fighter Air Vehicle C++ Coding Standards(JSF)
    • JPL Institutional Coding Standard for the C Programming Language(JPL)
    • RTCA DO-178C
  • 金融行业
    • PCI-DSS
  • 食品医药行业
    • DFA

5.3. 国际标准化组织

  • ISO-17961 Information technology—Programming languages, their environments and system software interfaces—C secure coding rules
  • ISO/IEC DIS 5055 Information technology — Software measurement — Software quality measurement — Automated source code quality measures

5.4. 国家标准或出版物

各个国家也都为安全编码推行了不少的编码标准或是出版物。

5.4.1. 国标

  • GB/T 34943-2017 C_C++语言源代码漏洞测试规范
  • GB/T 34944-2017 Java语言源代码漏洞测试规范

5.4.2. 美国国家标准技术研究院(NIST)

美国国家标准技术研究院发布的标准系列文件中,计算机相关的标准主要放在SP500和SP800(SP是Special Publications的缩写)。虽然NIST SP并不作为正式法定标准,但在实际工作中,已经得到美国和国际安全界广泛认可,并成为重要的标准。

  • 计算机系统SP500

    • NIST SP 500-268 Source Code Security Analysis Tool Function Specification Version 1.1:描述软件安全分析工具的功能规格;
    • NIST SP 500-326 SATE V Report:Ten Years of Static Analysis Tool Expositions: 静态分析工具大会, 重点描述了静态分析工具的评估方法。
  • 信息安全SP800
    SP800发布的一系列关于信息安全的指南,成为指导美国信息安全管理建设的主要标准和参考资料。它们专门为美国联邦机构提供基线和框架,是联邦信息安全管理法案(FISMA)合规性的重要组成部分。

    • NIST SP800-51 Guide to Using Vulnerability Naming Schemes:描述通用缺陷(CVE)缺陷命名方案的使用;
    • NIST 800-207 Zero Trust Architecture: 描述零信任框架;
    • NIST SP800-218 Secure Software Development Framework (SSDF) Version 1.1: Recommendations for Mitigating the Risk of Software Vulnerabilities:描述软件开发框架用于防范供应链攻击。

5.4.3. 软件缺陷检查工具

上面这些各种安全规范,是不可能通过人工对代码一个个的去检查和审核的,这需要静态分析工具能够适配这些编码规范,自动化的完成这些规范的检查,尽可能的在软件发布之前,完成这些缺陷的检测和修复,以降低软件潜在的安全风险。所以静态检查工具在软件安全中扮演着非常重要的守护作用。

6. 总结

  • 这个图更多的是从如何减少软件缺陷出发,展示了业界发布的各种编码规范中的一部分,这些规范都是静态检查工具在检查的过程中需要完成覆盖的;
  • 这个图还缺少很多部分:
    • 静态检查工具对隐私保护的遵从;
    • 软件安全防护或攻击的各种框架,例如ATT&CK攻击框架;
    • 静态检查工具能力的评估
  • 软件安全检查极具挑战性,目前的主要理论和技术研究都是欧美完成的。希望有更多的软件开发人员能够投入到这个领域,为国产的静态软件分析做出贡献。

点击关注,第一时间了解华为云新鲜技术~

一图看懂软件缺陷检查涉及的内容相关推荐

  1. 一张图看懂微服务架构路线

    目录 一张图看懂微服务架构路线 我为什么选择微服务架构? 微服务架构路线 基本思路 Docker 容器编排 Docker 容器管理 API网关 负载均衡 服务发现 事件总线 日志记录 监控和警报 分布 ...

  2. 一张图看懂自然语言处理技术框架

    一张图看懂自然语言处理技术框架 一.前言 正在针对<人工智能产品经理最佳实践>视频课程第三部分,关键技术篇,进行相关的内容重构,今天整理的部分是自然语言处理技术框架,特地绘制了一张自然语言 ...

  3. 一图看懂LGPL,MPT,GPL,BSD,MIT,Apache协议(最新版)

    目录 一图看懂LGPL,MPT,GPL,BSD,MIT,Apache协议: GPL LGPL MPL MIT Apache 一图看懂LGPL,MPT,GPL,BSD,MIT,Apache协议: GPL ...

  4. 一图看懂 aiohttp 模块:基于 asyncio 的异步HTTP网络库, 资料整理+笔记(大全)

    本文由 大侠(AhcaoZhu)原创,转载请声明. 链接: https://blog.csdn.net/Ahcao2008 一图看懂 aiohttp 模块:基于 asyncio 的异步HTTP网络库, ...

  5. 一图看懂MVCC机制,RC级别解决脏读问题,RR级别怎么解决不可重复读问题【MySQL系列】

    说起事务隔离级别和各自解决的问题,相信学过MySQL的人都倒背如流, 三类问题:脏读.不可重复读.幻读问题: 四种隔离级别: 读不提交,最低的隔离级别,存在脏读.不可重复读.幻读问题: 读已提交,能解 ...

  6. 一篇文章一张思维导图看懂Android学习最佳路线

    一篇文章一张思维导图看懂Android学习最佳路线 先上一张android开发知识点学习路线图思维导图 Android学习路线从4个阶段来对Android的学习过程做一个全面的分析:Android初级 ...

  7. 一张图看懂图像识别算法发展历史

    一张图看懂图像识别算法发展历史

  8. 一图看懂新一代人工智能知识体系大全

    来源:财经头条 摘要:人工智能的发展离不开基础支持层和技术层,基础支持层包括大数据.计算力和算法:技术层包括计算机视觉.语音识别和自然语言处理.人工智能的技术本质是什么,本文会详细分析. 人工智能的发 ...

  9. 一图看懂windows11新功能

    [欢迎关注微信公众号:厦门微思网络] 微思网络(官网):https://www.xmws.cn/ 微软Windows 11操作系统还没有正式推出,不过加入"预览体验计划"可以抢先体 ...

最新文章

  1. 复旦张奇:如何解决NLP中的鲁棒性问题?
  2. 近期活动盘点:智进未来:AI在医疗健康领域的应用、挑战及发展趋势
  3. android 投影仪,不要购买投影仪, 安卓手机投屏很简单, 每个手机都可以
  4. 微软AJax.net源码初步分析(2)--服务执行流程
  5. qt场景中视图QGraphicsView的缩放
  6. krpano使用总结-地图路线
  7. 旧文重发:程序员的七种武器
  8. java中的事件派发机制_事件派发器模式
  9. oracle12c集群安装—grid安装
  10. c语言阶乘出现负的,C语言求1到20阶乘的和,出来的是负数
  11. 前端页面预览word_js打开word文档预览操作示例【不是下载】
  12. 机器学习高频面试题(41道)
  13. 580集photoshop顶尖视频教程送给你,设计总监手把手带你学ps!
  14. 最简单人工智能python_如何从零学会人工智能(AI)Python?
  15. FreeRTOS+STM32L+ESP8266+MQTT协议传输温湿度数据,控制继电器到阿里云物联网平台
  16. 删除node_modules慢【rimraf】
  17. ANSYS中表格数组的定义及使用举例
  18. Matlab求出图像中每个细胞的细胞核与核仁面积之比代码
  19. 分布式事务前看懂CAP、BASE
  20. 全球及中国汽车机电开关行业十四五发展规划及投资前景分析报告2022-2028年

热门文章

  1. 设计模式-行为型模式-命令模式
  2. React 组件间传值的几种情形
  3. mysql phpmyadmin 安装_phpmyadmin怎么安装
  4. 深度学习笔记(9) 优化算法(一)
  5. roobo机器人怎么唱歌_日本推出机器人“妻子”,拥有3大功能,能替代真人伴侣吗?...
  6. android通讯录简单的_安卓手机删了联系人怎么恢复?超简单的恢复方法,一看就懂!...
  7. “macOS Catalina下TeXstudio内置PDF阅读器无法正常显示中文”的解决办法
  8. Windows环境中jdk的下载、安装与配置
  9. PAT L1-027 出租
  10. 4.2号 作业讲解