你所不知道的Webshell--进阶篇

2020-06-19 11:39:46 浏览数 (1)

写在前面的话

上期文章介绍了Webshell的基础知识和防护技巧,有兴趣的同学可以前往 你所不知道的Webshell--基础篇 观看。

这期文章我们接着来说说Webshell的检测方法。

检测技巧

目前检测Webshell的方式较多,有基于HTTP流量、基于Web访问日志、基于文件特征等方法,建议相关同学在日常运维、攻防演练等工作中根据业务的实际情况,选择适合的方法,实现对Webshell的检测和处置。

本文主要介绍三种面向主机层面,基于文件进行检测的方法及工具(文中所列工具旨在对检测方法进行说明,请用户结合实际情况选取使用)。

基于文件特征的检测

文件特征检测主要是通过匹配Webshell变量名、危险函数名等特征值,来判断是否为已知的Webshell。

优点:部署方便,一个脚本就可以完成,准确率高,可扩展性强,可以自行添加规则。

缺点:攻击者如果修改文件特征值,将很有可能被绕过。

工具介绍:在互联网上搜索Webshell检查可以找到很多基于文件特征的检测工具,但大多都存在无法跨平台,无法自定义规则,源代码不开放等问题,可信度低,对于在业务系统上运行使用,管理员持谨慎态度。下面介绍一个开源跨平台的检测工具YARA。

Windows/Linux环境通用

YARA由VirusTotal发布,用于研究人员识别和分析恶意样本,基于文本和二进制特征匹配原理,通过命令行界面或带有YARA-Python扩展名的Python脚本使用。

工具下载及安装

01

下载地址:

https://github.com/virustotal/yara/releases/tag/v4.0.1

安装命令:

Debian/Ubuntu:apt-get install yara,或自行编译安装。

Redhat/CentOS:yum install yara(先安装epel-release),或自行编译安装。

Windows:直接运行下载的exe,或自行编译安装。

规则下载

03

YARA的规则分为两种格式:.yara是规则源码,.bin是编译后的规则。

若下载的规则为编译后的规则,可跳过本步骤,直接进入步骤4。

规则源码格式如下:

private rule generic_jsp

{

meta:

source= "https://www.tenable.com/blog/hunting-for-web-shells"

strings:

$ = /Runtime.getRuntime().exec(request.getParameter("[a-zA-Z0-9] "));/ ascii

condition:

all of them

}

规则说明:

格式分为3部分信息,meta是元数据信息,用于描述Webshell来源,strings是特征字符串,condition为匹配条件。

规则获取方式:

在github上使用Webshell YARA关键词即可搜索到大量规则,这里以NSA推荐的规则为例,

下载地址:

https://github.com/nsacyber/Mitigating-Web-Shells/blob/master/core.webshell_detection.yara

https://github.com/nsacyber/Mitigating-Web-Shells/blob/master/core.yara.bin

规则编译

04

规则下载完成后,需要进行编译,也可直接下载编译后的规则。

编译命令:

yara core.webshell_detection.yara core.yara.bin

即可生成编译后的二进制规则core.yara.bin。

直接使用编译后的规则,可以提升检测速度,同时也能防止反病毒软件误将规则文件报为病毒。

检测执行

05

使用检测规则对目标路径进行Webshell检测,

检测命令:

yara –r -C core.yara.bin –r /var/www/html/

参数说明:-r 表示递归查询子目录,-C 指定编译后的规则文件。

结果分析

02

检测结果为与检测特征匹配的Webshell。

结果示例:

b374k /var/www/html/test.php

说明检测到b374k后门。

基于文件哈希的检测

将生产系统中可能受攻击的Web目录与已知的安全Web目录(例:从SVN导出的)进行比较,可以识别出不一致的文件,通过排查新增和修改的文件,再识别出攻击者上传的Webshell。

Windows环境

脚本安装

01

安装PowerShell脚本dirChecker.ps1,此脚本可基于文件hash对文件进行对比。

文件脚本:

param (

[Parameter(Mandatory=TRUE)][ValidateScript({Test-Path _ -PathType 'Container'})][String]

[Parameter(Mandatory=TRUE)][ValidateScript({Test-Path _ -PathType 'Container'})][String]

)

