恶意代码分析实战14-03
Posted Neil-Yale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战14-03相关的知识,希望对你有一定的参考价值。
本次实验我们将会分析lab14-03文件。先来看看要求解答的问题
Q1.在初始信令中硬编码元素是什么?什么元素能够用于创建一个好的网络特征?
Q2.初始信令中的什么元素可能不利于可持久使用的网络特征?
Q3.恶意代码是如何获得命令的?这种技术的优点是什么?
Q4.当恶意代码接收到输入时,在输入上执行什么检查可以决定它是否是一个有用的命令?攻击者如何隐藏恶意代码正在寻找的命令列表?
Q5.什么类型的编码用于命令参数?它与Base64编码有什么不同?它提供的优点和缺点各是什么?
Q6.这个恶意代码会接收哪些命令?
Q7.这个恶意代码的目的是什么?
打开wireshark监听,运行Lab14-03.exe
捕获到的关键流量
待会儿会具体分析,我们现在先使用IDA载入分析
在imports窗口我们看到了来自WinINet的函数
先分析InternetOpenUrlA,查看交叉引用
来到sub_4011f3
在其之前代码中看到两个静态字符串
双击可以看到其具体内容
这和我们wireshark抓到的是一致的
但是仔细看的话会发现,其实wireshark捕获的信令里,多了一个user-agent
这是恶意代码编写者犯的错误,忘记了InternetOpenA函数调用会包含头部的标题。后续检测的时候这一点就可以作为一个检测特征
Q1.在初始信令中硬编码元素是什么?什么元素能够用于创建一个好的网络特征?
A1.硬编码的头部包括Accept、Accept- Language、UA-CPU、 Accept-Encoding 和User- Agent。恶意代码错误地添加了一个额外的User-Agent,在实际的User-Agent中,会导致重复字符串:User- Agent: User-Agent: Mozil…针对完整的User-Agent头部(包括重复字符串),可以构造一个有效的检测特征
我们接下来首先确定信令的内容:
可以看到sub_4011f3有两个参数,其中的lpszUrl如下所示
在调用InternetOpenUrlA时使用了。该参数定义了信令的目的地址的url
我们通过交叉引用,看这个参数的来源
跟入main
可以看到在被调用处是一个循环,而且循环里还调用了Sleep
往上看参数的来源,回溯到sub_401457,跟入
跟入该函数
先是调用了CreateFileA
如果C:\\autobat.exe不存在则走右边
会访问字符串指示的网址
如果文件存在,走右边
调用ReadFile读取文件内容,并保存在lpBuffer(szUrl),回到上层函数从下图可见
而其就是InternetOpenUrlA函数的lpszUrl参数。所以我们可以推断,autobat.exe是存储URL明文的配置文件
Q2.初始信令中的什么元素可能不利于可持久使用的网络特征?
A2. 当且仅当配置文件不可用时,域名和URL路径都会采用硬编码。这个硬编码的URL应该与所有配置文件一起构造特征。因为使用的URL存储在配置文件中,并且随着命令而改变,所以它是临时的。
我们继续分析sub_4011f3
在调用InternetReadFile之后,用一出strstr的调用,该函数是用于在一个字符串串中搜索另一个字符串第一次出现时的位置
其一个参数为<no
而总览之后,我们看到strstr位于两个循环之间。外部的InternetReadFile调用获得更多数据,内部调用除了strstr外sub_401000
我们跟入该函数
把cmp指令中的16进制转为字符形式
可以看到程序会比较字符串中特定偏移的字符
从cmp的前一条movsx可以看到偏移。根据偏移进行相应的比较,可知,其实要比较的是:noscript
Q3.恶意代码是如何获得命令的?这种技术的优点是什么?
A3.恶意代码从Web页面上noscript标签中的某些特定组件来获得命令.使用这种技术,恶意代码可以向一个合法的网页发出信令,并且接收合法内容,这使防御者区分恶意流量与合法流量变得更加困难。
调用strrchr对/进行搜索,这里推测是进行url的搜索
从被截断URL尾部开始调用strstr搜索96’
之后是两条路,一条表示查找所需的特征失败,一条表示成功。左边的是失败,可以看到有很多条指向它,这些路径表示搜索提前终止
接下来我们分析返回内容发生的变化。
跟入sub_401684
strtok将命令内容分为两部分,分别被存入两个变量,即var_c,var_10
红框中的指令用于拿出第一个字符串的第一个字符并且通过eax与d相减后的结果来进行switch-case的选择
通过使用跳转表的选择结构来做出选择。
可知case0就是d
其他的case:
分别是10,15,14.以0为d进行相应计算,可只,10,15,14对应的分别为n,s,r
如果字符是d
调用了sub_401565,跟入
调用了sub_401147
继续往下
调用了URLDownloadToCacheFileA和CreateProcessA
如果字符是n
对var_4赋值后就退出了
如果字符是s
会调用sub_401613,跟入
不论如何,都会调用sleep进行休眠
如果是r
调用sub_401651,跟入
调用了sub_401147
可见,r和d在其内部都调用了sub_401147
继续往下,调用了sub_401372
跟入sub_401372
其调用了CreateFile,WriteFile以及之前看到的c:\\autobat.exe
那么我们猜测r的作用是覆盖配置文件,将恶意代码重定向到不同的信令URL
我们回过头来分析d和r都有调用的sub_401147,跟入
看到了一个循环结构
在循环的一开始调用了strlen获取长度
在004011c5看到了字符串索引,双击看到如下所示
上图中可以看到这些字符串和base64相似,但是缺少大写字母。这也可以理解,因为url用小写字母就可以表示了。
根据我们知道的编码规则:比如在上图中的2F,索引为0,其代表的字符是/
依次类推,不难将默认的URL:http://www.parcticalmalwareanalysis.com/star.htm进行编码
08 20 20 16 37 00 00 23 23 23 38 16 18 01 03 020 09 03 01 12 13 01 012 23 01 18 05 01 14 01 12 25 19 09 19 38 03 15 13 00 19 20 01 18 20 01 18 20 38 08 20 13
Q4.当恶意代码接收到输入时,在输入上执行什么检查可以决定它是否是一个有用的命令?攻击者如何隐藏恶意代码正在寻找的命令列表?
A4.要将内容解析为命令,必须包含被完整URL (包括http://)跟随的初始noscript标签,此URL包含的域名与原始网页请求的域名相同。此URL路径必须以96’结尾。域名和96 (其中被截断)之间的两部分组成了命令和参数( 如/command/1213141516类似的形式)。命令的第一个字母必须与提供命令相对应,在合适的时候,参数必须翻译成给定的命令中有意义的参数。1、恶意代码编写者限制了可以提供有关恶意代码功能线索的字符串列表。当搜索noscript标签时,恶意代码搜索了<no,接着用独立不规则的字符比较操作来确定noscript标签。恶意代码也复用了域名所使用的缓冲区,来检查命令的内容。此外对96’ 的字符串搜索只有三个字符,另外唯一的单字符串搜索是字符/。当匹配命令时,仅仅考虑第一个字符, 所以攻击者可能会在Web响应中提供soft或者seller,而实际上给恶意代码下达的是休眠s的命令。流量分析可能确认攻击者在使用单词soft发送一-个命令给恶意代码,而这可能会误导分析者在特征中使用完整单词。攻击者在不修改恶意代码的情况下,就可以无限制地使用seller或者任意以s开头的单词
Q5.什么类型的编码用于命令参数?它与Base64编码有什么不同?它提供的优点和缺点各是什么?
A5.参数使用的是自定义编码,虽然简单但不是Base64编码。参数由偶数个数字来进行表示(一旦尾部的96被删除)。每组两个数字代表的原始数字是数组/ abcdefghijklmnopqrstuvwxyz0123456789: .的索引。这些参数仅用于URL间的通信,所以没有必要用到大写字符。这种编码方案的好处是:它不是标准算法,所以要理解它的内容,需要逆向工程分析它。缺点是很简单:在字符串输出中它可能被识别为可疑,因为URL总是以相同方式开头
Q6.这个恶意代码会接收哪些命令?
A6.恶意代码命令包括quit、 download、 sleep 和redirect。 quit 命令就是简单退出程序download命令是下载并且运行可执行文件,不过与以前的实验不同,这里攻击者可以指定URL下载。redirect 命令修改了恶意代码使用的配置文件,因此导致了一个新的信令URL。
Q7.这个恶意代码的目的是什么?
A7.这个恶意代码本质上就是一个下载器。它有一些重要的优点,例如基于Web的控制,在确认为恶意域名并关闭后很容易做出调整
以上是关于恶意代码分析实战14-03的主要内容,如果未能解决你的问题,请参考以下文章