恶意代码分析实战 — Lab 14-02

14-02

执行程序捕获到的信令

Idapro载入程序,查看Imports导入函数

选择InternetOpenUrlA函数,查看交叉引用xrefs

其中dwFlags = 0x80000000 = 2147483648

查表得到dwFlags = INTERNET_FLAG_RELOAD

意味着从请求连接进行下载,不是从缓存cache

对应着获取到的信令中 Cache-Control: no-cache

查看main函数的xrefs from调用关系,与Wininet 中Internet有关的几个函数包括sub_401750,sub_401800,sub_4015c0,StartAddress

查看这几处调用

其中StartAddress中调用了sub_401750

这个函数调用了wininet中的Internet几个函数

在sub_401750中可以看到关键字(!<对应的是第一条信令中user-agent起始字符

同样的方法,在sub_4015c0中调用了sub_401800

调用了internet操作

并且对应第二条信令中的user-agent:Internet Surf

这个恶意程序的编写者按照一种常见的模式,来建立一个反向的命令shell。攻击者启动一个新的命令shell作为它的进程,并启动单独的线程向命令shell读取输入和写出输出。这里的StartAddress(0x004014C0)线程调用了PeekNamedPipe,用来检查命令shell的新输入。如果检查的内容存在,它就使用ReadFile来读取数据。读取到这些数据后,它就通过函数sub_401750将读取的内容发送到一个远程位置。而另一个线程sub_4015c0使用sub_401800,连接一个远程位置。如果命令shell上有任何新输入,这个线程都会将它们写入到命令shell的输入管道。

接下来分析参数的传递过程和读取写入的数据内容。

在调用InternetOpenUrlA函数时,打开的是url,此值是从lpszUrl传递来的

此值为sub_401750的参数

来自于StartAddress处的参数lpszUrl

而StrartAddress来自于lpParameter

回溯到main函数中LoadStringA

检查PE文件的资源部分

至此分析出了信令中除user-agent之外的所有参数

在之前的分析中sub_401750中有(!<的user-agent开头,找到调用处,在传参前调用了sub_401000

这个函数是一个自定义的编码函数,保存于byte_403010中

是一个变种的base64编码

编写脚本解码

import string
import base64

s = ""
tab = 'WXYZlabcd3fghijko12e456789ABCDEFGHIJKL+/MNOPQRSTUVmn0pqrstuvwxyz'
b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

ciphertext = 'e6LJC+xnBq90daDNB+1TDrhG6aWG6p9LC/iNBqsGi2sVgJdqhZXDZoMMomKGoqxUE73N9qH0dZltjZ4RhJWUh2XiA6imBriT9/oGoqxmCYsiYG0fonNC1bxJD6pLB/1ndbaS9YXe9710A6t/CpVpCq5m7l1LCqR0BrWy'

for ch in ciphertext:
    if (ch in tab):
        s += b64[string.find(tab, str(ch))]
    elif (ch == '='):
        s += '='

print base64.decodestring(s)

执行之后

经过分析大致了解了程序执行流程,一种是在user-agent中输出编码后的OS信息,一种是静态编码user-agent: Internet Surf。

第二种静态编码向shell传递输入,或者根据命令选择退出,如exit

这两个线程分别用于处理命令shell的不同管道端。含有静态User-Agent字符串的线程从远程攻击者处获得输入内容,含有编码User-Agent字符串的线程则作为命令shell的输出。攻击者混淆他们的行为,避免从感染的服务器发送明文的命令提示字符串,是一种聪明的方法。

当程序中存在exit命令退出时,执行ExitThread,然后调用TerminateThread,之后执行sub_401880

进入call,调用comspec命令执行/c del [path] > nul删除自身

其中的comspec变量指的是cmd.exe命令

 

您可能还喜欢...