代码审计之SAST自动化

前言:

很久没写文章了,有点忙,落个笔,分享一些捣鼓或说适配好的一些好玩的东西。
脚本工具不开源,给一些思路,希望能给大家带来一些收获。
笔者能力有限,如有错误,欢迎斧正。

正文:

基于代码审计的原理去思考,正则匹配阶段,ast阶段,ir,cfg图阶段,ql查询语言阶段。
联动这四个方向相互的优势去结合做适配好自动化代码审计,去进行处理好soure,sink,调用栈关系。

source,sink分析:

这里的source和sink其实思路笔者采用的是利用第一阶段的正则匹配的思路去做,为什么不用其他阶段去做的原因,因为笔者追求的是非漏报,而后在联动调用栈分析达到完整的代码分析,而不是追求不误报。

基于这种状况去做的话,正则匹配应该是最优解。

2个方面:
1、代码开发简单。
2、不会出现ql,ir,cfg这种的依赖缺失构造不全的情况。如如果是闭源代码的情况下,后面的几种就会出现很多坑点。

调用python去进行正则匹配分析,自动化提取出相关的参数入口点,以及参数变量,危险函数,即可。

source:
如直接匹配常见的getParameter函数以及其他的参数函数即可匹配到常见是source函数
image.png
以及提取出里面的参数变量值
image.png

sink:
同理也调用匹配常见的危险函数即可。
image.png

调用栈分析:

原理思路1:

参考了很多项目以及原理。
目前大多数还是以asm,soot,bcel的思路去做的类,函数,一层调用关系提取分析。
然后结合指针分析,或者jvm栈帧去追踪污点流,最后利用结合一些算法去产生一个完整的调用栈。

像gadgetinspector:
就是利用分析了相关的类,函数,调用关系等,然后利用jvm栈帧确定污点流,最后结合算法产生完整调用栈,输出一个完整的结果。
image.png
image.png
但是经过笔者实测这种方式的污点流追踪对于没有返回值赋值的会导致追踪不到,导致漏报。

基于上面分析的思路我们去可以进行仿写一个类似的工具,结合每个语言的开源解析代码去提取分析出相关的函数,类,调用关系,而后进行数据处理,获取到完整的调用栈。

优势:可批量挖掘,且工具可以自己DIY,如优化算法,优化source,sink限定。
缺点:开发难度会更高,需要关注污点的问题。

如net:

net可以结合dnlib去解析dll代码提取出里面的方法,类,调用关系。而后转深度算法去进行遍历,最后获取到一个完整的调用栈。
image.png
image.png
image.png

java同理:

调用开源的java-callgraph获取到精准的类分析,方法分析,caller分析,而后在结合深度算法获取到一条完整的调用关系。
image.png
image.png

原理思路2:

这种是笔者查看了一个开发的开源项目后,产生的一种思考。
一种多语言通解思路,开发插件,调用引擎的调用关系分析+深度算法 实现获取大量的调用关系。
优势:
1、可适配多种语言,只要引擎可支持该语言的调用分析,即可直接获取。
2、插件开发简单,不用去关注污点等问题了,直接调用引擎的巨大优势实现。
3、由于引擎的强大能力,因此不用担心断的问题。
缺点:
插件不能实现批量自动化挖掘。

如idea的调用关系分析image.png
然后在去开发一个插件,而后转dot进行获取调用关系。
下面调用的方法
调用他的方法:
image.png
他调用的方法:image.png

结合:

然后结合sink,source的代码匹配出常见的危险函数后,在结合上面的调用栈,即可快速挖掘出一条有漏洞的调用链。
且还可以继续做限定,如匹配出哪些地方有source然后结合获取到的调用栈 拼接一个有漏洞的点就可实现自动化出来了。

后言:

有些老哥可能会说,可以直接利用已成熟的工具,如tabby,codeql,joern,soot,bytecodedl,doop这些思路去玩,但是经过笔者实测,这些相关工具对应非开源产品的处理不太友好。
当然也可能是笔者的问题,如果有老哥知道如何解决,望指教。

