摘要
WebShell 是一种通过浏览器来进行交互的Shell,而且是黑客通常使用的一种恶意脚本,通常被攻击者用来获取对应用服务器的某些操作权限。攻击者通过渗透系统或网络,然后安装 WebShell ,攻击者可以在应用服务器上执行敏感命令、窃取数据、植入病毒,危害极大。而且, WebShell 隐蔽性极强,传统的流量侧方案对其防御效果不佳。本文将为大家介绍一下常见的 WebShell 类型以及 RASP 如何对其进行防御。
WebShell分类
WebShell 需要根据目标网站使用语言进行构造,常见的有 PHP、Jsp、Asp、Python、Lua 等,大体上可以分为以下几种类型:
图1 WebShell分类
WebShell工作原理
通常,WebShell 攻击有几个阶段:首先,攻击者需要在服务器上构建一个可提供远程访问的持久性机制;然后,根据需要进行提权、窃取敏感数据、安装挖矿或勒索程序以及进一步横向渗透等违法犯罪活动。
图2 WebShell工作原理
1. 持续的远程访问
WebShell 脚本为攻击者提供了一个后门,允许他们远程访问暴露的服务器。攻击者会基于同一个位置进行持续的攻击活动;甚至,有些攻击者会对自己植入的 WebShell 进行加密,并尝试阻止别的攻击者利用相同的方式植入后门,以保证只有自己才能远程访问。
2. 权限提升
WebShell 通常以用户权限运行,该权限可能受到限制。攻击者会利用操作系统漏洞来获取 root 权限,以达到提升权限的目的。
3. 网络嗅探并攻击
攻击者可以使用 WebShell 嗅探网络流量来识别内网中活跃主机、防火墙或路由器,最终获得大致的网络拓扑,该过程可能需要一定时间,在此期间内攻击者将保持低调以避免被发现。
成功获得网络拓扑后,攻击者会进行横向渗透,甚至可能使用受感染的系统来攻击其他目标。通过多级跳转进行的攻击通常使得溯源变得更加困难。
4. 僵尸网络
WebShell 可用于将服务器连接到僵尸网络(由攻击者统一控制的系统网络)。当攻击者从控制端下发命令后,所有处于僵尸网络的服务器会同时执行相同的命令。
WebShell攻击的防御思路
对于 WebShell ,它依赖应用程序在设计和编写时的缺陷,来执行一些不被授权的操作。从本质上讲,它依赖程序运行时环境进行解析、执行后才能发挥作用。市面上主流的应对 Web Shell 的方式有如下几种:
通过 WebShell 流量特征,使用模糊匹配、正则等方式进行检测,拦截异常流量。通过云端威胁情报中心样本分析,离线或在线进行规则扩充和升级。
通过攻守双方信息不对等的优势,预先埋好虚拟环境,让攻击者误以为进入了正常的业务系统,在发现攻击者上传 WebShell 或执行敏感操作时触发报警。
通过特征库比对、AST 分析等方式,对 Web 应用文件系统进行扫描,检查异常文件。通常会结合沙箱模拟运行来精确判断可疑文件是否具有风险。
部署在操作系统级别的入侵检测系统,可以定期扫描并监控文件系统变更,有些还可以通过日志或定制内核的方式监控命令执行,当发现异常命令后发出告警。
RASP将自身注入到应用程序中,与应用程序融为一体,实时监测、阻断攻击,使程序自身拥有自保护的能力。并且应用程序无需在编码时进行任何的修改,只需进行简单的配置即可。
云鲨 RASP
云鲨 RASP 是悬镜安全推出的基于运行时情境感知技术的新一代应用威胁免疫平台,依托于经过市场多年打磨的 “代码疫苗” 技术,在保证最大业务兼容性和将主动防御能力 “注入” 到业务应用中,借助强大的应用上下文情景分析能力,可捕捉并防御各种绕过流量检测的攻击方式,提供兼具业务透视和功能解耦的内生主动安全免疫能力,使您的业务应用实现安全内建。
接下来,我们简析一下云鲨RASP针对WebShell攻击是如何解决的。
01 大马、小马、一句话木马拦截
此类 WebShell 依赖文件上传、写入等操作实现,云鲨 RASP 通过函数插桩(Hook) 和语义分析,实现 WebShell 精准拦截,不会导致恶意文件落地。以几个典型的一句话木马为例:
<% eval request("hack") %>
3.jsp
<% Runtime.getRuntime().exec(request.getParameter("hack")); %>
以上三条一句话木马均可以分为三个部分:
语法标签:` ?>`、`<% %>`
数据传递:`$_POST[]`、`request()`、`request.getParameter()`
执行命令:`eval`、`Runtime.getRuntime().exec()`
由于云鲨 RASP 工作在应用运行时环境,可以直接获取到解密后的流量,无需考虑加解密场景和伪装和变形的流量。只需要根据对应语言设计对应的识别参数,只要用户请求中包含此类逻辑,并且涉及到黑名单函数,即可进行精准拦截。检测逻辑如下图所示:
图3 检测逻辑
02 内存马
内存马相比于常规 WebShell 更容易躲避传统安全监测设备的检测。以 Java 内存马为例,主要有以下两种类型:
对于方式一和构造 InstrumentationImpl 类的内存马,它需要先利用 RCE,例如 log4j2 等反序列化、JNDI 注入漏洞。对于 jar 包利用,则需要先上传 agent.jar。
由于内存马变化较多,云鲨 RASP 的采用三步走的方式来防御内存马:
Step 1 - 常见敏感类监控
* `javax.servlet.Filter`
* `javax.servlet.Servlet`
* `javax.servlet.ServletRequestListener`
* `javax.servlet.http.HttpServlet`
* etc.
Step 2 - 热门漏洞虚拟补丁和 SCA 分析
针对近几年常见的漏洞,提供虚拟补丁进行防护,相比云鲨缺省规则更精准、更高效:
提供运行时软件组成成分分析,能够快速梳理出业务系统正在使用的风险组件,并快速下发虚拟补丁,提供临时防护。
Step 3 - 底层命令执行实时监控
相信通过 Step 1-2 已经将大部分基础的内存马利用方式阻挡在外了,但是安全这事不能存在侥幸心理。我们从攻击者的动机考虑,“Get Shell” 的最终目的是获取权限、获取敏感数据。云鲨 RASP 通过对底层命令执行方法、I/O 等进插桩,只要触发了敏感行为探测逻辑,云鲨 RASP 均能在第一时间进行拦截并上报。
写在最后
RASP 作为防御 WebShell 的最后一公里,可以在系统被攻陷前提供临时防护,但是更重要的是如何构建更健壮、漏洞更少的应用程序。和 RASP 技术相似,IAST 技术也采用了侵入式探针技术,云鲨 RASP 探针同时整合了 IAST 功能和 Runtime-SCA 功能,通过同一个探针就可以覆盖软件开发生命周期的全流程,涵盖了应用安全测试、软件组成成分分析以及运行时自适应威胁免疫,真正实现 “安全左移,敏捷右移”,助力构建安全的软件生命周期。
关于悬镜安全
悬镜安全,DevSecOps敏捷安全领导者。由北京大学网络安全技术研究团队“XMIRROR”发起创立,致力以AI技术赋能敏捷安全,专注于DevSecOps软件供应链持续威胁一体化检测防御。核心的DevSecOps智适应威胁管理解决方案包括以深度学习技术为核心的威胁建模、开源治理、风险发现、威胁模拟、检测响应等多个维度的自主创新产品及实战攻防对抗为特色的政企安全服务,为金融、能源、泛互联网、IoT、云服务及汽车制造等行业用户提供创新灵活的智适应安全管家解决方案。更多信息请访问悬镜安全官网:www.xmirror.cn