事宜韶光轴
2017年7月17日,NetSarang公司发布旗下多款产品的新版软件,更新修复多处bug和增强了会话加密能力,用于对抗CIA木马“BothanSpy”的密码挟制功能。
2017年8月7日,NetSarang与卡巴斯基发布联合声明,声称7月18日创造软件存在安全漏洞被攻击。

2017年8月15日,NetSarang与卡巴斯基更新联合声明,创造在喷鼻香港利用该软件漏洞的案例。
攻击形式
NetSarang系列软件的关键网络通信组件nssock2.dll被植入了恶意代码,厂商在发布软件时并未创造恶意代码,并给传染组件打上了合法的数字署名随新版软件包一起发布,用户机器一旦启动软件,将会加载组件中的恶意代码,将主机的用户信息通过特定DGA(域名天生算法)产生的DNS域名传送至黑客的远程命令掌握做事器,同时黑客的做事器会动态下发任意的恶意代码至用户机器实行。
攻击影响面
利用被传染的软件的用户,将会被黑客盗取用户信息,并在云端下发任意的恶意代码进行远程掌握,由于该系列软件在海内的程序员和运维开拓职员中被广泛利用,多用于管理企奇迹单位的主要做事器资产,以是黑客极有可能进一步盗取用户所管理的做事器身份验证信息,秘密入侵用户干系的做事器,请干系软件用户和企奇迹单位提高当心。
XshellGhost技能剖析“XshellGhost”(xshell幽灵)是一个精密的定向攻击平台,所有的功能模块实现均为shellcode形式,客户端攻击通过传染供应链软件和各个shellcode模块,实现了无自启动项、无落地文件和多种通信协议的远程掌握,后门潜伏于受害者电脑等待黑客在云掌握平台下发shellcode数据实行,黑客在云端乃至可能通过上传的用户信息进行选择性的定向攻击。
远程掌握逻辑剖析
XshellGhost的远程掌握紧张分为5个步骤:
1.软件启动加载被传染组件nssock2.dll,解密shellcode1实行。
2.Shellcode1解密Shellcode2实行如下功能:
a) 创建注册表项,上报数据到每月对应的DGA域名当中;
b) 通过发往有名的域名解析器当中上传用户信息给攻击者;
c) 将吸收的数据写入到创建的注册表项当中;
d) 通过获取的key1和key2解密Shellcode 3并实行;
3. Shellcode3会创建日志文件并写入信息,启动系统进程Svchost.exe,修正其oep处的代码,并注入shellcode形式的Root模块实行。
4. Root模块的初始化过程中,会加载并初始化Plugins、Config、Install、Online和DNS等功能模块,然后调用函数Install->InstallByCfg以获取配置信息,监控注册表并创建全局互斥体,调用Online-> InitNet;
5. 函数Online-> InitNet会根据其配置初始化网络干系资源,向指定做事地址发送信息,并等待云端动态下发代码进行下一步攻击。
初始加载模块剖析
这次攻击的所有模块调度加载实现办法都是通过shellcode形式,采取了模块化的方法进行统一管理。每个Shellcode的入口函数都会根据传入的第2个参数的数值决定将其详细要实行的功能,参数数值和对应的功能列表如下所示:
编号浸染1初始化shellcode自身的干系信息100干系初始化,获取shellcode Root的功能列表101开释shellcode申请的资源102获取shellcode的ID103获取shellcode的名称104获取shellcode的函数列表接口根据Shellcode编号102、103和104所对应的功能,可以获取每个Shellcode的信息列表:
ID名称状态100Root已知101Plugins已知102Config已知103Install已知104Online已知关键的网络通信模块,除DNS协议通信,此后门还会利用其他5种网络协议进行远程掌握。
ID名称状态200TCP未知201HTTP未知202UDP未知203DNS已知204HTTPS未知205SSL未知根本管理模块剖析
Root模块是该次攻击的根本管理模块,其它各个模块的功能的展开和运行都依赖于Root模块供应的函数接口列表:
ID名称浸染1空指针2InsertShellcodeInfo获取shellcode的信息,保存在全局shellcode信息链表当中3ShellCodeQueryIncRef通过shellcode的地址在全局信息链表中查询对应的信息指针,并增加引用4ShellCodeQueryIncRef通过shellcode的ID在全局信息链表中查询对应的信息指针,并增加引用5ShellCodeQueryDecRef减少shellcode信息指针的引用计数。 如果引用计数为0,则创建线程,调用该shellcode的101功能,开释资源。然后开释shellcode6ShellCodeQueryDecRef先判断shellcode的构造成员(0x18 0x1c)。如果都为0,则减少引用计数7ShellCodeGetName获取该shellcode的名称8EnterCriSec进入全局信息链表的临界区9LeaveCriSec离开全局信息链表的临界区10GetLastShellcodeInfo获取末了一个被插入到全局链表的shellcode的信息11GetNextShellcodeInfo获取当前shellcode所指向的下一个shellcode指针12LoadDll调用LoadDllEx13LoadDllExShellcode以dll文件的形式存在,加载对应的dll文件,并将Shellcode对应的信息保存到全局shellcode信息链表中14LoadAndInsertShellcode调用LoadAndInsertShellcodeEx15 LoadAndInsertShellcodeEx加载转换后的shellcode,依次调用其功能号1、100、102、104,然后将信息添加到全局shellcode信息链表中16LoadShellcode加载shellcode,并调用其功能号117InjectShellcode调用InjectShellcodeEx,第3个参数为018InjectShellcodeEx注入到指定的进程句柄当中,根据第3个参数决定启动该shellcode的办法: 0:变动良程oep处的代码跳转到加载处 1:直接远程线程启动shellcode的加载代码19TransDataInternal根据传入的键值转换数据的编码格式20TransDataInternal根据传入的键值转换数据的编码格式21Malloc申请空间22TransDataByTime根据当前韶光转换数据的编码格式23TransDataEx根据数据头转换数据的编码格式,并返回转换后的数据的干系信息24TransData根据数据头转换数据的编码格式25Free开释空间26GetTimeSum获取韶光的总和27TransChr对字符取模0x3E。余数在区间[0x1a,0x34)中时,+0x47;余数在区间左边时,+0x41;否则-0x04Root模块的初始化逻辑如下图所示:
插件功能模块剖析
Plugins模块为其他插件供应接口,包括读写注册表指定字段的加密数据,加载DLL等,以及监控注册表指定字段变革并将其数据解密作为插件加载:
ID名称浸染1OpByCmd根据命令供应向注册表指定key写入加密Value和删除Value,加载DLL等功能2MonitorRegLoadShellocde监控注册表指定key变动并加载插件。若参数为0,则不会创建注册表键,否则会创建注册表键3RegOpenKeyAndQueryValue打开并查询注册表的键值4RegCreateKeyAndSetValue创建并设置对应注册表路径的键值5RegOpenKeyAndDeleteValue打开并删除注册表相应的键值在调用Install模块的InstallByCfg函数时,会调用Plugins模块的MonitorRegLoadShellCode函数。该函数卖力监控注册表指定key,如果key值被改变,该函数将会读取注册表中的数据并调用Root模块的LoadAndInsertShellcodeEx函数将其加载。
如果网络掌握端下发调用Plugins模块的OpByCmd函数的指令,将会设置其注册表指定key的数据,过后MonitorRegLoadShellCode函数将会监控到key值发生改变,读取注册表数据动态加载下发的Shellcode代码。
C&C配置模块剖析
配置模块Config紧张卖力管理当前机器当中的配置文件以及对应机器的ID:
ID名称浸染1OpByCmd根据Command实行对应的config操作,调用Online模块的SendTans进行反馈2GetCfgCon读取文件中的Config参数3RandomStr根据VolumeSerialNumber天生随机字符串,在同一个机器中固定该模块包含了一个大小最大为0x858的配置数据块,个中配置数据块是从文件中读取的,文件位置是由该模块的第三个函数RandomStr供应。
随机串天生的过程跟系统的卷序列号干系,以是在不同的机器上其位置并不相同。但是其有固定的格式,RandomStr均为大写字母:
%ALLUSERSPROFILE%\RandomStr\ RandomStr\ RandomStr\ RandomStr
配置信息是加密存储在配置文件中的,通过调用该模块的接口函数,可以获取解密后的配置文件,配置数据块的构造如下:
配置块的头部是一个OffsetTable,个中记录了各项配置串相对付EncryptStringStub的偏移,
目前已知的配置位置:
OffsetTable[8] 配置块0x10 要注入的进程路径
OffsetTable[0xC] 配置块0x18 CC URL地址和CC类型
原始串的前2个字节为本串加密的Key,之后通过解密函数解密获取解密后的串,以是解密后的串长度要比原始串的长度少2。经剖析还原的解密函数如下:
通过对程序自身的配置文件进行剖析:
注入程序路径,加密前的字符:
\x1F\xE5\x3A\x86\xF4\x31\xFF\xB8\x9F\x64\x81\x96\xAA\xC4\xB1\xF0\x02\x5E\xC5\xB1\x3E\xAF\x98\x19\xF6\x00\x21\x39\x20\xC5\xC4\x39
解密后:%windir%\system32\svchost.exe
CC远程命令掌握做事器的 URL,加密前的串:
\x7B\x3C\x1F\x9F\x7E\x01\xA0\x08\xF0\xF6\x1C\x7F\x71\x60\xBD\x63\x66\x95\x7B\xE6\x62\x4C\xB3
解密后:dns://www.notped.com
DNS查询地址:
8.8.8.8
8.8.4.4
4.2.2.1
4.2.2.2
代码注入模块剖析
主体代码注入模块Install,卖力将Root模块代码注入到指定的进程当中,以及调用Online模块的干系初始化事情:
ID名称浸染1OpByCmd如果数值为0x00006700,根据参数和shellcode信息调用Shellcode Online的SendTrans如果数值为0x01006700,根据参数和shellcode信息调用Shellcode Online的SendTrans,如果返回结果为0,则休眠3秒。如果全局ShellcodeInfo信息构造体(Shellcode Root)中的Op选项不为4,则退出进程。2InstallByCfg函数InstallByCfg的逻辑如下所示:
功能A:
1、调用Plugins的MonitorRegLoadShellCode函数,创建并监控指定注册表键,读取注册表数据加载shellcode实行;
2、调用Config的RandomStr函数获取字符串,用来创建全局互斥体
a)如果全局互斥体已存且Root的Op数值为3,结束自身进程。
b)调用 Online的 InitNet,初始化网络模块
功能B:
1、调用Plugins的MonitorRegLoadShellCode函数,打开并监控指定注册表键, 读取注册表数据加载shellcode实行;
2、查询Shellcode 106,如果不存在,则休眠1秒连续查询
3、调用Shellcode 106的第2个接口函数
功能C:
1、调用Config的函数GetCfgCon获取配置文件中保存的Pe路径
2、启动Pe,修正Oep处的代码,注入Shellcode Root
a)如果失落败,则创建线程调用功能A
b)如果成功,则结束自身
网络通信模块剖析
Online模块是本次攻击的网络通信管理模块,在本次攻击事宜当中我们已经创造了DNS模块,其它几个网络模块(TCP、HTTP、UDP、HTTPS、SSL)虽然在代码当中有所表示,但是在shellcode当中尚未主动运行,各个网络模块的函数接口及其浸染如下表所示:
ID名称浸染1空指针2GetConObj返回该种网络通信时所利用到的工具3Start发送初始化数据包4Recv接管5Send发送6Shutdown发送shutdown数据包7Close关闭连接各个网络模块的功能的展开和运行依赖于Online模块供应的函数接口列表:
ID名称浸染1OpByCmd根据命令实现网络机器的硬件信息等功能2InitNet根据配置文件初始化网络模块3GetConPluginObj根据传入的Shellcode的ID获取对应的通信Shellcode工具,调用通信工具的第2个接口函数GetConObj获取该Shellcode通信定义的工具4Start调用传入的Shellcode指针所对应的第3个函数(传入的shellcode为通信模块,第3个函数统一为发送初始化数据包);5Recv调用传入的Shellcode指针所对应的第4个函数(传入的shellcode为通信模块,第4个函数统一为吸收)6RecvLoop根据传入的大小,多次调用Recv,获取要接管的数据7RecvTrans调用RecvLoop转换后获取到要接管的数据大小,循环调用RecvLoop获取所有数据,终极调用Root的TransDataEx8Send调用传入的Shellcode指针所对应的第5个函数(传入的shellcode为通信模块,第5个函数统一为发送)9SendLoop根据传入的大小,多次调用Send,发送完所有数据10SendTrans根据韶光转换数据格式,SendLoop11RecvSend创建线程进行对应Shellcode的(Recv和Send)操作12Shutdown调用传入的Shellcode指针所对应的第6个函数(传入的shellcode为通信模块,第6个函数统一为发送shutdown数据包)13Close调用传入的Shellcode指针所对应的第7个函数(传入的shellcode为通信模块,第7个函数统一为关闭连接);减少对应Shellcode的引用计数14GetId获取传入的Shellcode所对应的IDInitNet在读取网络代理配置往后每隔1秒调用功能A,如果功能A返回20000,则函数彻底结束,功能A逻辑:
功能B逻辑,用于等待云端下发代码实行:
这次攻击已知利用的通信模块是DNS模块,该后门基于DNS隧道技能进行通信:
ID名称浸染1空指针2GetConObj返回自定义工具,DNS通信时利用3Start发送初始化数据包,开启线程等待数据结束4Recv接管,有客户端连接时设置Event15Send发送,有客户端连接时设置Event26SendShutdown发送shutdown数据包7CloseConnect关闭连接该模块发送的数据包有3种类型:
1.初始化数据包,大小为0x18
2.Data数据包,大小0x8+
3.关闭数据包, 大小0x8
其发送函数如下:
在调用DNS模块2号函数返回自定义工具时,其调用了GetAdaptersAddresses获取适配器的DNS
最多网络0x10个DNS,随后在调用该模块第3号函数时,其利用网络到的DNS,合并Config文件中的4个DNS地址,循环往每一个DNS发送查询,等到到任何一个返回数据,或者超时,并记录下第一个返回应答的DNS数据包,往后再次发送的时候,只会给第一个返回应答的DNS发送数据。
在发送数据包时,会将数据嵌套到DNS协议中发送,个中数据会编码成特定的字符串,添加在要配置文件中的CC DNS URL前,实现DNS隧道通讯。
总结
通过技能剖析,我们创造“XshellGhost”(xshell幽灵)是一整套繁芜的模块化的精密木马病毒,这是一起黑客入侵供应链软件商后进行的有组织有预谋的大规模定向攻击,我们仍将会持续关注这次攻击的进一步发展,建议广大用户利用360安全卫士查杀“XshellGhost”(xshell幽灵)木马病毒和防御供应链软件攻击。
360追日团队(Helios Team)360 追日团队(Helios Team)是360科技集团下属的高等威胁研究团队,从事APT攻击创造与追踪、互联网安全事宜应急相应、黑客家当链挖掘和研究等事情。团队成立于2014年12月,通过整合360公司海量安全大数据,实现了威胁情报快速关联溯源,独家首次创造并追踪了三十余个APT组织及黑客团伙,大大拓宽了海内关于黑客家当的研究视野,补充了海内APT研究的空缺,并为大量企业和政府机构供应安全威胁评估及办理方案输出。
已公开APT干系研究成果
发布韶光报告名称组织编号报告链接2015.05.29海莲花:数字海洋的游猎者持续3年的网络空间威胁APT-C-00http://zhuiri.360.cn/report/index.php/2015/05/29/apt-c-00/2015.12.10007黑客组织及地下黑产活动剖析报告https://ti.360.com/upload/report/file/Hook007.pdf2016.01.182015年中国高等持续性威胁APT研究报告http://zhuiri.360.cn/report/index.php/2016/01/18/apt2015/2016.05.10洋葱狗:交通能源的觊觎者潜伏3年的定向攻击威胁APT-C-03http://zhuiri.360.cn/report/index.php/2016/05/10/apt-c-03/2016.05.13DarkHotel定向攻击样本分析APT-C-06http://bobao.360.cn/learning/detail/2869.html2016.05.30美人鱼行动:长达6年的境外定向攻击活动戳穿APT-C-07http://zhuiri.360.cn/report/index.php/2016/05/30/apt-c-07/2016.06.03SWIFT之殇:针对越南先锋银行的黑客攻击技能初探http://bobao.360.cn/learning/detail/2890.html2016.07.01人面狮行动中东地区的定向攻击活动APT-C-15http://zhuiri.360.cn/report/index.php/2016/07/01/apt-c-15/2016.07.21台湾第一银行ATM机“自动吐钱”事宜剖析http://bobao.360.cn/news/detail/3374.html2016.08.04摩诃草组织来自南亚的定向攻击威胁APT-C-09http://zhuiri.360.cn/report/index.php/2016/08/04/apt-c-09/2016.08.09关于近期曝光的针对银行SWIFT系统攻击事宜综合剖析http://zhuiri.360.cn/report/index.php/2016/08/25/swift/2016.11.15蔓灵花攻击行动(简报)http://zhuiri.360.cn/report/index.php/2016/11/04/bitter/