内网的系统由于很少更新漏洞补丁,反而更容易受到攻击。认识到攻击者已不仅仅是将WebShell作为后门,而是将其作为进入目标内部网络的跳板,将内外网系统上的WebShell串联起来,利用WebShell建立的隧道从外部互联网深入到内部网络进行渗透攻击。
针对WebShell攻击,两个机构给出的处理建议也是相当接地气,这份指南有Detecting/Blocking(检测/阻断)、Preventing (预防)、RESPONSE and RECOVERY(响应和恢复)三个主题,下面我就解读一下指南对付WebShell的要点,不是完全复刻,会带上一些个人经验:
检测/阻断:
文件diff比较,对Web程序文件最好先有一个白名单,使用非白即黑的原则对文件进行检查。
针对异常的Web访问流量进行检测,User-Agent标头、客户端IP、referer标头等都可以作为异常指标,针对流量和日志进行数据挖掘。
基于WebShell的文件特征和流量特征可以发现一些已知的WebShell
针对额外的网络流量进行检测,比如一些主机没有Web应用,开始有Web流量了,一些Web服务器额外的外发流量等都是异常情况。
EDR的响应检测能力,这个范围就大了,简单的还是先针对Web服务产生的异常进程进行监控吧,指南也只是泛泛而谈,真实的攻防点实在太多了。
其他异常网络流量指标,这个一句话概括就是找出孤岛流量,比如统计分析UV、PV、访问IP的地理位置,从这些访客数据中分析出明显区别于正常访问的Webshell流量。
预防:
一些Web程序要经常打安全补丁
Web程序和Web服务遵循最小权限原则进行安全加固
使用主机入侵检测进行文件完整性检测,主要针对新建文件和被篡改文件监控
WAF和IPS设备,这一点NSA和ASD的认识很深刻。IPS和WAF设备只能阻断初步的攻击,不太可能阻止已失陷主机的WebShell流量,因为黑客能用Webshell的时候,肯定早就绕过WAF了。IPS和WAF设备应针对Web应用程序进行量身定制才最有效,不可能有完全通用的解决方案。
网络隔离,关键资产还是隔离的,实际上攻击者能利用Webshell当跳板进入内网,这已经是利用上了网络访问策略的安全弱点。
对Web服务器加固,这里的方案太多了,就不详叙了。
响应和恢复:
这部分是实操的内容,文档给出了很多接地气的脚本和实例,感兴趣的可以去Github看看,篇幅所限就简单介绍下 。
用powershell、diff工具,针对Web文件做比对分析
用Splunk查询日志中的异常流量,算是对检测/阻断中的2、3条的简单示例
用powershell、python脚本分析IIS、Apache的日志
用一些IDS的网络流量签名特征发现和阻断已知的WebShell
用Sysmon和Auditd检测WebShell起的异常进程
最近流行的Web程序漏洞补丁
用主机入侵检测监控web目录的异常读写
.....
最后总结下,这份文档除了部分常见的白开水内容,有很多有亮点的思路和建议(本文标粗的部分)。稍微有一点不足的地方,就是该指南没有针对一些可以利用漏洞动态执行代码的无文件Webshell攻击给出建议。大家按照整个文档的指南践行,是能够防住绝大部分Webshell攻击的,值得最近某大型网络安全活动的防守方学习。