小研究 - 面向 Java 的高对抗内存型 Webshell 检测技术(二)

news2024/10/7 8:28:42

由于 Web 应用程序的复杂性和重要性, 导致其成为网络攻击的主要目标之一。攻击者在入侵一个网站后, 通常会植入一个 Webshell, 来持久化控制网站。但随着攻防双方的博弈, 各种检测技术、终端安全产品被广泛应用, 使得传统的以文件形式驻留的 Webshell 越来越容易被检测到, 内存型 Webshell 成为新的趋势。本文面向 Java 应用程序, 总结内存型 Webshell 的特征和原理, 构建内存型Webshell 威胁模型, 定义了高对抗内存型 Webshell, 并提出一种基于RASP(Runtime application self-protection, 运行时应用程序自我保护)的动静态结合的高对抗内存型 Webshell 检测技术。实验表明, 与其他检测工具相比, 本文方法检测内存型 Webshell 效果最佳, 准确率为 96.45%, 性能消耗为 7.74%,具有可行性, 并且根据检测结果可以准确定位到内存型Webshell 的位置。

       目录

2 相关工作

2.1 学术界 Webshell 检测方法

2.2 内存型 Webshell 检测产品

2.3 Java RASP 技术


2 相关工作
2.1 学术界 Webshell 检测方法

内存型 Webshell 是 Webshell 的一种, 学术界针对 Webshell 的检测方法有很多。从检测方式的角度分为静态检测和动态检测两类。从检测对象角度分为文本内容检测、流量检测、日志检测、行为特征检测、统计学检测等五类。如表 1 所示。静态检测是不执行样本而是通过获取的检测对象进行分析, 挖掘对象的特征, 包括文本内容特征、日志访问特征、统计学特性等, 并结合机器学习或深度学习技术进行检测。静态检测又分为基于文本内容的检测、基于日志的检测、基于统计学的检测等方法。

(1)基于文本内容的检测直接针对源代码进行特征工程, 通过提取词法、语法、语义等特征检测 Webshell。该方法对已知的 Webshell 检测准确率高, 快速方便, 部署简单, 但只能检测已知特征的Webshell, 漏报率、误报率高。

(2)基于日志的检测是针对 Webshell 访问网站后在 Web 日志中留下的页面访问数据, 通过对大量的日志文件建立请求模型从而检测出异常文件。该方法产生大量日志, 存在漏报,且具有一定滞后性。

(3)基于统计学的检测是通过一些统计值来区分正常文件与恶意 Webshell。重心在于识别混淆代码, 对未经模糊处理的代码检测机制较为透明, 误报漏报多。

Webshell 传到服务器后, 攻击者总要去执行它,动态检测是根据 Webshell 执行时刻表现出来的行为模式、网络特性等进行检测。动态检测又分为基于流量的检测、基于行为的检测。(1)基于流量的检测对通信过程中Payload流量表现出的异常特征进行提取并分析, 从而实时检测网站变化。该方法部署成本高, 无法检测加密流量内容。(2)基于行为的检测是针对脚本在系统环境中的解析过程进行分析, 通常带有命令执行、文件操作和数据库操作等行为特征, 从而检测异常行为。该检测方法准确率相对较高, 但资源消耗较大, 检测效率较低。

目前学术界对内存型 Webshell 检测的研究极少,已有的检测方法无法适用于内存型 Webshell。

2.2 内存型 Webshell 检测产品 

攻防演练的热度升级备受工业界的关注, 许多工业界与时俱进地在产品中增加内存型 Webshell 的防御功能。

边界无限的靖云甲·RASP 作为一款网络攻防产品 , 能够对内存型 Webshell 进行防御, 以 Java 为例, 该功能是通过RASP在程序内部获取API接口信息, 利用 Agent 周期性地对 JVM 内存中的 API 进行风险筛查, 然后上报存在风险的类。但是该方法存在一定滞后性, 不能实时检测内存型 Webshell 的注入及存在。

微步在线的 OneEDR 是一款针对主机的入侵检测与响应的终端安全防护平台, 利用 Agent 在终端收集系统行为日志, 并结合威胁情报, 实现对主机的入侵发现与响应。针对无文件攻击方式的频繁出现, OneEDR 集成了针对 Java 平台的内存型Webshell 检测功能。针对 Agent 类内存型 Webshell,OneEDR 同样利用 Java Agent 技术对运行的 JVM 进行检测, 针对可疑高危的 Class 再做进一步检测。OneEDR 也没有对用户实时的请求进行内存型Webshell 的检测。

河马是一款专注于 Webshell 查杀的检测工具,拥有海量的 Webshell 样本及自主查杀的技术, 采用传统特征, 并结合深度检测、机器学习、云端大数据多引擎检测技术。河马 1.0 内测版本开始支持内存型Webshell 的检测, 逐渐增加对冰蝎、哥斯拉内存型Webshell 的检测功能。河马对内存型 Webshell 的检测也依赖于Java Agent技术, 将检测代码注入到Web服务的 Java 进程中对其进行恶意代码检测。河马目前还未发布官方版的内存型 Webshell 检测工具。工业界针对内存型 Webshell 的检测产品虽然响应较快, 但还处于起步阶段, 检测方案并不全面, 还在持续优化过程中, 并且大多数产品没有开源。

