多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 代码审计 顾名思义就是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。 ## 代码安全测试方法: 码审核采用人工审核和静态分析工具辅助的方式进行。 1. 人工审核: 既能解决内部问题也能解决外部问题。这也是目前最有效率的解决方案,并且在理论上手工代码审核是非常有效的,但人工审核的效率不高,所以我们会采用自动化分析工具辅助人工的方式来提高审核效率。 2. 静态分析工具: 通过一组全面规则、测试机制和方针在软件开发过程、测试中发现软件的安全缺陷。 fortify、seay源代码审计 ## 手工代码审计 ### 审计思路: 1. 通读全文代码 从功能函数代码开始阅读,例如include文件夹下的common_fun.php,或者有类似关键字的文件。  2. 看配置文件 带有config关键字的文件,找到mysql.class.php文件的connect()函数,查看在数据库连接时是否出现漏洞。  3. 继续跟读首页文件index.php 了解程序运作时调用了哪些函数和文件 以index.php文件作为标线,一层一层去扩展阅读所包含的文件,了解其功能,之后进入其功能文件夹的首页文件,进行扩展阅读。 ### 高风险漏洞 由于使用以下原因,可能存在一些常见的高风险漏洞: 1. 非边界检查函数可能导致缓冲区溢出漏洞 例如,strcpy,sprintf,vsprintf和sscanf 2. 可能干扰后续边界检查的缓冲区的指针操作 例如:if((bytesread = net_read(buf,len))> 0)buf + = bytesread; 3. 调用像execve(),执行管道,system()和类似的东西 尤其是在使用非静态参数调用时 4. 输入验证 如`statement:=“SELECT * FROM users WHERE name ='”+ userName +“';”`是一个SQL注入漏洞的示例 5. 文件包含功能 例如(在PHP中):`include($ page。'。php');`是远程文件包含漏洞的示例 6. 对于可能与恶意代码链接的库,返回对内部可变数据结构(记录,数组)的引用 恶意代码可能会尝试修改结构或保留引用以观察将来的更改。 ### 低风险漏洞 以下是审计代码时应该找到的低风险漏洞列表,但不会产生高风险情况。 1. 客户端代码漏洞不影响服务器端(例如,跨站点脚本) 2. 用户名枚举 3. 目录遍历(在Web应用程序中) ### web漏洞产生的原因: 1. 变量控制不严(一切输入都是有害)。 2. 变量到达有利用价值的函数 (一切进入函数的变量是有害的)漏洞的利用效果取决于最终函数的功能。 3. 权限配置不当,给予了过高的权限 4. 逻辑问题,属于程序之外,人的思维问题 ## 代码审计工具 在源代码的静态安全审计中,使用自动化工具代替人工漏洞挖掘,可以显著提高审计工作的效率。学会利用自动化代码审计工具,是每一个代码审计人员必备的能力。本文将简要介绍其中两款比较实用的工具:Seay、FortifySCA。 ### 1️⃣Seay: Seay是一套开源代码审计系统,使用C# 编写,需要.NET2.0以上版本环境才能运行。 ### 2️⃣Fortify SCA: Fortify SCA(Static Code Analyzer)是由Fortify软件公司(已被惠普收购)开发的一款商业版源代码审计工具,价格较为昂贵。它使用独特的数据流分析技术,跨层跨语言地分析代码的漏洞产生,目前支持所有的主流开发语言。 * Fortify SCA原理 首先通过调用语言的编译器或者解释器把前端的语言代码(如JAVA,C/C++源代码)转换成一种中间媒体文件NST(Normal Syntax Tree),将其源代码之间的调用关系,执行环境,上下文等分析清楚。 通过分析不同类型问题的静态分析引擎分析NST文件,同时匹配所有规则库中的漏洞特征,将漏洞抓取出来,然后形成包含详细漏洞信息的FPR结果文件,用AWB打开查看。