20212911陈金翔-2022-3 网络攻防实践 第八次(第十周)作业

1.实践内容

1.1加壳与脱壳

加壳是利用特殊的算法,对可执行文件里的资源进行压缩,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。有矛就有盾,脱壳即去掉软件所加的壳。目前脱壳一般分手动和自动两种,手动就是通过调试工具脱壳,对脱壳者有一定水平要求,涉及到很多汇编语言和软件调试方面的知识;而自动就是用专门的脱壳工具,最常用某种压缩软件都有他人写的反压缩工具对应。

1.2反编译

反编译是将可执行的(准备运行的)程序代码(也称为目标代码)转换为某种形式的高级编程语言,使其具有更易读的格式。反编译是一种逆向工程,它的作用与编译器的作用相反。它与编译相反。完成此任务的工具称为反编译器。反编译有许多不同的原因,例如理解程序、恢复源代码以进行存档或更新、查找病毒、调试程序和翻译过时的代码。完全自动化的反编译是不可能的。没有反编译器可以获得开发人员编写的确切源代码。

 

1.3僵尸程序

(1)什么是僵尸网络?

僵尸网络是网络蠕虫、后门程序、特洛伊木马等传统恶意代码形态的基础上发展融合而成的新型攻击方式,其攻击者出于恶意目的,传播僵尸程序控制大量主机它区别于其他攻击方式的特性是一对多的命令与控制机制。

(2)僵尸程序功能组成结构

其主要分为主体功能模块和辅助功能模块,其中主体功能模块主要包括命令与控制模块和传播模块,辅助功能模块主要包括信息窃取模块、主机控制模块、下载更新模块、防分析检测模块

(3)僵尸程序工作机制

渗透攻击

加入服务器

动态影射至IRC服务器

加入IRC信道

监听命令

接收命令

执行攻击

 

1.4恶意代码

恶意代码:恶意代码(Unwanted Code)是指没有作用却会带来危险的代码,一个最安全的定义是把所有不必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,包括所有可能与某个组织安全策略相冲突的软件

 

恶意代码类型

定义特征

典型实例

计算机病毒(Virus)

是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。

Brain,Concept,CIH

蠕虫(Worm)

蠕虫是一类自主运行的恶意代码,并不需要将自身嵌入到其他宿主程序中。蠕虫通常通过修改操作系统相关配置,使其能够在系统启动时得以运行。

Morris,Code Red,Slammer

恶意移动代码(Malicious mobile code)

属于移动代码的范畴;移动代码是指可以从远程主机下载并在本地执行的轻量级程序,不需要或仅需要极少的人工干预。移动代码通常在Web服务器端实现,实现技术包括Java applets、JavaScript脚本代码、VBScript脚本代码和ActiveX控件等。

Santy Worm

后门(Backdoor)

是指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。攻击者可以通过使用后门工具对目标主机进行完全控制。

Netcat,BO,冰河

特洛伊木马(Trojan)

是一类伪装成有用的软件,但隐藏起恶意目标的恶意代码。后门仅为攻击者给出非法访问途径,而特洛伊木马的特征则在于伪装性。

Setiri

僵尸程序(Bot)

攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的攻击网络。僵尸程序(Bot)是用于构建僵尸网络以形成一对多控制攻击平台的恶意代码形态。

Sdbot,Agobot

内核套件(Rootkit)

是在用户态通过替换或修改系统关键可执行文件,或者在内核态通过控制操作系统内核,用以获取并保持最高控制权(root access)的一类恶意代码,又分为用户态Rootkit和内核态Rootkit两种。

LRK,FU,hdef

融合型恶意代码

融合上述多种恶意代码技术,构成更具破坏性的恶意代码形态。

Nimda

2.实践过程


动手实践任务一

对提供的rada恶意代码样本(U盘或FTP/materials/course9下载),在WinXP_Attacker虚拟机中进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。

  • 使用文件格式和类型识别工具(file, PEid),给出rada恶意 代码样本的文件格式、运行平台和加壳工具。
  • 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行 脱壳处理。
  • 使用字符串提取工具(strings、IDA Pro),对脱壳后的 rada恶意代码样本进行分析,从中发现rada恶意代码的编写作 者是谁?
  • 实验环境:WinXP Attacker虚拟机(安装有cygwin以及基本的脱壳软件和字符串提取工具)。

首先利用file RaDa.exe命令查看RaDa.exe的文件类型,可知这是一个32位Windows PE可执行文件,并且有图形化窗口。

 