2.3 Java RASP 技术

RASP是一种注入到应用程序内部或应用程序运行时环境的安全技术, 与应用程序融为一体,能够实时检测和阻断攻击。与传统的 WAF(Web Ap-plication Firewall)技术相比, RASP 技术准确性更高,
更可靠。WAF 是基于模式匹配并仅对所有输入流量进行检测, 而 RASP 是在发生攻击的关键节点处同时关注输入和输出, 能够根据数据流分析输入在应用程序内部的行为, 从而精准拦截攻击。RASP 技术已在 Web 安全及漏洞检测领域被广泛应用, 例如在Web 安全检测 、脚本注入安全、Web 框架漏洞检测、智能合约漏洞防护等方面得到了有效解决方案。

对 Java 而言, RASP 技术是通过 Java Agent 方式实现的。Java Agent 允许 JVM 在加载 class 文件之前,对其字节码进行修改, 通过在程序启动前注入 RASP逻辑; 同时也支持对已加载的 class 文件进行重新加载, 通过 attach 方式在程序运行时附加 Agent, 动态注入 RASP 逻辑。
Java RASP 的技术实现主要依赖于 JVMTI(JVMTool Interface)、Instrumentation(Java Agent API)、字节码操作框架等。

JVMTI 是一套由 Java 虚拟机提供的本地编程接口集合, 可以提供 JVM 相关工具开发的接口, 可以
对虚拟机内部状态进行监测、分析, 并能控制 JVM应用程序的执行。JVMTI 的原理是在 JVM 内部的一些事件上进行了埋点, 外部程序通过实现一个JVMTI Agent, 并将 Agent 注册到 JVM 中, 当事件被触发时, JVM 会回调 Agent 的方法来实现用户逻辑。并非所有 JVM 都支持 JVMTI, 但一些主流虚拟机如Sun、IBM 等都提供了 JVMTI 实现。但是基于 JVMTI的开发是通过C/C++语言编写的Agent来实现的, 对于 Java 开发人员不太友好。

JDK 1.5 开始, Java 引入了 Instrumentation 机制。Instrumentation 是由 Java 提供的监测运行在 JVM 程序的 API, 可以基于 Java 编写 Agent 来监控或操作JVM。Instrumentation 的底层实现是依赖于 JVMTI。Instrumentation可以实现在已有的类上修改或插入额外的字节码来增强类的逻辑, 但这些实现不会改变原程序的状态或行为。Instrumentation 提供两种方式注入Agent(即RASP逻辑), 一种是premain模式在主程序运行前注入, 另一种是 agentmain 模式, 在主程序运行时注入。

Java RASP 除了依赖 JVMTI 和 Instrumentation来完成Java Agent的编写外, 还需要利用字节码操作框架来完成相应的 Hook 操作, 即对已经是字节码的class 文件进行操作, 主要有两种工具, ASM 和66 Journal of Cyber Security 信息安全学报, 2022 年 11 月, 第 7 卷, 第 6 期Javassist。ASM 字节码操作框架, 主要是在指令层面上操作字节码, 门槛高, 但体积小速度快, 性能好。Javassist 重点在源代码层面上操作字节码, 提供了源代码级 API 对字节码操作, 相比 ASM 操作简单, 但执行效率慢。

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

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

相关文章

# Linux终端控制字符详解以及简单应用实践

