实战攻防|WebShell的那点事儿
作者: 日期:2021年05月26日 阅:3,996

最新的Microsoft 365 Defender数据显示,从2020年8月到2021年1月,它每月检测出14万个shell,几乎是去年平均每月7.7万次的两倍。由此,可以看出全球范围内WebShell的攻击数量翻倍增长。

图1 Web Shells数量增长对比图

WebShell是一种脚本,通过利用web应用程序漏洞或配置漏洞,被植入到web服务器中,以实现对服务器功能的远程访问和代码执行。WebShell可以用任何语言编写,如PHP、ASP、Python和Unix shell脚本。成功利用该漏洞可使攻击者远程发出指令、上载、删除、下载或执行操作系统和Web服务器上的敏感文件。也正因如此,常被攻击者应用于攻防演练活动中,以达成攻击目标服务器的目的,从而获得控制权。在今年的攻防演练活动中,我们着实检测出了很多内存WebShell攻击的情况。

图2 攻防演练中内存WebShell攻击实例

Web Shell的特点

1、持续的远程访问
通常,一个WebShell脚本包含一个后门,它允许攻击者远程访问并可能在任何时候控制一个面向Internet的服务器,这为后期的持续远程访问提供了便利。不过,一些流行的WebShell使用密码认证和其他技术来确保只有上传WebShell的攻击者能够访问它。这些技术包括将脚本锁定到特定的自定义HTTP标头、特定的cookie值、特定的IP地址或这些技术的组合。大多数WebShell还包含代码,用于识别和阻止搜索引擎列出shell,结果是,将web应用程序所在的整个域或服务器列入黑名单——换句话说,混淆和隐身是关键。

2、特权提升
一般来讲,使用WebShell攻击者可以通过利用系统上的本地漏洞来尝试执行权限提升攻击,以获取root用户权限,在Linux和其他基于Unix的操作系统中,root用户权限是超级用户。通过访问root帐户,攻击者基本上可以在系统上执行任何操作,包括管理本地文件、安装软件、更改权限、添加和删除用户、窃取密码、阅读电子邮件等。

3、侦察网络并发动攻击
攻击者可以用WebShell在网络内部或外部进行侦察。他们或是想要监视(嗅探)系统上的网络流量,扫描内部网络来发现活跃主机,或是枚举网络内的防火墙和路由器、域控制器。这个过程可能用时几天甚至几个月,主要是因为攻击者通常会尽量保持低调,尽可能不引起人们的关注。一旦攻击者获得了持久访问权限,他们就可以耐心地采取行动了。

攻击者还会通过失陷系统攻击或扫描网络外部的其他目标。由于攻击者使用第三方系统发起攻击,这就更难发现攻击者的身份。攻击者接下来会遍历(潜入)多个系统,如此一来,想要进行追踪溯源几乎就是不可能的事情了。

4、僵尸网络
WebShell的另一种用途是使服务器成为僵尸网络的一部分。僵尸网络是一个由被破坏的系统组成的网络,攻击者可以控制这些系统供自己使用。WebShell或后门连接到命令和控制(C&C)服务器,可从该服务器接收有关要执行的指令的命令。
Web Shell使用过程

众所周知,WebShell并不能直接发起攻击,一般都是攻击者利用网站存在的漏洞,比如网站的上传漏洞、SQL注入漏洞、XSS跨站漏洞、CSRF欺骗漏洞、远程代码执行漏洞、PHP解析漏洞等,都会被上传网站木马,从而导致服务器执行代码,并上传一句话木马后门。一般,WebShell通常被用于:

  • 数据盗窃
  • 感染网站访问者(水坑攻击)
  • 通过恶意意图修改文件来破坏网站
  • 发起分布式拒绝服务(DDoS)攻击
  • 在无法通过Internet访问的网络内部中继命令
  • 用作命令和控制库,例如用作僵尸网络系统中的僵尸程序或以损害其他外部网络安全性的方式使用

根据本地系统特权,攻击者可能能够像本地命令行提示符一样使用WebShell。以PHP WebShell示例,攻击者将通过查询参数发送URL编码的系统命令。假设是Linux/UNIX系统,获取用户名列表并确认代码执行特权的典型命令是cat/etc/passwd。要发送和执行命令,攻击者只需导航至:

http://example.com/compromised_file.php?x=cat%20%2Fetc%2Fpasswd
一旦攻击者拥有用于远程访问和系统命令执行的WebShell,进行进一步恶意操作的可能性实际上是无限的。数据盗窃和驱动恶意软件安装是两种常见的用途,此外WebShell也被用来创建和协调僵尸网络以进行分布式拒绝服务(DDoS)攻击。

典型攻击场景

前面我们讲到,这种攻击一般都是攻击者利用网站存在的漏洞来远程生成或者安装一个作为WebShell的文件,此文件一旦被成功安装,攻击者可能会使用嵌入的命令制作一个直接到WebShell的HTTP POST请求,然后这些命令将被执行,就像攻击者拥有本地命令一样(shell)访问web服务器。

图3 典型攻击场景

传统工具依赖于签名,很容易被有意混淆的有效载荷和命令所蒙蔽。而WebShell可以使用以下两种方法从攻击者接收命令:

  • 基于GET请求,可以通过日志和SIEM解决方案轻松检测到该命令,因为该命令在URL中可见;
  • 基于POST,因为命令是在有效负载中提交的,因此不是日志的一部分,因此隐身性更高。

正是使用了接收机制,使其更难以被检测出来。

WebShell的检测与防御

由于Web Shell可以轻松修改,因此检测它并不容易,传统的基于web服务器应用层面的安全防护产品,往往只能通过定时扫描的形式,发现可疑WebShell,无法在攻击开始的第一步进行查杀,从而让某些攻击绕过,实施了攻击行为。

安芯网盾基于硬件虚拟化技术架构推出的内存保护系统,在应用层、系统层、硬件层形成立体防护,在核心的内存层面对异常行为、进程进行监控,实时防护与检测,可以避免WebShell的后渗透、破坏行为。回顾来看实战攻防,如何解决WebShell已经不言而喻!

关键词:

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章