一、实践内容
1、计算机病毒
(1)定义:计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。这里必须记住:计算机病毒是借助人类帮助从一台计算机传至另一台计算机,这也是其传播机制。
(2)特性:感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性。
(3)感染及引导机制:
- 感染可执行文件(最为普遍的方式):前缀感染机制(病毒将自身复制到宿主程序的始端)、后缀感染机制(病毒将自身复制到宿主程序的末端)、插入感染机制(病毒在感染宿主程序时,病毒代码放在宿主程序的中间)。
- 感染引导扇区:通过BIOS定位磁盘的主引导区,运行存储的主引导记录,接着从分区表中找到第一个活动分区,读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统。
感染数据文件(支持宏的数据文件):将自身以宏指令的方式复制到数据文件中,当被感染的数据文件被应用程序打开时,将自动执行宏病毒体,完成病毒的引导。
2、网络蠕虫
(1)定义:一种通过网络自主传播、自我复制的独立恶意代码。
(2)传播机制:主动攻击网络服务漏洞、通过网络共享目录、通过邮件传播。
(3)组成结构:
- 弹头:利用目标系统安全漏洞入侵目标系统。包括缓冲区溢出攻击、破坏目标系统服务中的内存结构、文件共享攻击、利用电子邮件传播、利用其它普通的错误配置。这里其实就是我们之前说的渗透攻击模块。
- 传播引擎:通过在目标系统上执行传播引擎指令,完成蠕虫样本的传播。方式有FTP/TFTP/HTTP/SMB/直接传送/单包等。
- 目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。包括电子邮件地址、主机列表、被信任的系统、网络邻居主机等。这里就是扫描策略。
- 有效载荷:附加的攻击代码,执行一些特殊目地的操作。包括植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂计算等。
3、后门与木马
(1)后门定义:允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供通道。
(2)后门类型:本地特权提升、单个命令的远程执行、远程命令行解释访问器(NetCat)、远程控制GUI(VNC、BO、冰河、灰鸽子)、无端口后门(ICMP后门,基于Sniffer非混杂模式或混杂模式的后门)。
(3)自启动后门:Windows通过修改自启动文件、注册表自启动项,Linux修改inittab、rc.d/init.d文件。
(4)木马定义:看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
(5)木马的伪装技术:命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒
4、 僵尸程序与僵尸网络
(1)僵尸程序定义:攻击者用于一对多控制目标主机的恶意代码。
(2)僵尸网络定义:攻击者传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
(3)僵尸网络功能结构:主体功能分为命令控制模块和传播模块,辅助功能分为信息窃取模块、主机控制模块、下载更新模块、防分析检测模块。
(4)僵尸网络类型:IRC僵尸网络(基于IRC互联网实时聊天协议构建)、HTTP僵尸网络(Web网站方式构建)、P2P僵尸网络(P2P协议构建)。
二、实践过程
1. 动手实践任务一
任务:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
- 使用
file
命令可以查看到一个文件的格式和类型等信息。首先打开 WinXP,从学习通上将 RaDa.exe 下载拖入虚拟机。在命令提示符下输入file RaDa.exe
,可以看到 RaDa.exe 为一个32位 Windows 的可执行文件,其标识符代表该文件有 GUI 图形界面;
- 输入
strings RaDa.exe
查看可打印字符串,下图可以看到都是乱码,推测是加壳导致;
- 使用 WinXP 系统内的 PEiD工具进行查壳;
- 打开 RaDa.exe 文件,可以看到文件的入口点:0000FD20、文件偏移:00004120、EP段:JDR1,加壳类型:UPX壳;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
- 使用超级巡警虚拟机脱壳器进行脱壳,选择相应的路径;
- 点击 给我脱,显示脱壳成功,发现生成了一个新文件 RaDa_unpacked.exe;
- 脱壳后,输入
strings RaDa_unpacked.exe
查看可打印字符串,看到大量函数调用名。
(3)使用字符串提取工具,对脱壳后的 rada 恶意代码样本进行分析,从中发现 rada 恶意代码的编写作者是谁?
- 打开 IDA Pro Free,选择脱壳后的文件 rada_unpacked.exe;
- 看到作者为 DataRescue sa/nv,邮箱为 ida@datarescue.com 等信息。
2. 动手实践任务二:分析Crackme程序
任务:在 WinXP Attacker 虚拟机中使用 IDA Pro 静态或动态分析 crackme1.exe 和 crackme2.exe ,寻找特定的输入,使其能够输出成功信息。
- 首先打开 WinXP,从学习通上将 crackme1.exe 和 crackme2.exe 下载拖入虚拟机。检查两个文件的完整性,计算其 md5 值;
- 使用 file 命令查看其文件类型,在命令提示符下输入
file crackme1.exe
和file crackme2.exe
,可以看到 这两个文件都是32位 Windows 下 PE 文件 ;
- 对 crackme1.exe 进行分析,试探输入格式,可以看到在接受一个参数的时候输出信息与其他不同,猜测该程序接受一个参数;
- 点击 反汇编 -> IDA Pro Free -> IDA Pro Free, 用 IDA Pro 分析并查看,过程中部分弹窗选择默认设置,步骤同实验一一致;通过 Strings 窗口可以查看到该程序中出现的明文字符串,可以看到前面的两种输出信息,“Pardon? What did you say?” 和 “I think you are missing something.”,还发现了 “I know the secret” 和 “You know how to speak to programs, Mr. Reverse-Engineer” 这两个字符串。由此猜测,前者就是我们需要的口令,后者就是输入口令正确时程序的输出信息;
- 为了验证我们的猜测,对该软件进行进一步分析。点击 View -> Graphs 查看函数调用图 Function calls 发现:关键的部分在 sub_401280 这里,程序是使用 strcmp 函数来输入的,然后利用 print 和 fprint 函数输出;
- 接着看到
cmp [ ebp+arg_0 ], 2
用来判断程序是否有两个参数;
- 继续分析,可以看到其他几条口令;
- 猜测正确的口令应该是 “I know the secret” ,输入命令
crackme1.exe "I know the secret"
运行改口令,可以得到这样一条回复 “You know how to speak to programs, Mr. Reverse-Engineer” ,猜想得到验证;
- 分析crackme2与分析crackme1过程类似;打开 Function calls 函数调用图,发现关键的部分在 sub_401280 这里;
- 可以看到 sub_401280 内容与上一个文件基本一致,大致可以判断出关键口令为 “I know the secret” ;只是从下图可以看到,代码逻辑中的程序名称改变了,变成了 crackmeplease.exe ;因此需要对程序名称进行修改;
- 输入
copy crackme2.exe crackmeplease.exe
将程序复制并命名为 crackmeplease.exe;输入crackmeplease.exe “I know the secret”
,得到的反馈信息为 “We have a little secret: Chocolate”。
3. 分析实践任务一:
分析过程如下:
- 输入
md5sum RaDa.exe
命令得到其 md5 摘要: “caaa6985a43225a0b3add54f44a0d4c7”,输入file RaDa.exe
, 识别出这是32位GUI文件;
- 打开监视工具 process explorer 开启监听,并运行破壳后的恶意软件 RaDa_unpacked.exe,分析其程序运行详细信息;
- 可以看到该恶意程序通过 HTTP 协议请求 10.10.10.10 RaDa_commands.html ,连接到目标为 10.10.10.10 主机下 RaDa 的网页上;之后又下载和上传文件到 C: \ RaDa\ tmp ;将文件 RaDa.exe 复制到了 C: \ RaDa \ bin 目录下,可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序;往下看可以发现该恶意程序对主机实行了DDos拒绝服务攻击;
- 再往下看发现该恶意程序对主机注册表进行了读写和删除操作;
- 打开注册表,点击HKEY_CURRENT_USER -> Software -> Microsoft -> Windows -> CurrentVersion,查看并未发现有关 RaDa 的信息,该恶意程序已经删除了注册表信息;
- 再往下看到执行了 get(上传)、put(下载)、sleep(休眠)、screenshot(屏幕截图)等命令;查询了数据库相关信息、对应Mac地址等信息;
- 接着使用 IDA Pro Free 对脱壳后的文件 RaDa_unpacked.exe 进行分析,在 Strings 窗口查看相关命令,先将 Type 类型设置为 Unicode 查看字符串,点击这些字符串就可以找到调用的函数;找到 authors 并点击进行定位;
- 发现调用函数为 sub_405E40 并查看,该函数为处理命令参数;
- 在 Function calls 查看,发现函数 sub-40B010,在 flow chart 中找到作者。
分析一个自制恶意代码样本 rada ,回答问题如下:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
文件的摘要是 “caaa6985a43225a0b3add54f44a0d4c7”,这是一个PE可执行文件,使用了UPX加壳工具进行了加壳处理,加壳方式: UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo。
(2)找出并解释这个二进制文件的目的;
该文件下载后门到目标主机,发动DOS攻击,与10.10.10.10主机进行了通信,并查询了Mac地址。
(3)识别并说明这个二进制文件所具有的不同特性;
该文件会修改注册表,将下载的文件存储到C:\RaDa\tmp,并修改注册表跟随系统开机启动:访问 http://10.10.10.10/Rada/Rada_command.html ,还可以解析指令并执行指令。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
采用了UPX加壳技术,直接对文件进行解析会呈现乱码形式,但是能被一键脱壳。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
样本不具有传播和感染的性质,同时没有将自己伪装成有用的程序以欺骗用户运行,因此不属于病毒、蠕虫、木马,应当是一个后门程序或者僵尸程序。
(6)给出过去已有的具有相似功能的其他工具;
木马Bobax、特洛伊木马Setiri、GatSla等。
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
作者为 Raul siles 和 David Perze。使用 ida 或 strings 能查看,或者在非vmware环境下执行–authors参数。
4. 分析实践任务二:
Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用 Snort 工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时 IP 地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
- 因特网中继聊天(Internet Relay Chat),简称IRC。IRC的工作原理非常简单,客户端软件通过因特网以IRC协议连接到IRC服务器上即可。IRC特点是通过服务器中继与其他连接到这一服务器上的用户交流;
- 当IRC客户端申请加入一个IRC网络前要先注册,注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER 、PASS 、NICK 。注册完成后,客户端就使用JOIN信息来加 入频道,格式如下:JOIN ;
- IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。
(2)僵尸网络是什么?僵尸网络通常用于什么?
- IRC语境下的僵尸网络是指IRC机器人连接成的IRC网络;采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络;
- 僵尸网络,是互联网上受到黑客集中控制的一群计算机,往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 首先从学习通下载 botnet_pcap_file.dat 并复制到 kali 虚拟机,用 Wireshark 打开该数据文件,并设置过滤条件
ip.src == 172.16.134.191 && tcp.dstport == 6667
,筛选源地址为蜜罐主机,目的端口为6667的包。看到与蜜罐主机进行通信的五个 IRC 服务器分别为: 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为服务器的僵尸网络?
- 使用 tcpflow 进行分析,在 Kali Linux 环境下,需要先输入命令
apt-get install tcpflow
安装 tcpflow ;
- 进入" /home/kali/Desktop "目录,运行命令
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
获取209.196.44.172与172.016.134.191之间的所有的 IRC 数据包,将分析的结果输出到 report.xml 文件中,产生了两个分流的文件和一个 report 文件,分别是:209.196.044.172.06667-172.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、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
,其中 grep 搜索获取昵称输出行;sed去除前缀;tr 将空格转换为换行;tr -d 删除\r;grep -v 去除空行;sort -u 排序并去除重复;wc -l 输出行数;可以看到一共有3461台主机访问了僵尸网络。
(5)那些IP地址被用于攻击蜜罐主机?
- 蜜罐主机作为诱导主机,进入其流量一般都应当是攻击行为,因此使用 tcpdump 查找连接主机 IP。输入命令
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > lwl.txt;wc -l lwl.txt
,通过 snort 获取所有可能链接的主机 IP 地址写入 lwl.txt ,执行命令统计;
- 打开 lwl.txt 查看,可以看到一共165行,有165个IP地址被用于攻击蜜罐主机。
(6)攻击者尝试攻击了哪些安全漏洞?
- 输入命令
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)号端口响应,该端口是NetBIOS查点。
(7)哪些攻击成功了?是如何成功的?
- 使用 wireshark,逐一对筛选出的 tcp 端口进行排查;首先是135号端口,看到135号端口数据很少,且并没有实际数据交互,猜测是在探测;
- 然后是25号端口,和135号端口类似,只进行了连接,并没有数据的交互,攻击者可能只是对这两个端口进行了 connect 扫描;
- 80号端口使用
tcp.dstport == 80 && ip.dst == 172.16.134.191
筛选,看到数据量很大。首先是IP地址:24.197.194.106,在不停地用脚本攻击IIS服务器的漏洞,从而获取系统权限;
- 接下来是IP地址:210.22.204.101,攻击者想通过缓冲区溢出攻击来获得一个命令行;
- 最后是IP地址:218.25.147.83,可以看到一堆N,猜测是缓冲区溢出攻击;
- 往下看看到
c: \notworm
,查询资料得知这是一个红色代码蠕虫攻击;
- 通过分析80号端口向外的流量,发现蜜罐主机做的几次回应均为一个list服务器的默认页面,所以80号端口攻击失败;
- 139号端口,可以看到有很多连接,但有很多空会话,出现SMB协议,应该是SMB查点,139号端口攻击失败;
- 445号端口,可以看到多次出现了SMB协议,有一个 PSEXESVC.EXE 文件,这个二进制文件主要是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。接着找445的出口流量,发现每个ip地址连入的连接都有响应的回应,并且返回信息中含有 \PIPE\ntsvcs 远程调用,所以攻击者肯定是获得了权限,445号端口攻击成功;
- 4899号端口刚开始只看到单个地址210.22.204.101,4899号端口是一个远程控制软件radmin服务端监听端口,这个软件不是木马,应该是上面攻击成功后上载的这个软件方便控制;
综上,能够看到针对TCP445号端口的 PSEXESVC 蠕虫攻击成功,其他攻击均失败。
三、学习中遇到的问题及解决
-
问题1:安装 tcpflow 时,出现以下错误;
-
问题1解决方案:将网络连接改为桥接模式。
四、实践总结
通过本周实验,我初步掌握了恶意代码检测与分析的核心技能。借助查壳工具识别程序类型、使用脱壳工具破解加密样本,并通过字符串提取挖掘关键行为特征,这些实践让我直观感受到恶意代码的隐蔽性,感觉接触尝试到了一些新的东西,希望后续能够逐步加强攻防领域的一些技能。