软件代码审计是对编程项目中源代码的全面分析,旨在发现错误、安全漏洞或违反编程约定的行为。它是防御性编程范式的一个组成部分,它试图在软件发布之前减少错误。C 和 C++ 源代码是最常见的要审核的代码,因为许多高级语言(例如 Python)具有较少的潜在易受攻击的函数(例如,不检查边界的函数)。
指导方针
在审核软件时,每个关键组件都应单独审核,并与整个程序一起审核。最好先搜索高风险漏洞,然后再搜索低风险漏洞。通常存在介于高风险和低风险之间的漏洞,具体取决于具体情况以及相关源代码的使用方式。应用程序渗透测试试图通过在可能的接入点上启动尽可能多的已知攻击技术来识别软件中的漏洞,以试图关闭应用程序。这是一种常见的审核方法,可用于查找是否存在任何特定漏洞,但不能查找它们在源代码中的位置。一些人声称,周期结束审计方法往往会让开发人员不知所措,最终给团队留下一长串已知问题,但实际改进却很少;在这些情况下,建议采用在线审核方法作为替代方法。
高危漏洞
由于使用以下内容,可能会存在一些常见的高风险漏洞:
-
可能导致缓冲区溢出漏洞的非边界检查函数(例如strcpy、sprintf、 vsprintf 和sscanf ) [2]
-
缓冲区的指针操作可能会干扰以后的边界检查,例如:
if ((bytesread = net_read(buf,len)) > 0) buf += bytesread;
-
诸如execve ()、执行管道、system() 和类似的调用,尤其是使用非静态参数调用时
-
输入验证,例如(在 SQL 中):是SQL 注入漏洞
statement := "SELECT * FROM users WHERE name = '" + userName + "';"
的一个示例 -
文件包含函数,例如(在 PHP 中):是远程文件包含漏洞
include($page . '.php');
的示例 -
对于可能与恶意代码链接的库,返回对内部可变数据结构(记录、数组)的引用。恶意代码可能会尝试修改结构或保留引用以观察未来的变化。
-
不影响服务器端的客户端代码漏洞(例如,跨站点脚本)
-
用户名枚举
-
目录遍历
-
敏感 API 密钥
低风险漏洞
以下是审计代码时应发现的低风险漏洞列表,但不会产生高风险情况。
工具
源代码审核工具通常会查找常见漏洞,并且仅适用于特定编程语言。此类自动化工具可用于节省时间,但不应依赖其进行深入审核。建议将此类工具作为基于政策的方法的一部分应用。
对需求的依赖
如果设置为较低的阈值,大多数软件审核工具会检测到很多漏洞,特别是如果代码之前没有经过审核。然而,这些警报的实际重要性还取决于应用程序的使用方式。可能与恶意代码链接的库(并且必须对其免疫)具有非常严格的要求,例如克隆所有返回的数据结构,因为预期会故意尝试破坏系统。可能只暴露于恶意输入的程序(如 Web 服务器后端)必须首先关心此输入(缓冲区溢出、SQL 注入等)。对于仅由受保护基础设施中的授权用户内部使用的程序来说,此类攻击可能永远不会发生。
编译自:维基百科
原文始发于微信公众号(河南等级保护测评):网络安全知识:什么是代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论