20199122 2019-2020-2 《网络攻防实践》第九周作业
1.实践内容
1.1恶意代码基础知识
1.1.1恶意代码定义与分类
-
恶意代码:使计算机按照攻击者的意图执行以达到恶意目标的指令集。实现方式:二进制执行文件、脚本语言代码、宏代码、寄生在其他代码或启动扇区的指令流。
-
攻击目标:
- 技术炫耀;
- 远程控制主机,成为傀儡机;
- 窃取私人信息
- 窃取计算、存储、带宽资源
- 拒绝服务、进行破坏攻击
-
恶意代码根据执行方式、传播方式和对攻击目标的影响分为以下几类
恶意代码类型 定义特征 计算机病毒 通过感染文件或磁盘引导扇区进行传播,一般需要人工干预 蠕虫 一般为不需要宿主的单独文件,通过网络传播,自动复制,通常无须人为交互便可感染传播 恶意代码移动 从远程主机下载到本地执行的轻量级恶意代码,不需要或仅需要极少的人为干预 后门 绕过正常的安全控制机制,为攻击者提供访问途经 特洛伊木马 伪装成有用软件,隐藏其恶意目标,欺骗用户安装执行 僵尸程序 使用一对多的命令与控制机制组成僵尸网络 内核套件 通过替换或修改系统关键可执行文件,或通过控制操作系统内核,用以获取并保存最高控制权 融合型恶意代码 融合上述多种恶意代码,构成更具破坏性的恶意代码形态 -
基于多维度标签的恶意代码技术形态分类方法,恶意代码工作机理最为核心的是传播、控制、隐藏和攻击
传播 病毒、蠕虫、邮件蠕虫、特洛伊木马、网页木马 控制 后门、僵尸程序 隐藏 内核隐藏、用户隐藏 攻击 DDoS攻击、信息窃取、单机欺骗 -
恶意代码的复杂度和破坏力不断增强、技术创新越来越频繁、重点从计算机病毒转移到蠕虫和内核级的攻击工具。
1.1.2 计算机病毒
-
基本特性:
- 感染性:具有把自身复制到其他程序中的特性
- 潜伏性:感染后,不回立即进行破坏
- 可触发性:满足特定的触发条件后,激活其感染机制或破坏机制
- 破坏性:对计算机执行一定的破坏能力
- 衍生性:对某个已知的病毒程序做出修改,从而衍生出另外的病毒
-
感染目标:
- 可执行文件;感染方式有:前缀感染机制、后缀感染机制、插入感染机制、重复感染、交叉感染等。
-
引导扇区;感染目标分为主引导区和分区引导区,通过感染引导区上的引导记录,病毒就可以在系统启动时先于操作系统截取系统控制权
-
支持宏指令的数据文件;如微软的office系列软件。这类病毒称为宏病毒,将自身以宏指令的方式复制到数据文件中,当该数据文件被应用软件打开时,将自动执行宏病毒体,完成病毒的引导。
-
传播机制:移动存储、电子邮件及下载、共享目录等,往往需要借助人类帮助。
1.1.3网络蠕虫
-
基本特性:具有自我复制,感染性,通过网络自主传播不需要宿主,不需要用户交互,通过目标系统上的安全漏洞或错误配置进行传播。
-
组成结构:弹头(穿透目标)、传播引擎(驱动导弹飞向目标)、目标选择算法和扫描引擎(引导导弹发现和指向目标)、有效载荷(执行真正破坏性攻击的恶性材料)
-
弹头:获得计算机访问权的渗透攻击代码。常用技术:
- 缓冲区溢出攻击:
- 文件共享攻击
- 利用电子邮件传播
- 利用其他普遍的错误配置
-
传播引擎:获得控制权后,蠕虫必须传输自身复制样本到目标系统上。通常利用的网络传输机制包括:FTP、HTTP、TFTP、SMB及原始SOCKET套接字
-
目标选择算法和扫描引擎:目标选择算法寻找新的攻击目标,利用扫描引擎扫描每一个由目标选择算法确定的目标,确定其是否可以被攻击。选择多种不同目标选择算法:
-
电子邮件地址:从受害计算机的邮件通信录中得到电子邮件列表
-
主机列表:从本地主机上的各地计算机列表中获得地址
-
被信任的系统:获得信任当前受害机的计算列表
-
网络邻居主机:通过NetBIOS协议探测局域网中邻居主机
-
域名服务:连接至受害计算机的本地域名服务,用它查询其他受害者的网络地址
-
通过特定规则任意选择IP目标地址:从IP网络地段,通过某种预定的算法来选择IP地址,进而传播
-
-
有效载荷: 附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作.如下:
- 植入后门
- 安装分布式拒绝服务攻击代理
- 组建僵尸网络
- 执行一个复杂的计算
1.1.4后门与木马
- 后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问控制;木马是指一类看起来具有某个有用或善意的目的,实际掩盖一些隐藏恶意功能的程序。
- 后门为攻击者提供多种不同类型的访问通道:
- 本地权限提升和本地账户
- 单个命令的远程执行
- 远程命令行解释器访问
- 远程控制GUI
- 无端口后门
- 特洛伊木马技术包括:命名伪装游戏、使用软件包装工具、攻击软件发布站点、代码下毒等
1.1.5僵尸程序与僵尸网络
-
僵尸程序是接受控制后进行攻击和传播,也会采用一些伪装和欺骗机制,能够为攻击者提供一对多的控制机制。
-
功能结构:
- 主体功能模块:实现僵尸网络定义特性的命令与控制模块和实现网络传播特性的传播模块
- 辅助功能模块:信息窃取模块、主机控制模块、下载更新模块、防分析检测模块
-
按照传播策略分为:自动传播型僵尸程序和受控传播型僵尸程序
-
工作机制如下:
1)攻击者发起攻击,使受害主机感染僵尸程序
2)僵尸程序以特定格式随机产生的用户名和昵称尝试加入指定的IRC命令与控制服务器
3)攻击者普遍使用动态域名服务将僵尸程序连接的域名映射到他所控制的多台IRC服务器上
4)僵尸程序加入到攻击者私有的IRC命令与控制信道
5)加入信道的僵尸程序监听控制指令
6)攻击者发出指令,进行控制
7)僵尸程序接受指令,执行攻击
-
僵尸网络命令与控制机制:
- 基于IRC协议的命令与控制机制。发布命令的三种方式:设置频道主题命令;使用频道或单个僵尸程序发送PRIVMSG信息;通过NOTICE信息发送命令
- 基于HTTP协议的命令与控制机制
- 基于P2P协议的命令与控制机制
1.1.6Rootkit
- 根据操作系统的分层,Rookit可分为:
- 用户模式:修改的是操作系统用户态中用户或管理员使用的内建程序
- 内核模式:修改的是操作系统最核心的内核
1.2恶意代码分析方法
1.2.1 恶意代码分析即使概述
-
代码分析是按需求使用一定的规则、方法和工具对计算机程序进行分析,推导出程序结构、数据流程和程序行为的处理过程。
区别项 恶意代码分析 良性代码分析 目的公开性 目的未知,需分析和推测 一般公开明确 目的恶意性 恶意目的,需受控环境 良性,无需受控环境 是否存在源码 绝大多数无源码,二进制分析 存在源码 使用对抗分析技术 各种多样化对抗分析 一般无对抗分析 -
恶意代码技术分为:
- 静态分析技术:在不实际执行软件代码下对恶意代码进行自动化或辅助化分析,理解恶意代码的机理,提取特征码用于检测。技术如下表:
分析技术 技术目的 反病毒扫描 使用现成的反病毒软件识别已知恶意代码的类型 文件格式识别 确定攻击平台和类型 字符串提取 寻找恶意代码分析线索,包括:恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息、库文件和函数调用 二进制结构分析 初步了解二进制文件结构 反汇编 将二进制代码解析编译为汇编代码 反编译 将汇编代码进一步翻译为高级语言 代码结构与逻辑分析 分析二进制代码组成结构,并理解二进制代码逻辑 加壳识别和代码脱壳 识别是否加壳、加壳类型;恢复原始代码 - 动态代码分析技术:通过在受控环境中执行待分析的母的恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,获取目标代码的行为机理和运行结果。分析方法如下表:
分析方法 | 目的 |
---|---|
快照对比 | 获取恶意代码行为结果 |
系统动态行为监控 | 实时监控恶意代码动态行为轨迹 |
网络协议栈监控 | 分析恶意代码网络监听端口及发起网络会话 |
沙箱 | 在受控环境下进行完整的恶意代码动态行为监控与分析 |
动态调试 | 单步调试恶意代码程序,理解程序结构和逻辑 |
1.2.2恶意代码分析环境
- 对于恶意代码分析实践,一个能够完全受控,易于构建与恢复的分析环境是必须的,确保不将恶意代码泄露到环境之外的网络中。
- 恶意代码发烧友的分析环境
- 基于虚拟化构建恶意代码分析环境
- 用于研究的恶意代码自动分析环境
2.实践过程
实践一 恶意代码文件类型识别、脱壳和字符串提取
-
实践任务:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下
1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码进行脱壳处理。
3)使用字符串提取工具,对脱壳后的rada代码进行样本分析,从中发现rada恶意代码的编写作者是谁?
-
在windows xp系统上执行以下操作
-
用file查看rada恶意代码样本,由于file命令和strings命令是Linux命令,在windows下可使用cygwin进行对 Linux 命令的模拟,看到 RaDa.exe 是一个 Windows PE 可执行文件,并且有图形化窗口
- 使用PEid查看PE文件,可以看到文件的入口点、偏移、连接器版本、EP 段、子系统。在扩展信息中,可得到文件被加壳的类型
- 使用strings命令对RaDa.exe进行查看字符,发现全是乱码,该文件被加壳
- 对 RaDa.exe 进行脱壳
- 使用strings命令对RaDa_unpacked.exe查看,有许多函数名称
-
用process exploer监控脱壳后的RaDa运行,可得作者
实践二:分析Crackme程序
-
实践挑战:使用IDA pro静态分析或者动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
-
用file查看crackme1.exe和crackme2.exe,发现是crackme文件是 32 位 windows 下 PE 文件,没有图形界面,是命令行程序
- 对 crackme1.exe 进行破解,尝试运行该程序,试探其输入格式。 无参数时输出I think you are missing something;一个参数时输出:Pardon?what did you say?;二个以上参数输出:I think you are missing something。所以我们猜测该程序接受一 个参数,对 于Pardon,猜测是参数错误的提示。
- 使用 IDA pro 工具来打开crackme1文件
- 查看string明文字符串,发现了刚刚的反馈信息, “I think you are missing something.” “Pardon? What did you say?”,还发现了“I know the secret”和“You know how to speak to programs, Mr. Reverse-Engineer”这两个字符串。猜测密码是“I know the secret”,正确提示信息为:“You know how to speak to programs, Mr. Reverse-Engineer”。
- 通过view→Graphs→function calls(函数调用图),查看程序的 call flow,可以看出该程序由c语言编写,通过strcmp比较密码,关键的程序段在sub_401280,因为输出和比较口令都在该段
- 在function里查看401280字符段的汇编语言,大概意思就是cmp判断函数是否有两个参数 ,如果不是,输出“I think you are missing something.” 如果是两个参数,出现strcmp,即与“I know the secret”是否匹配,这里可以验证“I know the secret”为口令。如果不匹配,输出“Pardon? What did you say?”,匹配则验证通过,输出“You know how to speak to programs, Mr. Reverse“
- 验证一下craceme1.exe的口令,成功
- 同理,猜测crackme2.exe的参数个数为1
-
用 IDA pro 工具来打开crackme2文件,查看string明文字符,出现“I know the secret” 和“ crackmeplease.exe ”
-
同样查看function calls ,401280段包括字符串比较口令和输出,是很关键的
-
查看401280段,大概意思是先判断函数是否有两个参数;如果没有,则输出”I think you are missing something “,如果有,则先判断程序名是否为”crackmeplease.exe“;如果不是,则输出”I have an identity problem“,如果是的,则判断口令是否为”I know the secret“;如果不是,则输出”Pardon?what did you say?“,如果是的,则通过一定规则输出通过测试的信息,具体操作是 unk_403080 中的字符串分别与 0x42h 进行异或运算,输出”We have a little secret :Chocolate“
-
对其进行验证,成功
-
call:调用函数 mov:将一个值写入某个寄存器 add:将两个运算子相加,并将结果写入第一个运算子 sub:相减 push:把操作数压入堆栈 CMP:比较俩值 JMP:跳往指定地址
实践三:分析一个自制恶意代码样本rada
-
提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
-
找出并解释这个二进制文件的目的
-
识别并说明这个二进制文件所具有的不同特性
-
识别并解释这个二进制文件中采用的防止被分析或被逆向工程的技术
-
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
-
给出过去已有的具有相似功能的其他工具
-
可能查出这个二进制文件的开发作者吗?如果可以,在什么样的环境下和什么样的限定条件下?
- 用MD5对RaDa.exe进行摘要分析,用file查看该文件为PE文件,且有图形界面
- 打开wireshark和process explorer,运行脱壳后的恶意代码样本rada。可以查看大概是使用http连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页上,下载cgi,上传cgi,在受害主机C盘创建一个文件夹“C:/RaDa/tmp”来保存其下载的文件,然后将程序文件
RaDa.exe
复制到了C:RaDain
目录下,修改注册表,将rada
设置为开机启动。HKLMSoftwareMicrosoftWindows CurrentVersion Run
为计算机启动项的注册表信息,发起了DDoS远程攻击(这是干扰项),
- 注册表中
HKLMSOFTWAREMicrosoftWindows CurrentVersion Run
即可查看RaDa.exe自动启动
- 然后进行一系列的命令操作,exe(执行指定命令)、put(上传)、get(下载)、screenshot(截屏)、sleep等指令
- 查看wireshark就是不停地在向10.10.10.10发送数据包
- 用IDA pro将其脱壳后的文件打开继续分析,将字符串类型改为Unicode,可以看到作者和时间
- 发现三个网段,在函数sub_4052c0中调用,大概就是判断服务器是否在这三个网段中,然后在服务器中执行命令行
- 还发现VMware Tools,不知道干嘛,在sub_404FB0函数中,在这个函数中,字符串被拷贝到变量
dword_40C070
,继续寻找这个变量对应的函数,找到是sub_40AAA0
- 查看sub_40AAA0地函数流程图,大概是先对网卡配置信息的查询(SELECT * FROM Win32_NetworkAdapterConfigurat),如果true,则确认
dword_40C070
对应的字符是否存在,并进行了Mac地址查询,注册表的查看等操作(Wscript.shell)。即判断vmware tools
是不是在注册表里面。
-
解答:
1.该文件的摘要信息:caaa6985a43225a0b3add54f44a0d4c7;
文件类型: PE32 executable (GUI) Intel 80386, for MS Windows 32-bit
加壳方式:UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
2.运行该软件,会通过http请求访问某页面,并进行一系列的指令操作,不具备自主传播功能。猜测是一个后门程序或者僵尸程序。
3.启动RaDa.exe,会自动将自己复制到C盘下,然后进行访问页面,获取其中的指令,按照指令执行。不会弹出任何窗口。
4.使用了UPX加壳;干扰的误导选项,
starting DDOS smurf remote attack
之前我以为发起了DDOS攻击。5.猜测后门程序,并未发现该程序会自我复制和传播,需要远程控制,没有将自己伪装成其他程序,判定为后门。
6.Bobax-2004,使用HTTP协议从指定的服务器下载命令文件
7.可以,明文字符串中已给出作者信息
实践四:windows2000系统被攻陷并加入僵尸网络
- IRC是什么,当一个IRC客户端申请加入一个IRC网络的时候将发送那个消息?IRC一般使用那个TCP端口
- 僵尸网络是什么?僵尸网络通常用于干什么?
- 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 在这段期间,多少不同的主机访问了以
209.196.44.172
为服务器的僵尸网络? - 那些IP地址被用于攻击蜜罐主机?
- 攻击者尝试攻击了那些安全漏洞?
- 那些攻击成功了?是如何成功的?
-
IRC是Internet Relay Chat 的英文缩写,互联网中继聊天,一种聊天方式,相当于qq、微信之类的。IRC的工作原理非常简单,只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。
- 注册时需发送的消息包括:口令,昵称、用户信息。注册完成后,客户端就使用JOIN信息来加 入频道。
- IRC明文传输一般是6667端口,SSL加密传输一般是6697端口。
-
僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。 攻击者通过各种途径传播僵尸程序感染互联网上的大量主机,而被感染的主机将通过一个控制信道接收攻击者的指令,组成一个僵尸网络。通常用来发起拒绝服务攻击、发送垃圾邮件、窃取秘密、滥用资源、僵尸网络挖矿
-
监听端口6667,使用
ip.src == 172.16.134.191 and tcp.dstport == 6667
过滤规则进行查找,找到五个IRC服务器,分别为:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172
-
通过观察期间不同昵称出现个数判断多少不同的主机访问以
209.196.44.172
为服务器的僵尸网络。- 用
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
tcpflow分流筛选指定host与端口6667,产生了三个文件,209.196.044.172.06667-172.016.134.191.01152
、172.016.134.191.01152-209.196.044.172.06667
、report.xml
。根据题目要求重点查看第一个文件。
-
使用管道命令进行筛选,得到3462个。
cat
命令,连接209.
输出文件;grep搜索获取昵称输出行;sed:去除前缀;tr:将空格转换为换行;tr -d删除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 ' ' ' ' | tr -d "15" | grep -v "^$" | sort -u | wc -l
- 用
-
使用tcpdump查找可能连接主机ip的地址,uniq命令用于检查及删除文本文件中重复出现的行列,输出到1.txt中,查看1.txt,可以看到很多地址
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 > 1.txt;wc -l 1.txt
- 使用
snort -r botnet_pcap_file -c /etc/snort/snort.conf -K ascii
指令查一下网络流分布情况。大部分都是TCP包,有一部分UDP包,先筛选出响应的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端口135、139、25、445、4899、80
- 查看udp端口
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
,为137端口,是在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口是NetBIOS查点。
- 用wirshark查看tcp135和25端口,发现没干啥,只是进行了tcp连接
- 查看TCP 139端口,发送了许多SMB包,追踪TCP流,也没发现啥
- 查看445端口,发现了PSEXESVC.EXE,这是一种Dv1dr32蠕虫,这种蠕虫通过IRC进行通信,该攻击是61.111.101.78发起的,然后进行筛选
ip.dst==61.111.101.78 and ip.src==172.16.134.191
在发起攻击后的序列中查找,返回信息中含有PIPE tsvcs
,通过搜索可知,这是一个远程调用,攻击者是获得了权限,因此这个攻击成功的。
- 对于80端口,使用筛选条件
ip.dst == 172.16.134.191 and tcp.dstport == 80 and http
,就能看出所有关于80端口的相关攻击的信息。210.22.204.101
访问的80
端口,输入了很多C
是什么情况,攻击者是想通过缓冲区溢出来获得控制权?24.197.194.106
访问,应该是用脚本进行攻击218.25.147.83
访问,很多N,出现c: otworm
,是一个红色代码蠕虫攻击- 似乎都失败了,只是得到了默认页
3.学习中遇到的问题及解决
- 问题1:在实践二输入猜测口令时验证不成功
- 问题1解决方案:输入字符串命令行时要加双引号
- 问题2:基础知识太多
- 问题2解决方案:慢慢看
- 问题3:不太会分析
- 问题3解决方案:参考其他同学博客思路
- 问题4:用tcpflow命令时,命令没有找到
- 问题4解决方案:apt install 安装该命令就好了
4.实践总结
这次实验觉得做得很不熟练,很多东西都一知半解,可能新知识太多,时间又不太够,没有深挖,不知道深一点的原理,希望上课的时候能详细讲解一下原理。