一概述
Konni是Cisco Talos于2017年披露的一个远控木马,最早的攻击活动开始于2014年,主要针对俄罗斯、韩国等地区进行攻击。2018年,Palo Alto发现Konni恶意软件与Nokki恶意软件存在部分关联,并观察到Nokki恶意软件被东亚APT组织Reaper(又名APT37、Group123、Scarcruft)使用。国内安全研究人员则通过Syscon/Sanny木马将Konni与Darkhotel组织联系在一起。2019年,该组织在武器库中加入远控工具TeamViewer,开始使用浅色字体诱饵引导用户开启宏代码执行,同时开发出针对移动设备的恶意软件。同年,国外安全研究人员开始将Konni作为疑似具有东亚背景的APT组织进行报告和披露。
近日,安恒猎影实验室捕获到一批来自Konni APT组织的恶意样本,并根据该组织鲜明的流量特征、明确的攻击目的以及最后阶段的恶意负载关联到了其在2022年内的其他攻击样本。
按照针对地域,我们将样本区分为了针对韩国地区以及针对俄罗斯地区,在韩国地区提交的样本中,我们发现该组织重新开始针对加密货币行业,而在俄罗斯地区提交的样本中,恶意样本主要针对外交实体及相关人员,诱饵文件的话题围绕俄罗斯、韩国、朝鲜、美国等国家之间的外交关系。
按照是否获取到后续,我们将在如下流程图进行区分。根据流程图我们可以看出,该组织虽然在下发后续负载方面较为单一,但其初始加载方式十分多样化,给研究人员在未获取到后续的情况下溯源具体组织带来了一定干扰。
此外,我们在10月中旬捕获了该组织利用政治新闻话题传播恶意CHM文件,该组织疑似开始将目标转向东南亚地区国家。
在未获取到后续的样本中,也可以看出Konni组织多样化的攻击手法。
二针对韩国地区
1.样本一
文件名 | 보상명부.xlam |
Hash | cf5f18032667bfb4c7373191e7fb1fbf |
文件上次修改时间 | 2022-09-02 08:47:50 |
文件上传地 | KR |
详细分析
01宏代码
样本运行后加载宏代码,将自身复制到%Temp%目录下并重命名为{随机字符}.zip,随后解压ZIP文件到%Temp%目录,通过cmd expand指令加载rels.xml中的check.bat执行。
02check.bat
该文件包含指令如下:
1、判断管理员权限
2、判断系统环境
3、带参数运行wpnprv64/32.dll,yup.bat
03wpnprv64/32.dll
该模块为提权模块,主要通过两种方式进行提权。
04yup.bat
该文件包含指令如下:
1、根据运行路径选择执行文件复制或文件安装
2、根据系统环境选择复制文件authtokenmgt64/32.dll及.dat到C:\Windows\System32\
3、创建名为authtokenmgt的服务并设置type及binpath
4、通过注册表将authtokenmgt服务添加至SvcHost服务启动列表实现持久化
5、启动authtokenmgt服务
6、删除以上恶意文件执行过程中释放的文件
05authtokenmgt64.dll
该文件包含功能如下
1、解密后续所需API 函数名,并通过GetProcAddress()获取对应函数地址
2、获取当前运行的服务名(authtokenmgt)及DLL文件路径(C:\Windows\System32\authtokenmgt.dll),拼接出字符串(..\authtokenmgt.dat、..\authtokenmgt.ini)
3、执行命令更改控制台编码为Unicode字符集,新建线程
4、读取配置文件(..\authtokenmgt.dat),其中前16字节为iv,后13字节为C2域名密文,服务名(authtokenmgt)的SHA256值作为key,进行解密。解密脚本如下:
#!/usr/bin/env python3
# Author: @jaydinbas
import sys
from Cryptodome.Cipher import AES
import hashlib
if len(sys.argv) != 3:
print("usage: %s" % sys.argv[0])
sys.exit(0)
data = open(sys.argv[2],"rb").read()
initial_counter = data[:16]
data = data[16:]
phrase = sys.argv[1].encode("utf16")[2:]
key = hashlib.sha256(phrase).digest()
cipher = AES.new(key=key,initial_value=initial_counter,mode=AES.MODE_CTR,nonce=b'')
plain = cipher.decrypt(data)
try:
plain = plain.decode("utf16")
print(plain)
except:
print(repr(plain))
若..\authtokenmgt.dat文件打开失败,则读取..\authtokenmgt.ini文件中的数据。(注:.ini文件是该组织在历史活动中较常使用的配置文件名,本次活动开始使用.dat后缀文件
5、通过命令cmd /c systeminfo获取系统信息保存至C:\Windows\Temp\目录下
通过命令cmd /c systeminfo获取系统信息保存至C:\Windows\Temp\目录下
6、通过命令cmd /c makecab压缩存放系统信息的文件Tmp{随机字符}.tmp
7、读取cabFile,加密并以POST方式上传至C2服务器rq7592.c1[.]biz/up.php?name={HostName}
若服务器返回“success!”,则通过命令cmd /c tasklist重复执行上述操作
8、继续与服务器通信,以GET方式请求rq7592.c1[.]biz/dn.php?name={HostName}&prefix=cc%20(0)
获取并解析后续指令
指令功能较之前无明显更新,具体指令及功能如下表所示:
主指令 | 一级 指令 | 二级 指令 | 功能 |
cmd | pull | /f | 拷贝到Tmp目录上传 |
直接上传 | |||
put | 将下载文件移动至指定目录 | ||
chmd | 写数据到指定文件 | ||
> | 远程shell | ||
/user | /stext或> | 使用user权限执行后续并将结果保存至Tmp | |
使用user权限执行后续文件 | |||
/stext | 执行后续并将结果保存至Tmp |
2.样本二
文件名 | 카뱅과손잡은코인원_비트독주체제무너뜨릴까 [위클리코인리뷰] - 이코노미스트.docx |
Hash | 00e6e9ed4666623860686c123ed334f0 |
文件上次修改时间 | 2022-09-27 13:29:28 UTC |
文件上传地 | KR |
样本以加密货币为相关主题针对韩国地区,这也是我们观察到Konni组织自2019年开始针对加密货币行业的后续活动之一。
相关分析
样本通过利用CVE-2017-0199漏洞注入远程模板文件,文件包含宏代码如下:
即获取本机系统信息、机器名、IP、Mac地址上传至hxxp://word2022.c1[.]biz//index.php?os={}&name={}&ip=_{ip}_{macAddress}。
二针对俄语地区
3.样本三
文件名 | Hash |
письмо.zip | 24ef6a627d69f6bfe4b8325f74a8adba |
письмо ... ..exe | 705c8d431b4b8fa834491ff6975a0532 |
письмо.pdf | 093878920b7a70b1c4dcb953362a319c |
письмо ... ..exe为修改版的PDF查看程序SumatraPDF.exe,письмо.pdf为普通PDF文件,该文件使用一般的PDF查看器时显示为空,使用附带的修改版SumatraPDF.exe才能查看内容。诱饵文档内容以韩国驻俄罗斯大使馆人员的语气向特定人员咨询其对于朝鲜半岛政治局势的看法。
详细分析
01修改版SumatraPDF.exe
该文件原始文件为SumatraPDF.exe,经过修改变成了能执行恶意功能的程序。
相同版本的原始程序入口点为正常的MSVC编译器的入口点。
修改后的样本入口点:
修改后的样本入口点主要功能为:找到名为0xBEC以及0xBEE的资源文件,读取到内存中后与0xF3逐字节异或解密。
然后创建p1.dll以及p2.dll,将解密后的资源写入文件,并加载两个dll。
02p1.dll
p1.dll使用UPX进行压缩,解压缩后DllMain函数如下,首先是创建一个线程,然后注册一个VEH函数,最后主动抛出异常。
新创建线程功能与之前披露的Konni报告类似,主要为从资源中解密出一个压缩包,并通过CreateProcess执行该压缩包中的yup.bat文件。
压缩包内容如下:
yup.bat执行流程与样本1一致,此处不再赘述。
注册的VEH函数如下:
首先是判断异常的异常码,当异常码为0时(即后面主动抛出异常),修改主程序地址为0x47F5C4处的数值为0xCC即INT 3异常。
修改前该处代码:
修改后该处代码
当异常为STATUS_BREAKPOINT(0x80000003)并且EIP为0x47F5C4时,修改线程上下文的EAX为0x223E9F78,EIP为0x47F5C7并继续执行。该VEH函数目的为修改函数0x47F5C0运行时的EAX的值,但实际调试发现EAX在随后在0x47F5C7处被重新赋值了,推测此处可能为代码人员在异常处理中对EIP错误赋值,并且在实际调试过程中也未发现0x47F5C0函数被调用的情形。
03.p2.dll
p2.dll流程与p1比较类似,首先创建一个线程,然后该线程注册一个VEH函数,最后主动抛出异常。
VEH函数先判断异常码是否小于STATUS_BREAKPOINT(0x80000003),小于并且为0的话修改程序偏移为0x4A113处的数值为0xCC(INT 3),与p1.dll中主动触发异常的操作相同。
未修改前代码:
修改后代码:
可以发现在修改代码上面有ReadFile操作,实际调试发现当打开PDF文件时就会调用此处读取文件。
接下来为修改后的0xCC触发异常时的操作,先获取异常上下文Esp+0x10处的值,即调用完ReadFile函数后指向的缓冲区数据,然后比较数据起始字符是否为“%PDF-”,来判断是否打开的为PDF文件。
PDF文件部分缓冲区数据:
当打开的为PDF文件时,遍历查找到“stream.)”的位置,然后对“stream”后面的数据进行逐字节异或解密,直到遇到“endstream”停止。“stream”以及”endstream”中的数据为PDF文件中存储的流数据。
解密完成后将上下文EIP+=2,然后继续执行:
以上流程用于对打开的PDF文件进行监控,检查到文件中包含起始为“stream.)”的流数据再进行解密并继续执行,因此该SumatraPDF.exe只能用于显示特定的PDF文件。Konni组织开发此功能是为了让目标使用修改后的SumatraPDF.exe来触发恶意功能,同时可以更好的隐藏诱饵文件。
4.样本四
文件名 | Паспорт.doc(护照) |
Hash | 66fba06e965f9a6ea192db7f452ea9b6 |
文件上传时间 | 2022-06-21 08:18:37 UTC |
相关分析
宏代码如下,执行label1中的指令并将诱饵文档中的字体颜色调整为黑色:
label1中的Powershell指令如下:
Powershell解码后如下,从hxxp://687964.c1.biz/info.php?name={MachineName}&tp={OSVersion}获取mk.vbs。
mk.vbs脚本内容如下,将Powershell指令隐藏在计划任务内每隔一小时执行一次。
Powershell指令解码如下,从hxxp://968796.c1.biz/dn.php?name={MachineName}&prefix=qq&tp={OSVersion}下获取后续负载执行。
5.样本五
另一例通过宏代码释放VBS脚本加载Powershell指令获取后续负载的Konni样本信息如下:
文件名 | Hash |
- | b06ab8e1e7c75d883ae2994644a9d9b3 |
Donbass.zip | f71631e9253193396ad897ae4c3ec623 |
donbass.ppam | dae0efd29230feab95f46ee20030a425 |
邮件正文显示,此次活动为攻击者利用俄罗斯领事馆邮箱,对俄罗斯其它外交邮箱进行的钓鱼邮件投递活动。
附件中PPT为英俄双语,主题是DPR外交部长会见朝鲜民主主义人民共和国大使,疑似针对俄罗斯外交部:
相关分析
donbass.ppam文件中包含的宏代码如下:
解密出的Powershell指令如下,与以往攻击手法保持一致,均为获取本机信息上传并下载后续,其中URL格式为hxxp://gg1593.c1[.]biz/dn.php?name={MachineName}&prefix=tt&tp={OSVersion}。
6样本六
文件名 | Hash |
Визит делегации США.7z 美国代表团访问 | de8cd8c065faf36f033437f335caf5ba |
Визит делегации США.scr | 28942e7704b629c63afefe23d38068f5 |
相关分析
该样本也具有较为鲜明的Konni RAT特征,此处不再详细分析。
后续从837593.c1[.]biz/index.php?uid=558975&type=%d下载到本地的CAB文件及其他组件hash如下:
文件名 | Hash |
CAB File | 2ded488ae98c912c8f3308774956de7a |
seed.bat | 3e67c2d95f2463cac8061d0493c1ac76 |
foot.bat | 2214d7be0f052cc284c64438a1782a77 |
wpnprv.dll | 4a08178e0e446798ae185ef42354815c |
wncsvc.dll | e165bff5162b7402999caaad0f29b93d |
wncsvc.ini | f62b562ee90cb5e90320626b820a7f7c |
四总结
本文总结了Konni APT在2022年攻击活动中使用到的一些攻击手法,除加载方式种类繁多之外,该组织在后续下发的组件还存在如下更新:
1、RAT重新启用x86版本,疑似扩大攻击范围,提高与目标机器适配性
2、启用除INI后缀之外的配置文件,逃避行为检测
3、采用新的加密算法对C2配置文件、Windows API函数等进行加解密
4、不再以明文传输窃取数据,而是通过AES加密避免流量检测
5、通过修改合法软件,设置异常函数,以加载恶意代码
6、灵活应用VBscript、Powershell等脚本组成攻击链
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)