下面来看看有没有加壳,下面使用PEiD工具(查壳)来查看加壳的类型。在这里我们可以看到这个是一个版本为0.89.6的UPX壳。还可以看到文件的入口点、EP段、偏移、文件类型等信息。

 

 

我们用超级巡警这个软件进行脱壳,这里也识别出了是一个UPX壳。

 

 

 脱壳结束,打开IDA Pro Free选择脱壳之后的文件,可以看到如下信息。包括作者的信息DataRescue sa/nv,邮箱。同时这个程序是由MSVB编写的。继续往下是一些函数调用,汇编代码。

 

 

 

 

 

动手实践任务二:分析Crackme程序

任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。

  • 实验环境:装有IDA Pro的WinXP Attacker虚拟机。

首先分析crackme1.exe。对crackme1.exe进行执行,猜测参数执行,可以发现一个参数输入与其他的参数输入得到的输出明显不一样,所以可以猜测这个程序的输入是一个参数。

 

 

 

 用IDA Pro打开这个程序分析,我们打开通过Strings窗口可以查看该程序中出现的字符串,我们发现了前面的两种反馈信息,I think you are missing something.Pardon? What did you say?,这两个我们之前已经见过了,很容易猜测,第一个是参数不对的返回情况,第二个是给的参数数量对了,但是具体的内容不对。还有两个我们不知道啥意思,所以我们要继续进行分析。

 

 

 

 

接下来看函数调用图(Function Call),寻找找字符串操作相关的函数,以及输出函数,因为我们测试程序的时候明显是有输出的。如下图,可以看到字符串比较函数strcmp和输出函数printf。那么显而易见,sub_401280这个函数就显得至关重要了。

 

 

 下面看这个函数的汇编代码了。首先push了ebp入栈,然后比较最后一个cmp比较函数参数是不是2。

 

 

 下面就是比较了,很容易看到左边就是函数参数不为2的情况(不为2输出的字符串也明显与我们之前猜测的内容一致),右边就是参数为2的情况。

 

 

 进入右边,发现又调用了一个字符串匹配函数strcmp,也就是讲我们输入的字符串与I know the secret进行比较,如果不匹配就输出Pardon? What did you say?(这个我们之前已经见过啦)。那么正确,就输出You know how to speak to programs, Mr. Reverse-Engineer

 

 

 根据上面的分析,我们执行程序携带参数I know the secret得到正确的结果

 

 

 接下来分析crackme2.exe。下面我就主要用IDA Pro进行分析,首先还是看明文字符串

 

 我们首先还是打开call function,我们可以看到字符串比较函数strcmp和输出函数fprintf以及输入函数等。那么此时应该寻找,sub_401280这个函数了。

 

 和上面一样,找到这个函数的汇编代码,同样的,下面有判断参数是否为2,如果不是,就返回I think you are missing something

 

 当程序走到右边时,会判断函数名,因此我们需要修改函数名,当这个判断通过后,进入右边的函数,再次判断参数是否为I know the secret

 

 我们修改函数名并携带参数I know the secret,得到正确的结果

 

 

分析实践任务一:

分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:

1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;

2、找出并解释这个二进制文件的目的;

3、识别并说明这个二进制文件所具有的不同特性;

4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;

5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;

6、给出过去已有的具有相似功能的其他工具;

7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

 

首先打开Filemon(文件),Regmon(注册表),Wireshark(网络)三个软件进行监测。然后启动这个恶意软件。

观察Filemon,筛选rada,我们可以看到程序文件RaDa.exe复制到了C:\RaDa\bin目录下,并且新建了temp目录。

 

 观察Regmon,我们可以看到进行了很多注册表的操作,其中其中有一个时在自启动项里面加入了RaDa: C:\RaDa\bin\RaDa.exe

 

 

 

 继续看Wireshark给我们的结果,时不时的访问10.10.10.10的80端口,推测是在访问某个html页面。

 

 利用md5sum RaDa.exe指令得到其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。利用file RaDa.exe识别出这是32位PE文件,并且还是个GUI文件,同时这是一个加壳文件,可以用strings RaDa.exe输出看是不是全部乱码。

 

利用超级巡警脱壳,在之前的实验中已经脱壳过了。

利用IDA Pro进行分析了。那么按照之前静态分析的套路,我们首先就应该看字符串。

