理论学习
恶意代码基础知识
恶意代码(Malware,或 Malicious Code):使计算机按照攻击者的意图执行以达到恶意目标的指令集。
恶意代码类型:恶意代码可以根据其执行方式、传播方式和对攻击目标的影响分为计算机病毒、蠕虫、恶意移动代码、特洛伊木马、后门、僵尸程序、内核套件等。
计算机病毒:能够自我复制的代码,通过将自身嵌入其他程序进行感染 ,而感染过程通常需要人工干预才能完成。
蠕虫:与病毒类似,自主运行的恶意代码,无需将自身嵌入到其他宿主程序中。通过修改操作系统相关配置,使其能够在系统启动时得以运行。一般通过主动扫描和攻击网络服务的漏洞进行传播,一般无需人工干预。
恶意移动代码:属于移动代码范畴,可从远程主机下载并在本地执法的轻量级程序,无需或很少人为干预。
后门:能绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。
特洛伊木马:一类伪装成有用软件,但隐藏其恶意代码的恶意代码。
僵尸网络:传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的攻击网络。
内核套件:是在用户态通过替换或修改系统关键可执行文件,或者在内核态通过控制操作系统内核,用以获取并保持最高控制权的一类恶意代码,又分为用户态ROotKit和内核态RootKit两种。
恶意代码的命名规则与分类体系:反病毒业界普遍采用 “ 三元组命名 ” 规则来对所发现的恶意代码新样本来进行命名,这里的“ 三元组” 是指恶意代码的类型、家族名称和变种号,一般形式为:[恶意代码类型]恶意代码家族名称[变种号]。
各种形态的恶意代码在各个关键技术环节上都有帮其明确的定义特性,下图给出了一个基于多维度标签的恶意代码技术形态分类方法的示意,即在恶意代码工作机理中最为核心的传播、控制、隐藏和攻击这些关键技术环节中,有着一些具有特异性的特性,可以通过为恶意代码样本添加技术环节维度上的分类标签, 从而标识出该样本所具有的一种或多种特性。
恶意代码的发展史
1.1 计算机病毒
计算机病毒基本特性:
-
感染性;
-
潜伏性;
-
可触发性;
-
破坏性;
计算机病毒潜在的感染目标可分为可执行文件、引导扇区和支持宏指令的数据文件三大类。
可执行文件:前缀感染机制、后缀感染机制和插入感染机制。
引导扇区:首先是通过BIOS 定位到磁盘的主引导区,运行存储在那里的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统
支持宏指令的数据文件:这类病毒称为宏病毒,宏病毒感染数据文件的方式为将自身以宏指令的方式复制到数据文件中,因此当被感染的数据文件被应用软件打开时,将自动执行宏病毒体,完成病毒的引导。
计算机病毒的传播机制:计算机病毒的传播渠道包括移动存储、电子邮件及下载、共享目录等。
1.2 网络蠕虫
蠕虫:与病毒类似,可自我复制,自主运行的恶意代码,无需将自身嵌入到其他宿主程序中。通过修改操作系统相关配置,使其能够在系统启动时得以运行。一般通过主动扫描和攻击网络服务的漏洞进行传播,一般无需人工干预.
主要与病毒区别:通过网络自主传播。
特性对比
网络蠕虫的组成结构:
弹头:为了侵占一个目标系统,蠕虫必须首先获得计算机的访问权,它可以使用一些渗透攻击代码作为 “弹头 ”,侵入目标系统。常用攻击技术有缓冲区溢出攻击、文件共享攻击、利用电子邮件传播、利用其他普遍的错误配置。
传播引擎:通过在目标系统上执行传播引擎指令,来完成蠕虫样本的传播,传播引擎通常利用的网络传输机制包括文件传输协议 FTP 、小文件传输协议 TFTP、超文本传输协议 HTTP、服务信息块协议 SMB 以及原始 SOCKET 套接字等。
目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。目标选择算法包括电子邮件地址、主机列表、被信任的系统、网络邻居主机等。
有效载荷:蠕虫的有效载荷就是附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作。比如说植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂的计算等。
1.3 后门与木马
后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道;木马是指一类看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
1.4 僵尸程序与僵尸网络
僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。僵尸网络区别于其他攻击方式的基本特性是使用一对多的命令与控制机制,僵尸网络还具有恶意性和网络传播性。
僵尸网络的功能结构:佣尸程序的功能组成结构, 可以分为主体功能模块和辅助功能模块,主体功能模块包括实现僵尸网络定义特性的命令与控制模块和实现网络传播特性的传播模块,而包含辅助功能模块(由信息窃取模块、主机控制模块、下载更新模块和防分析检测模块构成)的僵尸程序则具有更强大的攻击功能和更好的生存能力。
僵尸程序的命令与控制机制:当前主流使用的僵尸网络命令与控制机制包括: 基于 IRC 协议的命令与控制机制、基于HTTP 协议的命令与控制机制和基于 P2P 协议的命 令与控制机制这三大类。是整个僵尸程序的核心。
IRC僵尸网络工作机制图:
1.5 Rootkit
它能够通过控制目标计算机操作系统的关键组件, 来为攻击者提供强有力的手段, 用来获取访问并隐藏在系统中。Rootkit 定义: “ 一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中“。
为了获得所有这些技术特性和能力,Rookit需要由众多的功能组件所组成,包括替换操作系统软件用于隐藏自身的恶意程序,实现隐蔽性后门访问的后门程序,还有各种辅助工具,这些工具允许攻击者调整那些被替换程序的特征,包括程序大小和上次修改日期等,从而可以使得这些程序看上去和原来正常程序没有任何差异。
根据操作系统的分层, Rootkit可以运行在两个不同的层次上, 即用户模式和内核模 式。
用户模式Rootkit:大部分 UNIX 用户模式 Rootkit 中集成的工具可以被分为如下五种不同的类型,包括提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、一些零散工具如网络嗅探器、安装脚本;在 Windows 平台上, 实现用户模式 Rootkit 主要有如三种不同技术
内核模式 Rootkit:利用对内核的操作,内核模式 Rootkit 可以修改内核,彻底地隐藏攻击者在计算机上的活动,大多数内核模式 Rootkit 采用如下技术手段:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。
Linux 内核模式 Rootkit
2. 恶意代码分析方法
恶意代码分析与针对良性代码和软件的程序分析技术,都可以采用通用的代码分析技术来作为基础,主要包括静态分析和动态分析方法,来对代码进行逆向工程(Reverse Engineering)来确定其功能。其主要区别:
2.1 分析环境
恶意代码发烧友的分析环境:
基于虚拟化构建恶意代码分析环境:
用于研究的恶意代码自动分析环境:
2.2 恶意代码静态分析技术
利用静态分析方法,能够对恶意代码的特性和目的有一个大体的了解,甚至识别出恶意代码的各个组成部分,有一个高层次的评估和了解,随后用动态分析来观察其活动,必要时再从二进制层次上对恶意代码进行微观的静态结构及逻辑分析,并结合动态分析中的运行调试机制,来理解恶意代码的细节特征与行为机理。
恶意代码静态分析技术如下图所示
反病毒软件扫描:使用现成的反病毒软件来扫描待分析的样本, 以确定反病毒软件是否能够识别该样本, 以及所识别的类型、家族、变种等信息。
文件格式识别:恶意代码通常是以二进制可执行文件格式存在的,其他的存在形式还包括脚本文件、带有宏指令的数据文件、压缩文件等。文件格式识别能够让我们快速地了解待分析样本的文件格式。在Windows 平台上, 二进制可执行文件E XE 和DLL 都是以 PE 文件格式组织的,而在 Linux 平台上,可执行文件格式则是 ELF 。
字符串提取分析:主要提取的信息包括可能获得的有用信息、恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息和Email地址、库和函数调用。
二进制结构分析:nm 指令在可执行文件中查找 symbols 重要元素。objdump 主要功能有从可执行文件中限制不同类型的信息、编译器类型、代码段数据段位置、反汇编
反汇编(Disassemble)与反编译(Decompile):反汇编与反编译是对二进制程序编译链接的逆过程,反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程,而反编译则更进一步,期望将汇编代码再进一步还原成高级编程语言形式的源代码。
代码结构与逻辑分析:程序结构主要是了解 Call Graph,即用户函数、系统函数和函数调用关系。分析系统函数调用列表可在高层分析二进制程序的行为逻辑。程序逻辑主要是了解程序控制流图(CFG),CFG完备地反映了一个程序的执行逻辑。
加壳识别与代码脱壳:恶意代码通常使用的加壳混淆机制包括加密、多样性、多态和变形等,加密机制(Encryption)一般采用固定的代码加密器来对一进制程序进行处理,以改变代码的存在形态。
2.3恶意代码动态分析技术
动态分析,实际上是激活一个受控分析实验环境中的代码,当一个代码在实际系统中运行时,我们能够更加迅速地了解其行为。动态分析技术如下图所示
基于快照比对的方法和工具:针对恶意代码动态分析的快照比对方法是首先对原始的“ 干净" 的系统资源列表做一个快照,然后激活恶意代码并给予充分的运行时间, 如5分钟,之后我们再对恶意代码运行后“ 脏” 的系统资源列表进行快照,并对比两个快照之间的差异,从而获取恶意代码行为对系统所造成的影响,比如新建、删除或修改了哪些文件、哪些注册表项等。
系统动态行为监控方法:系统动态行为监控是目前恶意代码动态行为分析中最为核心和常用的技术步骤,针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示。系统动态行为监视通常基于行为通知(Notification)机制或者 API 劫持技术(API Hooking)实现。
网络协议栈监控方法:主要监控四个方面,包括恶意代码开放的本地端口、恶意代码发起的网络连接、控制恶意代码网络流和恶意代码流行攻击方式-ARP欺骗。
沙箱技术:沙箱技术提供了受限制的执行环境,使得在沙箱中运行的代码不能够修改用户系统,从而提供了 一个用于运行不可信程序的安全环境。
动态调试技术:动态调试器能够以单步模式来调试恶意代码,能够一行代码接着一行代码,一个函数调用接着一个函数调用地进行恶意代码行为分析的过程,这样就能够像录像机一样能够逐个镜头的分析犯罪现场录像,并也可以中断或者快进程序运行流程,观察恶意代码中发生的一切。
理论实践
实践一
动手实践:恶意代码文件类型识别、脱壳与字符串提取
实践任务: 对提供的 rada 恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得 rada 恶意代码的编写作者,具体操作如下:
- 使用文件格式和类型识别工具,给出 rada 恶意代码样本的文件格式、运行平台和加壳工具。
- 使用超级巡警脱壳机等脱壳软件,对 rada 恶意代码样本进行脱壳处理。
- 使用字符串提取工具,对脱壳后的 rada 恶意代码样本进行分析,从中发现 rada 恶意代码的编写作者是谁
1.解压老师发的压缩包到win XP attacker上,然后运行命令行,file命令恶意程序RaDa.exe。可以看到文件类型,它是PE32位可执行文件。有图形化窗口,用了intel 80386处理器的汇编指令集。
2.打开PEiD中文版,导入这个Rada.exe,查看下基本信息。这里可以看到文件的入口点、偏移、文件类型、EP短、汇编程序以及加壳类型。
节查看器
汇编代码
PE细节
扩展信息,检测一行包含了加壳信息
3.命令行输入strings命令,对恶意程序进行字符串提取。发现是乱码。
4.我们使用脱壳工具超级巡警虚拟机脱壳器对恶意程序进行脱壳。得到了unpacked.exe
5.这时再用PEiD打开发现当前编译工具使用时VB5.0/6.0:
6.在用上面讲的方法读取文本内容,可以看到文本内容已经没有乱码:
7.这时候用 IDA Pro Free 打开这个文件,查看详细信息
实践二
Crack1
获取MD5
1.在C盘nine目录下创建crackeme目录,将exe文件放入其中,首先要猜测需要输入的参数个数,依次测试不同参数个数的输出
2.打开IDA Pro Free,然后把crackme1.exe导入进去,进行反编译。
3.这里先查看程序中明文字符串Strings window,可以发现前四个中有两项输出记录下来了,猜测第2条是密码,第四条是破解成功的提示语:
4.查看他的函数结构
5.返回主界面,找到401280这一代码块,在Functions window中定位该函数。
6.然后从IDA VIEW-A这一栏可以看到,定位到了对应位置的汇编代码部分
7.依据下图汇编代码推测输出正确输入应该为"I know the secret"
8.输入密码,攻击成功
实践三
雷同于实践二
1.首先要猜测需要输入的参数个数,依次测试不同参数个数的输出
2.由IDA PRO Free打开crackme2.exe。可以看到如下基本信息
3.打开函数表,可以看到它的大致结构。关键代码段,401280
4.定位401280代码段,然后查看他的数据流表。
5.对比上个程序的判断条件,发现相差了一个add eax 4代码,eax寄存器加4,据此大致判断出需要两个参数,第一个是程序名,第二个是密码。然后我们将原文件重命名为crackmeplease.exe,使用密文:"I know the secret",就可以攻击成功。
实践四
取证分析实践: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地址被用于攻击蜜罐主机?
攻击者尝试了哪些安全漏洞?
哪些攻击成功了?是如何成功的?
- IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
因特网中继聊天(Internet Relay Chat),简称 IRC 。 IRC 的工作原理在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台IRC服务器上即可。IRC 特点是通过服务器中继与其他连接到这一服务器上的用户交流
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER、PASS 、NICK 。注册完成后,客户端就使用 JOIN 信息来加入频道,格式如下:JOIN 。
IRC 服务器明文传输通常在 6667 端口监听,也会使用 6660—6669 端口。 SSL 加密传输在 6697 端口。 - 僵尸网络是什么?僵尸网络通常用于干什么?
僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
它往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”,也叫“肉机”。 - 蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
通过 Wireshark 打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667,因为我们知道 IRC 服务通过6667端口
经过筛选,可以得到五个IRC服务器,分别为 209.196.44.17、217.199.175.10.241.174.144、209.126.161.29、266.33.65.58、63
- 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络
首先先拉取209.196.44.172与172.016.134.191之间的所有的 IRC 数据包。这里使用命令tcpflow -r botnet_pcap_file 'host 209.196.44.172 and port 6667'
执行之后我们将获得三个文件,172.016.134.191.01152-209.196.044.172.06667、209.196.044.172.06667-172.016.134.191.01152和 report.xml,可以先看一下report.xml这里提到了这两个文件的相关信息,可以看到如下图的内容,包括上述双方的ip地址,端口,mac地址,通信时间等等。
然后使用以下代码对209.196.044.172.06667-172.016.134.191.01152文件进行筛选,可以得到共有3457个主机访问过服务器(在当前主机进入到IRC的频道之后,频道会将当前频道中所有的主机的信息都发送过来,可以从其中的数据包中计算当前频道共有多少主机)
- 哪些IP地址被用于攻击蜜罐主机?
首先,我们认为进入蜜罐的流量都是攻击。使用以下命令查找端口并输出到1.txt 中
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
(tcpdump -nn: 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示;grep -v:排除指定字符串;cut -d '.' -f 10:截取以'.'为分隔符的第 10 列;uniq命令用于检查及删除文本文件中重复出现的行列; wc -l 用于统计文件的行数)
可以看到共有148个端口被攻击了
接着使用如下指令找出所有的可能连接的主机的 IP 地址。这个指令的作用就是将连接IP地址输出到2.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 > 2.txt;wc -l 2.txt(其中 awk -F 就是指定分隔符,可指定一个或多个, print 后面做字符串的拼接。)
可以看到一共有165个主机被用于蜜罐入侵
-攻击者尝试了哪些安全漏洞?
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
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
输出可以看到 TCP 响应端口为135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin)和80(http)。将协议部分改为udp,可以筛选出udp端口137(netbios-ns)。
下面依次分析这些端口:TCP135端口,只是进行了连接,没有数据内容交换,很有可能是对这个端点进行了connect扫描:
tcp.port == 135 || tcp.port == 25
TCP25端口,与135端口相似,也没有进行数据内容的交换,猜测攻击机对其进行了connect扫描:
tcp.dstport80&& ip.dst172.16.134.191访问了80端口,攻击者通过缓冲区溢出获得命令行:
这里访问的是tcp.dstport80&& ip.dst172.16.134.191&&ip.src==218.25.147.83,这里会看到c:
otworm,是一个蠕虫攻击:
TCP 80 端口, tcp.srcport==80 && ip.src == 172.16.134.191&&http ,他的行为就是不停的用脚本在攻击 IIS 服务器的漏洞,从而获取系统权限。其余对80端口攻击,蜜罐主机均以IIS服务器的默认页面作为回应,这些攻击均失败了:
TCP139端口,tcp.dstport139&&ip.dst172.16.134.191 这里大部分连接也没有传递具体会话内容,主要也是SMB查点:
TCP445端口,tcp.dstport445&&ip.dst172.16.134.191 33280 这里发现有一个PSEXESVC.EXE的文件,这个二进制文件主要是一种Dv1dr32蠕虫,这种蠕虫通过IRC进行通信。
然后该源IP地址与蜜罐主机建立了会话,攻击成功,这里Windows的svcctl MSRPC接口用于同SCM(服务控制管理器)通讯,svcctl漏洞允许匿名用户连接到SCM,然后就可以枚举所安装的或正在运行的服务。
TCP4899端口,tcp.dstport4899&&ip.dst172.16.134.191 这里上查了一些资料,4899其实是一个远程控制软百件所开启的服务端端口,由于这些控制软件功能强大,所以经常被黑客用来控制被自己控制的远程电脑,而且这类问软件一般不会被杀毒软件查杀,比后门还要安全。
UDP137端口, udp.port==137 网络基本输入/输出系统 (NetBIOS) 名称服务器 (NBNS) 协议是 TCP/IP 上的 NetBIOS (NetBT) 协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法,在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是 NetBIOS 查点了。
- 哪些攻击成功了?是如何成功的
通过上面的分析可知,成功的攻击发起者是210.22.204.101 和 61.111.101.78,分别是 Dv1dr32 蠕虫和 LAN Manager 口令猜测
问题
实践四的过程比较繁琐,涉及的内容也比较杂乱
总结
分析完了,录制视频,又看了几遍,基本理解了