近期,火绒威胁情报系统监到木马病毒pitou的最新变种正在快速传播。该病毒感染系统后,可以根据C&C服务器下发的配置信息发送邮件进行钓鱼攻击和广告推销。同时,该病毒还采用内核级对抗手段来规避安全软件的查杀,并且能够在操作系统加载前执行,其较强的隐蔽性和持久性对用户构成较大安全威胁。目前,火绒安全产品可对上述病毒进行拦截查杀,请用户及时更新病毒库以进行防御。
该病毒被运行后,先通过多段shellcode来加载最内层的恶意模块,随后劫持系统MBR绕过DSE保护,来加载恶意驱动模块,这使得它能够绕开操作系统级别的安全措施,最终再根据C&C服务器下发的配置信息,向外发送垃圾邮件进行钓鱼攻击和广告推销。该病毒执行流程,如下图所示:
在此,火绒工程师建议广大用户,对陌生人发送的文件或可执行程序保持警惕,如有必要先使用安全软件扫描后再使用。
初始化阶段
病毒运行后,先通过多段shellcode来加载最内层的恶意模块,其中还携带混淆代码,这样做的好处是可以绕过杀毒软件的查杀,如下图所示:
在shellcode1中会解密、执行shellcode2,再通过shellcode2来加载内层的恶意模块,相关代码,如下图所示:
在shellcode2中会以创建傀儡进程的方式来加载内层的恶意模块,相关代码,如下图所示:
在内层的恶意模块中通过直接操作PhysicalDrive0和调用SCSI接口两种方式来直接操作物理磁盘,相关代码,如下图所示:
通过这两种方式来将恶意MBR以及shellcode和恶意驱动模块进行加密并写入到物理磁盘中,相关代码,如下图所示:
将恶意代码写入到磁盘后会进行重启,以便执行恶意的MBR,相关代码,如下图所示:
恶意MBR运行后,会将第0x80扇区中的shellcode拷贝到0x5000解密并执行,在shellcode中会对INT 13进行HOOK ,并重新调用原始的MBR执行正常的引导逻辑代码,当被HOOK的INT 13 被调用时,会在BootMgr被加载后对其进行HOOK, 在HOOK后的恶意代码中,会通过匹配特征码的方式在Bootmgr(16位)中搜索实模式切换保护模式的代码进行HOOK来执行32位的代码。恶意MBR解密执行shellcode相关代码,如下图所示:
shellcode中HOOK int13并执行原始MBR,相关代码,如下图所示:
hook int 13后的恶意代码中,会在Bootmgr被加载后,对Bootmgr头部进行HOOK,相关代码,如下图所示:
在Bootmgr头部被HOOK的代码中,通过特征码在Bootmgr搜索实模式切换保护模式的代码进行HOOK来执行一段32位的恶意代码,相关代码,如下图所示:
被HOOK的代码会在BootMgr(32位)代码被加载前,搜索Archx86TransferTo64BitApplicationAsm并对其进行HOOK,相关代码,如下图所示:
HOOK Archx86TransferTo64BitApplicationAsm
在Archx86TransferTo64BitApplicationAsm被HOOK后的代码中,搜索winload.exe的OslArchTransferToKernel函数并对其进行HOOK来执行一段64位恶意代码,相关代码,如下图所示:
搜索OslArchTransferToKernel函数
被HOOK后的OslArchTransferToKernel代码中,首先通过函数名哈希值获取InbvIsBootDriverInstalled函数地址,并在INIT节中通过特征码搜索StartFirstUserProcess中调用 InbvIsBootDriverInstalled处,对其进行HOOK ,相关代码,如下图所示:
HOOK InbvIsBootDriverInstalled调用位置
StartFirstUserProcess被HOOK后,执行InbvIsBootDriverInstalled函数前,会先加载恶意驱动,具体操作:先会申请一块内存,shellcode复制到新的内存中,之后再创建一个新的线程负责将恶意驱动模块加载到系统中,相关代码,如下图所示:
劫持InbvIsBootDriverInstalled来创建线程
创建的线程函数中会读取、加载扇区中的恶意驱动模块,相关代码,如下图所示:
驱动模块分析
对抗手段
在恶意驱动模块中使用代码虚拟化壳对关键代码进行保护,被加密后的函数会从x86汇编字节码转换为虚拟字节码,由虚拟机进行执行,可以有效防止被安全人员分析。被虚拟化后的函数,如下图所示:
虚拟机是一个大循环会读取后面的虚拟字节码来执行对应的处理函数(handler),虚拟机执行流,如下图所示:
在虚拟机的入口中,会先保存寄存器上下文环境,通过rsi寄存器进行访问,如下图所示:
解析虚拟字节码取出handler编号并执行对应handler,相关代码,如下图所示:
以XOR指令为例, XOR的虚拟字节码为04,虚拟指令XOR的执行过程,如下图所示:
为了更好地分析病毒,需要对该虚拟机进行还原,幸运的是虚拟机没有使用代码膨胀花指令等混淆手段,已经有相关安全人员对该虚拟机进行过还原并给出还原脚本,详见(https://bin.re/blog/the-dga-of-pitou/),该变种虚拟机Handler相较之前变种,handler编号进行了改变,需要分析所有类型handler 的编号,对脚本进行修改就可以进行还原,新老变种编号对比,如下图所示:
需要分析出所有类型handler对应编号,再修改脚本中对应handler的编号就能对虚拟化后的函数进行还原。还原脚本handler编号位置,如下所示:
该病毒通过检测bios信息来判断是否处在虚拟机中,相关代码,如下图所示:
该病毒还会通过删除系统更新和组件以及杀毒软件的服务和注册表,相关代码,如下图所示:
该病毒使用DGA算法以当前时间为种子来计算域名,相关代码,如下图所示:
在调试该样本时生成的域名列表,经过测试这些域名目前还未被黑客注册,黑客可随时对这些域名进行注册来进行通讯,如下图所示:
恶意功能
该病毒会对ndis层相关的函数进行HOOK来和C&C服务器进行通讯,因为 ndis较为底层可以绕过很多防火墙的监控,还可以避免被防火墙流量拦截,在win10中会被HOOK的ndis函数列表,如下图所示:
病毒通过HOOK NdisMSendNetBufferListsComplete函数来向C&C服务器发送消息,相关代码,如下图所示:
病毒通过HOOK NdisMIndicateReceiveNetBufferLists函数来接收C&C服务器发送的消息,相关代码,如下图所示:
DGA算法生成的域名还未被黑客注册成C&C服务器,后续没法进行动态调试,不排除后续黑客对这些域名进行注册,以下为静态分析的结果。病毒会根据C&C服务器的配置信息,通过MIME协议向外发送垃圾邮件,pitou支持四种类型MIME,如下图所示:
以multipart/related邮件类型为例,接收到C&C服务器的配置信息之后,构建邮件代码,如下图所示:
原文始发于微信公众号(火绒安全):pitou新变种快速传播 于系统加载前执行