“师傅”网银木马技术分析与防护方案

“师傅”网银木马在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文件代码如下:

解密算法代码如下:

修改0x400000处的内存属性为可写:

替换0x400000处的内容(覆盖原样本的地址空间,使其本质上被替换为注入模块):

修改IAT中函数地址:

  • 反虚拟机、反调试与沙箱检测
  • 反虚拟机

判断Commandline中的参数:

接着在进程列表中查找进程,将获得到的进程名使用CRC32加密,调用函数RtlComputeCrc32:

判断其是否是特定进程,比如vmtoolsd.exe进程,与硬编码比较,这些硬编码为特定的进程名使用CRC32加密后得到的。

在系统查找如下校验值:

进程名编码列表列举如下:

获取路径c:\sample\pos.exe:

调用PathFileExistsA检查该文件是否存在:

如果不存在:则获取kernel32.dll:

获取Process32NextW函数名称:

接着获取函数地址:

检查该函数地址前4字节的内容是否是0x8C2C033:

  • 反调试

调用kernel32.IsDebuggerPresent:

查询DebugPort,ExceptionPort是否被占用,以确定是否处于远程调试状态:

获取\.\NPF_NdisWanIp,查找是否存在wireshark:

  • 沙箱检测
  • 文件名长度校验(若大于30位则认为是沙箱运行):

  • 与特定值比较:

共需比较以下值(常见沙箱对样本的重命名):

接着查找特定文件和目录,下图为查找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:

  • 比较计算机名、用户名。获得计算机名:

获得用户名:

与以下字符串比较(常见的沙箱用户名):

若有任何一个字符串出现,则程序进入sleep死循环:

查找下述进程:

进程名使用CRC32加密,具体数值如下图所示:

若以上进程正在运行,则直接终止这些进程(切断沙箱的内部控制)。此外如果样本运行于Windows XP(32bit)环境下,也将进入sleep循环。

  • 判断当前权限高低

如果当前进程权限不足并且系统版本为windows7或Server2008,则进入漏洞利用代码,否则将继续原程序处理流程。

  • 高权限下的行为

获取环境变量并扩展:

这里得到的是Windows_NT_1,在Win7 x86环境下:

接着计算0xFFFFFFFF,0xEEEEEEEE,0xAAAAAAAA,0x77777777的CRC32的值:

CRC32计算结果如下:

取计算结果的最后两位数存放在栈中,如下图所示:

取其中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中设置开机启动项的代码如下所示:

访问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为密钥解密得到以下内容:

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880

发表评论