将编码格式改为Unicode后,可以看到命令行字符串、版权、作者信息和一些注册表的信息。

 

 

 

 

 

 

 

 另外我们还找到了字符串RaDa_commands.html,应该是上面分析中程序频繁访问的页面

 

 那么我们找到该字符串出现的函数

 

根据黄色部分的汇编代码,我们知道他被拷贝到了dword_40C030这个变量中。

我们找到这个dword_40C030变量对应的函数,也就是函数sub_4052C0 ,找到这个函数,并且打开其Call Graph方便查看。这里我们看到判断了三个网段分别为192.168.172.16.10.,这是三个私有网段,也就是说确保服务器在私有网段中,然后到服务器去取命令文件。

 

 

 

 取得命令文件后,程序会执行相应的命令,具体命令如下

 

 

命令功能
exe 在宿主主机中执行指定的命令
put 将宿主主机中的指定文件上传到服务器
get 将服务器中的指定文件下载到宿主主机中
screenshot 截取宿主主机的屏幕并保存到tmp文件夹
sleep 停止活动一段时间

 

最后,我们在观察字符串中还找到了Vmware Tools字段,进入该字符串对应的函数查看

 

 

首先我们找到该字符串对应的函数sub_404FB0,在这个函数中,这个字符串被拷贝到变量dword_40C070,继续寻找这个变量对应的函数,找到是sub_40AAA0。接下来我们主要看看这个函数做了什么,以及哪里调用了这个函数。

 

 我们看到这个函数进行了网卡配置信息的查询(Select),然后进行了右边就确认dword_40C070对应的字符是否存在,并进行了Mac地址查询,注册表的查看等操作(Wscript.shell)。也就是判断vmware tools是不是在注册表里面。

 

我们观察到--authors参数对应的处理函数是sub_40B010,找到之后,我们打开Call Graph进行观察,,这里调用了sub_40AAA0函数,也就是上面虚拟机对应的处理函数,我们发现,这里的处理是如果是虚拟机就输出Unknow argument,如果不是,就输出正确的作者信息。

 

分析结束 

问题解答:

1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;

  md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。32位PE GUI可执行程序,同时这是一个UPX加壳文件。

2、找出并解释这个二进制文件的目的;

  当用户打开文件时,如果连接有网络,便会持续访问某个特定的网页,从网页中得到攻击者的指令,并且攻击者可以完全控制该系统,所以这应该是一个后门程序或者僵尸程序。

3、识别并说明这个二进制文件所具有的不同特性;

  RaDa.exe执行时,它会将自身复制到系统C盘的某个固定路径下,并通过修改注册表的方式使得每次系统启动,启动后根据问题2中的步骤,控制该主机。

4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;

  UPX加壳。

  通过查看网卡的MAC地址以及查看VMware Tools的注册表项来判断操作系统是否运行在VMware虚拟机上,如果是,则使用—-authors参数时将不会输出作者信息。

5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;

  首先这个样本不具有传播和感染的性质,所以它不属于病毒和蠕虫。然后它也没有将自己伪装成有用的程序以欺骗用户运行,所以他也不属于木马。应该归类为后门程序或者僵尸程序。

6、给出过去已有的具有相似功能的其他工具;

  木马Bobax、海阳顶端、木马Setiri等

7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

  2004年,由Raul siles和David Perze二人编写

分析实践任务二:Windows 2000系统被攻破并加入僵尸网络

任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:

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

  • 因特网中继聊天(Internet Relay Chat),简称IRC。IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。IRC特点是通过服务器中继与其他连接到这一服务器上的用户交流

  • 注册时需要发送的消息有三种,分别是口令,昵称和用户信息。

  • IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。

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

  • 僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。

  • 僵尸网络主要用于:发动DDOS攻击、发送垃圾邮件、 监听用户敏感信息、记录键盘输入信息、 扩散新的恶意软件 和 伪造点击量,骗取奖金或操控网上投票和游戏,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。

3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

  通过Wireshark打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667,可以找到所有与蜜罐主机进行通信的 IRC 服务器:分别为:209.126.161.29、66.33.65.5863.241.174.144217.199.175.10209.196.44.172

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

  首先安装tcpflow,然后输入命令tcpflow -r botnet_pcap_file.dat'host 209.196.44.172 and port 6667'获取209.196.44.172与172.016.134.191之间的所有的 IRC 数据包,得三个文件,172.016.134.191.01152-209.196.044.172.06667209.196.044.172.06667-172.016.134.191.01152report.xml,report.xml

 

