webshell
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门,黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的
顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限,由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具
webshell攻击及绕过检测思路
常规webshell攻击手法
(1)常规文件上传漏洞例如Tomcat上传漏洞CVE-2017-12615,攻击者通过HTTP PUT请求方法向服务器上传包含任意代码的JSP的webshell文件,导致服务器上的数据泄露或获取服务器权限
(2)通过sql注入写入webshell文件:into outfile shell.php ‘路径’
(3)通过本地/远程包含漏洞写入shell
通过上传接口上传webshell
如登录到网站后台管理页面后进行上传 - 各类中间件、CMS系统等都有对应的管理页面,获取管理员凭证后(通过暴力破解、社会工程学、SQL注入拖库等方式)可以直接通过管理页面的上传功能上传webshell文件
部分网站的普通用户存在上传功能(如上传图片、视频、文本文件等),如果网站过滤不严格或存在文件类型解析漏洞,则攻击者可以绕过上传限制,上传对应类型的webshell文件
修改shell文件绕过检测
(1)函数替换
(2)字符拼接:ass+ert
(3)利用函数进行分割
(4)编码绕过
(5)多次引用变量
(6)多次回调函数
(7)交互流量加密/动态加密
在文件上传过程中绕过检测
(1)修改前端js代码,绕过前端js限制上传
(2)上传数据包中修改Content-type为image/gif
(3)服务器端黑名单扩展名绕过例如:Php
(4)iis/nginx/apache解析漏洞
(5)00截断绕过
(6)双/多文件上传绕过:只对数据包中第一个或第二个文件做严格检测
(7)通过增删空格绕过
(8)通过拼接字符串绕过:form-data 修改为 f+orm-data
(9)HTTP header 属性名称/属性值绕过
(10)修改文件内容绕过:制作图片马/填充垃圾数据
(11)上传.htaccess文件
检测所需数据源
数据源信息顺序按照常规数据流转顺序排列:
1、Waf:Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。通过配置waf检测与拦截规则,一般上传webshell行为会被拦截记录到waf日志中,通过编码或其他手段绕过waf的webshell上传不会被waf日志记录
2、IPS/IDS:IPS是入侵防御系统(IPS: Intrusion Prevention System)是电脑网络安全设施,是对防病毒软件和防火墙的补充。IDS是入侵检测系统(intrusion detection system,简称“IDS”)是一种对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备。通过配置IDS/IPS的告警/拦截规则,在发现上传webshell行为后,IDS只具有告警功能,IPS可进行拦截。同样该设备可被绕过,绕过后不会被日志记录
3、中间件日志:如tomcat、weblogic、jboss等中间件日志可还原出http会话日志,通过流量特征和行为特征进行分析,针对已写入服务器的webshell进行分析,可具体到某个数据包进行分析,如异常路径、异常的User-Agent、异常的referer等特征
4、主机日志:例如
- (1)windows服务器下sysmon日志是由由Windows Sysinternals官方出品的监控工具,sysmon用来监视和记录系统活动,可以提供相关进程创建、网络连接和文件创建更改时间等详细信息,并记录到事件日志,通过分析windows服务器的进程创建日志,对父进程为常见中间件(apache,tomcat,nginx等)派生出的cmd、powershell等进程进行监控告警,记录进程命令行,可以溯源出攻击者通过webshell执行的系统命令。除此之外windows还有system日志、Security日志也可作为安全分析的重要数据来源
- (2)在linux需要分析安全事件时,主要的日志数据源有message日志、secure日志、auth日志。除此之外audit日志(需手工配置)更为重要:该日志可以记录每一个威胁事件发生的时间、类型、结果,该事件对应的用户以及该用户的认证方式,还可以记录对信任数据的改变例如/etc/passwd等关键信息
5、杀毒软件(安全狗/D盾/360):主要通过webshell静态特征/沙箱/文件监控等方式查杀拦截webshell,也存在被绕过的可能性,是实际环境中webshell需要进行免杀对抗的主要防御工具
检测方法
对webshell文件自身检测
1、一句话木马检测:主要检测shell内容的具体高危函数
检测思路
- (1)php:命令执行函数:eval,exec,assert等;传参函数:$\\_POST GET 等;编码变形函数:md5 base64 sha1等;创建匿名函数:create\\_fuction()
- (2)jsp:命令执行函数:Runtime.exec(String)等;传参函数:request.getParameter()等
- (3)asp:命令执行函数:eval,execute等;传参函数:request等
2、可绕过waf/安全狗等防护措施的webshell检测:主要针对绕过手法做针对检测。
检测思路
- (1)文件内容出现长段代码,不换行代码
- (2)^\\~等代码中不常见符号多次出现
- (3)针对内容编码过的上传文件,解码后再进行规则匹配
- (4)根据已有文件hash或md5进行匹配识别
- (5)建立静态特征库,定时维护
- (6)动态特征检测:什么用户执行了哪些系统敏感命令,并且启动了哪些系统异常进程
对webshell文件的上传流量包进行检测
1.对所有put数据包检测:检测该数据包中URL是否为正常的上传页面的URL,这里可以做一个关联分析:将其他威胁事件的源ip提取出来与put数据包关联使匹配更加精确
2.检测PUT数据包里常规字段是否异常,例如:
- form-data是否修改为~form-data;Content-Disposition: form-data是否修改为Content-Disposition: form-data;form-data 是否修改为 f+orm-data;Content-Disposition: form-data是否修改为Content-Disposition: *。其实绕过过程中不一定修改为这些字段,只是举例,检测关键还在于是否修改了上传数据包中的原有固定字段。
3.检测文件格式/后缀是否异常:如脚本语言后缀或者存在一些大小写结合的后缀如php,pHp等;或者存在多种后缀如:1.asp/x.jpg
4.针对00截断检测:该绕过手法主要在于%00以主动(get)或被动(post)的方式被URL解码为一个空字符,例如a.asp%00.jpg截断后变成a.asp,检测关键在于检测chr(0)字符,该字符并不为空Null,也不是空字符
5.针对双文件上传绕过检测:数据包中出现多个原有的固定字段,例如:name="Filename"和name="Filename1"同时在一个数据包中出现可判断为双文件上传
6.检测上传文件具体内容:关键检测点在于文件内容中是否存在执行命令函数或者传参函数;或上传文件内容是否存在编码/加密部分,可以在安全设备中内置一些解码解密的功能,处理之后进行常规检测。
7.针对上传数据包的频率检测:关联点为源ip(上传过程一般会进行多次尝试)
对webshell连接工具连接过程的流量检测
首先介绍当下安全测试中常用的几款webshell连接工具:菜刀、蚁剑、冰蝎、哥斯拉
1、菜刀流量检测
- ((1)PHP:eval/assert函数用于执行传递的攻击payload;(base64\\_decode($\\_POST[z0])),(base64\\_decode($\\_POST[z0]))将攻击payload进行Base64解码;(部分菜刀版本会将base64,eval字段打断绕过检测)
- (2)JSP:特征主要在i=A&z0=GB2312,菜刀链接JSP木马时,第一个参数定义操作,其中参数值为A-Q,如i=A,第二个参数指定编码,其参数值为编码,如z0=GB2312,有时候z0后面还会接着又z1=参数用来加入攻击载荷
- (3)ASP:“Execute”,Execute函数用于执行传递的攻击payload,这是必不可少的;OnError ResumeNext,这部分是大部分ASP客户端中必有的流量,能保证不管前面出任何错,继续执行以下代码;Response.Write和Response.End是必有的;2016版流量最大的变化在于body中部分字符被unicode编码替换混淆,所以这种特征需要提取出一种形式来,匹配这个混淆特征,比如“字符+%u0000+字符+%u0000”这种形式来判断该流量
2、蚁剑流量检测
- (1)PHP:默认不编码时最明显的特征是@ini\\_set("display\\_errors","0"),此段代码在蚁剑中为明文显示,较好发现;在有其他编码的情况下可尝试检测“eval””eVAL”等关键字段
- (2)ASP:蚁剑中asp的流量与菜刀很像,特征较为相似。如OnError ResumeNext、Response.End、Response.Write,其中execute在蚁剑中被打断混淆了,变成了拼接形式Ex"&cHr(101)&"cute,同时该流量中也使用了eval参数,可以被认为明显特征
3、冰蝎流量检测:首先介绍一下冰蝎流量动态加密过程:
- (1)首先客户端以Get形式发起带密码和10位随机数的请求
- (2)服务端产生随机16位随机密钥,将密钥写入Session并将密钥返回客户端
- (3)客户端获取密钥后,将payload用AES算法加密,用POST形式发送请求
- (4)服务端收到请求,用Session中的密钥解密请求的Body部分,之后执行Payload,将直接结果返回到客户端
检测思路:
- (1)首先发起的GET请求包中带有密码和10位随机数字如:pass=xxxx
- (2)服务端产生16位随机密钥content-length:16
- (3)客户端发起post请求,请求头最前面存在16为密钥且payload用AES加密
- (4)服务器收到请求,使用密钥解密body,然后执行payload。(加黑部分可作为检测特征)
4、哥斯拉流量检测:到目前为止,只能对默认配置的哥斯拉连接流量做检测
检测思路:
- (1)两次请求包中都存在pass=关键字,常规密码pass
- (2)UA头检测:JAVA/*
- (3)哥斯拉连接过程会有测试连通性的过程即methodName=test(注:哥斯拉连接过程中修改默认密码不用pass;修改ua头;填充垃圾数据三者结合流量层目前无法检测。需要格外检测哥斯拉shell上传以及服务器中的shell文件)
对执行系统命令检测
- (1)根据web网站用户权限进行监控,可通过写脚本等方式定时监控执行历史命令,并与高危命令列表进行匹配
- (2)通过监控运行 PHP/ASP/JSP 的进程在系统上执行了哪些系统调用或命令,从行为模式上深度检测脚本文件的安全性
服务器端异常文件检测:
- (1)根据时间点检测:在waf等安全设备或中间件日志中以异常事件发生时间为基准,查看服务器端文件夹或文件的修改时间。
- (2)上传文件夹检测:检测对应的上传文件夹修改时间;如果修改时间在异常事件之后,可以进一步查看文件夹内容,确认相对较新的文件。
(3)异常文件检测:
- (1)检测异常进程以及对应的不常见端口(例如可通过查看该进程对应的内存、cpu使用情况,以及该进程调用其他服务的频率
- (2)尤其注意脚本文件类服务进程,例如PHP/ASP/JSP等使用进程
- (3)服务项、计划/定时任务检测(部分webshell文件代码中存在定时执行计划)
- (4)webshell查杀工具:D盾、webdir+等自动化查杀工具
- (4)可以使用沙箱等隔离方式检测未知文件的运行情况
- (5)建立webshell文件特征库,也可以匹配在线情报去查询文件的hash或md5值。根据威胁情报或特征库处理异常文件
- (6)根据文件权限变更,查看对应权限用户的异常行为,从而进一步分析异常文件
- (7)根据文件状态对比:比对文件当前和历史MD5等散列数值,定位可疑文件
检测规则
检测规则包括单一设备的告警对应规则以及多设备的告警关联规则
单一告警规则:
规则名称 | 规则类型 | 数据来源 | 告警级别 |
---|---|---|---|
检测到不安全的请求方法:put | web攻击 | waf/ips/ids | 低危 |
源ip对应系统一次webshell攻击 | web攻击 | waf日志 | 低危 |
源ip对应系统多次webshell攻击 | web攻击 | waf日志 | 高危 |
网站被植入webshell | web攻击 | waf日志 | 高危 |
检测到异常流量连接 | web攻击 | waf/ips/ids | 高危 |
webshell远程命令执行 | 主机安全 | 主机日志 | 高危 |
关联告警规则
规则名称 | 规则类型 | 数据来源 | 告警级别 |
---|---|---|---|
攻击者登录web后台后尝试上传webshell | web攻击 | waf/ips/ids/中间件日志 | 高危 |
攻击者在sql注入后在服务器上检测到webshell文件 | web攻击 | Waf日志/主机日志 | 高危 |
攻击者在上传webshell后执行大量敏感命令 | web攻击/主机安全 | waf日志/主机日志 | 高危 |
攻击者在上传webshell后进行大量网络连接 | web攻击/网络安全 | waf日志/防火墙日志 | 高危 |
攻击者在上传webshell后发现新增用户 | web攻击/主机安全 | waf/ips/ids/主机日志 | 高危 |
攻击者在上传webshell后发现用户权限变更 | web攻击/主机安全 | waf/ips/ids/主机日志 | 高危 |
攻击者在上传webshell后发现异常进程 | web攻击/主机安全 | waf日志/主机日志 | 高危 |
webshell处置建议和流程
- 所有webshell相关告警首先都需要确认误报:
(1)对告警发现的可疑webshell页面进行人工访问或者服务器取证,观察响应码,若为404则基本表明该webshell文件并不存在,是误报。
(2)无法直接访问且无相关web访问事件的情况下,观察webshell类型和网站架构类型,若无法匹配(比如IIS网站尝试连接php类型的webshell)则表明该告警是误报。 - 对确认的webshell文件需要立即清除:在web服务器网站目录内查找webshell文件并立即删除。
- 需要对所有访问过该webshell的攻击源IP进行溯源分析以及结合siem功能查看网络连接情况,确认攻击者植入webshell的时间和方式以及后渗透阶段的操作
- 模拟真实环境进行漏洞复现。联系厂商将该webshell的特征加入安全设备规则库,对后续相同的webshell攻击进行阻断;将攻击者使用的IP地址加入威胁情报黑名单
你的文章让我学到了很多技能,非常实用。http://www.wallqx.com
暂无点赞