所以怎么说呢,结合起来用吧,如果是开源产品,挖掘链这种,利用这些工具也还行,但是对于闭源项目或是有缺的项目,或许基于自己的思路会更好。

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

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

相关文章

使用docker创建rocketMQ主从结构,使用

1、 创建目录 mkdir -p /docker/rocketmq/logs/nameserver-a mkdir -p /docker/rocketmq/logs/nameserver-b mkdir -p /docker/rocketmq/logs/broker-a mkdir -p /docker/rocketmq/logs/broker-b mkdir -p /docker/rocketmq/store/broker-a mkdir -p /docker/rocketmq/store/b…

Maven解决找不到依赖项

报错如图 方案一&#xff1a;Maven的Setting文件中添加albaba的镜像文件 1.下载maven &#xff1a;Maven – Download Apache Maven 2. 配置镜像 更改成这个&#xff1a; <mirror> <id>alimaven</id> <name>aliyun maven</name> <url&g…

Python量化炒股的财务因子选股

Python量化炒股的财务因子选股-财务因子选股 选股是股市投资的第一步&#xff0c;是最基础的一步&#xff0c;也是最重要的一步。 初识财务因子选股 量化选股是利用数量化的方法选择股票组合&#xff0c;期望该股票组合能够获得超越基准收益率的投资行为。总的来说&#xff…

PDF 正确指定页码后,挂载的书签页码对不上

这个问题与我的另一篇中方法一样 如何让一个大几千页的打开巨慢的 PDF 秒开-CSDN博客 https://blog.csdn.net/u013669912/article/details/138166922 另作一篇的原因 一篇文章附带一个与该文章主题不相关的问题时&#xff0c;不利于被遇到该问题的人快速搜索发现以解决其遇到…

数据结构学习/复习1--时间复杂度计算/异或的几个实际用途

一、什么是数据结构和算法 1注&#xff1a;在内存中的存储管理数据 2注&#xff1a;解决问题的方法 二、时间复杂度 1.算法的效率 2.时间复杂度的概念 计算时间复杂度案例1&#xff1a; 计算时间复杂度案例2&#xff1a; 计算时间复杂度案例3&#xff1a; 计算…

问题(十五)性能分析组件类加载问题

一、引言 最近作者在做性能分析服务的agent&#xff0c;有个功能是在代理启动的时候加载配置中心&#xff0c;拿到具体哪些目录下的类需要增强&#xff0c;这里碰到了类加载失败的问题。 二、类加载 1、问题 这里使用了pom的设置&#xff0c;在class文件被拉进去&#xff0c;…

HTML5(1)