Linux终端控制字符详解以及简单应用实践 文章目录 Linux终端控制字符详解以及简单应用实践1 控制字符表2 控制字符 ESC (0x1B,^[)子参数表3 控制字符 ESC (0x1B,^[)子参数表 - 字符颜色参照表4 实践&#x…

Windows 如何锁定文件

一、背景 如果应用程序有操作本地文件的功能(如:读、写、复制、移动、删除等等),那么在测试或调试该应用程序时,肯定需要测试文件被其他应用程序锁定时,你的应用程序是如何处理的。 那么如何在本地模拟文件…

抓包工具Fiddler的下载安装使用

文章目录 Fiddler1. 安装与使用教程2. 抓包工具的原理 Fiddler 1. 安装与使用教程 下载地址: https://www.telerik.com/fiddler/ 安装过程只用一路next即可; 下图是我们安装好Fiddler打开的界面: 右侧显示就是我们主机发送http/https请求的记录。如果…

黑马头条 分布式任务调度 定时计算热点文章、xxl-job、kafkaStream

xxl-Job分布式任务调度 1 今日内容 1.1 需求分析 目前实现的思路:从数据库直接按照发布时间倒序查询 问题1: 如何访问量较大,直接查询数据库,压力较大问题2: 新发布的文章会展示在前面,并不是热点文章 1.2 …

Flutter——最详细(NavigationRail)使用教程

NavigationRail 简介 一个 Material Design 小部件,旨在显示在应用程序的左侧或右侧,以便在少量视图(通常在三到五个视图之间)之间导航。 使用场景: 通过Row属性,左侧或右侧菜单栏按钮 属性作用onDestinati…

Hadoop——大数据生态体系详解

一.大数据概论 1.1 大数据概念 大数据(big data):指无法在一定时间范围内用常规软件工具进行捕捉、管理 和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程 优化能力的海量、高增长率和多样化的信息资产…

前端 Jenkins 自动化部署

由于公司使用自己搭建的 svn 服务器来进行代码管理,因此这里 Jenkins 是针对 svn 服务器来进行的配置,其实跟Git 配置基本一致。 在没有自动化部署前 之前项目每次修改之后都需要本地 ​​npm run build ​​一次手动发布到服务器上方便测试和产品查看…

微服务组件Feign实战 - 解决日志配置失效

1. RPC概述 思考: 微服务之间如何方便优雅的实现服务间的远程调用? RPC 全称是 Remote Procedure Call ,即远程过程调用,其对应的是我们的本地调用。RPC 的目的是:让我们调用远程方法像调用本地方法一样。 //本地调用…

【unity之IMGUI实践】游戏玩法逻辑实现【四】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

3.11 Bootstrap 徽章(Badges)

文章目录 Bootstrap 徽章(Badges)激活导航状态 Bootstrap 徽章(Badges) 下面将讲解 Bootstrap 徽章(Badges)。徽章与标签相似,主要的区别在于徽章的边角更加圆滑。 徽章(Badges&…

短视频seo抖音矩阵号系统源码开发搭建分享

我们自主研发的短视频矩阵系统源码,技术研发的独立核心算法的视频内容管理和展示功能。无需额外的流量接口费用和复杂的配置,轻松地创建和管理短视频内容,短视频矩阵源码是指将抖音平台上的视频资源进行筛选、排序等操作,进而提升…

【ROS】ROS1人机界面开发:在QtCreator中创建ROS1功能包

【ROS】郭老二博文之:ROS目录 1、版本要求 ROS的QtCreator插件要和QtCreator版本对应一致,否则报错。 本人QtCreator版本为:10.0.1,需要下载安装ros_qtc_plugin的版本也要为10.0版本 2、安装 ros_qtc_plugin 2.1 下载插件 github:https://github.com/ros-industrial…

基于fpga实现tft屏幕显示数字、字母

简介 开发平台:ZYNQ 开发工具:Vivado 2018.3 tft屏幕分辨率:800*480 在PL端使用纯verilog实现bitmap模块,基于该模块实现在tft屏幕显示数字0-9,以及FPGA字母 Bitmap模块 该模块为5*5的bitmap,纯组合逻辑&…

7-18作业

#include<iostream>using namespace std; class My_stack { private:int* ptr; //执行堆区空间int top;int size; //记录栈顶元素public:My_stack() :ptr(new int[10]), top(-1), size(10) {}//有参构造My_stack(int size) :ptr(new int[10]), top(-1), size(siz…

Android 网络游戏开发入门简单示例

在Android系统上开发是Android开发学习者所向往的&#xff0c;有成就感也有乐趣&#xff0c;还能取得经济上的报酬。那怎样开发Android网络游戏攻略呢&#xff1f;下面介绍一个简单的入门实例。 一、创建新工程   首先&#xff0c;我们在Eclipse中新建一个名为Movement的工程…

简单工厂模式(java)

目录 结构 案例 类图 代码实现 简单咖啡工厂类 咖啡店类 咖啡类 具体咖啡类 简单工厂方法的优缺点 优点 缺点 结构 简单工厂包含如下角色&#xff1a; 抽象产品 &#xff1a;定义了产品的规范&#xff0c;描述了产品的主要特性和功能。具体产品 &#xff1a;实现或者…

前端 | (五)CSS三大特性及常用属性 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 文章目录 &#x1f4da;CSS三大属性&#x1f407;层叠性&#x1f407;继承性&#x1f407;优先级 &#x1f4da;CSS常用属性&#x1f407;像素的概念&#x1f407;颜色的表示⭐️表…

OCR学术前沿及产业应用高峰论坛202204

OCR学术前沿及产业应用高峰论坛 相关议程&#xff1a;https://mp.weixin.qq.com/s/LYoKHFad9D-gjhGlVF3Czg 广告OCR技术研究与应用-腾讯 视频制作ASR&#xff0c;ocr得到字幕 计算机动画CG OCR实践与技术创新 - 蚂蚁 loss优化 数据合成 对比学习的方式&#xff0c;什么样是…

让小程序动起来-轮播图的两种方式--【浅入深出系列002】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择啥是轮播图轮播图的关键代码最常见的轮播图代码便于理解的轮播代码两种轮播代码的比较 实际操练第一步&#xff0c;就是找到文件。第二步&#xff0c;先改动一下最显眼…

springboot整合feign实现RPC调用,并通过Hystrix实现降级

目录 一、服务提供者 二、服务消费者 三、测试效果 四、开启Hystrix实现降级功能 feign/openfeign和dubbo是常用的微服务RPC框架&#xff0c;由于feigin内部已经集成ribbon&#xff0c;自带了负载均衡的功能&#xff0c;当有多个同名的服务注册到注册中心时&#xff0c;会根…