恶意代码分析实战 11 恶意代码的网络特征

news2025/1/16 0:55:25

11.1 Lab14-01

问题

  1. 恶意代码使用了哪些网络库?它们的优势是什么?

使用WireShark进行动态分析。
vmware_3OxpC4AZFJ.png
使用另外的机器进行分析对比可知,User-Agent不是硬编码。
请求的URL值得注意。
回答:使用了URLDownloadToCacheFileA函数,该函数使用了COM接口,当恶意代码使用COM接口时,HTTP请求中的大部分内容都来自Windows内部,无法有效地使用网络特征进行针对性的检测。

  1. 用于构建网络信令的信息源元素是什么,什么样的条件会引起信令的改变?

vmware_HUa68rQHYi.png
可以通过该函数去寻找是什么构造了URL。
通过交叉引用,我们发现了这样的一个函数。
vmware_0oiREB5kTn.png
通过分析可知它的作用是从一个网址下载文件,然后运行它,我们将该函数命名为downandrun。
请求网址有两部分是需要填充的。
:::info
http://www.practicalmalwareanalysis.com/%s/%c.png
:::
%s是参数,%c是这个参数的最后一个字符。
接着,我们看看是什么引用了这个函数。
vmware_sXkmYNspw0.pngvmware_XXA6Bmqcp1.png
这两个API函数的返回值构成了downandrun函数的参数。
chrome_1HfTpoEjPo.png
几番曲折,找到了加入字符a的函数。
vmware_AF6t01HPkD.png
对加密的字符串进行Base64解密。
:::info
ODA6NmQ6NjE6NzI6Njk6NmYtQWRtaW5pc3RyYXRvcga
:::
msedge_6fTTvsZVde.png

80:6d:61:72:69:6f-Administrator

回答:发送的信息中包含了主机的HWID和用户名;其中HWID是固定的,用户名则是可变的。

  1. 为甚攻击者可能对嵌入在网络信令中的信息感兴趣?

回答:攻击者想获取特定的用户和主机,在下一步进行针对性地攻击。

  1. 恶意代码是否使用了标准的Base64编码?如果不是,编码是如何不寻常的?

回答:不是常用的Base64编码,因为常见的base64编码在长度不够时采用“=”进行末尾填充,而此恶意程序采用‘a’进行末尾填充

  1. 恶意代码的 主要目的是什么?

回答:将被感染主机的HWID和用户名发送到到C&C,然后从网站下载并运行其他恶意代码

  1. 使用网络特征可能有效探测到恶意代码通信中的什么元素?

回答:域名特征、base64编码特征和HTTP请求中的URI的后缀是PNG文件,

  1. 分析者尝试为这个恶意代码开发一个特征时,可能会犯什么错误?

回答:如果恶意代码分析人员没有意识到下载网址与用户操作系统有关,可能会把重点放在URL上面。文件名可能是a.png,但当用户名长度和计算机属性是三的倍数时,文件名会变得无法预测。

  1. 哪些特征集可能检测到这个恶意代码(以及新的变种)?

参考了网上的解答。
chrome_KFcI4wnyKn.png
chrome_tMJ8fCZgFb.png
chrome_PUGktscZXw.png

11.2 Lab14-02

问题

  1. 恶意代码编写时直接使用IP地址的好处和坏处各是什么?

攻击者可能会发现静态IP地址比域名更难管理。使用DNS允许攻击者将他的系统部署到任意一台计算机上,仅仅改变DNS地址就尅动态重定向他的僵尸主机。对于这两种类型的基础设施,防御者有不同选项比域名更难处理。这个事实会让攻击者选择静态IP地址,而不是域名。
这里我们直接使用本书作者捕获到的信令。
ApplicationFrameHost_d22Ij1UONG.png

  1. 恶意代码使用了哪些网络库?使用这些库的好处和坏处是什么?

使用IDA查看。
vmware_8t9NqQojDz.png
回答:使用了WinNet库。优点是与Winsock API相比,操作系统可以提供较多的网络字段元素;缺点就是该库的网络函数调用需要提供一个硬编码的UserAgent字段。

  1. 恶意代码信令中URL的信息源是什么?这个信息源提供了哪些优势?

