近日,天融信谛听实验室捕获到Conti勒索病毒。Conti是工业领域最活跃的勒索病毒之一,据统计Conti已成功攻击至少475个组织并窃取其数据,包括大众汽车集团、工业物联网厂商Advantech、台达电子等机构,其中绝大部分的数据已不同程度被公开。近日,一位乌克兰研究人员在Twitter上披露Conti勒索软件源代码, Conti遭遇毁灭性打击。本文专门针对Conti技术细节利用进行分析,并提供防护建议。
目前,天融信谛听实验室已获取该勒索病毒密钥,可为感染该勒索病毒的客户提供解密工具。天融信EDR、自适应安全防御系统、过滤网关等产品均可精准检测并查杀该勒索病毒,天融信下一代防火墙可对该勒索病毒传播途径进行阻断,有效防止勒索事件发生。
(上滑即可查看更多)
Conti勒索病毒v3版本的参数调用如下:
程序使用扩展名.EXTEN,加密程度g_EncryptSize是指加密文件大小的百分比,默认为50%。
静态免杀
在32位系统中使用FS寄存器获取到PEB地址后,通过遍历内核结构体的链表并比较哈希值获取kernel32.dll的基地址。
遍历kernel32.dll等系统模块的导出表名字并计算MurmurHash2A 哈希,通过查询嵌入在二进制PE中的MurmurHash2A哈希值寻找LoadLibraryA等必需的库函数地址。MurmurHash2A算法,这是一种众所周知的极快的非加密散列,适用于基于散列的查找,其项目开源地址为
https://github.com/abrandoned/murmur2/blob/master/MurmurHash2.c
通过__forceinline内联函数GetProcAddressEx2动态获取所需要的API函数地址,主要作用是在导入表中隐藏所需要的API函数,防止被yara等规则静态匹配分析。C++中inline和__inline通知编译器将该函数的内容拷贝一份放在调用函数的地方,这称之为内联。内联减少了函数调用的开销,但却增加了代码量。__forceinline关键字不基于编译器的性能和优化分析而依赖于程序员的判断进行内联。
反调试反HOOK
反HOOK的函数工作原理:通过GetModuleFileNameW 函数获取模块的路径,该路径将用于CreateFile函数创建句柄,然后使用CreateFileMapping和MapViewOfFile函数将系统库再次映射到另一个内存部分,这样断点就不会起作用。
通过遍历导出表来获取函数的地址,判断获取到的地址的OPCODE反汇编是否为jmp汇编指令,如果被HOOK最终通过CopyMemory函数修复被HOOK的函数地址。
混淆
字符串混淆
使用OBFA()和OBFW()函数进行宏替换字符串混淆。“OBFA”用于 ASCII 字符串,“OBFW”用于 UNICODE 字符串。函数中使用扩展欧几里得算法Extended Euclidean,每次都使用变化的数值生成混淆后的字符串。
算法中A、B是两个会随机变化的数字。(A*要加密字符byte+B)%127就是加密后的字符。
https://github.com/Finch4/Malware-Analysis-
Reports/blob/master/conti_string_decrypt.py
指令混淆
Morphcode是宏替换混淆指令函数,混淆原理是使用MetaRandom2<0,0x7FFFFF - 1>::value随机出一个数值,然后添加分别判断它能否被2、3、4、5模整除的运算,依此添加大量无用汇编指令。
功能函数
TAILQ队列处理
TAILQ队列是FreeBSD内核中的一种队列数据结构,主要用于处理队列,在一些著名的开源库中(如DPDK,libevent)有广泛的应用。
线程池
在threadpool命名空间中定义了Cteate、Start、PutTask、PutFinalTask、IsActive线程操作函数。在线程池的Start函数中创建名为ThreadPoolHandler的线程函数,ThreadPoolHandler线程函数主要进行网络和文件的加密。线程数量在完全加密模式下和处理器数量相同,其他模式下是处理器数量的两倍。
DeleteShadowCopies函数调用wbem的流程:
四、通过IWbemLocator::ConnectServer方法连接WMI
六、利用IWbemServices指针发出WMI请求
核心加密算法
在遍历文件的函数中使用核心加密函数cryptor::Encrypt函数开始加密文件。
在locker::GenKey方法中使用RSA公钥加密随机产生的ChaCha20算法(Salsa20加密算法的一种变体)的32字节key和8字节iv。
文件分类加密,具体针对不同的文件加密方法如下表。其中1M=1048576字节。
加密性能
在测试系统中,程序运行3分钟完成全盘加密。加密过程中有约5万个文件因为权限问题无法打开。
网络共享文件加密
如果运行模式为-net或-all都会进行网络共享文件加密。在线程函数中会调用HostHandler函数来获取网络共享下其他主机的信息,如下为通过NetShareEnum函数枚举到网络共享文件夹后进行处理加密路径的代码。
加密共享文件目录下的多数文件时同样会因权限问题不能进行加密,但是/User/Public/目录下的公共音视频文件基本都可以被加密。
重启系统安全模式加密
在zscaler公司的报告披露中,Conti还会以安全模式重启系统并加密文件,其基本步骤如下:
一、执行命令cmd.exe /c net user <admin> /active:yes以确保该帐户已启用。然后,Conti 将尝试通过执行命令cmd.exe /c net user<admin> “”将此帐户的密码更改为空字符串。将相应的注册表值设置为在系统重新启动时以安全模式自动以管理员身份登录:
修改
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon下的注册表值设置为以下值:
DefaultUserName= <username>
DefaultDomainName= <computer_name or domain_name>
DefaultPassword= <password>
二、Conti然后执行命令 bcedit.exe /set {current}safeboot network并通过调用 Windows API 函数ExitWindowsEx()强制系统重新启动。这将在启用网络的安全模式下启动Windows,因此Conti仍可加密网络共享上的文件。
三、Conti 在安全模式下完成文件加密后,执行命令bcedit.exe/deletevalue {current} safeboot并重新启动系统。
已感染客户可在天融信官网获取解密工具,还原被加密的文件,无需安装,绿色运行!
http://edr.topsec.com.cn/antiConti.exe
使用方法:
选择需要扫描的文件夹,点击“扫描”即可对该文件夹下所有被Conti勒索病毒加密的文件进行解密,也可将被加密文件直接拖入工具框进行解密。
防护建议:
1、及时修复系统及应用漏洞,降低被Conti勒索病毒通过漏洞入侵的风险。
2、加强访问控制,关闭不必要的端口,禁用不必要的连接,降低资产风险暴露面。
3、更改系统及应用使用的默认密码,配置高强度密码认证,并定期更新密码,防止弱口令攻击。
4、可安装天融信安全产品加强防护,天融信EDR、自适应、过滤网关产品可有效防御该勒索病毒。
1、通过微隔离策略加强访问控制,降低横向感染风险;
2、创建周期扫描任务,定时对主机进行全面清理,消除安全隐患;
3、开启病毒实时监测功能,可有效预防和查杀该勒索病毒;
4、开启系统加固功能,可有效拦截该勒索病毒对系统进行破坏和篡改。
1、通过微隔离策略加强访问控制,降低横向感染风险;
2、通过风险发现功能扫描系统是否存在相关漏洞和弱口令,降低风险、减少资产暴露;
3、开启病毒实时监测功能,可有效预防和查杀该勒索病毒。
1、通过访问控制策略关闭不必要的端口和服务,降低内网资产暴露风险;
2、开启入侵检测防御功能,防御口令类攻击手段,降低被入侵风险;
3、通过访问控制策略限制内网中探测类数据包,降低内网资产暴露和横向感染风险。
1、升级到最新病毒特征库;
2、开启HTTP、POP3、SMTP、FTP、IMAP等协议的病毒扫描检测;
3、配置病毒检测处置策略;
4、开启日志记录和报警功能。
产品获取方式:
1、天融信下一代防火墙、自适应安全防御系统、EDR企业版:可通过天融信各地分公司获取(查询网址:
http://www.topsec.com.cn/contact/)
ftp://ftp.topsec.com.cn/防病毒网关(Top-Filter)/病毒库脱机升级包/。
勒索病毒若无密钥,中招不可解密,其后果不可估量,严重威胁着政府企事业单位等各类组织机构的业务安全,稍有不慎还会扰乱社会秩序造成重大损失。作为国内网络安全的领军企业,天融信始终坚持自主创新,凭借多年技术积累和沉淀,凝结专业的安全产品、方案以及服务,为客户业务平稳运行保驾护航。