20199119 2019-2020-2 《网络攻防实践》第9周作业
恶意代码安全攻防
1 实践内容
基础知识
恶意代码定义与分类
- 恶意代码:使计算机按照攻击者的意图执行以达到恶意目的的指令集。
计算机病毒
- 计算机病毒基本特性
- 感染性:指的是计算机病毒具有吧自身复制到其他程序中的特性。
- 潜伏性:计算机病毒一旦感染目标程序后,一般情况下除了感染外,并不会立即进行破坏行为,而是在系统中潜伏。
- 可触发性:在满足特定的触发条件后,激活其感染机制或破坏机制。
- 破坏性:在触发后会执行一定的破坏性动作来达到病毒编写者的目标。
- 衍生性:计算机病毒的编写者或者其他了解此病毒的人可以根据其个人意图,对某一个已知的病毒程序作出修改,从而衍生出另外一种或多种病毒变种。
计算机病毒的传播机制:包括移动存储、电子邮件及下载、共享目录等
网络蠕虫
- 定义:是一种能够给网络自主传播的恶意代码。出现较晚,但传播速度、传播范围和破坏程度都是其他恶意代码无法相比的。
组成结构
- 弹头:为了侵占一个目标系统,蠕虫必须首先获得计算机的访问权,它可以使用一些渗透攻击代码作为“弹头”,侵入目标系统,为了能够占领更多的系统,蠕虫可以利用目标系统尽可能多的安全漏洞实施攻击。
- 传播引擎:在通过“弹头”获得目标系统的访问权之后,蠕虫必须传输自身复制样本到目标系统上,一些蠕虫能够在弹头攻击的通道中同时装载全部代码。传播引擎通常利用的网络传输机制包括文件传输协议FTP、小文件传输协议TFTP、超文本传输协议HTTP,服务信息块协议SMB以及原始SOCKET套接字。
- 目标扫描算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。
- 有效载荷:蠕虫的有效载荷就是附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作。除了没有有效载荷的蠕虫之外,其他蠕虫常常携带的有效载荷有植入后面、安装分布式拒绝服务攻击代理、组建僵尸网络等等。
后门与木马
- 后门:允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供访问通道
- 后门工具提供的访问通道:
- 本地权限提升和本地帐号
- 单个命令的远程执行
- 远程命令行解释器访问
- 远程控制GUI
- 无端口后门
- 后门工具常利用自启动文件夹(C:\Documents and Settings[user_name]\Start Menu\Programs\Startup)、注册表自启动项(HKLM\Software\Microsoft\Windows\CurrentVersion\Run键值)及预定计划任务来达到自启动效果。
- 木马:一类看起来具有某个有用或善意目的,实际掩盖着一些隐藏恶意功能的程序
- 目的:欺骗用户安装以及隐藏在正常程序中,与后门工具结合形成木马后门
僵尸程序与僵尸网络
- 攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
- 功能结构 僵尸网络控制器、僵尸程序
- 传播策略:自动传播型僵尸程序和受控传播型僵尸程序
- 传播方式:远程攻击软件漏洞传播、实现僵尸网络特性扫描NetBIOS弱密码传播、实现僵尸网络特性扫描恶意代码留下的后门传播、实现僵尸网络特性发送邮件病毒传播、实现僵尸网络特性文件系统共享传播、结合即时通信软件和P2P文件共享软件进行传播
Rookit
- 一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
- 用户模式Rootkit:修改操作系统用户态中用户和管理员所使用的一些内建程序和库文件
- 内核模式Rootkit:直接攻击操作系统内核,修改内核隐藏自身
- 虚拟机模式Rootkit
- Windows平台实现用户模式Rootkit技术
- 使用Windows平台提供的开发接口将自身实现的恶意功能逻辑插入Windows函数
- 修改注册表中HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\目录下的SFCDisable键值关闭或修改备份文件目录Dllcache路径位置破坏WFP机制(WFP机制用来防止关键文件被修改替换)
- 使用DLL注入和API挂钩技术把恶意代码直接加入运行进程的内存空间。
- 内核Rootkit使用技术:
- 文件和目录隐藏
- 进程隐藏
- 网络端口隐藏
- 混杂模式隐藏
- 改变执行方向
- 设备截取和控制
恶意代码分析方法
代码分析:又称程序分析,是按需求使用的一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
- 恶意代码分析技术的方法
- 静态分析:在不实际执行软件代码情况下对恶意代码进行自动化或辅助分析,通常包括使用反病毒引擎扫描识别已知的恶意代码家族和变种,逆向分析获取恶意代码的关键程序信息、模块构成、内部数据结构和关键控制流程。主要技术手段:反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。
- 动态分析:通过在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。主要技术手段:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试。
2 实践过程
使用共享文件夹将rada添加进虚拟机,在cmd中切换到恶意程序所在的目录,使用 file
命令查看 RaDa.exe
的文件类型,可以看到 RaDa.exe
是一个 Windows PE 可执行文件,并且有图形化窗口
使用 PEiD工具查看 RaDa.exe
的基本信息(PEiD是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳)
可以看到文件的入口点、偏移、文件类型、EP段、汇编程序以及加壳类型(UPX壳),使用 strings RaDa.exe
命令查看 RaDa.exe 中可打印字符串
使用超级巡警工具对文件进行脱壳,该工具有这个壳的样本库,自动脱壳并在恶意程序同目录下生成了一个脱壳以后的程序
用 strings RaDa_unpacked.exe
查看脱壳后的RaDa.exe,可以看到产生大量函数调用名以及其他有用字符串,但是并未查找到作者信息,于是打开监视工具 process explorer
,这是进行进程监控的一个程序,当打开这个工具,同时运行恶意程序,在进程监控里点击该恶意程序, 查看详细信息,可发现恶意程序的作者信息
对 crackme1.exe 进行分析
在cmd中尝试运行该程序,试探其输入格式
可以发现,在接受1个参数时,程序的反馈不同,所以先猜测该程序接受一个参数。
接着我们使用 IDA pro
工具来打开 crackme1.exe
进行分析,选择文件类型为PE。通过 Strings 页面可以查看到该程序中出现的明文字符串,发现了刚刚测试之外的两个字符串 I know the secret
和 You know how to speak to programs, Mr.Reverse-Engineer
。猜测前者是我们需要的口令,后者是输入口令正确时程序的反馈信息。
看函数调用图
可以得出结论:程序是用 C 语言写的,可以发现字符串比较函数 strcmp
和输出函数 fprintf
和 printf
,关键部分就在 sub_401280
函数中
打开 sub_401280
函数的流程图
cmp [ebo+arg_0],2
为判断程序是否有两个参数。如在命令行输入 crackme1.exe 1
,那么参数对应的值为 argc=2,argv={”crackme1.exe”,”1”}
。如果有两个参数,那么进行下一步判断,程序用 I know the secret
对应的字符串和用户输入的口令相比较,通过比较的结果反馈口令是否正确。
crackme2.exe分析
使用 IDA pro
工具来打开 crackme2.exe
进行分析,可以看到明文字符串如下:
看函数调用图,发现核心函数还是 sub_401280
查看 sub_401280
cmp [ebp+arg_0],2
判断程序参数是否为两个;通过参数个数的判断后,接着用strcmp函数对argc里面的第一个字符串,即程序名,和 crackmeplease.exe
进行判断,通过程序名判断后,用户输入的口令与 I know the secret
判断
进行测试:
样本分析实践:分析一个自制恶意代码样本rada
任务:分析一个自制的恶意代码样本,以提高对恶意代码逆向工程分析技术的知识,并提高逆向工程分析的方法、工具和技术。深入分析二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采取的恶意代码分析技术。
开之前用过的监视工具 process explorer
和 wireshark
开启监听,并运行恶意程序RaDa.exe,分析其程序运行详细信息
通过HTTP协议请求 10.10.10.10\RaDa\RaDa_commands.html
,连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页,之后又下载和上传文件到 C:/RaDa/tmp
。
将文件 RaDa.exe
复制到了 C:\RaDa\bin
目录下,可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序。往下看可以发现该恶意程序对主机实行了DDos拒绝服务攻击
再往下看可以发现该恶意程序对主机的注册表进行了读写和删除操作。
再往下看可以看到一些指令,exe
在宿主主机中执行指定的命令, get
下载, put
上传, screenshot
截屏, sleep
休眠。
用wireshark监听的数据分析一下,可以看到受害主机向目标主机10.10.10.10发送了大量的数据包
这个二进制文件摘要信息:
- MD5摘要信息:
caaa6985a43225a0b3add54f44a0d4c7
- PE格式:运行在Windows 2000, XP and 2003及以上版的操作系统中
- 使用了UPX加壳工具进行了加壳处理
2.这个恶意文件的目的
该文件是一个http后门程序,当连接上互联网时,该程序就会通过http请求连接到指定主机,进行接受攻击者指令操作
3 识别并说明这个二进制文件所具有的不同特性
- 该程序启动之后将自己复制到c盘之中,并且每过一段时间就会尝试与10.10.10.10建立tcp连接。
4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
该文件使用了UPX加壳,不经过脱壳处理是无法进行反编译分析的,直接提取的字符串信息为乱码。
5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
判定其为后门程序,该程序执行需要通过攻击者远程发送指令,此外,并未发现该程序会自我复制和传播,也没有将自己伪装成其他程序,不符合木马和病毒的特征,因此判定为后门。
6 给出过去已有的具有相似功能的其他工具
- Bobax——2004也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。
7 可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可能,使用进程监视工具分析该恶意程序即可找到作者信息。
取证分析实践:Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题
1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
- IRC是Internet Relay Chat的英文缩写,中文一般称为互联网中继聊天。IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
- IRC是一种公开的协议,采用TCP和SSL协议。一个IRC服务器可以连接其他的IRC服务器以扩展为一个IRC网络。
- IRC用户通过客户端软件和服务器相连。大多数的IRC服务器不需要客户注册登录,但在连接前必须设定好昵称(nickname)。IRC是一个分布式的客户端/服务器结构。通过连接到一个IRC服务器,我们可以访问这个服务器以及它所连接的其他服务器上的频道。IRC频道存在于一个IRC服务器上。一个频道类似于一个聊天室,频道名称必须以#符号开始,例如#irchelp。IRC机器人是一些运行在后台或者服务器上的程序,通过登陆某一个频道,分析接受到的内容并做出相应的动作。
- 当IRC客户端申请加入一个IRC网络时,发送nickname。一般使用6667端口。
2 僵尸网络是什么?僵尸网络通常用于干什么?
- IRC语境下的僵尸网络是指IRC机器人连接成的IRC网络;采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络 。
- 通常用于DDos攻击、分布式扫描、暴力密码破解等。
蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
- 用wireshark打开botnet_pcap_file.dat,执行命令
ip.src == 172.16.134.191 && tcp.dstport == 6667
筛选源地址为蜜罐主机,目的端口为6667的包 - 观察到共5个IRC服务器,分别为
209.126.161.29
、66.33.65.58
、63.241.174.144
、217.199.175.10
、209.196.44.172
4
- 执行命令
tcpflow -r botnet.pcap "host 209.196.44.172 and port 6667"
,筛选host和端口6667后进行分流 - 执行命令
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计算行数。共3462台主机
5
- 执行命令
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
发现共有165个主机
- 先用
snort -r botnet_pcap_file -c /etc/snort/snort.conf -K ascii
分析一下,发现绝大部分都是TCP和UDP包 - 执行命令
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端口 - 执行命令
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端口
- 响应的端口分别为: 135、 139 、 25 、 445 、 4899 、 80 、 137
- 用wireshark筛选出经过每个端口的数据包,筛选通过80端口的数据包
看到24.197.194.106向蜜罐发送了很多的N,在进行缓冲区溢出攻击
3 学习中遇到的问题及解决
问题1:文件夹一拖进虚拟机,虚拟机就重启?
解决:使用共享文件夹机制
问题2:汇编、反汇编看的一头雾水?
解决:学习去
4 实践总结
逆向分析确实难,没有任何基础,无从下手,怪不得问一个做逆向的同学,安全怎么学,他回答放弃...