使用ResourceHacker查看资源节。
vmware_c6rZeBL6jS.png
回答:PE文件中的字符串资源节包含一个用于命令和控制的URL。在不重新编译恶意代码的情况下可以让攻击者使用资源节来部署多个后门程序到多个命令与控制服务器位置。

  1. 恶意代码利用了HTTP协议的哪个方面,来完成它的目的?

在函数sub_401750中,我们看到了第一个信令中的一些信息。
vmware_nsNfD0VpQZ.png
说明使用了UserAgent来发送信息,并且信息经过了加密。
对该函数进行交叉引用。
vmware_c1Gh4xh56P.png
检查该函数执行前的函数。
vmware_jVZ1BGTwha.png
vmware_I4AqyQpS02.png
该函数是变种的Base64加密。
可以使用如下代码进行解码。

import string
import base64

S = ""
tab = 'XYZlabcd3fghijko12e456789ABCDEFGHIJKL+/MNOPQRSTUVmn0pqrstuvwxyz'
b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
ciphertext = ''
for ch in ciphertext:
    if(ch in tab):
        S += b64[string.find(tab, str(ch))]
    elif(ch == '='):
       S += '='
print base64.decodestring(S)

vmware_ZP18kAK4Mh.png
第二条信令所在位置。
回答:利用UserAgent字段来发送信息,并且该信息被加密;通过两个管道通信来实现远程控制和任意命令执行。

  1. 在恶意代码的初始信令中传输的是哪种信息?

ApplicationFrameHost_6ulVGXAnuL.png
回答:初始的信令是 一个编码后的shell命令行提示。

  1. 这个恶意代码通信信道的设计存在什么缺点?

回答: 尽管攻击者对传出信息进行编码,但他并不对传入命令进行编码。此外,由于服务器必须通过User-Agent域的静态元素,来区分通信信道的两端。所以服务器的依赖关系十分明显,可以将它作为特征生成的目标元素。

  1. 恶意代码的编码方案是标准的吗?

回答:自定义的base64编码。

  1. 通信是如何被终止的?

回答:使用关键字exit来终止通信,退出时恶意代码会试图删除自己

  1. 这个恶意代码的目的是什么?在攻击者的工具中,它可能会起什么作用?

回答:这个恶意代码是一个小且简单的后门程序。它的唯一目的是给远端的攻击者提供一个shell命令接口,而通过查看出站shell命令活动的常见网络特征不能监测到它。基于它尝试删除自己这个事实,我们推断这个特殊的恶意代码可能是攻击者工具包中的一个一次性组件。

11.3 Lab14-03

问题

  1. 在初始信令中硬编码元素是什么?什么元素能够用于创建一个好的网络特征?

首先使用WireShark进行动态分析。这里的User-Agent出现了重复。
vmware_nOgJBNvZsp.png
再使用IDA进行静态分析。
vmware_GSoAj44g9K.png
在InternetOpenUrl函数调用的上方可以看到网络信令中看到的字符串。InternetOpenUrl调用后会包含头部的标题。
硬编码的头部包括Accept、Accept-Language、UA-CPU、Accept-Encoding和User-Agent恶意代码错误地添加了一个额外的User-Agent,在实际的User-Agent中,会导致重复字符串:User-Agent:User-Agent:Mozilla…针对完整的User-Agent头部(包括重复字符串),可以构造一个有效的检测特征。

  1. 初始信令中的什么元素可能不利于可持久使用的网络特征?

首先,找确定信令内容的函数。
vmware_APe8xozfqd.png
如果文件不存在,那么就返回这个信令的URL,autobat.exe是存储URL明文的配置文件。
vmware_4MQ8kwF7WW.png
恶意代码从Web页面上noscript标签中的某些特定组件来获得命令,这与本章中提到的注释域例子类似。使用这种技术,恶意代码可以向一个合法的网页发出信令,并且接收合法内容,使防御者区分恶意流量与合法流量变得更加困难。

  1. 恶意代码是如何获得命令的?本章中的什么例子用来类似的方法?这种技术的有点是什么?

vmware_dFTTdKJt2t.png
上图展示了使用较小连接块的输入缓冲区测试。攻击者通过将字符串比较拆分成多个较短的字符串测试,来消除明显的字符串比较,从而尝试隐藏他们正在查找的自妇产。此外,请注意请求的字符串()被混淆了,从而避免产生明显的模式。图中是0位置上的n、5位置上的i,以及1位置上的o。
接下里面的代码是从被截断URL尾部开始对静态字符串96‘进行搜索。
然后我们分析switch函数。
vmware_EFvdKPqmUj.png
‘s’函数是进行休眠。‘d’函数调用了URLDownloadToCacheFile和CreateProcess。
恶意代码从Web页面上noscript标签中的某些特定组件来获得命令,这与本章中提到的注释域例子类似。使用这种技术,恶意代码可以向一个合法的网页发出信令,并且接收合法内容,这使防御者区分恶意流量与合法流量变得更加困难。

  1. 当恶意代码接受到输入时,在输入上执行什么检查可以决定它是否是一个有用的命令?攻击者如何隐藏恶意代码正在寻找的命令列表?

要将内容解析为命令,必须包含被完整URL(包括http:/)跟随的初始noscript标签,此URL包含的域名与原始网页请求的域名相同。此URL路径必须以96结尾。域名和96(其中被截断)之间的两部分组成了命令和参数(如/command/1213141516类似的形式)。命令的第一个字母必须与提供命令相对应,在合适的时候,参数必须翻译成给定的命令中有意义的参数。
恶意代码编写者限制了可以提供有关恶意代码功能线索的字符串列表。当搜索noscript标签时,恶意代码搜索了<no,接着用独立不规则的字符比较操作来确定noscript标签。恶意代码也复用了域名所使用的缓冲区,来检查命令的内容。此外对96的字符串搜索只有三个字符,另外唯的单字符串搜索是字符/。当匹配命令时,仅仅考虑第一个字符,所以攻击者可能会在Wcb响应中提供soft或者seller,而实际上给恶意代码下达的是休眠的命令。流量分析可能确认攻击者在使用单词soft发送一个命令给恶意代码,而这可能会误导分析者在特征中使用完整单词。攻击者在不修改恶意代码的情况下,就可以无限制地使用seller或者任意以s开头的单词。

  1. 什么类型的编码用于命令参数?它与Base64编码有什么不同?它提供的优点和缺点各是什么?

vmware_XzCi4ty7uO.pngvmware_mPH8vT2w1G.png
sleep命令没有编码,而数字表示休眠的秒数。在其中的两条命令中,参数使用的是自定义编码,虽然简单但不是Base64编码。参数由偶数个数字来进行表示(一旦尾部的96被删除)每组两个数字代表的原始数字是数组 /abcdefghijklmnopgrstuvwxyz123456789:.的索引。这些参数仅用于URL间的通信,所以没有必要用到大写字符。这种编码方案的好处是:它不是标准算法,所以要理解它的内容,需要逆向工程分析它。缺点是很简单:在字符串输出中它可能被识别为可疑,因为URL总是以相同方式开头,这是一个一致性的模式。

  1. 这个恶意代码会接受哪些命令?

恶意代码命令包括quit、download、sleep 和redirectquit命令就是简单退出程序。download命令是下载并且运行可执行文件,不过与以前的实验不同,这里攻击者可以指定URL下载。redirect命令修改了恶意代码使用的配置文件,因此导致了 个新的信令URL。

  1. 这个恶意代码的目的是什么?

这个恶意代码本质上就是一个下载器。它有一些重要的优点,例如基于Web的控制,在确认为恶意域名并关闭后很容易做出调整。

  1. 本章介绍了用独立的特征,来针对不同位置代码的想法,以增加网络特征的鲁棒性。那么在这个恶意代码中,可以针对哪些区段的代码,或是配置文件,来提取网络特征?

恶意代码行为中某些特殊元素可能作为独立的检测目标,如下所示:

  • 与静态定义的域名和路径,以及动态发现的URL中相似信息有关的特征。与信令中静态组件有关的特征。
  • 能够识别命令初始请求的特征。
  • 能够识别命令与参数对特定属性的特征。
  1. 什么样的网络特征集应该被用于检测恶意代码?

参考了网上的解答。
chrome_65sglZNT57.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE多线程-定时器

目录一、定时器1.1 什么是定时器&#xff1f;1.2 定时器的构成二、简单实现定时器一、定时器 1.1 什么是定时器&#xff1f; 定时器是多线程编码中的一个重要组件,它就好比一个闹钟,例如我们想去坐车,但是不想现在去坐车,想8:30去坐车,于是我们订了一个8点钟的闹钟,也就是说定…

Linux内核驱动初探(四) 内部看门狗

目录 0. 前言 1. menuconfig 2. 设备树 3. 拓展试验 0. 前言 这次的内部看门狗驱动也比较顺利&#xff0c;重点看了 原理图和4.19.x 内核的配置。 内部看门狗设备名叫做 /dev/watchdog 。 1. menuconfig 我们在 linux-menuconfig 里面如下设置&#xff1a;进入 Device D…

[Java]JavaWeb学习笔记(动力节点老杜2022)

文章目录&#x1f97d; Tomcat服务器&#x1f30a; 下载与安装&#x1f30a; 关于Tomcat服务器的目录&#x1f30a; 启动Tomcat&#x1f30a; 实现一个最基本的web应用&#xff08;这个web应用中没有java小程序&#xff09;&#x1f97d; 静态资源与动态资源&#x1f97d; 模拟…

GPU虚拟化(留坑)

文章内容大程度参考B站王利明老师对《GPU虚拟化技术分享》的演讲&#xff1a;https://b23.tv/uQKBpcK GPU 有什么用&#xff1f; GPU可以用于图形渲染&#xff0c;也能够用于高性能计算和编解码等场景。 图&#xff1a;GPU 的典型软件架构&#xff08;不含虚拟化&#xff09; …

注解存储对象到Spring,详解 五大类注解 和方法注解

上一篇博客我们介绍了如何使用xml来引入bean对象&#xff0c;当项目多的时候&#xff0c;显然那样是比较麻烦的。现在我们只需要 个注解就可以替代了。注意&#xff1a;注解和xml可以同时使用准备工作:配置扫描路径我们需要配置 下存储对象的扫描包路径&#xff0c;只有被配置的…

【笔记】openwrt - full cone NAT(全锥NAT)、解决“arp_cache: neighbor table overflow!”

最近安装了比特彗星&#xff08;bitcomet&#xff09;后&#xff0c;老是收到警告说日志的接收超过每秒上限了。一看日志&#xff0c;好家伙&#xff0c;一堆的kern.info kernel: [194004.157620] neighbour: arp_cache: neighbor table overflow!日志&#xff0c;还是kernel的…

损失函数总结

回归损失与分类损失 回归用于逼近某个数值,预测的结果是连续的,例如预测小明的身高,160,161,162,163cm。平方损失即MSE: 分类用于预测物体属于某一个标签,预测的结果是离散的,例如预测明天是否下雪:是or否。 由于预测分类,最终的输出需要介于(0,1)之间,通常在网络…

Redis消息队列 | 黑马点评

目录 一、认识消息队列 二、List模拟消息队列 三、PubSub的消息队列 四、Stream的消息队列&#xff08;重点&#xff09; 1、单消费模式 2、消费者组 五、redis三种消息队列对比 六、优化秒杀实战 1、创建消息队列 2、修改下单脚本 3、接收消息处理 一、认识消息队列 …

设计模式 - 创建型模式_工厂方法模式

文章目录创建型模式概述CaseBad ImplBetter Impl &#xff08;⼯⼚模式优化代码&#xff09;创建型模式 创建型模式提供创建对象的机制&#xff0c; 能够提升已有代码的灵活性和可复⽤性。 类型实现要点工厂方法定义⼀个创建对象的接⼝&#xff0c;让其⼦类⾃⼰决定实例化哪⼀…

【蓝桥杯-筑基篇】基础数学思维与技巧(1)

&#x1f353;系列专栏:蓝桥杯 &#x1f349;个人主页:个人主页 目录 1.一百以内的AB 2.小学生算术求进位次数 3.最大公约数 4.最小公倍数 5.十进制转换其他进制 6.其他进制转十进制 7.天空数 8.求集合的所有子集 9.判断一个数是否为2的次方数 10.二进制中1的个数 1.一…

ISIS简介、NSAP与NET地址、Router-Id转换成NET地址

2.0.0 ISIS简介、NSAP与NET地址、Router-Id转换成NET地址 ISIS简介 IS-IS&#xff08;Intermediate System-to-Intermediate System&#xff09;中间系统到中间系统。 1、该协议最初是ISO国际标准化组织为CLNP&#xff08;Connection Less Network Protocol&#xff0c;无连接…

HashMap 正解

HashMap 实现原理 以及扩容机制 HashMap 的 put 以及扩容基本实现 数据结构 上述截图是 HashMap 的内部存储的数据结构。大体上是通过 hash 值来获取到对应的下标。如果当前下标为 null 的话&#xff0c;直接创建并设置一个新的节点&#xff0c;反之就是添加到该链表的最后 pu…

好客租房-09_学习MongoDB并完善通讯系统

9. 学习MongoDB 并完善租房的通讯系统后端本章目的为MongoDB快速入门, 并完善上一节编写的通讯系统后台, 将DAO层从HashMap迁移到MongoDB中.思考如下问题:MongoDB属于关系型还是非关系型数据库为什么在我们的通讯系统中选择MongoDB作为数据库?9.1 mongoDB概念简介MongoDB是一个…

python+django医院固定资产设备管理系统

管理员功能模块 管理员登录&#xff0c;通过填写用户名、密码、角色等信息&#xff0c;输入完成后选择登录即可进入医院设备管理系统&#xff0c; 管理员登录进入医院设备管理系统可以查看首页、个人中心、科室员管理、维修员管理、设备领用管理、设备信息管理、设备入库管理、…

人工智能入门杂记

本篇文章属于所有发表的文章的导读吧&#xff0c;以后会常更新。 目录 1.数据挖掘、机器学习、深度学习、云计算、人工智能 2.深度学习、强化学习、对抗学习、迁移学习 3.基础知识--线性代数 4.基础知识--概率与数理统计 5.常用工具库 6.机器学习 6.1 什么是训练什么是推…

Java数组

文章目录Java 数组一、数组介绍二、数组1. 数组静态初始化1.1 数组定义格式1.2 数组静态初始化2. 数组元素访问3. 数组遍历操作3.1 数组遍历介绍3.2 数组遍历场景3.3 数组遍历案例1&#xff09;数组遍历-求偶数和2&#xff09;数组遍历-求最大值3&#xff09;数组遍历综合案例4…

【C语言航路】第十四站:文件

目录 一、为什么使用文件 二、什么是文件 1.程序文件 2.数据文件 3.文件名 三、文件的打开和关闭 1.文件指针 2.文件的打开和关闭 四、文件的顺序读写 1.对于输入输出的理解 2.fgetc与fputc &#xff08;1&#xff09;fgetc与fputc的介绍 &#xff08;2&#xff0…

2023年springcloud面试题(第一部分)

1. 什么是微服务架构微服务架构就是将单体的应用程序分成多个应用程序&#xff0c;这多个应用程序就成为微服务&#xff0c;每个微服务运行在自己的进程中&#xff0c;并使用轻量级的机制通信。这些服务围绕业务能力来划分&#xff0c;并通过自动化部署机制来独立部署。这些服务…

MP-4可燃气体传感器介绍

MP-4可燃气体传感器简介MP-4可燃气体传感器采用多层厚膜制造工艺&#xff0c;在微型Al2O3陶瓷基片的两面分别制作加热器和金属氧化物半导体气敏层&#xff0c;封装在金属壳体内。当环境空气中有被检测气体存在时传感器电导率发生变化。该气体的浓度越高&#xff0c;传感器的电导…

JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JDBC Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&#x…