good = Get-ChildItem -Force -Recurse -Path knownGood | ForEach-Object { Get-FileHash -Path

prod = Get-ChildItem -Force -Recurse -Path productionImage | ForEach-Object { Get-FileHash -Path

Write-Host "Any file listed below is a new or changed file.`n"

(Compare-Object good prod -Property hash -PassThru | Where-Object{

注意:

脚本运行需要PowerShell 4.0及以上版本,下载地址:

https://www.microsoft.com/zh-CN/download/details.aspx?id=40855

文件检测

02

使用脚本对源目录与目的目录进行文件对比。

执行命令:

./dirChecker.ps1 -knownGood "d:bakwww" -productionImage " c:inetpubwww"

参数说明:-knownGood表示干净的Web目录,-productionImage 表示生产环境的Web目录。

结果分析

03

检测执行结果会把新建或者变更的文件显示出来,然后需要人工或借助其他工具对标注的文件进行Webshell排查。

结果示例:

Any file listed below is a new or changed file.

c:inetpubwwwtest.aspx

生产环境目录多1个test.aspx文件,需要排查是否为Webshell。

Linux环境

与Windows原理相同,可使用diff命令。

文件检测

01

使用系统命令对源目录与目的目录进行文件对比。

对比命令:

diff -r -q /opt/bak/html /var/www/html

参数说明:-r 表示递归查询子目录,-q 只输出差异部分。

结果分析

02

检测执行结果会把新建或者变更的文件显示出来,然后需要人工或借助其他工具对标注的文件进行Webshell排查。

结果示例:

在 /var/www/html 中存在:test.php

生产环境目录有一个变更或新建的文件:test.php,需要排查此文件是否为Webshell。

基于文件行为的检测

对于大多数正常的Web应用来说,很少会调用ipconfig,netstat等系统管理命令,反倒Webshell会经常产生此类调用。通过分析Web应用服务器关键进程调用日志,监测系统调用或进程调用,可以识别出此类异常行为,进一步排查出Web服务器中的Webshell。

Windows环境IIS

可使用微软发布的系统监测工具System Monitor (Sysmon),对IIS的调用进行监测。该工具能够监测进程创建、文件创建、网络连接等信息,并将监测结果记录到Windows事件日志中。

所以可通过分析sysmon日志信息,识别出系统中的异常活动,确认主机是否存在恶意文件。

工具下载及安装

01

下载地址:

https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon

安装命令:

sysmon64 –i

安装后系统会增加sysmon64服务,并自动运行。

日志查看

02

查看命令:

Get-WinEvent -FilterHashtable @{logname="Micorosft-Windows-Sysmon/Operational";id=1;} |

Where {$_.message -like "*ParentImage: C:WindowsSystem32inetsrvw3wp.exe*"} |

%{$_.properties[4]} |

Sort-Object -Property value –Unique

结果分析

03

在查询日志的结果中,若发现进程调用可疑文件,则需要进一步排查是否正常的Web应用,判断是否为Webshell。

涉及可疑行为的文件名称:

arp.exe,at.exe,bitsadmin.exe,certutil.exe,cmd.exe,dsget.exe,dsquery.exe,find.exe,findstr.exe,fsutil.exe,hostname.exe,ipconfig.exe,nbstat.exe,net.exe,net1.exe,netdom.exe,netsh.exe,netstat.exe,nltest.exe,nslookup.exe,ntdsutil.exe,pathping.exe,ping.exe,powershell.exe,qprocess.exe,query.exe,qwinsta.exe,reg.exe,rundll32.exe,sc.exe,schtasks.exe,systeminfo.exe,tasklist.exe,tracert.exe, ver.exe,vssadmin.exe,wevtutil.exe,whoami.exe,wmic.exe,wusa.exe

Linux环境

可以使用系统自带的auditd审计工具对Apache的调用进行监测。

工具安装

01

若系统默认无auditd服务,可使用以下命令进行安装:

Debian/Ubuntu:apt-get install auditd

Redhat/CentOS:yum install auditd

工具配置

02

1)执行命令:

apachectl -S|grep User:

结果输出:

User: name="apache" id=48

记录结果中的id值48。

2)编辑/etc/audit/rules.d/audit.rules,增加以下规则并修改uid为上面记录的id。

-a always,exit -F arch=b32 -F uid=48 -S execve -k apacheexecve

-a always,exit -F arch=b64 -F uid=48 -S execve -k apacheexecve

3)重启audit服务:service auditd restart。

日志查看及分析

03

1)日志查看命令:

grep "apacheexecve" /var/log/audit/audit.*4

2)在查询的结果中,若发现进程调用可疑文件,则需要进一步排查是否正常的Web应用,判断是否为Webshell。

涉及可疑行为的命令名称:

cat,crontab,hostname,ifconfig,ip,iptables,ls,netstat,pwd,route,uname,whoami

分析示例:

/var/log/audit/audit.log:type=SYSCALL msg=audit(1591243943.172:8817): arch=c000003e syscall=59 success=yes exit=0 a0=98cab0 a1=98cd90 a2=98bb70 a3=7fffcf137c20 items=2 ppid=22600 pid=22611 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="netstat" exe="/usr/bin/netstat" key="apacheexecve"

以上为Web页面调用系统netstat命令时所产生的日志,如果发现类似日志,请用户进行关注。

0 人点赞