事件背景:一条不寻常的Webshell告警
在一次日常安全监测中,防守方设备捕获到一条针对其Web应用的Webshell连接告警。在安全设备的告警界面中,清晰地标记出一次【攻击利用】webshell利用事件,威胁名称、目的MAC地址等信息均被记录。这通常意味着系统已被攻陷,安全团队立即启动应急响应流程。
深入分析:解密流量与定位威胁
应急人员首先调取并分析了触发告警的网络流量。捕获到的HTTP请求状态码为200,请求体中包含典型的pass=参数,响应体内则是一串难以直接阅读的加密数据。这种特征高度指向了“哥斯拉”(Godzilla)这类采用强加密通信的Webshell管理工具。
为了确认,分析人员使用专门的哥斯拉流量解密工具进行验证。该工具界面提供了“JavaDynamicPayload”、“JAVA AES BASE64”等解密选项。当输入默认的密钥(pass)和待解密的通信内容后,工具成功解密出攻击者执行的命令结果,其中包含:
FileRoot : /
CurrentDir : /
CurrentUser : root
这证实了攻击者已通过Webshell获得了服务器的root权限。一个值得注意的细节是,攻击者在此次连接中使用了默认密钥,这为后续分析留下了线索。
攻击溯源:基于JS审计的未授权上传
登录受害服务器进行排查,在Web目录下发现了2个WAR包,解压后共找到4个Webshell文件,包括混淆的Godzilla马、混淆的正代马以及一个未混淆的默认Godzilla马。有趣的是,安全设备仅对那个使用默认配置的Godzilla马发出了告警,其他经过混淆或免杀处理的Webshell均未被发现。
通过在全网安全日志中搜索这些WAR包的文件名,终于找到了最初的上传记录。调查发现,攻击并非利用常见的中间件漏洞,而是通过一个非常规的长接口路径实现的任意文件上传。进一步审查Web前端代码,在JavaScript文件中发现了一段清晰的upload方法定义,其中将上传接口、参数乃至服务器的绝对路径都明文写了出来。攻击者极有可能通过审阅前端JS代码,发现了这个未授权上传接口,从而轻松将Webshell上传至服务器。
横向移动:SSH撞库与密码窃取
攻击者获取Web权限后,并未满足于此,其后续的横向移动手段更为隐秘。
现场排查发现,系统的命令历史记录被清理得非常干净,增加了取证的难度。但通过主机安全agent的日志,发现攻击者执行了以下命令来清除操作痕迹:
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
在服务器的/tmp目录下,发现了攻击者遗留的、经过修改的fscan内网扫描工具及其扫描结果。结果显示,攻击者对大量资产的22端口(SSH服务)进行了“撞库”攻击,并且部分尝试成功了。令人疑惑的是,这些成功登录的密码与服务器上所有配置文件中发现的密码都不匹配。
答案在另一条agent日志中找到。攻击者使用了strace——一个Linux系统的程序调试工具——来实时监控SSH服务进程,以此窃取运维人员的登录密码。具体执行命令如下:
strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/xxx/xxx.log &)
grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/xxx/xxx.log
通过这种方式,攻击者能够捕获到其他用户通过SSH登录时输入的密码,从而解释了为何其掌握的密码不在现有配置文件中。这正是攻击者实现横向移动并扩大控制范围的关键一步。
数据外泄:利用Web目录分块拖取
审查中间件访问日志,发现攻击者并未清除这里的记录。日志显示,攻击者曾将服务器上的敏感文件移动到Web根目录下,然后通过HTTP请求将其分批下载。日志中有大量类似以下的记录,状态码均为200,表明传输成功:
"GET /fil_aa HTTP/1.0" 200
"POST /fil_ab HTTP/1.0" 200
"GET /fil_ac HTTP/1.0" 200
攻击者针对大文件采用了分块传输的方式,例如一个被标记的请求返回了37的状态码(这可能与分块传输的某个标记有关)。通过全流量分析设备还原文件,确认被窃取的数据包括应用程序的完整源码和数据库备份文件,总量高达十几GB。
总结与反思
本次应急响应事件揭示了一条清晰的攻击链:
- 信息收集:攻击者通过审计前端JavaScript代码,发现未授权的文件上传接口。
- 初始入侵:利用该接口上传多个经过混淆/免杀的Webshell,其中仅一个基础版本被安全设备识别。
- 权限提升与痕迹清理:获得Webshell后,立即清理操作系统的命令历史记录。
- 横向移动:使用撞库工具攻击内网SSH服务,并利用
strace窃取合法用户的登录凭证,实现权限扩展。
- 数据窃取:将敏感文件移至Web目录,通过HTTP请求分块下载,完成数据外泄。
此案例给防御者带来多重警示:
- API安全至关重要:前后端分离架构下,暴露的API接口成为新的重点攻击面,需要与传统Web路径同等强度的安全审计与防护。
- 增强威胁检测能力:传统规则对加密、混淆的Webshell流量和内存马检测能力有限,需结合行为分析、流量基线等手段。
- 操作系统级防护:攻击者深厚的系统知识使其能有效隐藏痕迹。监控关键系统调用(如
strace的使用)、保护日志完整性是防御高级持续性威胁的关键。
- 纵深防御:单一安全设备的告警可能存在盲区,建立多源日志关联分析机制,才能在攻击链的早期发现异常。
参考资料
[1] 应急响应中的一些攻击手法|应急技巧, 微信公众号:mp.weixin.qq.com/s/XI5ZNfP__SajWB8OVgo_bg
版权声明:本文由 云栈社区 整理发布,版权归原作者所有。