赞
踩
定义:Malware is a set of instructions that run on your computer and make your system do something that an attacker wants it to do.
指令集合:二进制执行文件、脚本语言代码、宏代码、寄生在文件或者启动扇区的指令流。
目的:炫耀、远程控制被攻击主机、满足施跳板攻击或进一步传播恶意代码、窃取私人信息或机密信息、窃取计算存储带宽资源、拒绝服务等。
类型:分为计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、Rootkit等。这里就不具体讲各个的定义或者是什么了,下面具体分开具体讲。给出一个恶意代码的分类依据。
1.2 计算机病毒
定义:计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。这里必须记住:计算机病毒是借助人类帮助从一台计算机传至另一台计算机,这也是其传播机制。
特性:感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性。
感染及引导机制:
1.3 网络蠕虫
定义:一种通过网络自主传播、自我复制的独立恶意代码。(从这里就可以看出病毒和蠕虫的区别)
传播机制:主动攻击网络服务漏洞、通过网络共享目录、通过邮件传播。
组成结构:
1.4 后门与木马
后门定义:允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供通道。
后门类型:本地特权提升、单个命令的远程执行、远程命令行解释访问器(NetCat)、远程控制GUI(VNC、BO、冰河、灰鸽子)、无端口后门(ICMP后门,基于Sniffer非混杂模式或混杂模式的后门)。
自启动后门:Windows通过修改自启动文件、注册表自启动项,Linux修改inittab、rc.d/init.d文件。
木马定义:看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
木马的伪装技术:命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒
1.5 僵尸程序与僵尸网络
僵尸程序定义:攻击者用于一对多控制目标主机的恶意代码。
僵尸网络定义:攻击者传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。(注意仔细品味几种恶意程序的定义的黑体字,体会不同)
僵尸网络功能结构:主体功能分为命令控制模块和传播模块,辅助功能分为信息窃取模块、主机控制模块、下载更新模块、防分析检测模块。
僵尸网络类型:IRC僵尸网络(基于IRC互联网实时聊天协议构建)、HTTP僵尸网络(Web网站方式构建)、P2P僵尸网络(P2P协议构建)。
IRC僵尸网络工作机制图:
1.6 Rootkit
定义:隐藏性恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。换句话说,就是root权限的kit工具包。
用户模式Rootkit:恶意修改操作系统在用户模式下的程序/代码,达到隐藏目的(木马化操作系统用户模式应用程序)。主要分为五种类型:提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、一些零散工具如网络嗅探器、安装脚本。
内核模式Rootkit:恶意修改操作系统内核,从而达到更深的隐藏和更强的隐蔽性(对内核组件的恶意修改和木马化)。主要有如下方式:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。
Linux内核Rootkit:参考Linux Rootkit Learning,这篇博文讲的很好!。下图所示是利用LKM机制实现Linux内核模式Rootkit,LKM就是可装载内核模块。下图主要是通过insmod命令插入恶意内核模块,然后进行系统调用表的修改。
代码分析:按需求使用一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
恶意代码分析的技术方法主要包括静态分析和动态分析两类。
分析良性代码与分析恶意代码的区别:
2.2 恶意代码静态分析
定义:通过反病毒引擎扫描识别已知的恶意代码家族和变种名,逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。
反病毒软件扫描:使用反病毒软件对待分析样本进行扫描。主要有卡巴斯基、赛门铁克、瑞星、金山等。
文件格式识别:依靠专业工具如file(确定恶意代码目标平台和文件类型),peid(文件类型、编译链接器、是否加壳),FileAnalyzer(分析Win32平台窗口程序中包含的特殊文件)等进行识别分析。
字符串提取:主要提取的信息包括可能获得的有用信息、恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息和Email地址、库和函数调用。
二进制结构分析:nm指令在可执行文件中查找symbols重要元素。objdump主要功能有从可执行文件中限制不同类型的信息、编译器类型、代码段数据段位置、反汇编。
代码结构与逻辑分析:程序结构主要是了解Call Graph,即用户函数、系统函数和函数调用关系。分析系统函数调用列表可在高层分析二进制程序的行为逻辑。程序逻辑主要是了解程序控制流图(CFG),CFG完备地反映了一个程序的执行逻辑。
加壳识别和代码脱壳:包括四个方面:加密(固定加密/解密器)、多样性(多样化解密器)、多态(多态病毒能够通过随机变换解密器从而使得每次感染所生成的病毒实例都具有唯一性)、变形(直接在病毒体上加入各种代码混淆技术)。
2.3 恶意代码动态分析
动态分析中的监视与控制:行为监视即一系列监控软件来控制和观察恶意代码的运行情况。网络控制即与业务网络和互联网保持物理隔离。
快照比对:分为四步:对"干净"资源列表做快照、运行恶意代码、对恶意代码运行后的"脏"资源列表做快照、对比"干净"和"脏"快照,获取恶意代码行为结果。
动态行为监控:包括Notification机制(Win32/Linux系统本身提供的行为通知机制)和API Hooking技术(对系统调用或API调用进行劫持,监控行为)。
网络监控:主要监控四个方面,包括恶意代码开放的本地端口、恶意代码发起的网络连接、控制恶意代码网络流和恶意代码流行攻击方式-ARP欺骗。
沙盒:沙盒技术用于安全运行程序的安全环境,经常被用于执行和分析非可信的代码。
动态跟踪调试:在程序的执行过程中进行二进制调试
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
实验环境: WinXPattacker
将下载好的RaDa.exe程序放到WinXPattacker虚拟机当中,用file Rada.exe命令查看一下文件类型
继续在当前界面操作,用strings RaDa.exe命令查看一下字符串,发现乱码,说明文件被加壳。再使用PEiD工具查看RaDa.exe的基本信息
下一步是我们要进行脱壳。(超级巡警工具对文件进行脱壳,该工具有这个壳的样本库,可以自动脱壳,省去了手工脱壳的麻烦,并在恶意程序同目录下生成了一个脱壳以后的程序)
再用strings RaDa_unpacked.exe查看脱壳后的RaDa.exe,可以看到产生大量函数调用名以及其他有用字符串,但是并未查找到作者信息
再用 IDA PRO Free 打开一下脱壳后的程序,可以看到作者信息和发布时间,还有邮箱
在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
首先输入指令进入对应的路径。
对crackme1.exe进行分析,可以发现,在接受一个参数6时,程序的输出"Pardon? What did you say?“,其他的都是"I think you are missing something.”,所以我们猜测该程序的输入为一个数。
接下来使用IDA Pro进行程序分析,通过Strings窗口可以查看该程序中出现的字符串。查看到该程序中出现的明文字符串,可以看到前面的两种输出信息,“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"这两个字符串。有内容我们可以猜测,前者就是我们需要的口令,后者就是输入口令正确时程序的输出信息。
验证一下猜想
Crackme2.exe:
回到IDA,发现I have …越过了第一层判断,回到第一层判断,猜测“crackmeplease.exe”是密码。
验证:把程序名改为crackmeplease.exe试验一下,通过了第二个判断,最终出现了字符串明文中没有的信息,猜测成功。
分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
2、找出并解释这个二进制文件的目的;
3、识别并说明这个二进制文件所具有的不同特性;
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
6、给出过去已有的具有相似功能的其他工具;
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
首先查看摘要和文件类型,执行md5sum RaDa.exe指令得到其md5摘要值如下,再利用file RaDa.exe识别出这是32位PE文件,并且还是个GUI文件:
打开之前用过的监视工具 process explorer 和 wireshark 开启监听,并运行恶意程序RaDa.exe,分析其程序运行详细信息。通过HTTP协议请求 10.10.10.10RaDaRaDa_commands.html ,连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页,之后又下载和上传文件到 C:/RaDa/tmp 。将文件 RaDa.exe 复制到了 C:RaDain 目录下,可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序。往下看可以发现该恶意程序对主机实行了DDos拒绝服务攻击。
再往下看可以发现该恶意程序对主机的注册表进行了读写和删除操作。
使用wireshark进行分析,可以看到受害主机向目标主机 10.10.10.10 发送了大量的数据包
再打开 IDA Pro 进行简单分析,首先查看字符串 string ,string里把unicode选中查看字符串。这时可以查看到很多的字符串,点击这些字符串就可以找到调用的函数。看一下VMware tools的意思,双击选中的字符串进行定位:
发现其调用函数为 sub_404FB0
答案梳理:
①提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
摘要为caaa6985a43225a0b3add54f44a0d4c7;
使用了UPX加壳工具进行了加壳处理,加壳方式: UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
②找出并解释这个二进制文件的目的。
这个二进制文件通过网络获取指令,连接互联网时,该恶意程序就会通过http请求连接到指定主机,进行接受攻击者指令操作,并且攻击者可以完全控制该系统,所以这应该是一个后门程序。
③识别并说明这个二进制文件所具有的不同特性。
该程序启动之后将自己复制到c盘之中,并且每过一段时间就会尝试与10.10.10.10建立tcp连接。
④识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
UPX加壳
⑤对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
不具有自主传播模块,不具有传播和感染的性质,所以它不属于病毒和蠕虫;也没有将自己伪装成有用的程序以欺骗用户运行,不是木马。并且该程序执行需攻击者远程发送指令,故猜测是一个后门程序。
⑥给出过去已有的具有相似功能的其他工具。
Bobax——2004也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。
⑦可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,作者Raul siles和David Perze,他们在2004年编写完成。
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
定义:IRC是Internet Relay Chat的英文缩写,中文一般称为“互联网中继聊天" 。
工作原理:您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
IRC是一种公开的协议,采用TCP和SSL协议。一个IRC服务器可以连接其他的IRC服务器以扩展为一个IRC网络。
连接方式:IRC用户通过客户端软件和服务器相连。大多数的IRC服务器不需要客户注册登录,但在连接前必须设定好昵称(nickname)。IRC是一个分布式的客户端/服务器结构。通过连接到一个IRC服务器,我们可以访问这个服务器以及它所连接的其他服务器上的频道。IRC频道存在于一个IRC服务器上。一个频道类似于一个聊天室,频道名称必须以#符号开始,例如#irchelp。IRC机器人是一些运行在后台或者服务器上的程序,通过登陆某一个频道,分析接受到的内容并做出相应的动作。
当IRC客户端申请加入一个IRC网络时,发送nickname。
一般使用6667(6660~6669)端口。
(2)僵尸网络是什么?僵尸网络通常用于干什么?
定义:IRC语境下的僵尸网络是指IRC机器人连接成的IRC网络;采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络 。
用处:通常用于DDos攻击、分布式扫描、暴力密码破解等。
(3)蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
由于IRC协议使用TCP连接,要找出与蜜罐主机通讯的IRC主机,可以利用建立TCP连接的三次握手过程进行分析。
只需要找出蜜罐主机向哪些机器的IRC端口发送过SYN包,即可找出蜜罐主机试图通讯的IRC服务器。
IRC协议最常用的端口为6667,在WireShark中对日志文件进行分析,可以看到除了6667外其他端口上没有数据包,因此这里所有的IRC数据都使用的是6667端口。利用如下命令过滤出蜜罐主机向6667端口发送的SYN包,过滤条件为:ip.src == 172.16.134.191 && tcp.dstport == 6667
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
发现蜜罐主机与5台IRC服务器进行了连接,分别是:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、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个。grep搜索获取昵称输出行;sed:去除前缀;tr:将空格转换为换行;tr -d删除\r;grep -v:去除空行;sort -u排序并去除重复;wc -l:输出行数
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。