赞
踩
目录
(一)恶意代码(Malicious Code)是指没有作用却会带来危险的代码,一个最安全的定义是把所有不必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,包括所有可能与某个组织安全策略相冲突的软件。具有如下共同特征:
(1) 恶意的目的
(2) 本身是计算机程序
(3) 通过执行发生作用
有些恶作剧程序或者游戏程序不能看作是恶意代码。对滤过性病毒的特征进行讨论的文献很多,尽管它们数量很多,但是机理比较近似,在防病毒程序的防护范围之内,更值得注意的是非滤过性病毒。
(二)恶意代码分类
恶意代码的分类标准主要是代码的独立性和自我复制性,独立的恶意代码是指具备一个完整程序所应该具有的全部功能功能,能够独立传播、运行的恶意代码,这样的恶意代码不需要寄宿在另一个程序中。非独立恶意代码只是一段代码,必须嵌入某个完整的程序中,作为该程序的一个组成部分进行传播和运行。对于非独立恶意代码,自我复制过程就是将自身嵌入宿主程序的过程,这个过程也称为感染宿主程序的过程。对于独立恶意代码,自我复制过程就是将自身传播给其他系统的过程。不具有自我复制能力的恶意代码必须借助其他媒介进行传播。
病毒(Virus):很小的应用程序或一串代码,能够影响主机应用。两大特点:繁殖(propagation)和破坏(destruction)。繁殖功能定义了病毒在系统间扩散的方式,其破坏力则体现在病毒负载中。
特洛伊木马(Trojan Horses):可以伪装成他类的程序。看起来像是正常程序,一旦被执行,将进行某些隐蔽的操作。比如一个模拟登录接口的软件,它可以捕获毫无戒心的用户的口令。可使用HIDS检查文件长度的变化
内核套件(Root工具):是攻击者用来隐藏自己的踪迹和保留root访问权限的工具
逻辑炸弹(Logic Bombs):可以由某类事件触发执行,例如某一时刻(一个时间炸弹),或者是某些运算的结果。软件执行的结果可以千差万别,从发送无害的消息到系统彻底崩溃。
蠕虫(Worm): 像病毒那样可以扩散,但蠕虫可以自我复制,不需要借助其他宿主
僵尸网络(Botnets):是由C&C服务器以及僵尸牧人控制的僵尸网络。
间谍软件(Spyware ):间谍软件就是能偷偷安装在受害者电脑上并收集受害者的敏感信息的软件。
恶意移动代码:移动代码指可以从远程主机下载并在本地执行的轻量级程序,不需要或仅需要极少的人为干预。移动代码通常在Web服务器端实现。恶意移动代码是指在本地系统执行一些用户不期望的恶意动作的移动代码。
后门:指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。攻击者可以通过使用后门工具对目标主机进行完全控制。
广告软件( Adware):自动生成(呈现)广告的软件。
上述分类只是个大概,各种恶意代码常常是你中有我,我中有你。而且在实际中,攻击者经常会将多种恶意代码组合起来使用。
(三)不同恶意代码的区别
病毒侧重于破坏系统和程序的能力;
木马侧重于窃取敏感信息的能力;
蠕虫侧重于网络中的自我复制能力和自我传染能力。
(四)恶意代码基本技术
1、隐蔽技术
(1)本地隐藏
防止本地系统管理人员觉察而采取的隐蔽手段。
文件隐蔽:将恶意代码的文件命名为与系统的合法程序文件名相似的名称,或者干脆取而代之,或者将恶意代码文件附加到合法程序文件中。
进程隐蔽:附着或替换系统进程,使恶意代码以合法服务的身份运行,从而隐蔽恶意代码。还可以通过修改进程列表程序,修改命令行参数使恶意代码进程的信息无法查询。也可以借助RootKit 技术实现进程隐蔽。
网络连接隐蔽:借用现有服务的端口实现网络连接隐蔽,如使用80端口,攻击者在自己的数据包设置特殊标识,通过标识识别连接信息,未标识的WWW 服务网络包仍转交给原服务程序处理。
编译器隐蔽:由编译器在对程序代码进行编译时植入恶意代码,从而实现恶意代码在用户程序中的隐藏和原始分发攻击。恶意代码的植入者是编译器开发人员。
RootKit隐蔽:利用适当的Rootkit工具,可以很好的隐蔽自身或指定的文件、进程和网络连接等,很难被管理员发现。
(2)网络隐藏
网络隐藏主要是指通信内容和传输通道的隐藏。
通信内容隐蔽:使用加密算法对所传输的内容进行加密能够隐蔽通信内容。
传输通道隐藏:利用隐蔽通道技术,实现对传输通道的隐蔽。(隐蔽通道(Covert Channel)是一个不受安全机制控制的、利用共享资源作为通信通路的信息流。包括有:存储隐蔽通道和时间隐蔽通道。)
2、生存技术
恶意代码的生存技术主要包括四种类型:
反跟踪技术:通过提高恶意代码分析难度,减少被发现的可能性
加密技术:利用加密技术,提高恶意代码自身保护能力
模糊变换技术:利用模糊变换技术,恶意代码可以躲避基于特征码的恶意代码检测系统,提高生存能力
自动生产技术:利用自动生成技术,在已有的恶意代码的基础上自动生成特征码不断变化的新的恶意代码,从而躲避基于特征码的恶意代码检测。
3、攻击技术
进程注入技术:恶意代码程序将自身嵌入到操作系统和网络系统的服务程序中,不但实现了自身的隐藏,而且还能随着服务的加载而启动。
三线程技术:恶意代码进程同时开启三个线程,其中一个为主线程,负责远程控制的工作。另外两个辅助线程分别是监视和守护线程。一旦发现主线程被删除,则立即设法恢复。
端口复用技术:重复利用系统或网络服务打开的端口(如80端口),可以欺骗防火墙,具有很强的欺骗性。
超级管理技术:恶意代码采用超级管理技术对反恶意代码软件系统进行攻击,使其无法正常运行。
端口反向连接技术:指使恶意代码的服务端(被控制端)主动连接客户端(控制端)的技术。
缓冲区溢出技术:恶意代码利用系统和网络服务的安全漏洞植入并且执行攻击代码,造成缓冲区溢出,从而获得被攻击主机的控制权。
(五)恶意代码传播方式及防范手段
1、传播方式
传播途径
利用操作系统和应用软件的漏洞进行传播
通过网站传播
在网页上挂载恶意代码
如:主机流览该网页时,恶意代码会自动下载到主机执行。
将恶意代码与正常应用软件捆绑
如:主机下载正常软件运行时,恶意代码也随之自动运行。
利用移动媒介传播
如:主机访问U盘和硬盘时,恶意代码可以自动执行。
利用用户之间的信任关系传播
如:冒充用户发送虚假链接、图片、邮件等。
总的来说,恶意代码的传播是因为用户的软件出现了漏洞、操作不慎或者是两者的结合造成。
(1)病毒。病毒具备有自我复制能力,一般嵌入主机的程序中。当被感染文件执行操作,如,用户打开一个可执行文件时,病毒就会自我繁殖。病毒一般都具有破坏性。
(2)木马。这种程序从表面上看没有危害,但实际上却隐含着恶意的意图和破坏的作用。一些木马程序会通过覆盖系统中已经存在的文件的方式存在于系统之中;另外有的还会以软件的形式出现,因为它一般是以一个正常的应用程序身份在系统中运行的,所以这种程序通常不容易被发现。
(3)蠕虫。蠕虫是一种可以自我复制的完全独立的程序,它的传播不需要借助被感染主机中的程序和用户的操作,而是通过系统存在的漏洞和设置的不安全性来进行入侵,如通过共享的设置来侵入。蠕虫可以自动创建与它的功能完全相同的副本,并能在无人干涉的情况下自动运行,大量地复制占用计算机的空间,使计算机的运行缓慢甚至瘫痪。
2、攻击机制
恶意代码的行为表现各异,破坏程度千差万别,但基本作用机制大体相同,其整个作用过程分为6个部分。
(1)侵入系统。侵入系统是而已代码实现其恶意目的的必要条件。恶意代码入侵的途径很多,包括前面传播方式的各种途径。如:从互联网下载的程序本身就可能含有而已代码;接收已感染恶意代码的电子邮件;从光盘或U盘往系统上安装软件;黑客或者攻击者故意将恶意代码植入系统等。
(2)维持或提升权限。恶意代码的传播与破坏必须盗用用户或者进程的合法权限才能完成。
(3)隐蔽策略。为了不让系统发现恶意代码已经侵入系统,恶意代码可能会改名、删除源文件或者修改系统的安全策略来隐藏自己。
(4)潜伏。恶意代码侵入系统后,等待一定的条件,并具有足够的权限时,就发作并进行破坏活动。
(5)破坏。恶意代码本质具有破坏性,其目的是造成信息丢失,泄密,破坏系统完整性等。
(6)重复(1)至(5)对新的目标实施攻击过程。
3、防范手段
通用恶意代码检测技术包括静态和动态检测技术:
(1)基于特征的扫描技术
建立恶意代码的特征文件,在扫描时根据特征进行匹配查找
(2)校验和法
对需要监控的文件生成校验,周期性的生成新校验和并与原始值比较
(3)沙箱技术
根据程序需要的资源和拥有的权限建立运行沙箱,可以安全地检测和分析程序行为
(4)基于蜜罐的检测技术
将主机伪装为运行着脆弱的服务或系统,同时安装强大的监测系统。
其中基于特征的扫描技术和校验和法是静态检测技术,沙箱技术和基于蜜罐的检测技术属于动态检测技术。
动手实践任务一
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
解压下载的压缩文件,将RaDa放入虚拟机WinXP的桌面
cd 桌面
进入桌面后输入 file RaDa.exe
,查看该文件类型,这是一个有图形化界面(GUI)的 Win32 PE(可移植可执行)程序
使用PEiD工具查看文件加壳类型
使用Windows xp attack虚拟机,使用指令file RaDa.exe查看文件类型
可以看到PEiD显示的是一个版本为0.89.6的UPX壳
用指令strings RaDa.exe,可以发现显示的是乱码,所以我们需要进行一个脱壳的操作
使用Windowsxp自带的超级巡警之虚拟机自动脱壳器v1.3软件进行脱壳。
这里也识别出了是一个版本为0.89.6的UPX壳,脱完之后输出为RaDa_unpacked.exe
打开IDA Pro Free选择脱壳之后的文件RaDa_unpacked.exe,可以得到作者的信息DataRescue sa/nv和邮箱。
动手实践任务二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
IDA Pro打开crackme1.exe,在string窗口中可以看到有两张反馈是上面我们得到的
在view中打开Function Call,可以看到sub_401280函数下的输出,所以重点关注该函数
view中打开flow chart,可以找到sub_401280函数,放大后看汇编代码
可以看到cmp指令是比较,jmp指令是跳转,如果是FALSE则返回“I THINK U ARE MISSING SOMETHING”,如果是TRUE则接着判断
接着是strcmp指令与字符串"I KNOW THE SECRET"相比较,jz跳转。
如果是FALSE就返回"Pardon? What did you say?"如果正确则返回"You know how to speak to programs, Mr.。。。"
所直接输入字符串"I KNOW THE SECRET"即可
分析crackme2.exe同样使用IDA Pro打开crackme2.exe,在string窗口中可以看到有反馈
在view中打开Function Call,可以看到sub_401280函数下的输出,所以还是重点关注该函数
11.还是在view中打开flow chart,可以找到sub_401280函数,放大后看汇编代码
strcmp指令与程序名相比较,jz指令跳转。
如果是FALSE就返回"I HAVE AN IDENTITY PROBLEM"如果正确则返回"You know how to speak to programs, Mr.。。
分析实践任务一:
分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
答:md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。32位PE GUI可执行程序,同时这是一个UPX加壳文件。
2、找出并解释这个二进制文件的目的;
答:用户上网,就得到了攻击者的指令,并且攻击者可以完全控制该系统(指令),所以这应该是一个后门程序或者僵尸程序。
3、识别并说明这个二进制文件所具有的不同特性;
答:RaDa.exe被执行时,它会将自身安装到系统C盘中,并通过修改注册表的方式使得每次系统启动,启动后主要就是以下过程:(1)从指定的web服务器请求指定的web页面;(2)解析获得的web页面,获取其中的指令;(3)执行解析出来的指令,主要的指令上面给出;(4)等待一段时间后继续按照这个循环执行。
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
答:UPX加壳;通过查看网卡的MAC
地址以及查看VMware Tools
的注册表项来判断操作系统是否运行在VMware虚拟机上,如果是,则使用—-authors
参数时将不会输出作者信息;Starting DDoS Smurf remote attack
字符串可能让别人联想这是DDos攻击。
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
答:首先这个样本不具有传播和感染的性质,所以它不属于病毒和蠕虫。然后它也没有将自己伪装成有用的程序以欺骗用户运行,所以他也 不属于木马。所以我认为他是一个后门程序或者僵尸程序。
6、给出过去已有的具有相似功能的其他工具;
答:Bobax,2004年发现的木马,也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。还有特洛伊木马Setiri
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
答:是Raul siles和David Perze于2004年编写的。
开Filemon(文件),Regmon(注册表),Wireshark(网络)三个软件进行监测,然后在cmd窗口运行RaDa.exe。观察Filemon我们可以看到程序文件RaDa.exe复制到了C:\RaDa\bin目录下,并且新建了temp目录。
观察Regmon,我们可以看到进行了很多注册表的操作,其中有一个在自启动项里面加入了RaDa: C:\RaDa\bin\RaDa.exe
打开wireshark,ip.src == 10.10.10.10 or ip.dst == 10.10.10.10
进行过滤。我们可以看到尝试进行http登录,是要访问html网页。
利用md5sum RaDa.exe指令得到其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。
file RaDa.exe识别出这是32位PE文件
脱壳,直接到利用IDA Pro进行分析。首先把Type改成unicode类型,看到下面几种字符串。
可以看到命令行参数都在sub_405E40这个函数中,这个函数应该就是处理命令行参数的。RaDa_commands.html这个应该就是我们之前进行访问的那个html网页。
分析实践任务二:
Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
1、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端口。注意:攻击者滥用IRC构建僵尸网络时,可能使用任意的端口构建IRC僵尸网络控制信道,那么基于端口识别服务不再可靠,要进行基于应用协议特征进行识别(如USER/NICK)。
2、僵尸网络是什么?僵尸网络通常用于什么?
答:僵尸网络是攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。僵尸网络,是互联网上受到黑客集中控制的一群计算机,往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”
3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
答:使用Wireshark打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667,因为我们上面的分析知道IRC通过6667端口,筛选之后,我们可以找到五个IRC服务器,分别为:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172
4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
使用命令tcpflow -r botnet_pcap_file 'host 209.196.44.172 and port 6667'
(读取文件,筛选host和端口6667后进行分流),执行之后我们将获得三个文件:172.016.134.191.01152-209.196.044.172.06667、209.196.044.172.06667-172.016.134.191.01152和report.xml。接着执行export LC_COLLATE='C'
和export LC_CTYPE='C'
避免出现字符编码问题
然后进行搜索(grep搜索获取昵称输出行sed去除前缀,g表示全局,tr将空格转换为换行,tr -d删除\r,grep -v就是NOT指令,去除空行,sort -u排序并去除重复,wc -l输出行数)
5、那些IP地址被用于攻击蜜罐主机?
tcpdump -n -nn -r botnet.pcap 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt
6、攻击者尝试攻击了那些安全漏洞?
ip.addr == 172.16.134.191 and tcp.port == 135
筛选端口135的数据。可看出端口135的数据很少,且并没有实际数据交互,推测是在探测。
端口25也应当只是扫描。
139出现了SMB协议,但并未有实际数据交互,应当是SMB查点。
端口80 发现http协议中异常字段,类似于缓冲区溢出攻击的特征
ip.addr == 172.16.134.191 and tcp.port == 80 and http
,发现后续还有不同攻击,应该是目录穿越攻击。
tcp.stream eq 1340
。验证80端口的外流流量时,追踪后发现是一种红色代码蠕虫攻击。
分析UDP的137端口,这个端口是NetBIOS相关协议,ip.dst == 172.16.134.191 and udp.port == 137。可以看到这里的所有IP地址进行访问的负载都是相同的,都是KAAAAA....AA的形式,这里推测应该是在进行NetBIOS查点
这次实践内容多,参考了很多资料和别的同学遇到的问题,避免踩坑,耐心一步一步操作就可以。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。