20199126 2019-2020-2 《网络攻防实践》第9周作业
前言
这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里:https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10695
我在这个课程的目标是:学习网络攻防技术相关知识,掌握相关技能。
这个作业在哪个具体方面帮助我实现目标 :初步学习恶意代码基础知识和分析方法。
1.实践内容
1.1 恶意代码基础知识
1.1.1 恶意代码定义与分类
- 恶意代码定义:使计算机按照攻击者的意图执行以达到恶意目标的指令集
- 恶意代码类型:根据其执行方式、传播方式和对攻击目标的影响分为计算机病毒、蠕虫、恶意移动代码、特洛伊木马、后门、僵尸程序、内核套件或者以上混合的融合型恶意代码等。
- 恶意代码的命名规则与分类体系
1.1.3 计算机病毒
-
1994年《中华人民共和国计算机安全保护条例》定义:计算机病毒是指编制或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码。
-
基本特性:
- 感染性
- 潜伏性
- 可触发性
- 破坏性
- 衍生性
-
计算机病毒的感染及引导机制:计算机病毒潜在的感染目标可分为可执行文件、引导扇区、支持宏指令的数据文件三大类
- 引导扇区:由于计算机启动过程中需要通过BIOS定位到磁盘主引导区,从其上的主引导记录定位到第一个活动分区,而其中的记录负责装载操作系统,病毒感染引导区就是为了利用引导记录在操作系统启动前截取系统控制权。
- 支持宏指令的数据文件:这类文件中包含执行代码,成为宏指令,病毒感染这类文件后将自己以宏指令的方式写入数据文件中,在文件被使用时执行宏病毒体。
-
计算机病毒的传播渠道:移动存储、电子邮件及下载、共享目录等。
1.1.4 网络蠕虫
- 定义:一种可以自我复制的代码,并且通过网络传播,通常无须人为干预就能传播。
- 基本特性:
- 组成结构:
- “弹头”:用于获得计算机访问权的渗透攻击代码
- 传播引擎:用于蠕虫样本的传播,一些蠕虫直接在弹头中装载全部代码,不需要这部分。
- 目标选择算法和扫描引擎:目标选择算法用于在受害计算机中寻找新的攻击目标,扫描引擎确定新的攻击目标是否可以被攻击。
- 有效载荷:附加的攻击代码,用于执行一些特殊目的,如植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行复杂计算。
1.1.5 后门与木马
两者常常融合在一起使用
- 定义:后门是允许攻击者绕过系统常规安全控制机制的程序,能够安装攻击者自己的意图提供 访问通道;木马为掩盖着一些隐藏恶意功能的程序,重点在于伪装为良性程序,可以说有些木马实现了后门的功能。
1.1.6 僵尸程序与僵尸网络
- 定义:僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。基本特性是使用一对多的命令与控制机制,还具有恶意性和网络传播性。
- 功能结构:最早的IRC僵尸网络由僵尸网络控制器(botnet controller)和僵尸程序组成。
- IRC僵尸网络的工作机制如下
- 僵尸程序的命令与控制机制包括:基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制、基于P2P协议的命令与控制机制。
1.1.7 Rootkit
- 定义:一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
- 用户模式Rootkit
- 针对UNIX平台的用户模式Rootkit:其上集成的工具分为提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、安装脚本等。
- 针对Windows平台的用户模式Rootkit
- 内核模式Rootkit
1.2 恶意代码分析方法
1.2.2 恶意代码分析环境
- 恶意代码发烧友的分析环境
- 基于虚拟化构建恶意代码分析环境
- 用于研究的恶意代码分析环境
1.2.3 恶意代码静态分析技术
- 反病毒软件扫描:常用国产软件:瑞星、金山、江民、360等;常用外国软件:卡巴斯基、诺顿、ESET Nod32、趋势等;集成全世界数十款知名反病毒引擎的VirusTotal。
- 文件格式识别:恶意代码通常以二进制可执行文件格式存在,或者脚本文件、带有宏指令的数据文件、压缩文件等。Windows平台上二进制可执行文件EXE和DLL以PE文件格式组织,Linux上可执行文件格式为ELF。
- 字符串提取分析:可能获得的有用信息内容包括如下
- 恶意代码实例名
- 帮助或命令行选项
- 用户会话
- 后门口令
- 相关URL信息、E-mail地址
- 包含库文件和函数调用
- 二进制结构分析:大部分已二进制文件形式存在的恶意代码的生成过程是高级语言源代码的通常的编译和链接过程,这些过程在结果代码中会留下大量有用信息。利用类UNIX中的实用工具binutils可以查看这些信息,binutils还提供了nm和objdump。
- 反汇编(Disassemble)与反编译(Decompile):反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程;反编译期望将汇编代码进一步还原成高级编程语言形式的源代码。
- 常用的反汇编软件:IDA Pro、Ollydbg、W32Dasm、VC++等
- 代码结构与逻辑分析
- 加壳识别与代码脱壳:在对恶意代码进行静态分析的过程中,往往会遭遇到恶意代码使用各种加壳技术进行恶意目的的隐藏于对抗分析的情况。恶意代码常用的加壳混淆机制包括加密、多样性、多态和变形等。常用加壳软件包括UPX、PEPack、ASPack、PECompact等。加壳识别可用PEiD、pe-scan、PE Sniffer、fileinfo、Exeinfo PE、DiE、FastScanner、FFI等文件格式识别工具。
1.2.5 恶意代码动态分析技术
- 在代码分析过程中,恶意代码分析实验环境一定要与业务网络和互联网完全断开,并在分析完之后尽快恢复恶意代码运行平台,已清除恶意代码所遗留的文件和系统影响。
- 在本地系统中运行恶意代码,需要各种动态分析监控技术和工具
- 恶意代码动态分析的主要技术包括快照对比、系统动态行为监控、网络协议栈监控、沙箱、动态调试等
- 快照对比:对原始系统资源列表做一个快照,然后激活恶意代码,对充分运行后的系统资源列表再做一个快照,对比两者差异来发现恶意代码造成的影响
- 系统动态行为监控:实时监视记录显示恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的动作
- 网络协议栈监控方法:用另一台主机进行远程端口扫描并与本地网络协议栈的端口检测结果进行对比,分析其隐藏行为。
- 沙箱技术:提供受限制的执行环境
- 动态调试技术:在程序运行时刻对其执行过程进行调试(debugging)。常用动态调试器软件包括Windows的开源Ollydbg软件、windbg、IDA Pro、SoftICE等;类UNIX平台下的gdb、systrace、ElfShell等。
2.实践过程
2.1 恶意代码文件类型识别、脱壳与字符串提取
- 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
- 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中分析rada恶意代码的编写作者是谁?
首先使用file RaDa.exe
查看文件类型,可知该软件是运行在32位Windows上的带图形界面的可执行软件,处理架构为32位Intel 80386
然后使用PEiD来查看该软件的加壳工具,可知为UPX加壳工具
使用超级巡警脱壳器进行脱壳
再用PEiD可以看到该软件开发工具为VB5.0/6.0
查找该代码的编写作者,我首先想使用strings RaDa_unpacked.exe
对脱壳后的代码查看可打印字符,可是太多了
接着就像到直接查找含Copyright
的字符串,什么都没找到
最后只好使用Process Explorer
,直接运行RaDa_unpacked.exe查看可打印字符串,如下,能看到从连接的服务器上传回的版权所有者。
2.2 分析Crackme程序
首先使用file
命令查看文件类型,可以看到两者都是控制台程序
首先对crackme1进行试验,使用单输入、多输入、字符串输入,可以看到有两种返回
使用IDA进行分析
分析字符串信息,有4句正常语义的话,以及下面还有个gcc,可以判断该软件由C语言编写。
查看程序结构,可以看到sub_401280
下有两个输出和一个strcmp
,猜测该模块用于对输入产生不同结果,如果两个输入对应前面测试的话,strcmp
可能就是正确密码
将前面那4句中另外两句作为输入,可以看到“I know the secret”是正确密码
分析crackme2,同样看字符串,这次有5句,“I know the secret”很可能还是密码
“crackmeplease.exe”有些奇怪,“exe”疑似指向另一个软件,或者说执行时的软件名,查看该字符串出现的位置,以及疑似密码字符串的出现位置
mov eax,[ebp+arg_4]
的意思应该是将[ebp+arg_4]
移动到eax
,而arg通常是程序信息,[ebp+arg_4]可能真是文件名,咱们改名试试
成功了
2.3 分析一个自制恶意代码样本rada,并撰写分析报告
首先md5sum RaDa.exe
取得文件摘要
然后像2.1那样先对其进行脱壳,然后开启wireshark和Process Explorer,运行脱壳后的程序RaDa_unpacked.exe
将Process Explorer查到的可打印字符串输出进行分析
重头开始,看到程序连接了远程服务器
利用wireshark监听,可以看到程序每隔一段时间就会发送ICMP报文,应该是为了与10.10.10.10
保持连接。
连接上服务器后,程序在C:\RaDa\tmp
下载了什么
在C:\RaDa\bin
创建了RaDa.exe,在此之前在开机运行的注册表里加入了RaDa
进行DDoS攻击,不过下面的字符串也没有写什么有用的攻击指令,然后使用shell进行了注册表写、读、删除操作
还写了RaDa使用文件,RaDa正确配置文件
还写SQL查询语句,虽然不知道在哪里用了
最后回答下列问题
1、此二进制文件摘要,帮助识别同一样本的信息
- MD5:caaa6985a43225a0b3add54f44a0d4c7
- 文件格式:PE32 executable for MS Windows (GUI) Intel 80386 32-bit
- 使用UPX加壳工具
- VB5.0/6.0编写
2、此二进制文件目的:从远程服务器下载所需文件,建立后门
3、此二进制文件所具有的不同特性:运行时建立远程连接并一直维持连接,修改注册表,下载文件至C盘。
4、此二进制文件所采用的防止被分析或逆向工程的技术:使用UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
加壳工具
5、应该是后门,首先它不伪装自己,不是木马,而且似乎没有传播模块,也不是计算机病毒或蠕虫,从它接受远程连接传递的指令认为其为后门程序。
6、海阳、rootkit、devil5
7、从2.1中已经得到了Copyright为2004 Raul Siles & David Perez
2.4 Windows 2000 系统被攻陷并加入僵尸网络
1、IRC:一种网络聊天方式,使用IRC协议连接IRC服务器就可以进行聊天;当一个IRC客户端申请加入一个IRC网络的时候将发送用户名、昵称;IRC一般使用6660-6669端口,用6667进行明文传输
2、僵尸网络是什么?僵尸网络通常用于干什么?
僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络;其通常用来发动大规模网络攻击。
3、根据前面设置过滤条件
共有209.126.161.29
、66.33.65.58
、63.241.174.144
、209.196.44.172
、217.199.175.10
,5个IRC服务器。
4、先使用tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"
筛选出以6667端口访问了目标的主机
然后想用grep,但是通过前面2.1看到好像它只能筛选控制台本身能够显示的字符串,否则对生成的209.196.044.172.06667-172.016.134.191.01152
文件进行筛选应该可以获得结果,命令为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。
5、
这里借用别人设计的指令,可以看到有148个被攻击的端口,通过将连接过的地址输出可以确认有165个主句可能入侵了蜜罐
3.实践总结
这章的内容比较多,对于僵尸网络的攻击行为也比较复杂,需要进一步学习