代码审计笔记之开篇

思想

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

要求

既然是通过源码来识别程序中的漏洞,那么对于人员也就有了较高的要求,总结来讲以下四点,我们可以有针对的进行学习。
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:漏报适中,误报适中,因为是商业化工具,整体来讲比较均衡,适合不想折腾又有自动化代码扫描的需求;
在这里插入图片描述

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/15729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

达梦数据库中注释的使用

在管理规模较大的数据库时,我们往往需要面对大量的表与视图,与此同时在表与视图中可能会存在着许多的字段,让人难以迅速分辨,不利于对于数据库对象的管理。除了在命名时,对于有意义的表、视图及列,应尽量赋…

你可能需要的IDEA-Java开发插件

Idea开发插件 Alibaba Cloud AI Coding Assistant 阿里云智能编码插件(Alibaba Cloud AI Coding Assistant)是一款AI编程助手,它提供代码智能补全和代码示例搜索能力,帮助你更快更高效地写出高质量代码。 让我觉得比较有意思的…

CentOS防火墙的常用快捷命令

CentOS是免费开源的Linux发行版之一,它兼容RHEL并由社区进行维护,大多数美国服务器提供对该系统支持。在使用CentOS系统时,您需要了解一些常用命令,比如开启、查看、关闭防火墙等。本文将介绍下CentOS防火墙的常用命令。 CentOS是一种面向企业级服务器环境的Linux发行版,…

直击德国PLS展,联诚发倾力打造沉浸式视觉盛宴!

当地时间4月25-28日,备受关注的2023德国法兰克福国际专业灯光音响展ProlightSound(以下简称“PLS展”)在德国法兰克福盛大召开。联诚发携多款创新产品及多领域的应用解决方案精彩亮相,为全球客户打造沉浸式视觉盛宴,展…

JavaScript详解

一、前置知识 1.1第一个JS程序 JavaScript 代码可以嵌入到 HTML 的 script 标签中。 1.2JS书写格式 1.2.1行内样式 直接嵌入到html元素内部 1.2.2内嵌格式 1.2.3外部格式 注意这种情况下,script标签中间不能写任何代码,必须空着,就算…

java内存占用过大分析,mat内存快照分析

背景 最近功能模块上线后,生产内存占用显著提升,查看gc日志发现年轻代频繁从2G回收到60M左右,猜测是在方法中频繁创建大对象导致,由于一时间无法通过review代码找出问题所在,只好将生产jvm内存快照dump后通过java mem…

HCIA-RS实验-STP和RSTP(2)

接上一篇文章;其他的不多说,新建一个新的配置设备;如果接上一个实验的配置的话,建议先把所有配置删除后再执行;新的拓扑也与上一个实验一致; 目录 创建新配置 配置RSTP 查看stp版本 配置边缘端口 …

深度学习 GNN图神经网络(四)线性回归之ESOL数据集水溶性预测

线性回归之ESOL数据集水溶性预测 一、前言二、ESOL数据集三、加载数据集四、数据拆分五、构造模型六、训练模型七、测试结果八、分类问题参考文献 一、前言 本文旨在使用化合物分子的SMILES字符串进行数据模型训练,对其水溶性的值进行预测。 之前的文章《深度学习…

vue - pc端实现对div的拖动功能

实现对div的拖动功能,需要先要知道以下的一些原生事件和方法; 1,事件: 方法描述onmousedown鼠标按钮被按下onmousemove鼠标被移动onmouseup鼠标按键被松开 2,方法: 方法描述event.clientX返回当事件被触发时鼠标指针相对于浏览…

02 【Sass语法介绍-变量】

sass有两种语法格式Sass(早期的缩进格式:Indented Sass)和SCSS(Sassy CSS) 目前最常用的是SCSS,任何css文件将后缀改为scss,都可以直接使用Sassy CSS语法编写。 所有有效的 CSS 也同样都是有效的 SCSS。 Sass语法介绍-变量 1.前言 Sass …

【VM服务管家】VM4.0平台SDK_2.5 全局工具类

目录 2.5.1 全局相机:全局相机设置参数的方法2.5.2 全局相机:获取全局相机列表的方法2.5.3 全局通信:通信管理中设备开启状态管理2.5.4 全局通信:接收和发送数据的方法2.5.5 全局变量获取和设置全局变量的方法 2.5.1 全局相机&…

2023-4-27-深入理解C++指针类型间强制转换

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

记一次峰回路转的注入

0X01 背景 自己之前写过一篇记录,当时是由于之前是一位校友刚做开发,叫我友情帮忙测试一波,由于是开发的新手,漏洞比较多,所以直接从注入开始讲起,但是到getshell的过程也算是一场峰回路转再跌跌撞撞的路程…

【Java笔试强训 17】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥杨辉三角…

洞见数字时代的创新原力,数云原力大会暨2023TECH第五届数字中国技术年会开幕

4月25日,神州控股、神州信息、神州数码集团共同主办的数云原力大会暨2023TECH第五届数字中国技术年会开幕。开幕式上,数百位投身并关注数字技术、数字产业发展的学者、技术专家、从业者、行业用户齐聚一堂,围绕云原生、数字原生、大数据、金融…

这一次,让Kotlin Flow 操作符真正好用起来

前言 Kotlin Flow 如此受欢迎大部分归功于其丰富、简洁的操作符,巧妙使用Flow操作符可以大大简化我们的程序结构,提升可读性与可维护性。 然而,虽然好用,但有些操作符不太好理解,可惜的是网上大部分文章只是简单介绍其…

吴恩达 Chatgpt prompt 工程--1.Guidelines

课程链接 Setup #安装 !pip install openai#设置key !export OPENAI_API_KEYsk-... # or #import openai #openai.api_key "sk-..."import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv())openai.api_key os.geten…

记一次SSRF漏洞的学习和利用

导语:本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞。 1.前言 本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞。此漏洞并结合腾讯云的API接口,可以获取大量嘶吼服务器的敏感信息。利用这些敏感信息,又…

android10 关闭默认输入法的“更正建议”

1. 场景 使用系统默认的输入法,在进行输入时,在输入法上方,会显示更正建议列表,同时会干扰我们的输入内容:会自动补全到输入框,而且删除不掉,甚至越删越多,非常讨厌。 如下&#x…

一段凄惨Android 面试经历分享,败在了项目架构原理上……

大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。 这是一位网友分享的面试经历,他准备了3个月,刚刚参加完字节跳动的第三面,视频面&#xff…