the heart of lucifer

Ngrbot蠕虫分析(一)

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”

image1

图1:API的初始化

 

随后生成随机的文件名称,文件名只包含数字以及字母,这些文件名是用来在calc中下载使用的,生成到临时文件中.

image2

图2:下载后保存的文件名

 

判断系统版本是否是64位程序,该病毒只能感染32位的程序,所以程序打开Syswow64或system32下的calc程序,写入恶意代码以及数据,之后该线程进入死循环

image3

图3:感染clac进程

 

在calc中,下载地址以及文件名加密后被蠕虫传送过来

image4

图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”下

image5

图5:释放一个病毒文件

 

之后启动一个svchost进程,并注入远程线程,svchost中首先创建下列三个文件:

”%TMP%\\Adobe\\Reader_s1.exe

“%USERPROCFILES%\\ScreenSavePro.src”

“%USERPROCFILES%\\Temp.bin”

创建这些文件时为了提高病毒的存活几率,随后把这些文件都设置为自启动,键名为”Adobe System Incorperated”,个人电脑用户会误以为是adobe的更新程序

远程线程执行完后寻找资源段”JPEG”并解密,启动子进程并写入数据.

image6

图6:入侵svchost进程

在子进程中

首先判断自身是否是在U盘中启动的,如果是USB设备,则会执行文件,再次感染系统.

图7:判断是否运行在移动设备中

 

随后会注册一个USB设备的回调函数,当有移动设备插入时,会通知病毒,执行感染操作:

image8

图8:USB感染

 

接着是一些初始化操作,包含共享内存的初始化,通信管道的初始化,互斥体以及所需Native api地址的初始化,一些全局数据的初始化.

image9

图9:各模块以及命令池的初始化

 

判断当前系统版本,vista以上使用NtGetNextProcess来获取所有的系统进程,vista以下使用NtQuerySystemInformation传入5号功能获取系统所有的进程,但不注入lsass.exe和64位进程,所有注入的恶意代码都是一个完整的病毒体,但是入口地址不一样,注入前程序会首先计算所有要hook函数的RVA,一共需要hook 20个函数,这些函数完成了木马所有的盗号劫持功能,之后模拟PELOADER修复远程线程代码的重定位,导入表等,传给线程的参数是一些内部函数的RVA,为方便线程的调用.

image10

图10:入侵当前系统所有进程

 

远程线程一开始就开始inline hook函数, 这些过滤函数是程序的核心,主要完成:DNS劫持,HTTP劫持,注册表劫持,模块劫持,文件劫持,协议劫持,下载劫持.

image11

图11:设置钩子

 

每个hook过程,都有一个相应的结构保存hook前的详细信息,便于以后恢复

Typedef struct _HOOK_PROC

{

LPSTR strDllName;      //函数所在DLL名称

LPSTR strFuncName;    //被HOOK函数的名称

DWORD dwFakeAddress;     //伪函数地址

DWORD dwOrigAddress;            //真实的函数地址

DWORDD dwSendPack;             //与远端通信函数

} HOOK_PROC;

image12

图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的过滤函数,只完成过滤功能:

image13

图13:DnsQuery的过滤

在bot的白名单中有以下白网页:

image14

图14:病毒内置的白名单网站

image15

图15:病毒的web黑名单(部分)

image16

图16:黑名单中的网址都无法访问

 

DnsQuery_W函数除了完成基本的DNS过滤外,还有锁定功能,就是当DNS模块无法正常工作的时候,把该地址锁定,待DNS模块正常工作处理这些被锁定的地址.

image17

图17:锁定该地址

 

系统关键进程的DNS查询不进程过滤,列表:

image18

图18:这些进程的DNS请求不过滤

 

GetAddrInfoW函数主要是在高版本的windows系统中系统的DnsQuery扩展函数,该函数可以查询IPV6以及IPV4的信息,所以在过滤功能上和DnsQuery功能一模一样.

 

密码嗅探:

密码窃听主要涉及5个函数:HttpSendRequestA, HttpSendRequestW,InternatWriteFile. 以及火狐浏览器特有的PR_Read和PR_Write函数,主要在木马的blog模块中完成.

 

HttpSendRequestA/ HttpSendRequestW,这两个函数主要针POST方式登陆的web页

image19

