代码审计思路经验谈
发布网友
发布时间:2024-09-28 15:24
我来回答
共1个回答
热心网友
时间:2024-10-01 11:34
软件漏洞概述
漏洞是指在计算机系统安全方面存在的缺陷,可能导致系统或应用数据的保密性、完整性、可用性以及访问控制受到威胁。从另一个角度来看,漏洞可以被视为系统或软件安全策略的缺失或不足。如果软件设计和开发过程中严格遵守并实现安全策略,则可以实现安全性。此时,代码审计便是基于安全策略原理,对策略的确立或不足进行审计。
总体审计思路
1. 代码审计思路
在实际工作中,每个项目都有其预算,客户关注的点也各不相同。如何利用有限的资源,尽可能达到或超过客户预期,是项目成功与否的关键。通常,客户关注的点是容易检测出的代码安全问题。在审计上,按照80/20法则和推进先后顺序,需要将前中期审计重点放在常见安全风险点上,而不是技术难度和复杂度都高的风险点审计。
此时,合理的审计思路显得尤为重要。首先,根据项目预算确定项目时间和投入资源,根据时间和资源制定项目可执行方案。审计层面的思路是先快速了解项目架构,就像浏览书本的目录,对项目中各个模块的功能有基本的了解即可。为了提高整体效率,前期可以使用人工和工具的方式,利用工具进行初步扫描,人工进行初步审计,达到发现大多数简单安全风险的水平。中后期则进行纯人工审计,利用敏感和危险函数、数据流回溯、功能模块、安全策略、黑白盒审计等方法进行交叉审计和验证,尽可能多而全部地挖掘源代码中的安全风险问题。
2. 代码审计策略
2.1 全文通读审计
该策略是通过直接分析源代码去审计安全风险。这种方式对审计人员的能力要求较高,需要通读代码了解程序的答题结构,了解各个模块并理解代码各项功能。在阅读完整体代码之后,根据程序入口开始审计。
该方式的优点在于深度了解项目代码架构和功能后可以审计出较为复杂的安全风险点。缺点在于对审计人员的要求度较高,审计较为耗时。
示例(74CMS):
我们可以先看源码文件中是否含有API、admin、system等关键字的目录,这些目录通常需要重点关注。
接着就是查看关键代码,比如functions.php文件中有一些系统的关键函数和一些过滤规则。
接下来可以再找一找其中的配置文件,我们可以去搜config等类型的文件名称,这些文件中会包含一些项目关键配置。
2.2 功能模块审计
功能模块的审计介于全文通读、敏感和危险函数审计的两种方式之间。在降低全文源码通读的难度的前提下,适当兼顾了代码审计的深度和广度,做到比起函数审计更为全面。
在模块层面上,可以进一步进行数据类型分析、对象分析、接口分析、算法分析、函数间逻辑调用分析,针对模块功能常见的安全风险点进行逐一审计,比如用户认证、文件上传、文件管理和密码找回、支付逻辑等等功能点。
示例(74CMS):
首先我们需要在源码文件夹中查看upload、login、export等源码文件,然后根据相关的功能模块进行代码审计。
导出表格相关功能:
登录模块:
2.3 敏感和危险函数审计
敏感和危险函数审计,也是代码审计中最为常见及直接的审计方式。常见的安全风险大多数由于函数使用不当造成。根据审计经验,可以获知常见安全风险涉及的敏感和危险函数,全项目检索相关函数进行定位,通过函数前后调用关系进行审计,验证相关安全风险是否存在。
该方式的优缺点也相对明显,优点在于可以快速上手进行审计,只需检索相应敏感和危险函数,快速定位到风险点,可定向审计同类型安全风险点,效果明显。缺点则是由于没有通读全文,对程序整体架构了解不够深入,在风险点的覆盖上不够全面,深度较为欠缺。
示例:
代码审计中常见的危险函数
3. 基本概念和审计方式
在进行代码审计之前,我们需要对代码审计的一些基本概念和审计方法有一定的了解。在软件开发过程中,代码审计是一种重要的安全实践,用于发现和纠正应用程序中的安全漏洞。它通过仔细检查应用程序的源代码来识别潜在的安全风险,确保应用程序在生产环境中的安全性和稳定性。
常用的审计方式有以下几种:
4. 代码审计方法
根据敏感和危险函数回溯参数,查询可控变量,寻找敏感功能点进行数据流上的审计。在日常渗透测试过程中通常关注三点:输入点,数据流,输出点。首先可以通过系统功能来判断输入点的位置,常见输入点为各种查询、用户登录界面、搜索功能、留言板或公告等参数。可以通过对应输入点的位置来追踪数据流,主要关注是否存在过滤代码对用户可控的参数做了合法性校验。
以下有几种常见思路:
1. 根据敏感和危险函数回溯参数传递过程因为大多数漏洞是由于函数的使用不当造成的。
优点:只需要搜索相应的敏感和危险函数,即可快速地挖掘想要的漏洞,可定向挖掘、高效、高质量。
缺点:由于没有了解整体代码,对项目的整体框架了解不够深入,不容易了解参数的完整传播过程,会存在误报,通常也比较难发现逻辑漏洞。
2. 查找可控变量,正向追踪变量传递过程,查找可能存在安全漏洞的变量,从变量处发现安全问题。常见的可操控变量:username、id、password、File、url、path、search、MultipartFile等。
3. 寻找敏感功能点,尤其关注于易出现漏洞的功能点,如:文件上传、留言板、登录认证功能、找回密码等通过从敏感功能点入手来查找安全问题。
4. 第三方组件、中间件对比,检查Web应用所使用的第三方组件或中间件是否受到已知漏洞的影响。
5. 检查开发框架是否存在已知漏洞,或者是否存在由于开发人员使用不当而引起的安全风险。
代码审计思路经验谈
1. 代码审计思路 在实际工作中,每个项目都有其预算,客户关注的点也各不相同。如何利用有限的资源,尽可能达到或超过客户预期,是项目成功与否的关键。通常,客户关注的点是容易检测出的代码安全问题。在审计上,按照80/20法则和推进先后顺序,需要将前中期审计重点放在常见安全风险点上,而不是技术难度...
代码审计思路经验谈
代码审计,作为软件安全的关键环节,主要关注软件系统中的漏洞,这些漏洞可能威胁到数据保密性、完整性和可用性。漏洞本质上是安全策略的缺失或不足,通过审计,我们可以确保软件遵循安全策略并找出可能存在的问题。在审计实践中,关键在于策略的制定和执行。首先,根据项目资源和客户关注点,遵循80/20法则,优...
代码审计-无回显SSRF的奇妙审计之旅
总的来说,这次审计之旅充满了挑战与惊喜,强调了代码审计过程中细致观察、深入分析和灵活思考的重要性。通过这次探索,我们不仅发现了SSRF漏洞的利用途径,还拓宽了利用思路,展现了审计技巧与漏洞利用的紧密结合。
如何撰写计算机审计报告
在具备审计思路的前提下,审计人员也必须同时具备清晰的计算机数据分析思路,要在编写代码时尽量使用规范的缩写和通用的格式,绘制流程图按照统一标准进行选择图形。实际操作当中,必须要有耐心,认真仔细,特别是在反复出现问题时,一定要沉着冷静,思维清晰,注重细节,排除一切可能的疑点。四是要团队合作,解...
代码审计Day7 - parse_str函数缺陷
分析中提到,mchStrCode函数的关键问题在于未对定义的key进行检查,允许攻击者通过编码绕过GPC和其他过滤机制,将攻击代码直接注入目标。详细解析了mchStrCode函数的编码过程,指出其中使用$_SERVER["HTTP_USER_AGENT"]与$GLOBALS['cfg_cookie_encode']进行拼接并进行md5计算,以获取加密密钥。利用思路中提到...
漫谈漏洞挖掘
Fuzzing 方法横空出世,成为主流漏洞挖掘手段。模糊测试通过随机变异输入测试程序鲁棒性,后发展为路径/覆盖率反馈变异,显著提升测试用例的有效性。Fuzzing 在学术界爆发性增长,开源与工程应用广泛,产出的漏洞数量庞大。代码审计是另一种漏洞挖掘方法,通过阅读代码寻找安全漏洞。方法包括分类、威胁建模等步骤,...
区块链社群怎么建设好?
代码审计是借助机器学习和人工智能建立区块链代码自动审计的知识库,它可以提高代码审计效率,解决智能合约的安全问题。区块链代码审计业务通过对区块链项目、交易所、钱包和智能合约代码进行质量评测,防范数字资产安全事故,提供代码修订措施、安全防护部署等服务。据悉,天河国云区块链代码审计除了自动审计以外,还可以定制专家...
中公教育的网络安全咋样?
进行阶段性培训。企业项目实战 合作企业项目实战,由企业大牛带领你体验真实的网络攻防,同时了解企业的工作流程,真正学习实操经验。也就是说,在课程学习过程中,瑞星大牛讲师将带领你在瑞星公司做真实的网络安全项目,每个学习阶段,都有对应的项目等你操作。安全评估 渗透测试 入侵取证 代码审计 ...
公司的源代码应该怎么保护,防止泄密呢?
下面简单谈一下我的看法,讲讲如何防止员工的代码泄露。首先要明确以下两点:1、不影响被防范的成员(比如新程序员)工作。让其能正常运行、调试、查看日志等。2、对核心代码封死,需要保护的部分不可见。再来看看有哪些具体做法:签署保密协议 对源代码分级,清楚知道什么是需要保护的 为版本管理服务器上...
为了写好代码,你坚持了哪些好习惯?
那么我坚持了哪些好习惯呢?多阅读优秀的代码 有空的时候多看看一些优秀的开源框架的代码,不要求研究透彻,只要能学习到其中的一些优秀的设计理念就可以了,可以通过打断点调试的方式去看源码。多看看官方文档,它一定是最准确、最实时的资料。编写官方文档的人,也通常就是这些技术或者软件的开发者,他们...