“师傅”网银木马在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提权漏洞来达到同样目的。
本报告所分析的样本是网银木马“师傅”的变种,通过利用其内置的系统漏洞利用模块来提升自身的权限,进而以系统级权限窃取用户登录网银业务的凭证来造成危害。
“师傅”时间线跟踪如下图所示:
Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后台控制窗口和屏幕输出管理等。
Microsoft Windows的内核模式驱动程序中存在特权提升漏洞,该漏洞源于程序没有正确处理内存中的对象。攻击者可利用该漏洞提升本地权限并运行任意代码。
受影响的系统版本如下:
系统 | Windows 7, 32bit |
使用工具 | ProcessMonitor,Xuetr,Wireshark, OllyDbg, IDA |
其他同源样本如下表:
MD5 | 文件大小 | 威胁等级 |
f25528baf3d68444fa7d7fda382e9835 | 338948 | 中威胁 |
ebf3e72f8b698bbb0d026416d7a75a6a | 338948 | 中威胁 |
e98459c647a6e328c8b65945884ef29a | 338948 | 中威胁 |
[1]隐蔽攻击:通过多次解密和进程注入完成攻击。
[2]网络行为:样本收集本机信息(包括但不限于本地时区、当前时间、操作系统版本、杀毒软件版本、主机名)上传至远程服务器,并持续与远程服务器通信,保持对用户的控制和对用户信息的窃取。
[3]沙箱检测:样本有反调试与反虚拟机功能,可通过对比文件名、进程名、用户名以及系统特征等方式判断自身是否可能存在于沙箱中。
[4]杀软对抗:样本可以对多款分析工具/杀毒软件/沙箱进行检测。检测到杀软后样本会处于sleep死循环中,表现为无恶意行为;检测到沙箱后,通过结束脚本解释器、流量抓取工具、二进制分析工具等进程,从而切断沙箱与外部的交互或阻止沙箱对其的自动化分析。
[5]持续攻击:样本通过自身的隐藏与自启动,实现对目标主机的持续攻击,主要包括:通过注入svchost.exe等进程进行进程隐藏;通过在开始菜单启动文件夹下创建js脚本完成自启动。
该样本执行流程概要图如下所示:
该样本的各个功能简单介绍如下:
解密PE文件代码如下:
解密算法代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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加密后得到的。
在系统查找如下校验值:
进程名编码列表列举如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
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:
共需比较以下值(常见沙箱对样本的重命名):
1 2 3 4 5 6 7 8 9 |
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:
获得用户名:
与以下字符串比较(常见的沙箱用户名):
1 2 3 4 5 |
SANDBOX FORTINET VIRUS MALWARE MALNETVM |
若有任何一个字符串出现,则程序进入sleep死循环:
查找下述进程:
1 2 3 4 5 |
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计算结果如下:
1 2 3 4 |
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程序:
拷贝一个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中设置开机启动项的代码如下所示:
1 2 |
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)
https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?service_id=1018
该样本通过利用内置的本地系统漏洞利用模块进行提权,从而以系统级权限窃取用户登录网银业务的凭证来造成危害。
由于该其具备种类繁多的反调试/分析/检测手段,所以一般的杀毒软件会认为它是安全的程序而放行;而一般的沙箱检测对其是无能为力的。这对于用户群体来说是极其危险的。
在网络通信方面由于其使用了.bit域名,使得攻击更具有隐蔽性和匿名性,使攻击者难以被追踪。
将样本原文件中的加密数据以0x8D为密钥解密得到以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
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