代码审计简介-1
字数 1779 2025-08-11 08:36:04
代码审计全面教学文档
1. 代码审计概述
1.1 定义
代码审计是指检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患或编码不规范的地方。通过自动化工具或人工审查的方式,对程序源代码逐条进行检查和分析,发现由源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。
1.2 目的与意义
- 简化修补程序
- 加强开发人员安全意识
- 对开发人员进行安全知识教育
- 降低返工成本
- 避免过早暴露漏洞
2. 主流代码审计工具
2.1 Seay代码审计工具
- 开发语言:C语言
- 运行平台:Windows
- 适用语言:PHP
- 可检测漏洞类型:
- SQL注入漏洞
- 代码执行漏洞
- 命令执行错误
- 文件包含漏洞
- 文件上传漏洞
- 防护绕过
- 拒绝服务
- XSS跨站漏洞
- 信息泄露
- 任意URL跳转
2.2 RIPS
- 开发语言:PHP
- 技术原理:静态分析技术
- 适用语言:PHP
- 特点:
- 自动化挖掘潜在安全漏洞
- 无需审阅整个程序代码
- 需要人工确认漏洞真实性
- 可检测漏洞类型:
- XSS
- SQL注入
- 文件泄露
- Header Injection
2.3 Fortify SCA
- 分析引擎:
- 数据流分析
- 语义分析
- 结构分析
- 控制流分析
- 配置流分析
- 特点:
- 与安全漏洞规则集全面匹配
- 提供详细漏洞信息
- 包含安全知识说明
- 提供修复建议
- 支持语言:
- JAVA
- PHP
- PYTHON
- .NET
- VB
- C/C++
2.4 Checkmarx CxSuite
- 开发商:以色列Checkmarx公司
- 核心技术:
- 词汇分析技术
- CxQL专利查询技术
- 特点:
- 首创查询语言定位代码安全问题
- 支持500多种风险类型
- 符合CWE/OWASP标准
- 支持语言:
- JAVA
- ASP.NET(C#、VB.NET)
- JavaScript
- Jscript
- C/C++
- APEX
3. Fortify SCA代码审计实战
3.1 审计流程(以jspxcms为例)
-
启动扫描
- 启动Fortify SCA主程序
- 点击"Scan Java Project"
- 选择代码根路径
-
配置选项
- 选择JDK版本(如1.8)
- 配置扫描选项:
- 选择需要显示的issues
- 是否关注代码质量问题
- 是否为JAVA Web应用
- 是否需要admin权限运行程序
-
执行扫描
- 点击SCAN按钮开始扫描
- 查看扫描进度
-
分析结果
- 扫描结果界面分为五个部分:
- 第一部分:扫描出的问题列表(漏洞类型及位置)
- 第二部分:问题上下文代码
- 第三部分:代码调用逻辑
- 第四部分:漏洞详情及修复建议
- 第五部分:总体代码中的函数
- 扫描结果界面分为五个部分:
3.2 漏洞分析实例(Path Manipulation)
-
漏洞描述
- 功能:对文件进行压缩
- 代码流程:
- 从servlets.java的requests中获取name参数值并赋值给values
- 传递值给ids参数
- 使用localFileHandler.getFile获取文件
- 调用AntZipUtils.zip方法压缩文件内容
-
Fortify判断依据
- 根据代码调用关系判断存在路径操作漏洞
- 潜在风险:当文件名为"../../web.xml"时可能出现路径操作问题
- 根本原因:未对文件名进行检查过滤
-
代码验证
- 实际代码审查发现:
- WebFileControllerAbstractor.java中的zip方法逻辑:
- 从requests获取ids参数
- 使用Validations.uri()方法检查ids值
- Validations.uri()方法:
- 检查传入值中是否包含".."
- 检查是否以base开头
- WebFileControllerAbstractor.java中的zip方法逻辑:
- 验证结果:
- 当ids="../../web.xml"时,if语句不通过
- 抛出异常,不执行zip()
- 实际不存在路径操作问题
- 实际代码审查发现:
4. 代码审计最佳实践
-
审计流程建议
- 先使用自动化工具进行初步扫描
- 对工具报告的问题进行人工验证
- 重点关注高风险漏洞
- 结合业务逻辑分析漏洞实际影响
-
常见漏洞检查点
- 输入验证不足
- 输出编码缺失
- 身份认证缺陷
- 授权检查缺失
- 敏感数据处理不当
- 错误处理不当
- 日志记录不足
-
审计报告编写
- 清晰描述漏洞
- 提供漏洞位置
- 说明潜在影响
- 给出修复建议
- 标注风险等级
5. 总结
代码审计是保障软件安全的重要手段,通过结合自动化工具和人工审查,可以有效发现和修复源代码中的安全隐患。选择适合的审计工具,掌握正确的审计方法,建立规范的审计流程,是提高代码审计效率和效果的关键。