代码审计笔记之开篇

news/2024/12/11 20:37:41/

思想

代码审计是从软件测试发展而来,早起一般采用常规软件测试与渗透测试的手段来发现源码漏洞,但是随着软件规模的越来越大,架构越来越复杂,安全漏洞和后门也越来越多越来越隐蔽,这使得传统的软件测试方法很难检出源码源码中的安全漏洞,于是通过源码来识别程序中安全漏洞的思想开始出现。可以说代码审计的出现有效解决了传统测试与渗透测试无法“细致入微”经常出现漏测的问题。

要求

既然是通过源码来识别程序中的漏洞,那么对于人员也就有了较高的要求,总结来讲以下四点,我们可以有针对的进行学习。
1、漏洞理解能力;
对于漏洞成因的深入理解,是Web漏洞挖掘的基础,而且Web应用中的漏洞在不同语言中表现形式基本一致,这使得这项能力的培养性价比非常高。
2、源码阅读能力;
能够通过阅读源码,理解其中逻辑。并且能够通过阅读文档和提问解决遇到的问题。
3、动态调试能力;
在代码逻辑复杂的情况下,通过多次调试或关键位置设置断点辅助理解源码逻辑。
4、工具使用能力;
主要为自动化代码审计工具与开发工具,因为当前代码审计的开展方式一般采用自动化+人工的方式进行,所以自动化审计工具与开发工具都需要会用。

方法

据统计,由输入数据引发的安全问题,在源代码安全漏洞中占比高达90%。所以源码审计的核心思路在于跟踪这些外部输入,是否被安全的处理。具体方法有。

通读代码法

通读代码的主要是使用先整体后局部的方法,对的整体架构以及具体业务功能进行分析;

先整体

源码框架分析
了解源码使用的底层框架(如gin,spring,django等),根据底层框架不禁可以快速推测其使可能存在的安全问题,并且可以帮助我们更加快速的厘清源码的目录结构。
源码依赖分析
根据依赖提供的API推测系统可能存在的功能,以及根据依赖判断其可能存在的开源组件漏洞(如fastjson反序列化)。
配置文件分析
通过对于配置文件的分析,可以推测系统可能存在的功能,并且可以关注配置文件中的关键key值是否加密处理,避免被结合其他漏洞进行利用。
源码路径分析
根据文件夹名称推测程序实现了哪些功能,了解一些常用框架的目录组织方式可以帮助我们更好的应对源码路径分析。

如果能找到对于源码的说明文档,建议优先快速浏览一遍,好的文档可以帮助我们快速了解一个项目。

后局部

过滤文件分析
过滤文件(功能)在代码审计中有着至关重要的地位,其直接关系到不同漏洞挖掘的优先级,以及漏洞是否会被真正的利用成功。如nginx的代理规则分析,网关服务的过滤规则分析,服务的filter链分析等;
接口权限梳理
通过了过滤规则的分析,即可对于授权接口与未授权接口进行区分梳理,通常情况下未授权接口的分析与测试优先级要优先于授权接口,因为其利用成本更加低廉,危害更大。
身份认证分析
分析完接口后一般会对于身份认证进行优先分析,如突破身份认证的屏障后后续漏洞的利用成本也会相应变低。
具体功能分析
按照自己的喜好开始分模块的阅读源码。或者止步与身份认证的分析,开始采用危险函数或功能点定向审计的方式进行分析,因为有了前面的分析,我们对于代码的架构,过滤,权限等关键设计已经有了一定的了解,这使得使用危险函数回溯与功能点定向审计的准确率,与审计效率大幅度提升。

危险函数回溯审计法

危险函数回溯方法,是以危险函数或危险配置的关注字入手,逆向追踪参数传递过程,如果参数在传递过程可以被用户操纵且没有得到过滤处理则可以初步判断存在问题。

功能点定向审计法

功能点定向审计是先根据要测试的功能,先找到它的前端调用接口,再逐步跟进排查后端代码逻辑与调用关系,以发现代码执行过程中的漏洞,通常情况下需要我们对于系统功能有一定的了解,且对于功能点可能会有哪些漏洞有一定的了解。这样才不至于盲目乱测。