再利用指令cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | tr ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | wc -l查看多少不同的主机访问了以209.196.44.172为服务器的僵尸网络

 

 

 可以看出有3461台主机访问了以209.196.44.172为服务器的僵尸网络

 

5、那些IP地址被用于攻击蜜罐主机?

 

使用以下命令查找端口并输出到1.txt 中(tcpdump -nn: 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示;grep -v:排除指定字符串;cut -d '.' -f 10:截取以'.'为分隔符的第 10 列;uniq命令用于检查及删除文本文件中重复出现的行列; wc -l 用于统计文件的行数),总共148个端口

 

tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | grep -v 'reply' | cut -d '.' -f 10 | cut -d ':' -f 1 | sort | uniq | more >1.txt; wc -l 1.txt

 

 

 

 

6、攻击者尝试攻击了那些安全漏洞?

首先使用tcpdump命令行查看下攻击者扫描的蜜罐的端口:

tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq //TCP端口

 

 

可以看到TCP端口有:①135(rpc)、②139(netbios-ssn)、 ③25(smtp)、 ④445(smb)、 ⑤4899(radmin)、 ⑥80(http);

 

tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq //udp端口

 

 

UDP端口有:①137(netbios-ns);

 

使用过滤规则tcp.port == 135 || tcp.port == 25过滤数据包;发现全是一堆TCP连接请求但是并没有数据传输,因此攻击者只是对这俩端口进行了conncet扫描;

 

 再使用过滤规则ip.dst == 172.16.134.191过滤数据包,发现IP 24.197.194.106和蜜罐交互最多,并且里面有很多HTTP请求、协商协议请求和shell的一些操作,结合IIS漏洞的特点可知攻击者使用http协议对蜜罐主机进行了疯狂的Web探测,但是最后没有建立连接,因此以失败告终;

 

 

使用过滤规则tcp.dstport == 4899过滤数据包,4899是Radmin默认使用也经常被黑客当作木马来使用

 

 

 使用过滤规则tcp.dstport == 139过滤数据包;139 NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows"文件和打印机共享"和SAMBA。在Internet上共享自己的硬盘可能是最常见的问题。

 

 使用过滤规则tcp.dstport == 445过滤数据包;黑客能通过该445端口偷偷共享硬盘,甚至会在悄无声息中将硬盘格式化掉!这个端口其实实质上还是共享文件夹的端口SMB,从wireshark抓包中同样也看到了攻击者利用这个445端口进行SMB连接的情况;

 

 

 

 

 

 

攻击IP

攻击文件名

攻击漏洞

结果

129.116.182.239

IPC$ \samr\\c

普通查点

未攻破

195.36.247.77

IPC$ \samr\\ADMIN

普通查点

未攻破

209.45.125.69

IPC$ \samr

普通查点、口令猜测

未攻破

210.22.204.101

IPC$ \samr \svcctl \r_server.exe admdll.dll raddrv.dll

普通查点、口令猜测、MSRPC-SVCCTL服务枚举漏洞等

成功攻破

61.111.101.78

IPC$ \samr \svcctl PSEXESVC.EXE

PSEXESVC攻击

成功攻破

66.139.10.15

IPC$ \samr

普通查点、口令猜测

未攻破

66.8.163.125

IPC$ \samr

普通查点

未攻破

80.181.116.202

IPC$ \samr

普通查点

未攻破

 下面是UDP端口的分析:UDP端口137(netbios-ns)一般安装了NetBIOS协议后,该端口会自动处于开放状态,使用者只需要向局域网或互联网上的某台计算机的137端口发送一个请求,就可以获取该计算机的名称、注册用户名,以及是否安装主域控制器、IIS是否正在运行等信息;

 

 

7、那些攻击成功了?是如何成功的?

通过TCP 445端口对目标主机210.22.204.101进行了普通查点、口令猜测、MSRPC-SVCCTL服务枚举漏洞等攻击。通过TCP 445端口对目标主机61.111.101.78进行了PSEXESVC攻击。

 

3.学习中遇到的问题及解决

问题:ida运用不熟练,调不出来想要的流程图,汇编忘光光了

解决方法:上网搜博客,温故而知新

 

 

4.学习感想和体会

通过本次实验,学习了各种工具的使用方法,复习了汇编的相关知识,收获颇丰。

posted @ 2022-05-08 09:44  虎啊虎呀  阅读(85)  评论(0编辑  收藏  举报