REvil
警惕程度 ★★★
影响平台: Windows 2000/7/8/10/ 95 /98/Me/NT/Server 2003/Server 2008/Vista/XP
病毒执行体描述
REvil勒索软件操作增加了一种新的功能,可以在Windows安全模式下加密文件,这可能会逃避安全软件的检测,并在加密文件时获得更大的成功。
Windows安全模式是一种特殊的启动模式,允许用户在操作系统上运行管理和诊断任务。这种模式只装载操作系统工作所需的最低限度的软件和驱动程序。
此外,安装在Windows中的任何程序如果被配置为自动启动,将不会在安全模式下启动,除非它们的自动运行以某种方式配置。
REvil勒索软件在Windows中自动运行的方法之一是在以下注册表项下创建条目:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
“Run”键将在每次登录时启动一个程序,而“RunOnce”键将只启动一个程序一次,然后从注册表中删除条目。
例如,以下注册表项将在登录到Windows时自动启动C:\Users\test\test.exe程序。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Startup"="C:\Users\test\test.exe"
但是,上面的自动运行将不会在安全模式下启动,除非您像下面这样在值名的开头添加星号(*)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"*Startup"="C:\Users\test\test.exe"
REvil现在包括一个“安全模式”模式
在REvil勒索软件的一个新示例中,添加了一个新的- Mode命令行参数,强制计算机在加密设备之前重启到安全模式。
为了做到这一点,REvil将执行以下命令,当Windows下次重新启动时,强制计算机启动到网络安全模式。
bootcfg /raw /a /safeboot:network /id 1
bcdedit /set {current} safeboot network
然后,它创建一个'RunOnce' autorun称为'*franceisshit',执行'bcdedit /deletevalue {current} safeboot'后,用户登录到安全模式。
最后,勒索软件强制重启Windows,用户不能中断。
就在该流程退出之前,它将创建一个名为“阿斯利康”(AstraZeneca)的额外进程,可能与法国最近关于使用该疫苗的审议有关。
当设备重新启动后,下一个用户登录时,自动运行将重新启动REvil勒索软件,不带- mode参数。
需要注意,这两个“RunOnce”条目将在登录到安全模式后执行,并且将被Windows自动删除。
在重新启动时,设备将在网络的安全模式下启动,用户将被提示登录到Windows。一旦他们登录,REvil勒索软件将在没有- mode参数的情况下执行,这样它就会开始加密设备上的文件。
Windows还将运行'*AstraZeneca'注册表键配置的'bcdedit /deletevalue {current} safeboot'命令,这样当勒索软件完成时,机器可以重新启动进入正常模式。
当REvil加密文件时,安全模式屏幕将是空白的,但仍然可以使用Ctrl+Alt+Delete来启动Windows任务管理器。从这里,您可以看到可执行文件正在运行,在我们的测试中,它名为“mode”。如下所示。
在运行时,勒索软件将阻止用户通过任务管理器启动任何程序,直到它完成加密设备。
一旦设备被加密,它将允许启动序列的其余部分继续进行,桌面将显示赎金便条和加密文件。
预防和清除:
不要点击不明网站;打开不明邮件附件;定时经常更新杀毒软件病毒数据库,最好打开杀毒软件的病毒数据库自动更新功能。关闭电脑共享功能,关闭允许远程连接电脑的功能。安装最新的系统补丁。
FormBook
警惕程度 ★★★
影响平台: Windows 2000/7/8/10/ 95 /98/Me/NT/Server 2003/Server 2008/Vista/XP
病毒执行体描述
FormBook是一种恶意软件,旨在从受害者的设备窃取敏感信息,并接收控制命令,在该设备上执行额外的恶意任务。
一个FormBook有效负载被注入到一个新创建的进程AddInProcess32.exe中,相关的寄存器被设置为指向注入的FormBook的条目。之后,在执行API ResumeThread()之后,AMe8模块将调用入口点,这也是我将在这篇文章中开始的。
FormBook恶意软件的有效载荷文件是一个32位的Native Code PE文件(一个EXE文件),而不是一个.net模块。
在讨论FormBook主模块之前,我需要引入一个全局配置对象(ConfigObj)或配置块,它在整个FormBook恶意软件中经常被读取和写入。它占用0xC9C字节,其中包含许多配置选项,例如:
FormBook的基本地址,以及许多Dll模块(ntdll.dll, kernel32.dll, advapi32.dll等)
加密的Dll名称,如kernel32.dll和advapi32.dll等。
显示FormBook是否在分析设备中运行的标志组
许多使用字符串散列代码的加密块用于检索api
显示它是在32位还是64位平台上的标志
许多API地址(ExitProcess(),CreateProcessInternalW()等)
FormBook使用的反分析技术
1. 导入的api是隐藏的
在FormBook中,所有api都对分析师隐藏。它们由一个具有api名称散列代码的特殊函数检索。一些哈希码是由常量值给出的,一些是从ConfigObj解密的。
如您所见,图2.2所示的代码段是一个示例,它通过重命名的函数get_API_by_name_hashcode()获得两个api,它们的名称的哈希码是0C84882B8h =CoCreateInstance() and 44E954F9h =CreateDirectoryW()。
2. 复制ntdll.dll模块
DLL是Windows上提供NT内核api的内核层DLL。FormBook在其内存中部署了一个重复的ntdll.dll,提供内核api函数,而不是原来的阻止研究人员识别api的函数。图2.3显示了在上面的重复的ntdll.dll (0x810000)和在底部的原始加载的ntdll.dll (0x77140000)。
3.检测它是否在分析环境中运行
FormBook将从ConfigObj解密的列表中的预定义哈希码与正在运行的进程名哈希码进行比较。它使用参数SystemProcessInformation调用API ZwQuerySystemInformation()来将所有正在运行的进程的信息收集到一个链接结构中。
然后,它逐个计算进程名的哈希码,并将其与那些预定义的哈希码进行比较。与预定义哈希码对应的进程名是关于VMware、Virtual Box、sandbox、Parallels Desktop和其他用于监控文件、进程、网络和系统注册表事件的分析工具的。以下是这些过程的列表:
vmwareuser.exe, vmwareservice.exe, VBoxService.exe, VBoxTray.exe, sandboxiedcomlaunch.exe, sandboxierpcss.exe, procmon.exe, filemon.exe, wireshark.exe, NetMon.exe, prl_tools_service.exe, prl_cc.exe, vmtoolsd.exe, vmsrvc.exe, vmusrvc.exe, python.exe, perl.exe, regmon.exe
它还将任何匹配结果作为ConfigObj标志组中的标志记录下来。
4. 检测文件名,用户名,路径
然后,它计算从当前进程名(进程名可能会被研究人员重命名)、用户名(著名的沙箱使用固定的用户名)和已加载模块路径字符串(分析工具模块)的拆分字符串列表中检索到的字符串的哈希码。然后,它用FormBook中的预定义哈希码检查这些哈希码。结果影响到标志组。
5. 发现任何调试器
接下来,它从重复的ntdll.dll中检索API ZwQueryInformationProcess(),并使用不同的参数调用它以获得SystemKernelDebuggerInformation数据。它用于检查内核调试器和ProcessDebugPort数据,以确定一个ring3调试器。图2.4显示了用于获取调试器信息的两个参数。
6. 检测执行指令的时间间隔
此检测在此变体中已被禁用。通过比较执行ASM指令的间隙时间来确定FormBook是否正在调试;300h(应小于300h)。它将该值硬编码为50h以禁用此检测。它还将结果记录在ConfigObj的标志组中。
7. 加密的关键功能
在注入到目标进程之前,有五个密钥函数段被加密和解密。这五个分段由48909090h、49909090h、4A909090h、4B909090h、4C909090h这五个magic code标识。
8. 使用许多未记录的api
FormBook使用了很多低级的无文档的api,比如LdrGetProcedureAddress(), LdrLoadDll(), ZwOpenProcessToken(), ZwAdjustPrivilegesToken(), NtOpenProcessToken(), ZwReadVirtualMemory(), RtlQueryEnvironmentVariable(), RtlDosPathNameToNtPathName_U(), ZwDelayException(), ZwQueueApcThread()等等。
所谓的“未记录的API”仅仅意味着该API对Windows用户是隐藏的。您无法从MSDN获得API的任何官方描述。
有一个特殊的函数来检查在某些检测中设置的标志组的结果。一旦触发了一个检测,它返回0,否则返回1。下面是这个函数的伪代码,它的参数是ConfigObj。标志组占用偏移量40 (0x28)到55 (0x37)的字节。
如果函数的结果是0,那么它将退出进程而不做任何事情。
您不能简单地更改结果(从0到1)来忽略检测并更改代码流 原因是在下一步中,标志组(10H长)将是一个RC4种子,用于生成RC4密钥,最终解密其他数据,如模块名,如kernel32.dll和advapi32.dll 如果标志组错误,也可能无法加载这些模块
FormBook的任务概述
上图概述了在受害者的设备上执行的大多数FormBook动作。FormBook的AddInProcess32.exe可执行文件将自己注入到一个通过Explorer.exe(步骤1,2,和3)创建的新创建的Windows进程中(如ipconfig.exe)。包括iexplorer.exe, chrome.exe, skype.exe, outlook.exe, whatsapp.exe等),从它窃取受害者输入和剪贴板数据不时(步骤4)。
它还使用一个较大的共享内存段来存储从运行在目标进程中的FormBook实例和运行在Windows进程中的FormBook实例收集的数据(第5步)。
被盗的数据然后通过运行在Explorer.exe中的FormBook实例发送到C2服务器(步骤6)。
通过Explorer.exe部署FormBook到Windows进程
运行在AddInProcess32.exe中的FormBook有效载荷通过比较运行进程名称的哈希码来查找Explorer.exe,它通过调用带有参数0x5 (SystemProcessInformation)的API ZwQuerySystemInformation()来获得。
exe的哈希码是19996921h。如下图所示,这是一个ASM代码片段,展示了FormBook如何通过一个调用match_hashcode()的函数,将其哈希代码与其他进程的哈希代码进行比较,从而找到explorer.exe。
一旦匹配explorer.exe,函数返回1,FormBook继续下一步。否则,它将在循环中检索下一个要匹配的运行进程名。
接下来,FormBook打开Explorer.exe的进程句柄,分配内存给它,然后将整个FormBook有效负载复制到Explorer.exe内存中。然后它继续从一个新启动的线程Explorer.exe中的不同入口点执行FormBook。
为此,它调用了许多api,包括ZwOpenProcess(), ZwCreateSection(), ZwMapViewOfSection(), ZwOpenThread(), zwsuspenendthread (), ZwGetContextThread(), ZwSetContextThread()和ZwResumeThread()。
注入Explorer.exe的FormBook实例的逻辑和特性非常清晰和简单。它将以挂起模式运行一个随机选择的Windows进程(位于%Windir%\system32\),并返回进程状态和信息。
Windows进程名列表在ConfigObj中加密(从offset +6Bh开始),并通过它的索引进行选择。它总共有38个这样的Windows进程名(字符串索引范围从0x3到0x29),它们被解密并在下面列出:
"svchost.exe", "msiexec.exe", "wuauclt.exe", "lsass.exe", "wlanext.exe", "msg.exe", "lsm.exe", "dwm.exe", "help.exe", "chkdsk.exe", "cmmon32.exe", "nbtstat.exe", "spoolsv.exe", "rdpclip.exe", "control.exe", "taskhost.exe", "rundll32.exe", "systray.exe", "audiodg.exe", "wininit.exe", "services.exe", "autochk.exe", "autoconv.exe", "autofmt.exe", "cmstp.exe", "colorcpl.exe", "cscript.exe", "explorer.exe", "WWAHost.exe", "ipconfig.exe", "msdt.exe", "mstsc.exe", "NAPSTAT.EXE", "netsh.exe", "NETSTAT.EXE", "raserver.exe", "wscript.exe", "wuapp.exe", "cmd.exe".
上图显示了它的随机函数和解密函数,以及刚刚解密的名为ipconfig.exe的Windows进程,它的随机字符串索引为0x20。我将使用ipconfig.exe来解释FormBook如何与Windows进程一起工作。
它首先使用ipconfig.exe全路径和0x800000C的dwCreationFlags参数调用API CreateProcessInternalW(),这意味着CREATE_NO_WINDOW|CREATE_SUSPENDED|DETACHED_PROCESS。这将在没有窗口和挂起模式下启动ipconfig.exe。
在Explorer.exe中的FormBook实例将继续收集ipconfig.exe的进程信息(例如它的完整路径,进程ID,线程ID,加载的基地地址等),并将它们返回到AddInProcess32.exe中的FormBook。此时,FormBook在Explorer.exe中的工作就完成了。
为什么不直接运行Windows进程,而不是通过Explorer.exe?在一些分析工具中,这样做表明Windows进程(ipconfig.exe)是从Explorer.exe启动的,与受害者启动的正常进程相同。这有助于让自己既不被分析师发现,也不被受害者发现。它使用的另一个技巧是,这些进程都是Windows的默认进程,这使得用户和分析人员不太可能将其与恶意软件连接起来。如图4.3所示,从Explorer进程中可以看到,ipconfig.exe在Explorer .exe下被识别,这与其他进程(如notepad.exe和calc.exe)相同,我通过双击它们的图标打开它们。
然后AddInProcess32.exe中的FormBook获取从Explorer.exe返回的挂起的ipconfig.exe的进程信息。然后,它就能够将FormBook有效负载文件复制到ipconfig.exe中,并将其主线程的入口点代码修改为注入的FormBook的新入口点。它最终调用API ZwResumeThread()来恢复ipconfig.exe以执行FormBook的恶意代码。同时,它调用ExitProcess()来终止注入到AddInProcess32.exe中的FormBook实例的生命周期。
FormBook在Windows进程中被注入到目标进程
注入的FormBook实例运行在Windows进程中,比如ipconfig.exe,控制在受害者的设备上维持其生命。
首先,它初始化自己的ConfigObj并执行我在前面反分析部分中解释过的检测。
接下来,FormBook需要解密五个关键函数,这些函数将在注入FormBook后在目标进程中被调用。它对每个函数都有一个神奇的代码,分别是48909090h、49909090h、4A909090h、4B909090h和4C909090h。
FormBook通过搜索整个代码段中的魔法代码找到加密的代码,然后使用RC4算法解密它们。RC4解密密钥是从ConfigObj中的数据生成的。图5.1左边显示了魔术代码48909090h的密钥函数的加密代码,右边显示了解密代码。
这5个解密的密钥函数用于执行与C2相关的工作,比如解密C2主机字符串、加载网络api以及与C2服务器通信等。
FormBook中的一个函数主要通过使用SystemProcessInformation参数调用API ZwQuerySystemInformation(),将进程名的哈希码与保存在ConfigObj中的FormBook中的预定义哈希码进行比较,从收集到的当前进程中过滤目标进程。一旦一个进程的哈希代码与其预定义的哈希代码相匹配,它就会启动一个函数将FormBook注入到匹配的进程中,然后从不同的入口点集内嵌钩子执行代码以窃取数据。
下图显示了一个代码流结构的伪代码,该代码描述了FormBook如何过滤目标进程,并在进程名称与预定义的散列代码匹配时调用一个函数将FormBook注入该进程。FormBook每5秒执行一次检查,以便更好地覆盖新打开的目标进程。
在这个FormBook变体中总共有92个预定义的目标进程,它有一个保存在ConfigObj中的进程名的加密散列代码列表,从offset + 444h开始。我还没有通过它们的哈希码定义所有的目标进程名。然而,通过我的分析,我已经确定了目标流程所属的大多数产品。根据它们的特点,可以分为以下几类:
Web browsers:
谷歌Chrome,微软IE和Edge, Mozilla Firefox, Opera浏览器,苹果Safari,火炬浏览器,Maxthon浏览器,SeaMonkey浏览器,Avant浏览器,Comodo Dragon和IceDragon, K-Meleon浏览器,黑鹰浏览器,Cyberfox浏览器,Vivaldi浏览器,lunscape浏览器,史诗浏览器,Midori浏览器,Pale Moon浏览器,QtWeb浏览器,Falkon浏览器,UCBrowser, Waterfox Browser,等等。
Email clients:
Microsoft Outlook, Pocomail, Opera Mail,腾讯Foxmail, IncMail, Mozilla Thunderbird,谷歌Gmail Notifier Pro等。
IM clients:
Yahoo Messenger, ICQ, Pidgin, Trillian, Microsoft Skype, FaceBook WhatsApp等等。
FTP clients:
Estsoft ALFTP, NCH Classic FTP, Core FTP, FAR Manager, FileZilla, FlashFXP, NCH Fling, FTP Voyager, WinSCP等。
Others:
Windows Notepad and “Explorer.exe”。
详细的目标进程是:
它先调用API ZwOpenProcess(),然后调用ZwCreateSection()来打开目标进程,然后在其中创建内存段。接下来,它将整个FormBook以及已解密的五个密钥函数传输到该节中。然后,它从目标进程中新创建的线程中的新入口点执行它。
预防和清除:
不要点击不明网站;打开不明邮件附件;定时经常更新杀毒软件病毒数据库,最好打开杀毒软件的病毒数据库自动更新功能。关闭电脑共享功能,关闭允许远程连接电脑的功能。安装最新的系统补丁。
钓鱼网站提示:
1、假冒亚马逊类钓鱼网:
https://www-drv.com/site/tkqcyrr0mdjbxcscn6agiq/page/
危害:骗取用户邮箱账号及密码信息。
2、假冒PDF类钓鱼网:
http://www.capelini.com.br/adobeCom/inc/
危害:骗取用户账号及密码信息。
3、假冒Paypal类钓鱼网:
http://www.skblibrary.org.in/cottonlibrary/a
危害:骗取用户账号及密码信息。
4、假冒腾讯游戏类钓鱼网站:
http://www.dnf233.com/
危害:骗取用户信用卡号及密码信息。
5、假冒Gmail类钓鱼网站
http://www.ilona.com/wcmilona/wp-includes/SimplePie/Data/
危害:骗取用户邮箱账号及密码信息。
以上信息由上海市网络与信息安全应急管理事务中心提供