自动化审计法

自动化代码审计核心为使用工具对于源码进行扫描,再通过人工去对于审计内容进行核查,选择工具需要重点考察其两个能力;
1、污点识别能力,污点识别能力决定着测试的漏报情况
2、污点最终能力,污点追踪能力决定着测试的误报情况
目前较为常用的自动化工具有:SemGrep,CodeQL,Fortify_SCA。
综合来看
1、SemGrep:漏报少,误报多,因为是纯静态的污点识别,几乎无污点最终能力;
2、CodeQL:漏报多,误报少,因为基于ast分析,所以误报少,但是其污点识别的规则较为有限,需要长期的积累完善,较为适合扫描有限几个漏洞,且有专人维护的场景;
3、Fortify_SCA:漏报适中,误报适中,因为是商业化工具,整体来讲比较均衡,适合不想折腾又有自动化代码扫描的需求;
在这里插入图片描述

``这个比较建立再已知所有功能的情况下,因为部分测试方法在不知道有对应功能的情况下是很难展开的

良好: 该方法很有可能发现漏洞;
一般: 该方法有机会发现一些漏洞,但不被认为是一个好的选择;
较差: 该方法几乎没有或根本没有机会找到列出的漏洞;

以上为对于代码审计的常用方法的说明,在测试不同类型时选择最合适的技术是测试人员的基本素养,一般情况下想完整完成一个项目各种代码审计技术会相互结合使用,而且代码审计也会与渗透测试结合使用。当前以源码为主导的渗透测试手段在某些特定场景下已经开始逐渐替代传统的黑盒渗透测试,所以学习好代码审计已经变得比较重要。


http://www.ppmy.cn/news/55755.html

相关文章

app 开发流程梳理

app 开发流程 App 开发流程可以简单地概括为以下几个步骤: 需求分析和设计:定义 App 的目标用户、功能需求、用户界面设计等。 技术选型和架构设计:选择适合自己开发的技术框架和架构,确定架构设计方案。 编码和开发&#xff1a…

【服务网格】Service Mesh 是什么?为我们解决了什么问题?

文章目录 背景一、Service Mesh 介绍Service Mesh的定义Service Mesh 诞生 二、Service Mesh 解决的问题三、Service Mesh 的原理四、Service Mesh具体是怎么实现的?Istio是什么?istio架构和主要功能Istio 1.5.1 性能总结Istio与Kubernetesistio的实战案…

泰克Tektronix DPO5204B混合信号示波器

特征 带宽:2 GHz输入通道:4采样率:1 或 2 个通道上为 5 GS/s、10 GS/s记录长度:所有 4 个通道 25M,50M:1 或 2 个通道上升时间:175 皮秒MultiView zoom™ 记录长度高达 250 兆点>250,000 wf…

10.pytorch lightning之命令行接口CLI

命令行接口CLI CLI可以很容易地配置训练(主要是model、data、trainer)时的各个参数,将代码与配置分离,避免直接改动代码。 安装依赖 pip install "pytorch-lightning[extra]"创建LightningCLI 实例化一个 Lightning…

Docker安装Gitlab【亲测可用】

ssh、postfix安装 #安装相关依赖 sudo yum install -y curl policycoreutils openssh-server openssh-clients #启动ssh服务、设置为开机自启动 sudo systemctl enable sshd sudo systemctl start sshd #安装postfix以发送邮件通知 sudo yum install -y postfix #启动p…

Django 1 - 快速上手

文章目录 关于 Django安装简单使用App访问 html关于 Django 官网:https://www.djangoproject.com相关教程 杜赛:Django搭建个人博客 https://www.dusaiphoto.com/article/2/ 源码:https://github.com/stacklens/django_blog_tutorial安装 pip install django简单使用 创建…

前端开发技术——BOM

1 下列选项中,用于获取浏览器相关信息的对象是() A、 window对象 B、 history对象 C、 navigator对象 D、 location对象 正确答案: C 2 下列选项中,表示浏览器对象模型的是() A、 DOM B…

分享一个有意思的键盘,我们就只会ctrl c+v

先上效果图&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>* {border: 0;box-sizing: border-box;margin: 0;padding: 0;}:roo…