代码审计之浅谈RASP技术

news2024/9/28 7:28:03

前言:

想摆会烂,所以就落个笔吧。
其实本来是想写关于iast技术的,但是认真思考了下,感觉笔者自己本身也不太能讲清楚iast技术,怕误人子弟。
所以最后还是基于笔者的理解以及实际应用写一篇关于RASP技术的文章,笔者能力有限,如有错误,欢迎斧正。

正文:

聊到RASP技术就得从原理聊起,但是基于笔者的角度而言不太想把这篇文章写的太长。
所以会简单化的去讲,仅提涉及到的相关技术栈,其余的东西自己去研究。
且这里的rasp谈的皆是运行时的hook技术,其余如java基于反射等特性实现的没谈。

原理:

这里从主流的二门语言进行讨论(其余笔者没深入研究过,没办法,手动狗头
JAVA:java目前主流技术还是用的字节码转换技术,即开发者使用 Instrumentation,实现hook,也就是常说的agent hook,常见的vagent内存马也就是利用的这个技术。
PHP:PHP的RASP核心是开发一个扩展在PHP模块初始化(MINIT)时,去进行替换opcode handler或用自定义函数替换全局函数进而实现rasp。
NET:NET采用的是 利用IHostingStartup接口进而去将外部程序集添加到应用中,与java的agent技术有点像? (这里只提一下,笔者没深入研究过

具体实现:

JAVA:
具体技术栈:

1、最基础的:
在java.lang.instrument.Instrumentation里的premain进行定义

package com.goddemon;

import java.lang.instrument.Instrumentation;

public class Agent {

    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("this is an agent.");
        System.out.println("args:" + agentArgs + "\n");
    }
}

然后打包生成jar包,而后利用jvm启动思路进行启动或attach方式进行启动
这里采用jvm方式进行启动,进而实现
image.png
2、进一步使用:
联动asm去进行实现动态分析类,方法
image.png
3、又如联动bytebuddy去进行分析每个方法以及拦截。
4、或者说联动management去进行分析内存?
上面的具体demo这里不写了,具体可以看看这个老哥的代码。
https://github.com/hawkingfoo/demo-agent

但是其实不局限于上面的:
5、其实还可以利用agent技术去动态修复漏洞,动态获取内存里解密的代码,实现绕过加密机制。
内存马注入等等。
6、动态的hook常见的sink点。

后面几种其实本质上还是字节码操作,只是说调用的字节码操作的api不大相同罢了。

所以其实最关键的还是字节码操作怎么写以及类如何解决agent隔离机制,和识别线程调用的问题。

PHP:
具体技术栈:

这里以train
php的rasp技术栈其实这里面比较关键的就是

1、如何开发一个扩展

本质上需要关注这三个点,具体可以参考fate0大佬写的xmark
https://github.com/fate0/xmark
image.png
其中config.m4文件进行配置如何编译与链接
.h文件进行声明扩展函数
.c文件进行具体实现拓展函数
而后打包为.so文件后采用文件运用即可

php -d "extension=xmark.so" test.php
2、开发扩展的具体思路

这里涉及到如何gdb调试以及如何查看opcode以及函数如何hook
gdb调试更改config.m4即可。
opcode利用安装vld进行查看。

函数hook方式的话,主要分为两种:
一种是hook opcode函数,前置需要利用vld进行定位具体函数的opcode,而后进行调用替换 zend_set_user_opcode_handler(ZEND_ECHO, fake_echo);
一种是hook 内部函数,获取php的全局函数体,而后替换handler为我们自己的。

应用:

OpenRasp:

开源比较成熟的项目落地,且可以进行深入研究。
这里的完全应用的话,且改规则的话,个人还是推荐openrasp,其余的iast或非单机的性能要求会很高,个人pc机不太友好。
openrasp:(产品相对成熟且可独立单机部署)
https://rasp.baidu.com/
改规则:

缺点与bypass:

缺点:

1、如何适配不同语言,如PHP,java,net等。
2、如果适配不同的框架。
3、部署如何更简单。
4、产品如何确定规则是稳定的以及自身是安全的以及稳定的。

bypass思路:

如PHP:
基于PHP的RASP,是去hook的函数,以及是基于hook的php文件。
①因为是去hook的常规函数,因此我们可以去对函数进行混淆进而绕过或者利用一些非常规函数。
如hook了如下的函数

system()
exec()

但是可以利用其他非敏感函数去进行hook

proc_open()
pcntl_exec()

②因为第二种的状况,因此我们可以去跳出PHP思路。
如利用下面这些思路去绕过
LD_PRELOAD
.htaccess
Foreign Function Interface

后言:

基于RASP的内容差不多就写到这里,有些东西可能写的比较浅,只能说将就看吧。
RASP和IAST的话其实部分东西是相通,本质在于处理追踪细节和埋点细节的问题,以后有空在细写吧。
1714751960685.png

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

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

相关文章

酷我音乐无广VIP破姐版,支持蝰蛇音效,PC端 v9.2.0.0

01 软件介绍 酷我音乐是一款优质在线音乐播放服务软件,拥有全面的音乐版权库存,中国好声音、蒙面歌王、燃烧吧少年等热门综艺的版权,包括无损音质选项,并涵盖广泛多样的音乐类型,如华语、英语、粤语音乐,以…

[暂未实现]APP签名不同保留数据覆盖安装记录

APP签名不同无法直接覆盖安装 使用adb可以卸载应用同时保留数据,但签名不同也无法覆盖安装(安装原来签名的应用打开和卸载前一样) 使用adb导出应用数据(QQ)db文件只有1kb,显然此方法也行不通

Superset二次开发之Legend功能优化

背景 Legend数据太长,影响整体图表体验,为改善用户体验,需要实现:1.数据省略展示,‘...’表示,鼠标悬停时,展示完整信息 2:文本内容从左向右滚动展示 柱状图优化 柱状图来自第三方Echarts插件,效果展示 功能核心在于红框的内容 option = {tooltip: {trigger: item,ax…

== 和 equals()区别,equals()重写问题

对于引用类型:比较的是两个引用是否相同(所指的是否为同一个对象),注:如果两个引用所指的对象内容一样,但是不是同一个对象(hashcode不一样),依然返回false,随…

Linux的基本指令(下)

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 这篇博客续博主的上篇博客Linux基本指令。 07 …

美团KV存储squirrel和Celler学习

文章目录 美团在KV存储squirrel优化和改进在水平方向1、对Gossip协议进行优化 在垂直扩展方面1、forkless RDB数据复制优化2、使用多线程,充分利用机器的多核能力 在高可用方面 美团持久化kv存储celler优化和改进水平扩展优化1、使用bulkload进行数据导入2、线程模型…

安卓手机运行 Windows 操作系统:一

在折腾上一篇文章的时候,发现了一条有趣的折腾分支,在这台老设备上运行 Windows 操作系统。 看起来应该蛮有趣的,那么就折腾一下吧。 写在前面 最早知道 WoA(Windows on ARM) 项目,是 2020 看到这篇报道…

Mysql如何通过ibd文件恢复数据

Mysql ibd文件恢复注意问题 创建数据库(随意创建)创建数据表(备注:表结构要和要恢复的表结构一致,row_format要和ibd文件的row_format一致,否则,会提示两者不一致。 当前row_formatdynamic&…

Day30:热帖排行、生成长图、将文件上传到云服务器、优化热门帖子列表、压力测试

热帖排行 不同的算分方式: 只存变化的帖子到redis中,每五分钟算一次分,定时任务 存redis 构建redis键 //统计帖子分数 //key:post:score -> value:postId public static String getPostScoreKey() {return PREFIX_POST SPLIT "…

vue2人力资源项目4路由和部门新增

组织架构路由 import layout from /layout export default {path: /department,component: layout, // 一级路由children: [{path: , // 二级路由地址为空 表示/department 显示一级路由二级路由component: () > import(/views/department),name: , // 可以用来跳转&#xf…

C#技巧之同步与异步

区别 首先,同步就是程序从上往下顺序执行,要执行完当前流程,才能往下个流程去。 而异步,则是启动当前流程以后,不需要等待流程完成,立刻就去执行下一个流程。 同步示例 创建一个窗体,往窗体里…

ES数据存储与查询基本原理

Elasticsearch(ES)简介 Elasticsearch(ES)是一个分布式、可扩展、近实时的搜索和分析引擎,它基于Lucene,设计用于云计算中,处理大规模文档检索和数据分析任务,常用于实现内部搜索引…

二维泊松方程(Neumann+Direchliet边界条件)有限元Matlab编程求解|程序源码+说明文本

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

详解面向对象-类和对象

1.面向对象与面向过程的区别 ①面向过程 :关注点是在实现功能的步骤上面,就是分析出解决问题所需要的步骤,让后函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以。对于简单的流程是适合面向过程的方式进行的&#x…

模型全参数训练和LoRA微调所需显存的分析

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

TypeScript 基础学习笔记:泛型 <T> vs 断言 as

TypeScript 基础学习笔记&#xff1a;泛型 <T> vs 断言 as &#x1f525; 引言 &#x1f44b; TypeScript (TS) 以其静态类型的魔力&#xff0c;让我们的代码更加健壮、易读且易于维护。今天&#xff0c;我们将深入探讨两个核心概念——泛型&#xff08;Generics&#x…

使用socket+Python实现ping

import os import socket import struct import select import time# 计算校验和&#xff0c;用于确保数据的完整性 def checksum(source_string):sum 0count 0max_count len(source_string)# 处理成对的字节while count < max_count - 1:val source_string[count 1] *…

结构体介绍(2)

结构体介绍&#xff08;2&#xff09; 前言一、结构体的内存对齐之深入理解为什么存在内存对齐&#xff1f;修改默认对齐数 二、结构体传参2.1&#xff1a;该怎么传参呢&#xff1f; 三、结构体实现位段3.1什么是位段位段的内存分配位段的跨平台问题 总结 前言 根据之前讲了结…

金融行业AI大模型百项应用案例综述【大模型系列】

逐浪金融大模型的玩家&#xff0c;除了BAT、华为等高科技巨头&#xff0c;试图以技术优势充当产业链的“卖铲人”&#xff0c;更多的还是金融和类金融企业&#xff0c;包括银行、保险、互金、券商等&#xff0c;既不想被喧宾夺主&#xff0c;又不想肥水外流&#xff0c;都在押注…

基于Springboot的校园竞赛管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园竞赛管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…