20199112 2019-2020-2 《网络攻防实践》第 9 周作业
学习总结及实践内容
恶意代码
- 定义:恶意代码 (Malware, 或 Malicious Code) 指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
- 攻击目标包括但不限于:
-
单纯的技术炫耀,或恶作剧;
-
远程控制被攻击主机,使之能为攻击者的傀儡主机,满足其实施跳板攻击或进一步传播恶意代码的需要;
-
窃取私人信息(如用户账号/密码,信用卡信息等)或机密信息(如商业机密、政治军事机密等);
-
窃取计算、存储、带宽资源;
-
拒绝服务、进行破坏活动(如破坏文件/硬盘/BIOS等)。
-
- 类型:
- 发展趋势:
-
恶意代码的复杂度和破坏力不断增强:从早期简单感染 DOS 操作系统的 Brain 病毒到复杂的内核级后门工具和破坏力强大的蠕虫,恶意代码在快速传播、隐蔽性、破坏力和对抗性上都在不断的发展;
-
恶意代码技术的创新越来越频繁:特别是在最近的几年中,大量的新概念被不断地提出,同时验证这些新概念和新技术的恶意代码也频繁地公布与众;
-
关注重点从计算机病毒转移到蠕虫和内核级的攻击工具:在 20 世纪 80~90 年代,恶意代码的关注重心在于感染可执行程序的计算机病毒,但从最近几年的发展趋势来看,更多的关注焦点已经转移到对整个互联网造成严重危害的僵尸网络、网页木马,以及内核级的高级攻击技术。
-
计算机病毒
1994 年《中华人民共和国计算机安全保护条例》给出了我国对计算机病诗的具有法规效力的定义:“计算机病毒是指编制或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码”。
- 基本特性:感染性、潜伏性、可触发性、破坏性、衍生性。
- 感染及引导机制:可执行文件、引导扇区、支持宏指令的数据文件。
网络蠕虫
网络蠕虫 (Worm) 是一种通过网络自主传播的恶意代码,它的出现相对于传统计算机病毒和木马、后门来说比较晚,但无论从传播速度、传播范围还是破坏程度上来讲,都是以往的恶意代码所无法比拟的。
- 基本特性:
- 有效载荷:
-
植入后门:使得攻击者可以远程完全控制目标系统,最有效的后门可以使用 Rootkit 技术隐藏在目标系统中,以保证攻击者长期的控制;
-
安装分布式拒绝服务攻击代理:等待攻击者命令,对一些互联网在线主机或服务实施分布式拒绝服务攻击;
-
组建僵尸网络:植入僵尸程序,所有被蠕虫侵占的主机将连接到一个僵尸网络中,从而被攻击者更有效地控制,并灵活地依据攻击者命令进行各种攻击行为;
-
执行一个复杂的计算:有时蠕虫编写者的目标仅仅是通过传播蠕虫掌握更多的计算资源,构造出一个分布式虑拟超级计算机,来执行一些特殊复杂计算,如破解强力密码,解决数学计算难题等。
-
后门和木马
后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道;而木马作为特洛伊木马的简称,是指一类看起来具布某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
后门工具能够为攻击者提供多种不同类型的访问通道:
-
本地权限提升和本地账号:使得攻击者能够将其权限等级提升为系统管理员,或者新增一个本地账户,有了这些用户权限,攻击者可以任意访问系统及其文件;
-
单个命令的远程执行:攻击者可以通过此类后门单独执行一个命令,并获得命令运行结果;
-
远程命令行解释器访问:即远程 Shell, 这类后门允许攻击者通过网络快速直接地输入能够在目标系统上运行的 Shell 命令,并获得运行结果。此类后门工具最著名的有“瑞士军刀”之称的 Netcat;
-
远程控制 GUI:能够以图形化界面的方式来访问目标系统,并提供较远程 Shell 功能更多,更简单易用的访问接口,如可以让攻击者看到远程目标系统的操作桌面,控制鼠标移动和键盘输入,访问文件系统,甚至控制远程摄像头等。此类后门工具包括 VNC、BO 和我国的冰河、灰鸽子等;
-
无端口后门:可以无须打开 TCP 或 UDP 监听端口的无端口后门,具体包括 ICMP 后门,基于 Sniffer 非混杂模式的后门,基于 Sniffer 混杂模式的后门等。
恶意代码分析
恶意代码分析的技术方法主要包括静态分析和动态分析两大类。
- 静态代码分析方法在不实际执行软件代码情况下对恶意代码进行自动化或辅助分析,通常包括使用反病毒引擎扫描识别已知的恶意代码家族和变种,逆向分析获取恶意代码的关键程序信息、模块构成、内部数据结构和关键控制流程,理解恶意代码的机理,并提取特征码用于检测。
- 动态代码分析方法则通过在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。
-
反病毒软件扫描:进行恶意代码分析最直接的方法是使用现成的反病毒软件来扫描待分析的样本,以确定反病毒软件是否能够识别该样本,以及所识别的类型、家族、变种等信息。利用反病毒软件进行扫描的方法充分利用了反病毒业界对恶意代码样本的积累性专业知识、经验和分析实践,能够为你自己的分析提供一些有用的信息帮助。
-
字符串提取分析:字符串提取分析是代码静态分析中非常简单但是很有用的一环,利用一些专用的字符串提取工具,我们可以彻底地搜查目标程序,并提取出程序中 3 个或更多的连续可打印字符所组成的全部字符串,这些字符串中通常包含了很多可用于理解程序行为的信息内容,通过进一步的分析和查找,将对进一步的恶意代码分析提供更多的参考信息。
-
二进制结构分析:大部分以二进制文件形式存在的恶意代码,如可执行程序、动态链接库、内核驱动模块、静态程序库等,其生成过程是高级语言源代码的通常的编译和链接过程,由编译器将源代码文件转换为可执行指令序列代码,并进一步由链接器将目标文件中的各种函数和需要的库链接在一起。从而形成能够直接运行或者调用的二进制文件。
-
反汇编 (Disassemble) 与反编译 (Decompile):反汇编与反编译是对二进制程序编译链接的逆过程,反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程,而反编译则更进一步,期望将汇编代码再进一步还原成高级编程语言形式的源代码。
动手实践:恶意代码文件类型识别、脱壳与字符串提取
实践任务:对提供的 rada 恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得 rada 恶意代码的编写作者,具体操作如下:
- 使用文件格式和类型识别工具,给出 rada 恶意代码样本的文件格式、运行平台和加壳工具。
- 使用超级巡警脱壳机等脱壳软件,对 rada 恶意代码样本进行脱壳处理。
- 使用字符串提取工具,对脱壳后的 rada 恶意代码样本进行分析,从中发现 rada 恶意代码的编写作者是谁?
以下实验环境选择 WinXPattacker。
首先查看该文件的文件类型:
file RaDa.exe
可以知道这是一个有图形化界面(GUI)的 Win32 PE(可移植可执行)程序。
接着使用 PEiD 工具查看文件加壳类型。
加壳的原因一是为了压缩大小,二是为了增加逆向难度。
可知该文件加了 UPX 壳(关于 UPX 压缩壳的参考资料详见参考文献)。
这里附上 UPX 加壳工具官网:https://upx.github.io
接下来使用超级巡警进行脱壳。
接着使用 IDA Pro Free 反汇编脱壳后的文件:
分析的结果基本都是汇编代码。
从这里猜测程序可能是用老古董 VB 6.0 写的:
动手实践:分析 Crackme 程序
实践挑战:使用 IDA Pro 静态或动态分析 crackme1.exe 和 crackme2.exe,寻找特定的输入,使其能够输出成功信息。
实验环境同上。
首先进行参数猜测,发现一个参数输入与其他的参数输入得到的输出明显不一样,所以可以猜测这个程序的输入是一个参数。
使用 IDA 进行分析。通过 Strings 窗口可以查看该程序中出现的字符串,我们发现了前面的两种反馈信息,I think you are missing something.
和Pardon? What did you say?
,这两个我们之前已经见过了,很容易猜测,第一个是参数不对的返回情况,第二个是给的参数数量对了,但是具体的内容不对。
查看整个程序的 call flow:
注意到了上图两个曾经在 C 语言中学过的字符串函数,那么调用它们的函数sub_401280
就值得关注了。
接下来开始查看sub_401280
的汇编代码,在程序上方工具栏定位该字符串:
上图倒数第二行cmp [ebp+arg_0],2
为判断程序是否有两个参数。
在 C 语言中,主函数通常为int main(int argc,const char **argv)
,即第一个参数argc
对应argv
的大小,第二个参数对应命令行的格式。如在命令行输入crackme1.exe 1
,那么参数对应的值为argc=2,argv={”crackme1.exe”,”1”}
。
再往下看,很容易找到:
显然,正确的口令应该是I know the secret
,测试一下吧:
有了上述分析经验,那么对于程序 crackme2.exe 的分析过程是大同小异的。
需要注意的是,从下图可以看到,代码逻辑中判断了程序名称,因此需要对程序名称进行修改。
测试结果:
实践作业
样本分析实践:分析一个自制恶意代码样本 rada,并撰写分析报告
本次实践作业的任务是分析一个自制的恶意代码样本,以提高对恶意代码逆向工程分析技术的认识,并提高逆向工程分析的方法、工具和技术。关于这个二进制文件,我们创建它的目的是为了提高安全业界对恶意代码样本的认识,并指出为对抗现在的恶意代码威胁发展更多防御技术的必要性。你作为一名安全事件处理者的任务(如果你接受的话)就是深入分析这个二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采取的恶意代码分析技术。
待分析二进制文件位置:rada.zip,警告 这个二进制文件是一个恶意代码,因此你必须采用一些预防措施来保证业务系统不被感染,建议在一个封闭受控的系统或网络中处理这个未知的实验品。
回答问题:
- 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
- 找出并解释这个二进制文件的目的。
- 识别并说明这个二进制文件所具有的不同特性。
- 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
- 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
- 给出过去已有的具有相似功能的其他工具。
- 可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
首先查看摘要和文件类型:
该程序在第一个实践中已经被脱壳了,脱壳后的文件名称为RaDa_unpacked.exe
。
接下来使用 IDA 对其进行分析。
进入 Strings 对话框,在 Type 右键点击 Setup,设置类型为 Unicode。
可以看到命令行参数:
还可以看到一个 IP 地址,双击定位:
应该是该程序被执行后访问了这个地址。
根据线索分析,得到 RaDa_commands.html 这个字符串极其重要。能寻找到这个字符串对应的函数是sub_404FB0
,进入这个函数,看黄色部分的汇编代码,很容易知道他是被拷贝到dword_40C030
这个变量中了。还能看到很多其他的字符串拷贝(这些字符串就是默认的一些值)。
找到dword_40C030
变量对应的函数sub_4052C0
,找到这个函数,并且打开其Call Graph
方便查看。
我们看到判断了三个网段分别为192.168.
、172.16.
、10.
,这是三个私有网段,也就是说确保服务器在私有网段中,然后到服务器去取命令文件。
下面就是一些具体的命令以及其功能:
问题回答如下:
Q:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
A:摘要为caaa6985a43225a0b3add54f44a0d4c7
;Win32 PE 加 UPX 壳 GUI 文件。
Q:找出并解释这个二进制文件的目的。
A:攻击者可以完全控制该系统,是一个后门程序。
Q:识别并说明这个二进制文件所具有的不同特性。
A:会请求 Web 服务器;解析获得的指令并执行。
Q:识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
A:UPX 压缩技术。
Q:对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
A:不具有传播和感染的性质,所以不是病毒和蠕虫;也没有将自己伪装成有用的程序以欺骗用户运行,不是木马。是一个后门程序。
Q:给出过去已有的具有相似功能的其他工具。
A:Bobax、Setiri
Q:可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
A:Raul siles 和 David Perze
取证分析实践:Windows 2000 系统被攻陷并加入僵尸网络
难度等级:中级,案例分析挑战内容:
在 2003 年 3 月初,Azusa Pacific 大学蜜网项目组部署了一个未打任何补丁的 Windows 2000 蜜罐主机,并且设置了一个空的管理员密码。在运营的第一个星期内,这台蜜罐主机就频繁地被攻击者和蠕虫通过利用几个不同的安全漏洞攻陷。在一次成功的攻击之后,蜜罐主机加入到一个庞大的僵尸网络中,在蜜罐主机运营期间,共发现了 15164 个不同主机加入了这个僵尸网络。这次案例分析的数据源是用 Snort 工具收集的该蜜罐主机 5 天的网络流日志,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时 IP 地址和一些其他的特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。你的任务是分析这个日志文件并回答以下给出的问题。
- IRC 是什么?当 IRC 客户端申请加入一个 IRC 网络时将发送哪个消息?IRC 一般使用哪些 TCP 端口?
- 僵尸网络是什么?僵尸网络通常用于什么?
- 蜜罐主机(IP 地址:172.16.134.191)与哪些 IRC 服务器进行了通信?
- 在这段观察期间,多少不同的主机访问了以 209.196.44.172 为服务器的僵尸网络?
- 哪些 IP 地址被用于攻击蜜罐主机?
- 攻击者尝试攻击了哪些安全漏洞?
- 哪些攻击成功了?是如何成功的?
Q:IRC 是什么?当 IRC 客户端申请加入一个 IRC 网络时将发送哪个消息?IRC 一般使用哪些 TCP 端口?
A:
-
因特网中继聊天(Internet Relay Chat),简称 IRC。IRC 的工作原理非常简单,只需要在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台 IRC 服务器上即可。IRC 特点是通过服务器中继与其他连接到这一服务器上的用户交流。
-
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。
-
IRC 服务器明文传输通常在 6667 端口监听,也会使用 6660—6669 端口。SSL 加密传输在 6697 端口。
Q:僵尸网络是什么?僵尸网络通常用于什么?
A:僵尸网络是攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络;它是互联网上受到黑客集中控制的一群计算机,往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
Q:蜜罐主机(IP 地址:172.16.134.191)与哪些 IRC 服务器进行了通信?
A:
使用 Wireshark 打开被分析的日志文件,设置以下过滤条件:
ip.src == 172.16.134.191 && tcp.dstport == 6667
可以找到所有与蜜罐主机进行通信的 IRC 服务器。
Q:在这段观察期间,多少不同的主机访问了以 209.196.44.172 为服务器的僵尸网络?
A:
使用终端,读取文件,筛选 host 和端口 6667 后进行分流,生成一个 report 文件和两个分流的文件:
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
接着执行以下两条命令,避免出现字符编码问题。
export LC_COLLATE='C'
export LC_CTYPE='C'
接着执行如下指令进行搜索有多少主机连接:
cat 209.196.044.172.06667-172.016.134.191.01152 | grep "^: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
去除前缀,g
表示全局tr
将空格转换为换行tr -d
删除\r
grep -v
就是NOT
指令,去除空行sort -u
排序并去除重复wc -l
输出行数
共找到了 3457 个记录,表示总共有 3457 个主机访问了以 209.196.44.172 为服务器的僵尸网络。
Q:哪些 IP 地址被用于攻击蜜罐主机?
A:
使用下面的指令查找端口并输出到 1.txt 中,如下图,查找到 148 个被攻击的端口。cut -d
是指定字段的分隔符,uniq
命令用于检查及删除文本文件中重复出现的行列,一般与sort
命令结合使用。
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
使用下面的指令找出所有的可能连接的主机的 IP 地址。这个指令的作用就是将连接 IP 地址输出到 2.txt 中,我们看到总共有 165 个主机可能被用于入侵蜜罐。其中awk -F
就是指定分隔符,可指定一个或多个,print
后面做字符串的拼接。
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 > 2.txt;wc -l 2.txt
Q:攻击者尝试攻击了哪些安全漏洞?哪些攻击成功了?是如何成功的?
A:
攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用
snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii
指令先查一下网络流分布情况,发现大部分都是 TCP 包,有一部分 UDP 包,首先应该筛选出响应的 TCP 端口和 UDP 端口。
利用下面的指令筛选出蜜罐主机相应的 TCP 端口。
输出可以看到 TCP 响应端口为 135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin),80(http)。
同样,将指令协议部分改成 udp 就可以查询 udp 端口响应,我们能查到仅有 137(netbios-ns) 号端口响应。
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
-
udp 137
号端口,这个是在局域网中提供计算机的 IP 地址查询服务,处于自动开放状态,所以访问这个端口肯定就是 NetBIOS 查点了。 -
tcp 135
号端口和25
号端口,我们看到只是进行了连接,但是是没有数据的交互的,所以这攻击者可能是对这两个端口进行了connect扫描。
-
TCP 80
端口,筛选:
tcp.dstport==80 && ip.dst == 172.16.134.191
连接最多的就是24.197.194.106
这个 IP,他的行为就是不停的用脚本在攻击 IIS 服务器的漏洞,从而获取系统权限,正是因为用的脚本,所以才会有这么多记录。
-
68.169.174.108
和192.130.71.66
访问的 80 端口是正常的 HTTP 访问。 -
210.22.204.101
访问的 80 端口,攻击者是想通过缓冲区溢出攻击来获得一个命令行:
-
最后一个访问 80 端口的是
218.25.147.83
,看到 c:\notworm,这是一个红色代码蠕虫攻击。
-
最后就是看 80 端口有没有攻击成功了,通过蜜罐主机 80 端口向外的流量进行分析,发现蜜罐主机做的几次回应均为一个 iis 服务器的默认页面,所以 80 端口的这些攻击均失败。
-
接下来是
TCP 139
号端口。大部分都是连接,然后很多空会话,同样这个也没有成功,这个应该是 SMB 查点。
-
TCP 4899
端口。只有一个 IP 访问过,即 210.22.204.101。可以查得 4899 端口是一个远程控制软件 radmin 服务端监听端口。
学习中遇到的问题及解决
Q:曾经学的汇编语言现在忘得一干二净,很多指令不理解(可能当时就没学懂..)
A:参考了大佬的分析过程和网上的一些教程
Q:对实践中相关的 Linux 命令不了解
A:查资料,慢慢学
Q:有没有更快的匹配字符串的方式
A:看了几位神仙的博客,发现正则表达式是个好东西,要深入学习
总结
分析日志真的难,值得深入拓展的知识太多了,也没办法一口气都消化,还是得靠平时多积累。
如果不看大佬的教程是真的做不下去。