样本名称 | Final1stspy,Dropper |
---|---|
样本类型 | PE32 executable (DLL) (GUI) Intel 80386, for MS Windows |
样本大小 | 244224 |
MD5 | 0dd50c4a5aa9899504cb4cf95acd981e |
SHA1 | 38f28bfce4d0b2b497e6cf568d08a2b6af244653 |
SHA256 | 2011b9aa61d280ca9397398434af94ec26ddb6ab51f5db269f1799b46cf65a76 |
查看导入表,看到反调试相关的函数
程序中多次使用IsDebuggerPresent来检测程序是否被调试
或使用GetStartupInfo检测程序是否正在被调试
查看加密方式,发现样本采用base64编码和sha1哈希算法
查看样本导出表,看到只有一个main_func
进入main_func看到3个线程相关的函数
进入核心函数看到样本采用运行时加载dll的方法,绕过基于导入表的检测
在9e0函数中继续跟进ea0函数,发现该样本使用com组件执行操作,通过CoCreateInstance创建组件
我们通过样本中的rclsid和riid参数查询出代码所运行的函数
并在注册表中进行查询
dc12a687-737f-11cf-884d-00aa004b2e24这个是调用WMI相关
之后样本通过ppv的偏移执行了对应的函数,如下执行了ConnectServer
随后调用ExecQuery执行WMI查询
跳出9e0函数,跟进c30,动态调试发现该函数为解密函数
将解密得到的'rundll32'作为参数,传入1460函数,该函数使用LoadLibrary和GetProcAddress找到控制注册表的函数地址,在SOFTWARE\Microsoft\Windows\CurrentVersion\Run写入自启动时间持久化
跟进18d0函数,程序中使用进程枚举,并通过与解密字串名称匹配的方法,来检测是否有特定进行
通过动态调试,发现加密的字符串解密后如下
Ollydbg.exe
idaq.exe
gmer.exe
IceSword.exe
wireshark.exe
tcpview.exe
procexp.exe
peview.exe
cff explorer.exe
若进程中发现有这些进程,则关闭该进程,并返回1,继续进入anti_debug4,直到进程中没有wireshark等监控程序的存在
首先使用解密函数将域名及表头特征信息解密,然后传入参数中进行请求发送
进入该函数,同样是运行后动态寻址
请求返回值200才正常运行,否则退出
读取信息,仅当response开头是selfsign
的时候跳出循环
拦截dns并在本地设置监听,本机接收到病毒发来的请求
将response包内容读取之后,进入20a0函数,该函数同样通过LoadLibrary和GetProcAddress在运行后得到函数地址
经分析后发现该函数为进程替换函数,具体步骤为:首先创建一个正常的进程,VirtualAllocEx为恶意代码分配新的内存,WriteProcessMemory将恶意代码写入内存,SetThreadContext指向恶意代码,ResumeThread让恶意代码执行
通过样本暴漏的pdb路径的搜索,搜索到相关信息
通过代码复用和特殊字段的匹配的方式,匹配到了该病毒属Final1stspy家族
对该域名关联的其他文件进行代码复用和特殊字符匹配,同样匹配到了Final1stspy家族
进而继续查找Final1stspy的信息
进而查找dogcall
Hash: 2011b9aa61d280ca9397398434af94ec26ddb6ab51f5db269f1799b46cf65a76
Domain: kmbr1[.]nitesbr1[.]org
Url: http[:]//kmbr1[.]nitesbr1[.]org/UserFiles/File/image/index.php
T1060 - Registry Run Keys / Startup Folder
T1047 - Windows Management Instrumentation
T1087 - Account Discovery
T1055 - Process Injection
T1085 - Rundll32
T1175 - Component Object Model and Distributed COM
T1022 - Data Encrypted
T1057 - Process Discovery