代码安全审计的底层逻辑

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
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

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-17 12:57
浙ICP备14020137号-1 $Map of visitor$