近日,安全狗Hellhound分析系统获取到了一个感染量非常大的病毒样本Labrade(Hellhound-20157516)。该病毒可通过感染大量的exe程序,使得运行中的进程所对应的PE文件被感染、注册表被修改等,对用户威胁巨大。
0×00 病毒概览
1)病毒行为如下图所示
如图所示,该病毒会对其他进程的section进行感染,并对一些进程进行远端线程注入。由其他进程执行修改注册表,网络连接,进程监听等恶意行为。该病毒具有如下特征:
1. 隐蔽性强。 通过线程注入进行,而恶意行为都是由其他被感染的进程执行,使得跟踪最原始的样本不会有很明显的恶意行为。
2. 开机启动方式。 该病毒不是改变注册表的run启动项来实现启动(这样很容易被发现),而是通过感染其他开机启动程序的PE文件。机器一重启,又会重新对其他进程的内存进行感染。
3. 传播能力强。 通过explore程序,一旦发现进程列表中对应的程序被访问(打开,拷贝等),就会修改对应PE文件的text段,_WinMainCRTStartup函数,新增reloc段。且被感染的程序又拥有完全相同的感染能力。
被感染的PE文件结构如上图所示,text段末尾的0×00填充空白处被感染,
修改_WinMainCRTStartup中的指令跳转到text段末尾,增加reloc段,通过text段的代码对其进行解压。
3)病毒代码层级的行为
1. 对病毒的静态代码分析,只能看到一大段的加密代码,无法找到任何病毒真正目的的字符串或者API信息。
2. 该病毒是一段段解压代码的,执行完上一段才会解压下一段代码。
3. Section感染与线程注入是在新分配的临时空间进行,其他恶意行为由被感染的进程执行,难以用普通脱壳的方式修复出完整的程序。
0×01中毒的症状
感染进程的PE文件
运行着的进程对应的PE文件都会被感染。常见的如wininit.exe,services.exe,explorer.exe,
winlogon.exe等,病毒运行时,正在运行的进程的PE文件都会被感染。
修改注册表
包括修改防火墙(给后续的恶意行为放行)
修改网络代理设置(连接到国外的网站)
修改winlogon程序(窃取登录信息)
TCP连接到一个波兰的机器 — sinkhole.cert.pl
0×02病毒分析
1. 代码修改处 (新增reloc段, 代码插入text段的末尾空白处, 修改_WinMainCRTStartup中的指令跳转到text中被修改处)
Reloc段如下所示
修改了_WinMainCRTStartup函数的第10条指令,跳转到恶意程序的代码中执行。
正常文件的100B764处为text段为对齐的0×00填充数据
2. 解压代码
Text段插入的代码对reloc的数据进行解压
解压后跳转到10369a4,此次开始的代码已经不同了。
将retn指令修改成call指令,打开下一个入口
3. 第二次解压代码
4. 内存中搜索API
内存中搜索API,构建IAT表
恶意程序会使用到的API列表如下
7721CF41 GetModuleHandleA 7721A19F lstrcatA 77234BE7 lstrcatW 77212249 lstrcmpiA 77208BFA lstrcpyW 7721A611 lstrlenA 7721D9E8 lstrlenW 7721CA7C CloseHandle 7723532C CopyFileA 77210EF7 CreateEventA 7721CEE8 CreateFileA 772197E9 CreateFileMappingA 771D2082 CreateProcessA 7725F33B CreateRemoteThread 7722375D CreateThread 7720F731 CreateToolhelp32Snapshot 772DF611 7721D9D0 FreeLibrary 77208739 GetDriveTypeA 77221DE6 GetFileAttributesA 77210273 GetFileSize 77210F6F GetFileTime 772233F6 GetModuleFileNameA 77218FC5 GetSystemDirectoryA 7721CED8 GetSystemTime 77222FDE GetSystemTimeAsFileTime 7723695F GetTempFileNameA
77236A65 GetTempPathA 7721BA60 GetTickCount 7721154E GetVersion 77223861 GetVersionExA 772341AA GetVolumeInformationA 77235D02 GetWindowsDirectoryA 77219CE1 GlobalAlloc 7722395C LoadLibraryA 7721899B MapViewOfFile 772159D7 OpenProcess 7723443D Process32First 77234505 Process32Next 772196FB ReadFile 7721BCB4 ResetEvent 77212319 SetEndOfFile 7721BCCC SetEvent 77208CB9 SetFileAttributesA 7721DB36 SetFilePointer 7720BE16 SetFileTime 7725E962 SetProcessAffinityMask 7721BA46 Sleep 7721CECB SystemTimeToFileTime 7721DB13 UnmapViewOfFile 77222FB6 VirtualAlloc 7721BA90 WaitForSingleObject 77221400 WriteFile
这些函数里面包含了大量的病毒经常使用的函数,比如遍历进程,远端线程注入等
ZwAdjustPrivilegesToken ZwCreateFile ZwCreateProcess ZwCreateProcessEx ZwCreateSection ZwCreateUserProcess ZwDeviceIoControlFile ZwMapViewOfSection ZwOpenFile ZwOpenProcessToken ZwOpenSection ZwProtectVirtualMemory ZwQueryInformationProcess ZwQueryInformationToken ZwQuerySystemInformation ZwWriteVirtualMemory RtlUnicodeStringToAnsiString
调用了大量的内核写内存,内存映射的函数
5. 分配新的内存空间
通过zwMapViewOfSection 将之前准备的代码映射到其他内存中
6. 真正的入口通过jmp eax进入
220000~220300
7. 进入到新的内存空间, 先将代码从原来的空间复制到新的内存空间
8. 感染当前运行的进程, 对部分程序进行远程线程注入
遍历当前运行的进程,进行setion注入
对几个重要进程进行远端线程注入
0×03 总结
该病毒在感染了大量的exe程序后,会使其感染的exe程序又拥有相同的感染能力,行为巧妙且隐蔽,值得关注。目前该病毒已被完美检测并查杀。
* 作者:安全狗攻防实验室(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)