目录 一.HTML5(超文本&#xff08;链接&#xff09;标记&#xff08;标签<>&#xff09;语言) 1.开发环境&#xff08;写代码&#xff0c;看效果&#xff09; 2.vscode 使用 3.谷歌浏览器使用 4.标签语法 5.HTML基本骨架&#xff08;网页模板&#xff09; 6.标签的…

Jetson Orin NX L4T35.5.0平台LT6911芯片 调试记录(2)vi discarding frame问题调试

基于上篇调试记录 Jetson Orin NX L4T35.5.0平台LT6911芯片 调试记录(1)MIPI问题调试-CSDN博客 1.前言 当通过gstreamer持续捕获视频设备时,帧数会下降,并且I输入越高,丢失的帧数越多。 当达到4k30hz时,它完全无法使用,系统会在几秒钟的收集后崩溃并重新启动 4k30hz …

【C++】:类和对象(下)

目录 一&#xff0c;再谈构造函数1.初始化列表2. 隐式类型转换的过程及其优化3. 隐式类型转换的使用4. explcit关键字5. 单参数和多参数构造函数的隐式类型转换 二&#xff0c;static成员1.静态成员变量2.静态成员函数 三&#xff0c;友元3.1 友元函数3.2 友元类 四&#xff0c…

Ansys Speos|进行智能手机镜头杂散光分析

本例的目的是研究智能手机Camera系统的杂散光。杂散光是指光向相机传感器不需要的散光光或镜面光&#xff0c;是在光学设计中无意产生的&#xff0c;会降低相机系统的光学性能。 在本例中&#xff0c;光学透镜系统使用Ansys Zemax OpticStudio (ZOS)进行设计&#xff0c;并使用…

LangChain入门2 RAG详解

RAG概述 一个典型的RAG应用程序,它有两个主要组件&#xff1a; 索引&#xff1a;从源中获取数据并对其进行索引的管道。这通常在脱机情况下发生。检索和生成&#xff1a;在运行时接受用户查询&#xff0c;并从索引中检索相关数据&#xff0c;然后将其传递给模型。 从原始数据…

机器学习:深入解析SVM的核心概念【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂&#xff0c;所以导师直接推荐我阅读周志华的《西瓜书》&#xff01;&#xff01;然后仔细阅读其中的第六章&#xff1a;支持向量机 间隔与支持向量 **问题一&#xff1a;什么叫法向量&#xff1f;为什么是叫法向量**什么是法向量&#xff1f;…

ChatGPT向付费用户推“记忆”功能,可记住用户喜好 | 最新快讯

4月30日消息&#xff0c;人工智能巨头OpenAI宣布&#xff0c;其开发的聊天机器人ChatGPT将在除欧洲和韩国以外的市场全面上线“记忆”功能。这使得聊天机器人能够“记住”ChatGPT Plus付费订阅用户的详细信息&#xff0c;从而提供更个性化的服务。 OpenAI早在今年2月就已经宣布…

AJAX家政系统 自营+多商家(高级授权)+独立端口 -源码下载

应用介绍 后台&#xff1a;https://service.hnajax.com/hxeJVakAdf.php/index/login AJAX家政系统 自营多商家(高级授权)独立端口 基于FastAdmin和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统&#xff0c;用户端、服务端(高级授权)、门店端(高级授权)各端…

HTML:认识HTML及基本语法

目录 1. HTML介绍 2. 关于软件选择和安装 3. HTML的基本语法 1. HTML介绍 HyperText Markup Language 简称HTML&#xff0c;意为&#xff1a;超文本标记语言 超文本&#xff1a;是指页面内可以包含的图片&#xff0c;链接&#xff0c;声音&#xff0c;视频等内容 标记&am…

76、堆-数据流的中位数

思路&#xff1a; 这个问题是动态数据流中位数查找问题。在数据流中&#xff0c;数据是逐个到来的&#xff0c;而我们需要在任何时候快速返回已有数据的中位数。中位数是将数据集分成两个等长的子集&#xff0c;一个包含所有较小的元素而另一个包含所有较大的元素。 为了高效解…

升级 Vite 5 出现警告 The CJS build of Vite‘s Node API is deprecated

错误描述 vue3-element-admin 项目将Vite4 升级至 Vite5 后,项目运行出现如下警告: The CJS build of Vites Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.图片 问题原因 Vite 官方弃用 C…

WIN10 anaconda 安装 CondaError: Run ‘conda init‘ before ‘conda activate‘

1 下载 https://www.anaconda.com/download/success 2 安装 3 修改环境变量 安装后修改环境变量 4 winrun 进入命令窗口 输入cmd 输入 conda info 5 创建 虚拟环境 conda create -n yolov8 python3.8 -y 6 CondaError: Run ‘conda init’ before ‘conda activate’ c…

在Primavera P6 中维护自定义活动栏

前言 自从 Henry Gantt 在 1910 年左右提出这个想法以来&#xff0c;以图形方式显示项目进度表并沿时间刻度显示条形图一直延续到当今最复杂和流行的项目进度系统中。在本文中&#xff0c;我们将仔细研究 Primavera P6 Professional 中的甘特图&#xff0c;并探索一些自定义其…

【新知实验室 - TRTC 实践】音视频互动 Demo、即时通信 IM 服务搭建

一、TRTC 初识 TRTC 是什么 TRTC&#xff08;Tencent RTC&#xff09;腾讯实时音视频&#xff0c;源自于 QQ 音视频团队&#xff0c;是基于 QQ 音视频多年来的音视频技术积累&#xff0c;位于腾讯云的 RTC 云服务。TRTC 支持腾讯会议、企业微信直播、微信视频号、腾讯云课堂、…