图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]”

在解析过程中,本地并不直接对已加密的用户名和密码解密,而是发送到服务器处理,本地仅仅把字符替换为数字.

image20

图20:用户名和密码解析函数

 

密码截取后,发送给远端的数据包格式:httplogin.网站域名 ->> 登陆页面 (用户名 : 密码)

InternatWriteFile的过滤和HttpSendRequest实现一样.

 

注册表劫持:

该模块主要在木马的REG模块中完成,涉及到3个函数:RegCreateKeyExA, RegCreateKeyExW,

NtEnumerateValueKey

该模块的主要功能是保护木马写入的注册表启动项不被修改,提高生存几率.3个函数流程基本类似.

image21

图21:病毒注册表的自保护

 

模块劫持:

本功能涉及一个代理函数LdrLoadDll,该函数原型在NTDLL中,处于应用层最底层函数,可以过滤应用层所有模块的加载,除了那些以映射方式加载的不可过滤.主要功能是重新安装木马的钩子.

 

文件劫持:

该模块主要涉及9个函数:CreateFileA/W,CopyFileA/W,DeleteFileA/W,MoveFileA/W, NtQueryDirectoryFile

CreateFileA/W,这一组函数主要是禁止用户在计算机上创建文件,用户创建的所有文件会在下次启动被删除,且会放过关键进程的创建和打开操作.

image22

图22:文件打开和创建的过滤

 

木马同时对自己的备份文件进行保护

image23

图23:病毒文件自保护

 

CopyFileA/W,系统所有的文件拷贝操作都会成功,但是新文件会被删除.

image24

图24:文件拷贝过滤

 

DeleteFileA/W,保护备份文件

image25

图25:文件删除自保护

 

MoveFileA/W

image26

图26:文件移动自保护

 

NtQueryDirectoryFile主要是防止其他进程枚举到木马的备份文件

image27

图27:遍历文件自保护

 

下载劫持:

该模块涉及2个函数: URLDownloadToFileA/W,该模块并无实际功能,只是简单记录用户下载的http文件,而且只记录iexplorer以及firefox下载的文件:

image28

图28:记录用户的下载的文件

 

MSN劫持:

该模块涉及1个函数send,主要任务是劫持msn,获取用户的密码以及聊天内容,并且通过msn传播bot.msn 2011版本及以上消息的标示串为”MSG”,低版本的为”SDG”.

image29

图29:MSN密码窃取

 

用户身份窃取功能中,病毒解密IM协议来获取用户名和密码,成功获取到密码后,则会登陆用户的FTP空间以及邮箱进一步窃取资料.

image30

图30:登陆FTP以及POP3

 

IM消息的前三个字符为”MSG”表示这是一个标准的IM聊天消息,截获到此类信息,则插入木马消息,发送给好友,相当于一个消息尾巴.

image31

图31:插入MSN消息尾巴

 

BOT命令的处理:

BOT向服务器发送的命令共有12种,这些命令大部分属于窃取的隐私信息,所有这些命令通过PIPE命名管道与主进程通信,主进程与远程通信,其中http监控模块主要获取用户的下载和上传速度.

image32

图32:所有窃取的信息发送给黑客

 

所有这些被感染用户下发命令,组成一个僵尸网络,服务器向这些僵尸发起命令,主要是洪水攻击,包含UDP,SYN,以及slowloris攻击.

image33

图33:洪水攻击

 

参数”-shell”

该参数的功能是对蠕虫进行邦本升级,当参数为shell时,创建” Windows_Shared_Mutex_231_c000100”互斥体,若该互斥已存在,退出进程.删除Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run – Windows Update键,目的是为了删除该bot以前注册的自启动,达到更新bot的目的,注册表键名称很具有迷惑性.

解锁注册表的自启动功能,因为该bot以后会注册自启动项目,为了能继续驻留在系统中,并且得以运行.

image34

图34:Ngrbot的版本更新

 

随后立即重启系统,由于写入自启动不带任何参数,系统重启后,则会以无参模式运行,该模式下,已经有介绍.

image35

图35:强制重启系统

 

  1. fisheye说道:

    大神,image7-1.jpg那张图片链接错误,应该是image7.jpg

    1. Lucien说道:

      谢谢,已更正。

回复 fisheye 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注