代码质量直接决定系统安全性。编程习惯,或者“规范”,作为关键因素,直接影响漏洞产生的概率。
注入(OWASP A03:2021,SQL注入、XSS等)、缓冲区溢出(如:CWE-120)等安全漏洞均来源于非常基础的编码缺陷(NIST IR 8397)。
硬编码凭证(CWE-259)、内存泄漏(CWE-401)等典型风险均可通过代码检查(如:使用SAST工具)和遵循安全编码规范来防范。
本文从编程习惯的角度出发,系统分析软件安全漏洞的来源。主要有 7 个来源:输入处理、内存管理、错误处理、安全实践、代码维护、第三方依赖和配置管理。
这 7 个来源可归入以下 3 个依次递进的层次:
1. 代码实现层面
2. 开发实践层面
3. 生态环境层面
【代码实现】
一、输入处理不严格
- 未验证用户输入
- 典型漏洞:SQL注入、命令注入、XSS攻击
- 原因:无脑信任用户输入,没有做“存在恶意行为”的合理假设。
- 数据类型溢出
- 典型缺陷:整数溢出、浮点溢出等
数据类型溢出是新手程序员常犯错误。
CWE-190(整数溢出)常导致逻辑错误,如果用于指针则可能导致内存访问越界。 - 原因:对数据类型的表示范围没有概念,未执行检查或者未捕捉并处理异常,单方面依赖调用方“正确调用”,缺乏安全隔离。
- 案例:CVE-2002-0639 OpenSSH (2.9.9 ~ 3.3) 允许远程攻击者执行任意代码。
二、内存管理缺陷
- 内存分配/释放问题
- 使用缓冲区之前未初始化(CWE-416)
- 重复释放缓冲区(double-free)
- 分配内存失败后,未经检查就释放(CWE-476)
- 完成任务后未释放申请的内存,导致内存泄漏
- 指针使用不当
- 引用已释放内存的指针——悬垂指针(Dangling pointer)
微软安全响应中心(MSRC)数据显示,2022年15%的内存漏洞源于悬垂指针。其危害包括:数据损坏(如:CWE-457)、任意代码执行、系统崩溃等(如:CWE-476)。 - 越界访问(数组越界、栈溢出、堆溢出等)
指针越界访问是严重内存安全漏洞。MITRE统计显示,2021 CWE Top 25中,约25%与越界访问(CWE-125 Out-of-bounds Read,CWE-787 Out-of-bounds Write)相关。
数组越界导致数据泄露(CWE-200),栈溢出(CWE-121)可能导致控制流被攻击者劫持,堆溢出(CWE-122)可能导致任意代码执行。
三、错误处理不完善
- 异常处理缺失
- 未捕获异常导致程序崩溃
- 错误代码忽略(如:未检查系统调用返回值)
- 错误信息泄露
- 暴露堆栈跟踪(生产环境开启调试模式)
- 返回过于详细的错误描述(如:SQL语句)
【开发实践】
四、安全实践不足
- 密码技术使用不当
- 使用强度不足的算法(如MD5、DES)
- 硬编码加密密钥
- 未使用安全随机数生成器导致随机数碰撞概率明显增加
- 身份验证缺陷
- 会话管理不当(会话固定、超时缺失)
- 权限检查缺失(横向越权、垂直越权)
五、代码维护问题
- 复制代码和复用代码
- 复制粘贴(相同漏洞多位置存在)
- 集成未经审核的第三方代码
- 使用已废弃、不安全的功能
- 继续使用已废弃函数(通常不安全,如:C语言的gets())
- 使用不安全的版本(如:SSLv3)
【生态环境】
六、第三方依赖风险
- 组件更新滞后
- 未及时替换存在已知漏洞的库版本
- 对组件依赖关系的管理缺乏安全考量
- 易受供应链投毒攻击的行为
- 未验证第三方组件完整性
- 使用来源不明的代码包
七、配置管理忽视安全
- 敏感信息暴露
- 配置文件包含明文密码
- 日志中记录敏感数据
- 权限配置不当
- 权限过高(如:以root权限运行应用)
- 文件权限设置宽松(如:全局可写)
总结与改进
这些编程习惯问题可通过以下方式改进:
- 遵循安全编码规范
- 执行代码安全检查(如:使用SAST/DAST工具)
- 代码审核
- 持续学习安全开发技术、方法与工具
- 在CI/CD流水线中内置安全检查(依赖扫描、代码检测等)
编程习惯的改进需要长期持续的努力。希望通过本文开启更多探讨,唤起更多开发者对安全编码的重视,共同推动软件安全实践的进步。
使用大模型做基础开发正在形成一种趋势,而让大模型遵循上述方式改进代码安全可能具有突出的成本优势。笔者认为这点值得开发人员深思。
- End -
下期分享
04 漏洞从哪里来?——认知局限
基于认识局限的软件安全漏洞来源分析:角色认知盲区与技术领域盲点的MECE框架
原文始发于微信公众号(方桥安全漏洞防治中心):03 漏洞从哪里来?——编程习惯
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论