“师傅”网银木马在2015年4月被IBM反欺诈平台发现,它是基于Shiz源代码进行构建的,并且借鉴了包括Zeus、Gozi和Dridex等在内的多个著名木马的相关技术。该木马曾主要以日本境内14家银行为攻击目标,随后2015年9月22日开始,“师傅”木马开始在英国出现,并且至少攻击了十余家银行。2017年1月6日,researchcenter.paloaltonetworks.com网站刊文称,“师傅”木马的作者在2016年对其进行了改进,早期的“师傅”通过利用CVE-2015-0003来获得被入侵主机的系统权限,现在改为使用编号CVE-2016-0167的Windows提权漏洞来达到同样目的。
本报告所分析的样本是网银木马“师傅”的变种,通过利用其内置的系统漏洞利用模块来提升自身的权限,进而以系统级权限窃取用户登录网银业务的凭证来造成危害。
“师傅”时间线跟踪如下图所示:
CVE-2016-0167
Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后台控制窗口和屏幕输出管理等。
Microsoft Windows的内核模式驱动程序中存在特权提升漏洞,该漏洞源于程序没有正确处理内存中的对象。攻击者可利用该漏洞提升本地权限并运行任意代码。
受影响的系统版本如下:
- Microsoft Windows Vista SP2
- Windows Server 2008 SP2和R2 SP1
- Windows 7 SP1
- Windows 8.1
- Windows Server 2012 Gold和R2
- Windows RT 8.1
- Windows 10 Gold和1511
- 文件绑定
- 邮件附件
- 分析环境
系统 | Windows 7, 32bit |
使用工具 | ProcessMonitor,Xuetr,Wireshark, OllyDbg, IDA |
- TAC检测结果
其他同源样本如下表:
MD5 | 文件大小 | 威胁等级 |
f25528baf3d68444fa7d7fda382e9835 | 338948 | 中威胁 |
ebf3e72f8b698bbb0d026416d7a75a6a | 338948 | 中威胁 |
e98459c647a6e328c8b65945884ef29a | 338948 | 中威胁 |
[1]隐蔽攻击:通过多次解密和进程注入完成攻击。
[2]网络行为:样本收集本机信息(包括但不限于本地时区、当前时间、操作系统版本、杀毒软件版本、主机名)上传至远程服务器,并持续与远程服务器通信,保持对用户的控制和对用户信息的窃取。
[3]沙箱检测:样本有反调试与反虚拟机功能,可通过对比文件名、进程名、用户名以及系统特征等方式判断自身是否可能存在于沙箱中。
[4]杀软对抗:样本可以对多款分析工具/杀毒软件/沙箱进行检测。检测到杀软后样本会处于sleep死循环中,表现为无恶意行为;检测到沙箱后,通过结束脚本解释器、流量抓取工具、二进制分析工具等进程,从而切断沙箱与外部的交互或阻止沙箱对其的自动化分析。
[5]持续攻击:样本通过自身的隐藏与自启动,实现对目标主机的持续攻击,主要包括:通过注入svchost.exe等进程进行进程隐藏;通过在开始菜单启动文件夹下创建js脚本完成自启动。
该样本执行流程概要图如下所示:
该样本的各个功能简单介绍如下:
- 解密injector,覆盖原有代码
解密PE文件代码如下:
解密算法代码如下:
002C0564 3B75 64 cmp esi,dword ptr ss:[ebp+0x64] 002C0567 75 0D jnz short 002C0576 002C0569 0375 68 add esi,dword ptr ss:[ebp+0x68] 002C056C 037D 68 add edi,dword ptr ss:[ebp+0x68] 002C056F 2B4D 68 sub ecx,dword ptr ss:[ebp+0x68] 002C0572 85C9 test ecx,ecx 002C0574 74 12 je short 002C0588 002C0576 AD lods dword ptr ds:[esi] 002C0577 50 push eax 002C0578 2D BB462156 sub eax,0x562146BB 002C057D 90 nop 002C057E 90 nop 002C057F 33C2 xor eax,edx 002C0581 5A pop edx 002C0582 AB stos dword ptr es:[edi] 002C0583 83E9 03 sub ecx,0x3 002C0586 ^ E2 DC loopd short 002C0564
修改0x400000处的内存属性为可写:
替换0x400000处的内容(覆盖原样本的地址空间,使其本质上被替换为注入模块):
修改IAT中函数地址:
- 反虚拟机、反调试与沙箱检测
- 反虚拟机
判断Commandline中的参数:
接着在进程列表中查找进程,将获得到的进程名使用CRC32加密,调用函数RtlComputeCrc32:
判断其是否是特定进程,比如vmtoolsd.exe进程,与硬编码比较,这些硬编码为特定的进程名使用CRC32加密后得到的。
在系统查找如下校验值:
进程名编码列表列举如下:
0x278CDF58 – vmtoolsd.exe 0x99DD4432 – ? 0x1F413C1F – vmwaretray.exe 0x6D3323D9 – vmusrvc.exe 0x3BFFF885 – vmsrvc.exe 0x64340DCE – ? 0x63C54474 – vboxtray.exe 0x2B05B17D – ? 0xF725433E – ? 0x77AE10F7 – ? 0xCE7D304E – dumpcap.exe 0xAF2015F2 – ollydbg.exe 0x31FD677C – importrec.exe 0x6E9AD238 – petools.exe 0xE90ACC42 – idag.exe 0x4231F0AD – sysanalyzer.exe 0xD20981E0 – sniff_hit.exe 0xCCEA165E – scktool.exe 0xFCA978AC – proc_analyzer.exe 0x46FA37FB – hookexplorer.exe 0xEEBF618A – multi_pot.exe 0x06AAAE60 – idaq.exe 0x5BA9B1FE – procmon.exe 0x3CE2BEF3 – regmon.exe 0xA945E459 – procexp.exe 0x877A154B – peid.exe 0x33495995 – autoruns.exe 0x68684B33 – autorunsc.exe 0xB4364A7A – ? 0x9305F80D – imul.exe 0xC4AAED42 – emul.exe 0x14078D5B – apispy.exe 0x7E3DF4F6 – ? 0xD3B48D5B – hookanaapp.exe 0x332FD095 – fortitracer.exe 0x2D6A6921 – ? 0x2AAA273B – joeboxserver.exe 0x777BE06C – joeboxcontrol.exe 0x954B35E8 – ? 0x870E13A2 – ?
获取路径c:\sample\pos.exe:
调用PathFileExistsA检查该文件是否存在:
如果不存在:则获取kernel32.dll:
获取Process32NextW函数名称:
接着获取函数地址:
检查该函数地址前4字节的内容是否是0x8C2C033:
- 反调试
调用kernel32.IsDebuggerPresent:
查询DebugPort,ExceptionPort是否被占用,以确定是否处于远程调试状态:
获取\.\NPF_NdisWanIp,查找是否存在wireshark:
- 沙箱检测
- 文件名长度校验(若大于30位则认为是沙箱运行):
- 与特定值比较:
共需比较以下值(常见沙箱对样本的重命名):
0xE84126B8 – sample.exe 0x0A84E285 – ? 0x3C164BED – ? 0xC19DADCE – ? 0xA07ACEDD – ? 0xD254F323 – ? 0xF3C4E556 – ? 0xF8782263 – ? 0xCA96016D – ?
接着查找特定文件和目录,下图为查找c:\analysis\sandboxstarter.exe:
查找c:\analysis目录:
查找c:\insidetm:
查找c:\windows\system32\drivers\vmmouse.sys:
查找c:\windows\system32\drivers\vmhgfs.sys:
查找c:\windows\system32\drivers\vboxmouse.sys:
查找c:\iDEFENSE:
查找c:\popupkiller.exe:
查找c:\tools\execute.exe:
查找c:\Perl:
查找c:\Python27:
- 比较计算机名、用户名。获得计算机名:
获得用户名:
与以下字符串比较(常见的沙箱用户名):
SANDBOX FORTINET VIRUS MALWARE MALNETVM
若有任何一个字符串出现,则程序进入sleep死循环:
查找下述进程:
0xD2EFC6C4 – python.exe 0xE185BD8C – pythonw.exe 0xDE1BACD2 – perl.exe 0xF2EAA55E – autoit3.exe 0xB8BED542 – ?
进程名使用CRC32加密,具体数值如下图所示:
若以上进程正在运行,则直接终止这些进程(切断沙箱的内部控制)。此外如果样本运行于Windows XP(32bit)环境下,也将进入sleep循环。
- 判断当前权限高低
如果当前进程权限不足并且系统版本为windows7或Server2008,则进入漏洞利用代码,否则将继续原程序处理流程。
- 高权限下的行为
获取环境变量并扩展:
这里得到的是Windows_NT_1,在Win7 x86环境下:
接着计算0xFFFFFFFF,0xEEEEEEEE,0xAAAAAAAA,0x77777777的CRC32的值:
CRC32计算结果如下:
0x395693AE 0xB24495D2 0xF39F86E1 0xBAE0B5C8
取计算结果的最后两位数存放在栈中,如下图所示:
取其中0xAE000000和0xD2000000作为Atom的名称:
添加名为ae000000d2000000的GlobalAtom:
根据当前时间创建文件夹:
打开自身:
创建文件C:\ProgramData\3e7205a8.exe:
接着读取自身的.rsrc段和.tls段中的内容,初始化一个256字节的数组,初始化的形式:v17[]={0,1,2,3,….,255},接着从头读取.rsrc段中的内容,与数组中的每一位进行xor操作,得到结果存放进数组中。
接着对.tls段中的内容进行解密:
可以大致看到是一个PE文件。该PE文件由aPlib压缩库压缩的。
接着将内容加密:
加密后写入注册表中:
写入内容:
对压缩的文件进行解压:
修改文件头中的标志位:
查找文件:
创建进程:
将0xFFFFFFFF写入内存:
将文件写入svchost的内存:
接着创建远程线程:
下图所示进程为传入文件路径时创建的进程,获取tmp文件路径以拷贝自身至该目录下:
得到文件路径:C:\Users\hello\pudF5F0.tmp:
创建文件:
写入文件:
执行文件:
最后,程序退出。
- 低权限下的行为,如果权限不足,则进入exploit函数中进行提权,如下图所示:
首先申请一段内存用于临时存放exploit程序:
拷贝一个PE文件到内存中:
在PE文件中查找0x99999999:
可以看到0x99999999后跟着的是函数内容,0x99999999是一个标识,标志着函数的开始。
执行后首先加载一部分进行漏洞利用需要用到的函数:
创建线程后判断系统版本:
释放漏洞利用文件:
创建名为WaitEventX的事件:
进入漏洞利用部分:
之后查找以下进程:
如存在上述进程,则创建一个挂起的wuauclt.exe,否则就创建一个svchost.exe并且传入参数-k netsvcs。在创建进程的时候可以看到,0x3F4180处的值被校验,若存在杀毒软件则置为1,不存在为0:
进程:C:\Windows\system32\svchost.exe,参数为-k netsvcs:
查看目录是否存在,不存在就创建:
创建全局互斥体Global\{DAN6J0-ae000000d2000000e100}:
查询注册表项:
- 子进程运行
Hook函数:
接着创建线程。
线程1:注册回调函数监控注册表项更改,更新以下浏览器的版本:
线程2:执行网络通信相关行为。
设置注册表键值HKCU\software\Microsoft\windows:
创建js文件并拷贝至启动文件夹,设置开机启动项:
js中设置开机启动项的代码如下所示:
var mxakulvhjn = new ActiveXObject("WScript.Shell"); mxakulvhjn.Run("C:\\PROGRA~2\\442843c9.exe");
访问windowsupdate.com测试网络连通性:
向使用NMC技术的DNS服务器发起DNS请求,查询主控服务器的地址用以进行C&C通信:
获取操作系统信息,并将其填写为get参数的形式,准备发送至C&C服务器:’
注册包中的部分参数解析如下表所示:
Botid | 随机生成的作为用户标识的ID |
Ver | 为样本的版本号(该样本为1.759) |
Up | 上传时的本地时间戳 |
Os | 操作系统版本 |
Ltime | 用户所在的时区(+8) |
Av | 用户所使用的杀毒软件 |
将get参数加密后发送至C&C服务器:
样本通过三个DNS服务器92.222.80.28、78.138.97.93和77.66.108.93查询C&C服务器的地址:
该C&C服务器使用了.bit(采用了NMC技术的)域名,存在着低成本且难以审查与控制的特性。
Namecoin是去中心化的域名系统,它提供与传统DNS服务商类似的功能,它对应.bit域名,与传统DNS服务商不同的是Namecoin通过点对点网络来共享DNS查询表,只要网络中有Namecoin服务器软件在运行,域名就能被访问,可以阻止网络审查。
该样本通过设置开始菜单启动项,在开始菜单中创建Common.js脚本,完成主机重启后的自启动,以达到持续攻击的目的。
攻击定位
样本查询其真实C&C服务器所需的三个DNS服务器(IP地址分别是92.222.80.28、78.138.97.93和77.66.108.93)所在地区分别如图1、图2和图3所示:
图1 DNS服务器所在地区(1)
图2 DNS服务器所在地区(2)
图3 DNS服务器所在地区(3)
防护方案
1.绿盟科技检测服务
https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?service_id=1018
2.绿盟科技木马专杀解决方案
- 短期服务:绿盟科技工程师现场木马后门清理服务(人工服务+IPS+TAC+终端防护(金山V8+))。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。
- 中期服务:提供3-6个月的风险监控与巡检服务(IPS+TAC+人工服务)。根除风险,确保事件不复发。
- 长期服务:基于行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)
总结
该样本通过利用内置的本地系统漏洞利用模块进行提权,从而以系统级权限窃取用户登录网银业务的凭证来造成危害。
由于该其具备种类繁多的反调试/分析/检测手段,所以一般的杀毒软件会认为它是安全的程序而放行;而一般的沙箱检测对其是无能为力的。这对于用户群体来说是极其危险的。
在网络通信方面由于其使用了.bit域名,使得攻击更具有隐蔽性和匿名性,使攻击者难以被追踪。
附录
将样本原文件中的加密数据以0x8D为密钥解密得到以下内容:
AddMandatoryAce ADVAPI Advapi32.dll advapi32.dll ws2_32.dll WPUCloseEventW PUCloseSocketHandle WPUCreateEvent WPUCreateSocketHandle WPUFDIsSet WPUGetProviderPath WPUModifyIFSHandle WPUPostMessage WPUQueryBlockingCallback WPUQuerySocketHandleContext WPUQueueApc WPUResetEvent WPUSetEvent WPUOpenCurrentThread WPUCloseThread WSPStartup > %1\r\ndel %0 software\\microsoft\\windows\\currentversion\\run ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/echo rundll32.exe shell32.dll, ShellExec_RunDLL %s Microsoft\\Microsoft AntimalwareSoftware\\Coranti Software\\risingSoftware\\TrendMicroSoftware\\Symantec Software\\ComodoGroup Software\\Network Associates\\TVD Software\\Data Fellows\\F-SecureSoftware\\Eset\\Nod Software\\Softed\\ViGUARD Software\\Zone Labs\\ZoneAlarm Software\\Avg Software\\VBA32 Software\\Doctor Web Software\\G Data Software\\Avira Software\\AVAST Software\\Avast Software\\KasperskyLab\\protectedSoftware\\BitdefenderSoftware\\Panda SoftwareSoftware\\Sophos.bat\\\\.\\%C: |$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW$$$$$$XYZ[\\]^_`abcdefghijklmnopq conhost CreateProcessInternalW ConvertStringSecurityDescriptorToSecurityDescriptorW Content-Type: multipart/form-data; boundary=---------------------------%s\r\n Content-Type: application/x-www-form-urlencoded\r\n Host: %s\r\n%d.%d.%d.%d %d.%d.%d.%d.%x %temp%\\debug_file.txt [%u][%s:%s:%u][0x%x;0x%x]%sDnsFlushResolverCache \\*.* dnsapi.dll DnsGetCacheDataTable.dll.exe download.windowsupdate.com vk.com yandex.ru HTTP/1.1 https://http://%s IsWow64Process kernel kernel32.dll LdrGetProcedureAddress Microsoft NtAllocateVirtualMemory CLOSED LAST_ACKTIME_WAIT DELETE_TCB LISTEN SYN_SENTSYN_RCVDESTAB FIN_WAIT1 FIN_WAIT2 CLOSE_WAIT CLOSING TCP\t%s:%d\t%s:%d\t%s\n netstat\nProto\tLocal address\tRemote address\tState\n ntdll.dll NtResumeProcess NtSuspendProcess \\\\?\\globalroot\\systemroot\\system32\\drivers\\null.sys NtWriteVirtualMemory openRegisterApplicationRestart RtlCreateUserThread ResetSR RtlComputeCrc32 rundll32 SeDebugPrivilege SystemDrive\\StringFileInfo\\%04x%04x\\ProductName software\\microsoft\\windows nt\\currentversion\\winlogon shell Sleep srclient.dll SeShutdownPrivilege \"%s\" %d\t%s\ntaskmgr\nPID\tProcess name\nnet user\n the computer is joined to a domain\n.. \\VarFileInfo\\Translation GET%windir%\\system32\\%windir%\\syswow64\\POST*.exe Low %SystemDrive% \\*SYSTEM*%02x%s:Zone. Identifier GetProcessUserModeExceptionPolicy etProcessUserModeExceptionPolicy %ws\\%ws\n%x WORKGROUP HOME Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\ExplorerDisableCurrentUser Run%s.datsoftware\\microsoft\\windows %OS%_%NUMBER_OF_PROCESSORS%S S:(ML;;NRNWNX;;;LW)D:(A;;GA;;;WD) S:(ML;;NRNWNX;;;LW)D:(A;;GA;;;WD)(A;;GA;;;AC) \\\\.\\AVGIDSShim FFD3\\\\.\\NPF_NdisWanIpc:\\sample\\pos.exe ANALYSERS SANDBOX VIRUS MALWARE FORTINET MALNETVM c:\\analysis\\sandboxstarter.exe c:\\analysis c:\\insidetm c:\\windows\\system32\\drivers\\vmmouse.sys c:\\windows\\system32\\drivers\\vmhgfs.sys c:\\windows\\system32\\drivers\\vboxmouse.sys c:\\iDEFENSE c:\\popupkiller.exe c:\\tools\\execute.exe c:\\Perl c:\\Python27 api_log.dll dir_watch.dll pstorec.dll dbghelp.dll Process32NextW Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\31406.bit MiniDumpWriteDump\r\nReferer: %s\r\n \\Google\\Chrome\\User Data\\Default\\Cachevar %s = new ActiveXObject("WScript.Shell"); %s.Run("%s"); IntelPowerAgent32 %OS%_%NUMBER_OF_PROCESSORS% %s\cmd.exe ComSpecConsoleWindowClass.exe kernel32.dll ntdll.dll ZwQuerySystemInformation ZwAllocateVirtualMemory PsLookupProcessByProcessId PsReferencePrimaryTokenClassWindow open "%s" -q%windir%\\system32\\sdbinst.exe /c "start "" "%s" -d" %windir%\\system32\\sndvol.exe "%s" -u /c "%s\\SysWOW64\\SysSndVol.exe /c "start "" "%s" -d" "%temp%\\%u %u.tmp Wow64DisableWow64FsRedirection Wow64RevertWow64FsRedirection runas.exe %systemroot%\\system32\\svchost.exe %systemroot%\\system32\\wscript.exe snxhk.dll sbiedll.dll /c start "" "%s" " " cmd.exe runas --crypt-test:3 It work's! --vm-test
关于绿盟科技
北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。
基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。
北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。
如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880