代码审计笔记之开篇

news2024/11/27 23:25:22

思想

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

要求

既然是通过源码来识别程序中的漏洞,那么对于人员也就有了较高的要求,总结来讲以下四点,我们可以有针对的进行学习。
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.coloradmin.cn/o/479423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java入门合集】第二章Java语言基础(一)

【Java入门合集】第二章Java语言基础(一) 博主:命运之光 专栏JAVA入门 学习目标 掌握变量、常量、表达式的概念,数据类型及变量的定义方法; 掌握常用运算符的使用; 掌握程序的顺序结构、选择结构和循环结构…

C/C++每日一练(20230501)

目录 1. 对链表进行插入排序 🌟🌟 2. 找出小于平均值的数 ※ 3. 二叉树的最大深度 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 对链表进行…

【五一创作】Apollo(入门)

Apollo(入门) Quick Start 配置中心是一种统一管理各种应用配置的基础服务组件 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且…

Springboot 实战一个依赖解决XSS攻击

1. 什么是XSS介绍 XSS: Cross Site Scripting,为不和层叠样式表(Cascading Style Sheets, CSS) 的缩写混淆,故将跨站脚本攻击缩写为XSS。 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中 Web里面的Scrip…

【高并发】并发数据结构与多核编程

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于多处理器编程的艺术进行的,每个知识点的修正和深入主要…

【JavaEE初阶】认识线程(Thread)

目录 🌾 前言 🌾 了解线程 🌈1.1 线程是什么? 🌈1.2 一些基本问题 🌾2、创建线程的方式 🌈 2.1 继承Thread类 🌈 2.2 实现Runnable接口并重写run()方法 🌈 注意…

有哪些好的学习方法?学霸们自己在用,却不愿意透露的

临近期末,很多家长都在跟我咨询,怎么才能提升孩子的学习效率? 原因就是,每天看着自己的孩子学习到深夜,但不少内容还是记不住, 学习和复习的效果非常的不理想。 今天,给大家分享的方法,是我自己一直也都在用的方法,效果非常的棒。 学长Ron,江苏某省重点高中毕业,高…

给公司搭建一个人才库系统,前台(信息填写+简历上传)后台(筛选功能+下载简历)

首先指出目前代码的不足之处: 如果公司使用,代码还存在风险问题,需要增加防火墙、防PHP攻击、后台加验证等操作 以下指南: 1.Mod Security 和 Fail2Ban 是开源的安全软件,您可以在宝塔面板上安装和配置这些软件来增强您…

【JUC】ThreadLocal

【JUC】ThreadLocal 文章目录 【JUC】ThreadLocal1. 概述2. Thread、ThreadLocal、ThreadLocalMap 关系2.1 Thread 和 ThreadLocal2.2 ThreadLocal 和 ThreadLocalMap2.3 三者之间的关系 1. 概述 ThreadLocal 提供线程局部变量。这些变量与正常的变量不同,因为每一…

Java 基础入门篇(一)—— Java 概述

文章目录 一、Java 概述二、Java 的产品 JDK2.1 JDK 安装2.2 Java与 Javac 介绍2.3 Java 程序的开发步骤 三、Java 程序的执行原理四、JDK 的组成五、Java 的跨平台工作原理 一、Java 概述 Java 是 sun 公司在 1995 年推出的一门计算机高级编程语言,其语言风格接近人…

音视频技术开发周刊 | 291

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 谷歌将 AI 芯片团队并入云计算部门 追赶微软和亚马逊 OpenAI推出的ChatGPT获得一定成功,微软是OpenAI的重要投资者,它将ChatGPT植入必应搜索&#…

Java 基础入门篇(三)—— 数组的定义与内存分配

文章目录 一、数组的定义1.1 静态初始化数组1.2 动态初始化数组1.3 数组的访问 二、数组的遍历三、数组的内存图 ★3.1 Java 的内存分配3.2 数组的内存图3.3 两个数组变量指向同一个数组对象 四、数组使用的常见问题补充:随机数 Random 类 一、数组的定义 数组就是…

机器视觉工程师职场四点“心态>交流=思路>知行合一”

视觉人机器视觉团队,他们热爱机器视觉行业,爱学习,爱分享。这一路上,首先感谢粉丝们805天一如既往的支持。我想团队拥有这些粉丝,是富有的,也是我们一直创作的动力。 是否记得毕业季,自己的豪言壮语。希望你毕业三年后,无论结果如何,不忘初心,继续前行。 机器视觉工程…

Dart - 爬取Android Studio历史版本信息

文章目录 前言开发环境开发过程1. 遵循robots协议2. 页面结构分析3. Dart项目创建4. Dart项目运行与调试5. 第三库依赖6. 项目完整源码 运行结果最后 前言 整理Android Studio历史版本信息时发现有点多,于是想一劳永逸写一个简单的爬虫抓取一下数据并生成我想要的格…

【ansys】网格划分-优化、改善网格质量、修复网格、减小skewness、增大Orthogonal Quality的技巧

一、分析几何结构网格划分拓扑关系,调整网格尺寸 优化策略1:如果发现质量差的网格单元聚集在某一个实体附近,基本说明是这个实体的网格划分定义存在优化的地方。 例如下面这个几何模型。一个薄壁状长方体,加上一个模具框架&#x…

代码优美,搬砖不累:探索高质量代码之路

一、 前言 写出高质量代码是每个程序员的追求,也是提高自己编程能力的必经之路。高质量的代码可以提高软件的可维护性、可读性、可扩展性和可移植性等,降低软件开发和维护的成本。本文将介绍一些如何写出高质量代码的实用技巧和方法。 二、高质量代码的…

搞定Maven全功能,来从根上理解Maven拉包原理

依赖 生命周期与插件 模块聚合 模块继承 属性 版本管理 环境配置 私服 <dependencyManagement>的作用 在一次需求迭代中&#xff0c;我要求同事把写好的 RPC 接口打好包上传到公司私服上。然而&#xff0c;她并不熟悉 Maven&#xff0c;仅仅掌握了最基础的使用方…

【24】linux进阶——初识shell

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…

管家婆辉煌Ⅱ 13.32版安装方法

因管家婆辉煌版已经长期不更新&#xff0c;现已经出现蓝屏的问题&#xff0c;故此新开此贴&#xff0c;慢慢更新安装方法。 首先管家婆下载地址&#xff1a;http://www.grasp.com.cn/download.aspx?id116 先安装sql server 2008 下载后&#xff0c;运行安装&#xff0c;请注…

《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第八章课后习题参考答案

第八章 面向对象技术与UML 课后习题参考答案 一、单项选择题 D &#xff08;2&#xff09;C &#xff08;3&#xff09;B &#xff08;4&#xff09;D &#xff08;5&#xff09;C &#xff08;6&#xff09;B &#xff08;7&#xff09;A &#xff08;8&#xff09;C&…