代码安全审计的底层逻辑
如果无法正常显示,请先停止浏览器的去广告插件。
1. 代码安全审计的
底层逻辑
分享人:冯刚
2. 个人简介
• 姓名:冯刚
•所在组织:360 质量工程部
• 专业领域:代码分析 / 软件测试
3. 目录
01
• 背景介绍
• 难点与壁垒
02
03
• 方法与创新 • 收益
• 实际案例 • 代码审计新方法
• 展望与总结 • 开源资料分享
4. 背景介绍 —— 360 DevSecOps 平台
• 深度管控代码编写环节
• 具备版本管理、流程控制、代码审计等多种功能
• 提供各产研环节的综合数据分析
• 提供统一、安全、稳定的服务
5. 难题与壁垒
难点:
• 各项目审计标准不统一
• 审计工具依赖编译等难以统一实现的环节
解决方法:
• 制定统一的审计标准
• 使审计过程脱离编译器的限制
6. 1. 制定统一的审计标准
7. 编程语言发展趋势
Langauge
C#
C++
Java
JS
PHP
Python
Industry field
Trend
8. 编程语言发展趋势
当今互联网的显著特征:
• 设备智能化
• 服务全面化
• 多领域协作密切化
有必要集结、整合各语言在各领域的安全编写规则,以实现:
• 企业对产品代码质量进行统一管控
• 使从业人员形成完善的安全知识体系和严谨的工作态度
9. 互联网产品各子领域的特点
资源有限
嵌入式
低功耗、实时性
专用性与可移植性
桌面
环境多变
用户操作灵活
健壮性
服务端
资源可控
高效性、高并发性
稳定性
10. 安全规则的整合模式
11. 安全规则的整合模式
涵盖标准
• GJB 8114
……
• GJB 5369
• GBT/T 39412
• MISRA C/C++
集结、收纳
• AutoSar C++14
• C++ Core Guidelines
• SEI CERT Coding Standard
• Effective C++
整合归纳为 487 条规则,可检出 800 余种问题
规约、整合
360 安全规则集合
12. 安全规则的规约依据
Undefined 后果不可预期的错误
Unspecified 较为随意的实现支持
Implementation 可移植性问题
Deprecated 已过时的编程方式
Enhancement 需要加强的安全措施
No-diagnostic 编译器不提供警告的逻辑错误
Bad-practice 不良编程方式或风格
13. 安全规则示例
ID ID_plainNumericChar
Rule 参与数值运算的 char 变量需显式声明 signed 或 unsigned
没有 signed 或 unsigned 限制的 char 类型,是否有符号由具
Comment
体的编译器决定,不具备可移植性。
示例:
……
Standard
Reference
ISO/IEC 9899:2011 6.2.5(15)-implementation
ISO/IEC 14882:2011 3.9.1(1)-implementation
SEI CERT INT07-C
MISRA C++ 2008 5-0-11
14. 安全规则示例
这段代码有哪些问题?
15. 安全规则之间的关系
类别
Resource
Security
……
规则
对立
……
Style
……
16. 360 安全规则集合
https://github.com/Qihoo360/safe-rules
https://saferules.github.io/
17. 360 安全规则集合
• 严格遵循编程语言的 ISO 标准
• 融汇多种权威规范体系,符合国家审计标准
• 适用于桌面、服务端及嵌入式等多种应用场景
• 满足规范、审计、培训等多方面需求
• 注重自动化代码审计的实现方法
18. 2.使审计过程脱离编译器的限制
19. 去编译化代码静态信息获取
自研代码静态结构和语义信息分析模块:
• 支持标准语法和扩展语法
• 生成严整语法树
• 对无法识别的代码具有合理的包容性
• “配合模式”与“非配合模式”
20. 去编译化代码静态信息获取
C/C++
Source files
预处理
段落划分
静态结构分析
Goto table
Action table
Language syntax
State and symbol
stack
Syntax tree
Production list
作用域分析采用递归下降法
预处理指令、声明、表达式采用 LR1 分析法
21. 违规代码严重性的量化评估
规则:The result of an assignment operator should not be used(MISRA C 2012 13.4)
• 对规则的特殊情况进行逐一分类
示例代码
• 每条检查结果配有说明其严重程度的权重
• 可根据不同需求酌情过滤低权重的结果
• 使严格的工业标准也可对一般代码起到指导作用
22. 违规代码严重性的量化评估 —— 结果权重分级
• [0,
100)
统计与说明信息
• [1500, 1600) 重度逻辑性错误
• [100, 300) 违反规定的代码 • [1600, 1700) 疑似安全漏洞
• [300, 400) 不良风格 • [1700, 1800) 安全漏洞
• [400, 500) 重度不良风格 • [1800, 2000) 高危安全漏洞
• [500, 600) 不良设计
• [600, 700) 设计缺陷
• [700, 800) 重度设计缺陷
• [800, 900) 疑似导致错误的代码
• [900, 1000) 重度疑似导致错误的代码
• [1000, 1200) 常见笔误或语言运用错误
• [1200, 1500) 逻辑性错误
23. 与流行工具的比对
Name
FlawFinder
TScanCode
Rules
70
112
Coverage Tech
%1 Regex
pattern matching
%14 Syntax
pattern matching
SonarSource 574 %95 Symbolic
execution
360 代码扫描 487 %87 Blend
24. 重要版本迭代过程
2022
2020 支持 C11/C++14
技持 C99/C++98 探索符号执行等理论
满足红线扫描要求 编写安全规则集合
2021 2023
支持 C++11 引入MISRA、AutoSar
借鉴开源工具检
查点
等工业标准
25. THANK YOU