–天融信阿尔法实验室 CFF
0×00 概述
Conficker蠕虫从08年爆发,后续衍生了A、B、C、D等多个变种;本以为早已经灭绝的东西,竟然在朋友的重要服务器中被发现,果真是百足之虫死而不僵,继续拿来练练手。
服务器上感染的是Conficker.B变种,其利用MS08-067漏洞进行传播,同时通过移动驱动器和网络共享进行传播。蠕虫使安全服务失效,阻止访问与安全相关的网站。病毒利用访问控制列表锁住被感染机器上的病毒文件,防止病毒文件被删除。并且在特定时间之后会访问随机生成的网址,由于域名生成是精心构造的伪随机算法,可以部署相应的域名,来达到下载并执行程序。
0×01 运行流程图
0×02 外壳运行流程
第一层UPX壳
第二层申请堆空间,解码并且修改堆内存属性,最后跳入执行
下VirtualProtect断点
对009B1000内存位置下内存访问断点,就可以到达第三层
第三层UPX壳,进入最终恶意代码位置
0×03 恶意代码主要流程
创建互斥量,避免重复感染
判断是以哪种方式执行的恶意dll(svchost.exe、rundll32.exe)
1.rundll32.exe xxx/xxx.dll,yyy 运行
注入svchost.exe -k netsvcs进程
比较最后的参数,决定是否修改(不显示隐藏文件)注册表项
2.svchost.exe -k netsvcs下运行的主线程
Hook DNS相关函数,防止受感染机器访问安全相关网站,使得杀毒软件无法升级(DnsQuery_A,DnsQuery_UTF8,DnsQuery_W,Query_Main)
黑名单中网址关键字
主线程中:
1.复制自身的时候会修改文件属性,让其不能轻易被删除,隐藏等
复制的同时写入注册表,开机自动启动
上面写入失败会写入下面
2.设置以下注册表键值:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpNumConnections = 0x00FFFFFE
3.注入svchost.exe -k NetWorkService
4.关闭系统更新等windows安全相关服务
关键传播和主要功能位置
①随机监听一个端口,在MS08-067漏洞利用成功后向目标主机发送蠕虫自身来传播
MS08-067漏洞利用
call 009BA799中
call 009BA8E9中
②遍历弱密码表用IPC$网络共享方式传播
弱密码表
③感染移动设备
复制自身到下面路径,并写入autorun.inf,让其一插入就以rundll32.exe xx.dll,参数 形式执行蠕虫
“<drive>\RECYCLER\S-%d-%d-%d-%d%d%d-%d%d%d-%d%d%d-%d\<random filename and extension >”
autorun.inf文件有混淆,主要内容是以rundll32.exe \RECYCLER\S-%d-%d-%d-%d%d%d-%d%d%d-%d%d%d-%d\xxx.dll,pmiyvbu来执行文件
④网关相关
找支持UPnP的网关来动态映射端口
然后通过xml控制打开端口
⑤判断时间,访问随机生成的域名,下载并执行文件
查询本地和网络时间
域名产生算法
下载并执行文件
会检查文件的HASH,通过检查后创建线程来执行下载来的文件
0×04 总结
恶意代码在层层包裹之中,对分析增加了一点难度。检查文件时候使用了RC4加密以及HASH算法,触发漏洞后的那段Shellcode(本人对漏洞研究较少)都还需要继续深入学习研究。
0×05 参考
http://mtc.sri.com/Conficker/
https://www.microsoft.com/security/portal/threat/encyclopedia/entry.aspx?Name=Worm%3aWin32%2fConficker.B#tab=2
http://www.programlife.net/conficker-kido-shellcode.html