1. 基本信息
病毒别名: Worm.Win32.Ngrbot
病毒类型: 蠕虫
样本长度: 252.000 字节
样本MD5:FA92DAE6F14F9B9DB1D263222FC65DFF
样本SHA1: A0BA2E072CA9BA7C3BDDC2F3BEF2FA09E15A716D
文件类型:PE_EXE
原始文件名: txgxltogztf.exe
感染系统:Windows All(x86)
2. 样本概述
该蠕虫与木马Androm绑定在一起被下载到用户的计算机上,并能通过HTTP,FTP,MSN,email,U盘等手段进行传播,一旦用户感染此蠕虫,会立即窃取用户的密码及隐私信息,包括用户的电子银行,社交网站,邮箱密码,FTP密码和MSN好友信息等.同时该病毒监控用户下载的文件,搜集用户的上网习惯.被感染的用户组成一个庞大的僵尸网络用于对网络目标进行攻击.
3. 详细分析
行为流程分析
由于该病毒是通过androm下载到本地,所以执行流程,以及加密方式跟androm是一样的,区别在于资源”JPEG”中的恶意代码功能,入口处会创建一个辅助线程,该线程功能是初始化所需要的API及字符串,同时为了防止重入,创建命名互斥体” SSLOADasdasc000100”
图1:API的初始化
随后生成随机的文件名称,文件名只包含数字以及字母,这些文件名是用来在calc中下载使用的,生成到临时文件中.
图2:下载后保存的文件名
判断系统版本是否是64位程序,该病毒只能感染32位的程序,所以程序打开Syswow64或system32下的calc程序,写入恶意代码以及数据,之后该线程进入死循环
图3:感染clac进程
在calc中,下载地址以及文件名加密后被蠕虫传送过来
图4:要下载的文件地址,被加密
解密算法伪代码:
int i = 0;
int d = 0;
for(;(d = strBase[i]);++i)
{
if(d > 0x21 && d < 0x4F)
strBase[i] =(d + 0x2F)%0x7F;
if(d > 0x50 && d < 0x7E)
strBase[i] =(d – 0x2F)%0x7F;
}
解密后的数据有规律可循:
http://api1.wipmania.com.wipmsc. ru/api1.gif
http://api2.wipmania.com.wipmsc. ru/api2.gif
http://api3.wipmania.com.wipmsc. ru/api3.gif
http://api5.wipmania.com.wipmsc. ru/api4.gif
……
下载地址解密后,利用HTTP协议下载所有文件,文件名是母体传进来的向对应,最后执行所有文件,进程退出. 下载的后门程序中完成邮件分发,SOCK代理,键盘记录等.
参数及启动模式
蠕虫的命令行接受三个参数,分别是:无参数,-aav_start,-shell
无参数
如果父进程没有传递参数,程序会先创建一个执行线程,该线程的任务是把自身拷贝到”%USERPROFILES\Random”下
图5:释放一个病毒文件
之后启动一个svchost进程,并注入远程线程,svchost中首先创建下列三个文件:
”%TMP%\\Adobe\\Reader_s1.exe
“%USERPROCFILES%\\ScreenSavePro.src”
“%USERPROCFILES%\\Temp.bin”
创建这些文件时为了提高病毒的存活几率,随后把这些文件都设置为自启动,键名为”Adobe System Incorperated”,个人电脑用户会误以为是adobe的更新程序
远程线程执行完后寻找资源段”JPEG”并解密,启动子进程并写入数据.
图6:入侵svchost进程
在子进程中
首先判断自身是否是在U盘中启动的,如果是USB设备,则会执行文件,再次感染系统.
图7:判断是否运行在移动设备中
随后会注册一个USB设备的回调函数,当有移动设备插入时,会通知病毒,执行感染操作:
图8:USB感染
接着是一些初始化操作,包含共享内存的初始化,通信管道的初始化,互斥体以及所需Native api地址的初始化,一些全局数据的初始化.
图9:各模块以及命令池的初始化
判断当前系统版本,vista以上使用NtGetNextProcess来获取所有的系统进程,vista以下使用NtQuerySystemInformation传入5号功能获取系统所有的进程,但不注入lsass.exe和64位进程,所有注入的恶意代码都是一个完整的病毒体,但是入口地址不一样,注入前程序会首先计算所有要hook函数的RVA,一共需要hook 20个函数,这些函数完成了木马所有的盗号劫持功能,之后模拟PELOADER修复远程线程代码的重定位,导入表等,传给线程的参数是一些内部函数的RVA,为方便线程的调用.
图10:入侵当前系统所有进程
远程线程一开始就开始inline hook函数, 这些过滤函数是程序的核心,主要完成:DNS劫持,HTTP劫持,注册表劫持,模块劫持,文件劫持,协议劫持,下载劫持.
图11:设置钩子
每个hook过程,都有一个相应的结构保存hook前的详细信息,便于以后恢复
Typedef struct _HOOK_PROC
{
LPSTR strDllName; //函数所在DLL名称
LPSTR strFuncName; //被HOOK函数的名称
DWORD dwFakeAddress; //伪函数地址
DWORD dwOrigAddress; //真实的函数地址
DWORDD dwSendPack; //与远端通信函数
} HOOK_PROC;
图12:每个进程中 被hook的函数
Hook工作完成过后,bot创建两个线程,一个线程用来监控bot主进程,如果监控到主进程被迫结束,则会立即重新入侵系统进程.另一个线程负责与bot主进程建立通信联系,
DNS劫持:
为了防止中毒者访问互联网查询解决方案以及下载杀毒软件,该bot内置一些常用的安全网站黑名单,同时bot远程服务器也有一份黑名单,所有访问这些网站的操作都被否决.主要通过劫持三个函数实现:DnsQuery_A, DnsQuery_W以及GetAddrInfoW,在黑名单中的网站都会返回0x25F2(DNS 名称不存在。)
DNS过滤中黑名单模块工作状态查询命令:”bdns_XXXXX”,该命令返回三种状态字符串,若是在白名单中则直接返回真实域名,若在黑名单中则返回1,若该DNS已经被锁定,则返回”block.”
锁定模块的查询命令:”brk”
DNS功能重启命令:”rdns”
单个DNS查询状态命令:bdns
DnsQuery_A的过滤函数,只完成过滤功能:
图13:DnsQuery的过滤
在bot的白名单中有以下白网页:
图14:病毒内置的白名单网站
图15:病毒的web黑名单(部分)
图16:黑名单中的网址都无法访问
DnsQuery_W函数除了完成基本的DNS过滤外,还有锁定功能,就是当DNS模块无法正常工作的时候,把该地址锁定,待DNS模块正常工作处理这些被锁定的地址.
图17:锁定该地址
系统关键进程的DNS查询不进程过滤,列表:
图18:这些进程的DNS请求不过滤
GetAddrInfoW函数主要是在高版本的windows系统中系统的DnsQuery扩展函数,该函数可以查询IPV6以及IPV4的信息,所以在过滤功能上和DnsQuery功能一模一样.
密码嗅探:
密码窃听主要涉及5个函数:HttpSendRequestA, HttpSendRequestW,InternatWriteFile. 以及火狐浏览器特有的PR_Read和PR_Write函数,主要在木马的blog模块中完成.
HttpSendRequestA/ HttpSendRequestW,这两个函数主要针POST方式登陆的web页
图19:网页密码的截取
在用户名和密码解析中,bot内置一张对照表,包含要截取网站的域名,用户名和密码封包结构,密码窃取涉及的面非常广,包含视频,社交,购物,银行,邮箱等.以下是能窃取密码的列表.
“PayPal”
“*paypal.*/webscr?cmd=_login-submit*”
“*login_password=*”
“login_email”
“login_password”
“YouTube”
“*google.*/*ServiceLoginAuth*”
“*service=youtube*”
“Email”
“Passwd”
“AOL”
“*aol.*/*login.psp*”
“*password=*”
“loginId”
“password”
“AOL”
“*screenname.aol.*/login.psp*”
“*password=*”
“screenname”
“password”
“BigString”
“*bigstring.*/*index.php*”
“*pass=*”
“user”
“pass”
“Fastmail”
“*fastmail.*/mail/*”
“*FLN-Password=*”
“FLN-UserName”
“FLN-Password”
“Gmail”
“*google.*/*ServiceLoginAuth*”
“*Passwd=*”
“Email”
“Passwd”
“GMX”
“*gmx.*/*FormLogin*”
“*TextfieldPassword=*”
“TextfieldEmail”
“TextfieldPassword”
“Live”
“*login.live.*/*post.srf*”
“*passwd=*”
“login”
“passwd”
“Yahoo”
“*login.yahoo.*/*login*”
“*passwd=*”
“login”
“passwd”
“Facebook”
“*facebook.*/login.php*”
“*pass=*”
“email”
“pass”
“Hackforums”
“*hackforums.*/member.php”
“*password=*”
“username”
“password”
“Hackforums”
“*hackforums.*/member.php”
“*password=*”
“quick_username”
“quick_password”
“Steam”
“*steampowered*/login*”
“*password=*”
“username”
“password”
“NoIP”
“*no-ip*/login*”
“*&password=*”
“username”
“password”
“DynDNS”
“*dyndns*/account*”
“*&password=*”
“username”
“password”
“Runescape”
“*runescape*/*weblogin*”
“*&password=*”
“username”
“password”
“Moneybookers”
“*.moneybookers.*/*login.pl”
“*&txtPassword=*”
“txtEmail”
“txtPassword”
“Twitter”
“*twitter.com/sessions”
“*password]=*”
“session[username_or_email]”
“session[password]”
“LogMeIn”
“*secure.logmein.*/*logincheck*”
“*password=*”
“email”
“password”
“OfficeBanking”
“*officebanking.cl/*login.asp*”
“*pass=*”
“rut”
“pass”
“eBay”
“*signin.ebay*SignIn”
“userid”
“pass”
“Depositfiles”
“*depositfiles.*/*/login*”
“*password=*”
“login”
“password”
“Megaupload”
“*megaupload.*/*login*”
“*password=*”
“username”
“password”
“Sendspace”
“*sendspace.com/login*”
“*password=*”
“username”
“password”
“Mediafire”
“*mediafire.com/*login*”
“*login_pass=*”
“login_email”
“login_pass”
“Freakshare”
“*freakshare.com/login*”
“*pass=*”
“user”
“pass”
“Netload”
“*netload.in/index*”
“*txtpass=*”
“txtuser”
“txtpass”
“4shared”
“*4shared.com/login*”
“*password=*”
“login”
“password”
“Hotfile”
“*hotfile.com/login*”
“*pass=*”
“user”
“pass”
“Fileserve”
“*fileserv.com/login*”
“*loginUserPassword=*”
“loginUserName”
“loginUserPassword”
“Uploading”
“*uploading.com/*login*”
“*password=*”
“email”
“password”
“Uploaded”
“*uploaded.to/*login*”
“*pw=*”
“id”
“pw”
“Speedyshare”
“*speedyshare.com/login*”
“*pass=*”
“login”
“pass”
“Filesonic”
“*filesonic.com/*login*”
“*password=*”
“email”
“password”
“Oron”
“*oron.com/login*”
“*password=*”
“login”
“password”
“Whatcd”
“*what.cd/login*”
“*password=*”
“username”
“password”
“Letitbit”
“*letitbit.net*”
“*password=*”
“login”
“password”
“Sms4file”
“*sms4file.com/*/signin-do*”
“*pas=*”
“log”
“pas”
“Vip-file”
“*vip-file.com/*/signin-do*”
“*pas=*”
“log”
“pas”
“Torrentleech”
“*torrentleech.org/*login*”
“*password=*”
“username”
“password”
“Thepiratebay”
“*thepiratebay.org/login*”
“*password=*”
“username”
“password”
“Netflix”
“*netflix.com/*ogin*”
“*password=*”
“email”
“password”
“Alertpay”
“*alertpay.com/login*”
“*Password=*”
“EmailName”
“Password”
“Godaddy”
“*godaddy.com/login*”
“*password=*”
“loginname”
“password”
“Namecheap”
“*namecheap.com/*login*”
“*LoginPassword=*”
“LoginUserName”
“LoginPassword”
“Moniker”
“*moniker.com/*Login*”
“*passwd=*”
“token”
“passwd”
“1and1”
“*1and1.com/xml/config*”
“*login.Pass=*”
“login.User”
“login.Pass”
“Enom”
“*enom.com/login*”
“*password=*”
“loginid”
“password”
“Dotster”
“*dotster.com/*login*”
“*pass=*”
“login”
“pass”
“Webnames”
“*webnames.ru/*user_login*”
“*password=*”
“login”
“password”
“cPanel”
“*:2082/login*”
“*pass=*”
“user”
“pass”
“cPanel”
“*:2083/login*”
“*pass=*”
“user”
“pass”
“WHM”
“*:2086/login*”
“*pass=*”
“user”
“pass”
“WHCMS”
“*whcms*dologin*”
“*password=*”
“username”
“password”
“Directadmin”
“*:2222/CMD_LOGIN*”
“*password=*”
“username”
“password”
“Bcointernacional”
“*bcointernacional*login*”
“*clave=*”
“numeroTarjeta”
“clave”
“Brazzers”
“*members.brazzers.com*”
“*password=*”
“username”
“password”
“YouPorn”
“*youporn.*/login*”
“*password=*”
“username”
“password”
“IKnowThatGirl”
“*members*.iknowthatgirl*/members*”
“*password]=*”
“login[username]”
“login[password]”
在解析过程中,本地并不直接对已加密的用户名和密码解密,而是发送到服务器处理,本地仅仅把字符替换为数字.
图20:用户名和密码解析函数
密码截取后,发送给远端的数据包格式:httplogin.网站域名 ->> 登陆页面 (用户名 : 密码)
InternatWriteFile的过滤和HttpSendRequest实现一样.
注册表劫持:
该模块主要在木马的REG模块中完成,涉及到3个函数:RegCreateKeyExA, RegCreateKeyExW,
NtEnumerateValueKey
该模块的主要功能是保护木马写入的注册表启动项不被修改,提高生存几率.3个函数流程基本类似.
图21:病毒注册表的自保护
模块劫持:
本功能涉及一个代理函数LdrLoadDll,该函数原型在NTDLL中,处于应用层最底层函数,可以过滤应用层所有模块的加载,除了那些以映射方式加载的不可过滤.主要功能是重新安装木马的钩子.
文件劫持:
该模块主要涉及9个函数:CreateFileA/W,CopyFileA/W,DeleteFileA/W,MoveFileA/W, NtQueryDirectoryFile
CreateFileA/W,这一组函数主要是禁止用户在计算机上创建文件,用户创建的所有文件会在下次启动被删除,且会放过关键进程的创建和打开操作.
图22:文件打开和创建的过滤
木马同时对自己的备份文件进行保护
图23:病毒文件自保护
CopyFileA/W,系统所有的文件拷贝操作都会成功,但是新文件会被删除.
图24:文件拷贝过滤
DeleteFileA/W,保护备份文件
图25:文件删除自保护
MoveFileA/W
图26:文件移动自保护
NtQueryDirectoryFile主要是防止其他进程枚举到木马的备份文件
图27:遍历文件自保护
下载劫持:
该模块涉及2个函数: URLDownloadToFileA/W,该模块并无实际功能,只是简单记录用户下载的http文件,而且只记录iexplorer以及firefox下载的文件:
图28:记录用户的下载的文件
MSN劫持:
该模块涉及1个函数send,主要任务是劫持msn,获取用户的密码以及聊天内容,并且通过msn传播bot.msn 2011版本及以上消息的标示串为”MSG”,低版本的为”SDG”.
图29:MSN密码窃取
用户身份窃取功能中,病毒解密IM协议来获取用户名和密码,成功获取到密码后,则会登陆用户的FTP空间以及邮箱进一步窃取资料.
图30:登陆FTP以及POP3
IM消息的前三个字符为”MSG”表示这是一个标准的IM聊天消息,截获到此类信息,则插入木马消息,发送给好友,相当于一个消息尾巴.
图31:插入MSN消息尾巴
BOT命令的处理:
BOT向服务器发送的命令共有12种,这些命令大部分属于窃取的隐私信息,所有这些命令通过PIPE命名管道与主进程通信,主进程与远程通信,其中http监控模块主要获取用户的下载和上传速度.
图32:所有窃取的信息发送给黑客
所有这些被感染用户下发命令,组成一个僵尸网络,服务器向这些僵尸发起命令,主要是洪水攻击,包含UDP,SYN,以及slowloris攻击.
图33:洪水攻击
参数”-shell”
该参数的功能是对蠕虫进行邦本升级,当参数为shell时,创建” Windows_Shared_Mutex_231_c000100”互斥体,若该互斥已存在,退出进程.删除Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run – Windows Update键,目的是为了删除该bot以前注册的自启动,达到更新bot的目的,注册表键名称很具有迷惑性.
解锁注册表的自启动功能,因为该bot以后会注册自启动项目,为了能继续驻留在系统中,并且得以运行.
图34:Ngrbot的版本更新
随后立即重启系统,由于写入自启动不带任何参数,系统重启后,则会以无参模式运行,该模式下,已经有介绍.
图35:强制重启系统
大神,image7-1.jpg那张图片链接错误,应该是image7.jpg
谢谢,已更正。