原文链接:https://unit630.com/2020/08/24/malware-traffic-analysis-exercise-2/
第二个流量数据分析开始之前,我们要清楚私有IP地址范围。wiki定义的私有ip地址范围如下图。
我们再观察pacp数据包,可以看到有存在于172.16.0.0/12范围内的ip。可以通过该范围缩小感染机器ip范围。在ip筛选器中设置网段作为筛选条件,可以看到过滤出的ip为172.16.165.132和172.16.165.2,然后继续通过观察通讯相关协议可以排除DNS相关的ip。确定感染ip为172.16.165.132。
还有另一种更简单的方法确定,打开统计菜单中的协议分级窗口。
打开的窗口显示如下,我们只需查看用户数据报协议(UDP,User Datagram Protocol)下使用了哪些协议。作者提供的PACP包中存在NTP协议。
过滤NTP协议即可确定感染主机ip。
我们查看维基百科对UDP协议的属性,发现其中包括我们本例子中所需的NTP协议
继续详细查看NTP协议,可以发现该协议用于UDP建立的客户端-服务器模型的被动时间校准。所以如果存在UDP协议默认都会使用NTP,所以NTP协议成为了判断反向通讯的一个过滤条件。
接下来需要解析感染机器MAC地址,可以随便获取一个数据包查看MAC。发现MAC地址为00:0c:29:c5:b7:a1。
根据感染ip和dns协议过滤出所有解析的域名,发现解析出了很多域名,接下来需要根据google对域名筛选。筛选出正常域名和可疑域名。然后同第一节方法相同,查看hijinksensue.com。
依次对DNS解析出的域名进行过滤,在筛选器中输入以下内容进行过滤。
可以看到该网址是通过google.co.uk浏览器搜索引擎打开。该域名被识为可疑域名,如果对每个域名进行筛查后实际上也是如此。
定位提供恶意EK工具包的地址,需要文件过滤器筛选PE提供者的域名。首先点击内容类型,将同类型归类到一起。然后查看内容类型是否与第三方组件(漏洞利用)或PE相关的类型。这里我们注意到application/octet-stream类型,该类型一般表示Wireshark无法识别的文件类型,所以默认以数据流标记。
找到该数据包可以看到熟悉的MZ,该数据包中数据部分存放的是PE文件格式的数据。所以确定为黑客工具提供站点。ip为37.157.6.226,域名为h.trinketking.com和g.trinketking.com(该域名被dns解析没有立即使用,后续分析会展示该域名被使用的方式)。
既然确定了恶意流量包,那么接下来我们可以将流量包中的PE样本导出到本地分析。右键Data选项,选择导出分组字节流。
随便给导出的数据起个名字,我这里命名为1.exe。
查看桌面可以看到导出的恶意PE程序。
使用die查壳为无壳程序。
查看PE熵值,发现区段完整并存在附加数据。
通过火绒剑观察,行为完整。证明从流量中提取出的恶意数据是完整的。
接下来我们继续分析感染网站是如何重定向到黑客工具下载站的。首先选择文件对象导出->HTTP文件对象过滤,根据域名简单判断出网站内容。
最终筛选出可疑的域名为:static.charlotteretirementcommunities.com,一般情况下网站域名都是简洁概括内容的单词缩写或首字母拼写,而该域名介绍过于详细反倒引起了注意。
根据文件过滤器我们可以得知被感染的内网机器向该网站请求了一个“text/javascript”类型文件,我们根据数据包的流跟踪内容可以看到以下内容。可以看到数据部分定义了一个"main_request_data_content"变量,该变量中的数据明显是被编码过或以某种加密形式处理过的。
traffic-analysis.net网站上有一篇文章可以提取出该字符串解码后的真实内容。我们仿照写下Python脚本提取字符串,我这里直接抄作者的了。
得到的数据如下。
可以使用010Editor显示16进制对应的字符串。
也可以使用notepad++将数据转换成Ascii。
转换后可以获得域名如下,正是文件导出对象过滤没有显示的域名g.trinketking.com。由此可以确定static.charlotteretirementcommunities.com域名实际上是做了重定向的操作。重定向的ip为50.87.149.90为提供EK工具包的黑客服务器。
确定了一切相关信息后,需要我们上传pacp包到VT等沙箱鉴别是否存在漏洞利用特征。发现Sweet Orange(甜橙)漏洞利用工具包特征。
将恶意样本从文件导出后,提取文件Hash。
我们还可以通过VT的嗅探中找到漏洞的流量特征,利用的漏洞为cve-2014-6332。
ip.src
=
=
172.16
.
0.0
/
12
or
ip.src
=
=
192.168
.
0.0
/
16
ip.src
=
=
172.16
.
0.0
/
12
or
ip.src
=
=
192.168
.
0.0
/
16
http.host
=
=
hijinksensue.com
http.host
=
=
hijinksensue.com
EncryptStr
=
'(6i8h(74$X7o4w(70(z3a)2fY_2f)6H7U@K2es.X74k_O72x$P69Y;R6e=R6b;6v5j!74m;H6b=69)L6QeP_M6S7_2he@63R=6vfJ;6d;i3a,L3P5@y31g.L34J)33Z(39w$t2fw!T63(6fr(r6peV.P7X3,7P5t,6dx_z65,7V2J@Z2f)6V5(w6dJ$7U0!74W;p79q$s2f=K6k2x_69n=7o2=G64_73;Z2pe;Z70.68_7N0@3f(R7O7q,6Q9;S6Oej(K74(t65,7O2k$t3d,3i3'
DecryptStr
=
[]
for
i
in
EncryptStr:
if
i
in
'0123456789abcdef'
:
DecryptStr.append(i)
print
(''.join(DecryptStr))
EncryptStr
=
'(6i8h(74$X7o4w(70(z3a)2fY_2f)6H7U@K2es.X74k_O72x$P69Y;R6e=R6b;6v5j!74m;H6b=69)L6QeP_M6S7_2he@63R=6vfJ;6d;i3a,L3P5@y31g.L34J)33Z(39w$t2fw!T63(6fr(r6peV.P7X3,7P5t,6dx_z65,7V2J@Z2f)6V5(w6dJ$7U0!74W;p79q$s2f=K6k2x_69n=7o2=G64_73;Z2pe;Z70.68_7N0@3f(R7O7q,6Q9;S6Oej(K74(t65,7O2k$t3d,3i3'
DecryptStr
=
[]
for
i
in
EncryptStr:
if
i
in
'0123456789abcdef'
:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-1-27 15:23
被独钓者OW编辑
,原因: