恶意代码安全攻防

恶意代码安全攻防

所属课程 网络攻防实践
课程要求 第九周作业

1. 实践内容

1.1 恶意代码

1.1.1 定义与分类

定义:计算机按照攻击者的意图执行以达到恶意目标的指令集 。

分类:计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、内核套件 ,融合型恶意代码。

  • 计算机病毒:通过感染文件进行传播,能自我复制,需要人为行动或被执行。
  • 蠕虫 :自主运行 ,主动扫描。
  • 恶意移动代码 :从远程主机下载并在本地执行的轻量级程序 ,较高自主性。
  • 后门 :绕过正常的安全机制 ,直接控制主机。
  • 特洛伊木马 :伪装的恶意软件。
  • 僵尸网络 :传播恶意代码控制多台主机 ,实施一对多控制。
  • rootkit:修改用户态软件或内核,执行时获取root。
1.1.2 计算机病毒
  • 通过拷贝自身嵌入系统程序感染主机。
  • 基本特性:感染性、潜伏性、可触发性、破坏性、衍生性 。
  • 潜在感染目标及机制:
    1. 可执行文件 ;前缀感染机制,拷贝在宿主程序的始端 ,执行宿主程序时首先运行病毒代码;后缀感染机制,拷贝在宿主程序的末端,通过跳转指令控制代码运行;插入感染机制,拷贝在宿主程序中间。
    2. 感染引导扇区( 主引导区和分区引导区 );感染引导区上的引导记录,在系统启动时先于操作系统截取系统控制权。
    3. 宏指令数据文件 :以宏指令的方式拷贝到目标中,造成感染。
1.1.3 网络蠕虫
  • 通过网络自主传播、自我复制,没必要感染宿主。
  • 组成结构:
    1. 弹头:渗透代码,利用诸如网络服务,文件传输服务上的系统漏洞以获取主机访问权。
    2. 传播引擎:通过弹头装载自身拷贝写入系统或通过在系统中利用网络文件传输服务加载自身拷贝。
    3. 目标选择算法和扫描引擎 :查找新目标,通过不同目标,如电子邮件地址、主机列表、被信任的系统选择相应算法确定目标地址。
    4. 有效载荷:附加的攻击代码,如安装后门、或利用资源执行复杂计算 。
1.1.4 僵尸程序与僵尸网络
  • 功能结构:
    1. 主体功能:命令控制模块和传播模块 ,用于僵尸网络的控制和僵尸陈旭的传播。
    2. 辅助功能:信息窃取模块、主机控制模块、下载更新模块、防分析检测 。
  • 控制模式:
    1. 基于IRC协议。
    2. 基于HTTP协议。
    3. 基于P2P协议。
1.1.5 Rootkit
  • 同上述所讲不同,该恶意代码修改系统组件,是一种特殊的木马后门,具有修改系统组件后进行隐藏的特性。
  • unix用户模式Rootkit集成工具:提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、零散工具、工具安装脚本 。
  • 内核模式Rootkit技术手段:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制 。

1.2 恶意代码分析方法

分析环境:隔离的分析环境,分为简单连接不同系统平台的计算机的私有局域网段,虚拟蜜网结构,或特定的研究用自动分析环境等。

1.2.1 静态分析技术:
  1. 反病毒软件扫描:使用现成的反病毒软件分析样本代码。
  2. 文件格式识别 :file命令识别大妈文件格式。
  3. 字符串提取分析:利用专用工具(strings)搜查代码中字符串信息,包括恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息、Email地址、库和函数调用等。代码有可能会被strip处理或加壳(将提取出乱码)。
  4. 二进制结构分析 :利用binutils工具获取执行文件编译链接的信息;nm命令查找所用编译器或一些符号。
  5. 代码结构与逻辑分析 :利用IDA Pro 等逆向分析工具获取代码结构(函数调用关系和程序控制流)。
  6. 加壳识别与代码脱壳:对不同壳进行识别并利用相应的脱壳工具进行脱壳。
1.2.2 动态分析技术(激活部分代码):
  1. 基于快照比对:利用RegSnap对恶意代码运行前后的系统快照进行比对分析。
  2. 系统动态行为监控 :针对恶意代码对文件文件系统(工具:Filemon)、运行进程列表、注册表等方面的行为动作进行实时的监视、记录和显示。基于行为通知(Notification) 机制API劫持 (API Hooking) 技术。
  3. 网络协议栈监控 :在本地网络的一台主机利用tcpdump或wireshark对攻击时网络数据进行嗅探。
  4. 沙箱技术 :提供受限制的执行环境,使得在其中运行的代码不能修改用户系统 。
  5. 动态调试:利用动态调试器调试恶意代码。

2. 实践过程

2.1 恶意代码文件类型识别、脱壳与字符串提取
2.1.1rada恶意代码样本的文件格式、运行平台和加壳工具
  1. 使用命令 file RaDa.exe获取其文件格式及运行平台,文件格式问PE32,运行平台为windows:

  1. 使用PEiD工具识别加壳类型,发现加壳类型为UPX:

2.1.1对rada恶意代码样本进行 脱壳处理

使用超级巡警这个软件进行脱壳 ,得到脱壳后的文件Radaunpacked.exe:

2.1.1使用字符串提取工具从中发现rada恶意代码的编写作者

e...strings命令好像不大行,找不到像作者的字符串,这里使用IDA Pro。分析脱壳文件发现作者信息DataRescue sa/nv:

2.2 分析Crackme程序

使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息:

看题目知需要执行这两个程序了。

首先对文件格式进行识别,这两个都是PE32结构:

使用IDA Pro对crackme1.exe进行分析,得到一大堆汇编语句...

没头绪,先执行crackme1.exe,并尝试输入一些字符,根据结果猜测程序通过比对输入与预设字符串,匹配则输出相应信息,故猜想其中存在条件匹配模块,并随之链接输出模块。

故接下来查看函数调用图。

发现从入口开始,链接输出的模块为sub401280,故查看该模块,观察下面代码,推测功能为:在对寄存器内容作出比较匹配后,满足条件即跳入loc4012D,调用strcmp函数比较两个栈内的字符串,进行条件测试,满足条件跳入loc401310,输出“YouknowHowTOSp”:

故猜测输入内容应为 “I know the secret”,测试后结果:

同理对crackme2.exe执行如上操作,其中有段代码比较了“crackmeplease.exe”,然而才跳入信息的验证。否则还会提示“i have an identity”,认证错误,如果不是输入字符有错的话,那就是说上面的“crackmeplease.exe”是运行程序名咯。于是将crackme2.exe改名后进行了验证有结果:

2.3 样本分析实践
1. 提供对这个二进制文件的摘要

使用md5sum RaDa.exe获取该二进制文件的摘要:

一些基本的识别壳以及文件类型上面已经说过,现在使用IDA Pro进行分析:

2.找出并解释这个二进制文件的目的,识别并说明这个二进制文件所具有的不同特性 ,识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术 ,分类,开发作者
开发作者,识别和特性:

上面已经分析过了;

目的,分类:

调出其函数调用图,发现结构有点复杂,不好下手。查看字符串看看有什么可以利用的信息:

根据字符串提供的一些信息,猜想该文件通过网页下载文件到c盘中,然后感染c盘文件。程序执行后又开始“DDoS”远程攻击?猜测以该主机为跳板,继续攻击其他主机?所以猜测该文件可能远程后门控制或为基于http的僵尸程序?

下面这些字符串应该是该程序干了些啥的提示,执行后访问几个ip,进行一些操作后进行了截屏:

尝试运行该软件并看看其干了些什么:主要是建立了RdDa及其他的一些文件,还想使用浏览器访问ip,但由于断网被拒绝了。根据字符串提供的信息,应该是想访问10.10.10.10/RaDa下载一个可执行文件,以进行接下来的攻击。

防止被分析或逆向工程的技术

加壳。UPX壳。

2.3 取证分析

1. IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?

因特网中继聊天(Internet Relay Chat),简称:IRC。它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。IRC的工作原理非常简单,只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称)。

发送的消息有三种:口令、昵称、用户信息,格式为USER 、 PASS 、 NICK 。

明文传输端口:6667 ;SSL加密传输端口:6697 。

2. 僵尸网络是什么?僵尸网络通常用于干什么?

见上文。

3. 蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信

使用wireshark对通信包进行过滤,指令为 ip.src == 172.16.134.191 && tcp.dstport == 6667 ,得到五个ip : 209.126.161.29 ,66.33.65.58 ,63.241.174.144 ,217.199.175.10 ,209.196.44.172 ;

4. 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络

使用指令ip.dst == 209.196.44.172 && tcp.port == 6667进行筛选,将筛选出的source ip放入python set中,计算该set长度。思路就是这样了,但是资源导出好像有点麻烦,以后有时间再补充吧。

5. 哪些IP地址被用于攻击蜜罐主机?

难顶,同样是上面的方法。

6,7. 攻击者尝试了哪些安全漏洞? 哪些攻击成功了?是如何成功的?

键盘失灵...很多指令打起来太麻烦了。通过参考同学博客,对响应的tcp端口135,139,25,445,4899,80 ,udp端口137 分别进行数据分析,其中,udp137数据显示ARP查询数据。

tcp135 端口和tcp25端口只是进行连接,没有data交互,应该只是进行了扫描。

tcp139端口为smn服务扫描,多个ip同蜜罐尝试建立网络服务连接。

tcp445端口,这个不用看数据都应该知道有很大可能被攻击了。。忽略连接过程,直接最终连接后的数据流可知过两次攻击ADMDLL注入和PSINFSVC攻击,后者失败了,前者可能成功了吧。

tcp4899端口,这个端口数据交换唯一的特点貌似是诸如以下格式的数据:

tcp 80端口,这个端口交换数据特别多,想来应该是下载些东西。通过最终数据流发现访问的是IIS服务器,那可能的攻击就可以很多了。不过没有分析出什么东西。。不过有同学发现有ip访问了蠕虫网站。

学习问题

  1. 键盘坏了,使用虚拟键盘写作业太慢了,在虚拟机中执行命令就更难了

    解决:等快递中。。

  2. 导出wireshark数据麻烦,直接提取.dat数据字段又得自己写过滤,麻烦

  3. 分析大量数据时,有点烦躁

  4. 不清楚汇编命令

实践总结

分析的有点粗糙。

posted @ 2020-04-30 10:57  chlei233  阅读(704)  评论(0编辑  收藏  举报