恶意代码的实现技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
恶意代码的实现技术
摘要:本文着重讲述恶意代码实现技术中的攻击渗透技术和隐藏技术。
关键词:本地攻击网络攻击进程隐藏通讯隐藏
在实现恶意代码的过程中,主要涉及到攻击渗透技术、自动升级技术、随机启动技术、隐藏技术、远程控制技术、破坏技术等六大技术体系。
这些技术中,攻击渗透技术和隐藏技术是对恶意代码编写者要求较高的技术,也是影响最为深远的技术,这两种技术的重大创新可能会影响整个安全防护体系。下面我将对这两种技术做详细的阐述。
1 攻击渗透技术
攻击渗透技术的任务是保证恶意代码能够植入到目标主机中去。常见的攻击渗透方式有两种:本地攻击和网络攻击。本地攻击是早期病毒常用的攻击方法,主要攻击对象是本地存储体,包括磁盘的引导区或者是磁盘上存储的文件等。网络攻击过程包括邮件攻击和漏洞攻击两种方式。邮件攻击的主要方式是通过获取受害主机内部存储的邮件地址列表作为邮件接收者,然后将恶意代码自身作为邮件的附件发送出去。漏洞攻击技术主要有弱口令漏洞攻击和缓冲溢出漏洞攻击。典
型的黑客网络攻击过程包括信息搜集、弱点分析、攻击渗透、痕迹清除、潜伏等待五个阶段。恶意代码的攻击过程和典型的黑客攻击过程并不完全相同,由于恶意代码本身短小精悍,功能相对单一,不可能完成过多的功能,并且具有自主攻击能力的恶意代码,一般都会有明显异常的网络行为,如果受害对象具有较强的安全意识,采取必要的安全措施,相对来说是比较容易防范的,只有在受害对象的网络安全意识不强的情况下才能完成攻击任务。所以,恶意代码的攻击渗透过程很少考虑到清除痕迹,或者只是简单的进行日志清理工作。恶意代码的攻击过程为:创造攻击环境、构造攻击目标、实施攻击过程、等待攻击结果。
创造攻击环境的方法和具体攻击方法有关。在利用邮件进行攻击的时候,创造的条件需要能够发送邮件,实现方式可以控制现有的邮件发送程序,比如outlook,也可以自己利用socket 接口实现邮件传输协议,编写自己的邮件发送程序。在利用缓冲溢出漏洞攻击的时候,需要确定溢出点,构造shellcode 和攻击数据。
构造攻击目标的方式也和攻击技术相关,对于邮件攻击,一般恶意代码都是从outlook的邮件地址列表里面寻找攻击目标,对于缓冲溢出漏洞攻击,一般都是使用random函数随机生成一个目标IP地址,根据溢出服务确定一个端口号。
利用邮件攻击的攻击过程就是发送邮件,利用缓冲溢出漏洞攻击的攻击过程就是发送shellcode等攻击数据。
邮件攻击的攻击结果需要接收邮件的用户参与,如果接收邮件的用户没有打开带有恶意代码的邮件,攻击就不会成功,所以完成攻击的周期比较长。缓冲溢出漏洞攻击成功以后的攻击结果就是直接控制受害主机。
2 隐藏技术
隐藏的目的是使常用的检测工具无法检测到恶意代码的存在。可以说,在某种程度上,恶意代码的隐藏模块是和检测工具在争夺对操作系统底层的控制权,恶意代码的隐藏模块试图接管其他检测程序检测动作,并从检测结果中删除恶意代码需要隐藏的信息。由于用户查看恶意代码的查看点包括注册表的启动项、恶意代码的网络行为、恶意代码的文件存在形态、恶意代码的运行进程等,隐藏的功能就包括注册表隐藏、文件隐藏、通讯隐藏和进程隐藏。隐藏技术是恶意代码的关键技术之一,一个好的隐藏技术可以延长恶意代码的生命周期。
现在的网络用户大部分都安装了个人防火墙,一般的个人防火墙都会对访问网络的进程进行限制,而稍有经验的网络用户会经常使用进程察看工具察看系统启动的进程,也会使用netstat命令查看网络连接,恶意代码隐藏技术首先需要保证使用常用的检测工具无法查看到正在运行的进程,同时也要保证个人防火墙没法检测到恶意代码网络活动。
2.1 进程隐藏
有两种有效、简单的进程隐藏方法,一种是使用和系统进程相同的文件名,比如,正常情况下系统总是会启动多个svchost.exe的进程,而这个程序存在于%SYSTEM%\SYSTEM32目录下,而恶意代码将自己也命名为svchost.exe但是存储在%system%\目录下,这样当用户使用进程查看工具查看的时候,很有可能认为这是一个正常进程。另外一种方法就是把恶意代码做成一个动态链接库,然后通过rundll32.exe 加载,由于很多正常的用户程序也是通过这种方式加载的,进程查看工具通常只显示执行程序名rundll32.exe而不显示其执行的对象。
2.2 通讯隐藏
为了绕过防火墙的检测,恶意代码通常使用远程注入方式隐藏通讯过程。虽然微软声称在Windows中,每个进程都有自己的私有内存地址空间,当使用指针访问内存时,一个进程无法访问另一个进程的内存地址空间,但是一个进程仍然有方法将一段代码插入到另外一个进程中,常用的方法有三种:
(1)使用注册表插入DLL恶意代码可以通过修改注册表中的[HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentV ersion\Windows\AppInit_DLLs 来达到插入进程的目的。这种插入方式在修改注册表后需要重新启动系统才能完成进程插入过程。
(2)使用挂钩(Hook)插入DLL系统的挂钩机制(Hook)是类似于
DOS时代的“中断”一种技术,通过调用SetWindowsHookEx 函数(一个特别的Win32API函数),可以将一个用户定义的函数挂钩到某个消息上,这样当用户程序需要使用这个消息的时候,将首先运行用户定义的函数。
(3)使用远程线程注入插入DLL在Windows 2000及以上的系统中提供了这个“远程线程”机制,可以通过一个系统API函数CreateRemoteThread来向另一个进程中创建线程(插入DLL)。这种方法只能在Windows 2000及以上系统中使用。
参考文献
[1] 孙淑华,马恒太,张楠,等.内核级木马隐藏技术研究与实践[J].微电子学与计算机,2004.3(21)期.
[2] 夏春和,李肖坚,赵沁平.基于入侵诱骗的网络动态防御研究[J].计算机学报,2004.12.
[3] 郑辉.主动Internet蠕虫防治技术-接种疫苗[J].计算机工程与应用,2004(25)期.
[4] 施勇,薛质,李建华.基于SPI及远程线程技术的新型木马研究[J].计算机工程,2005(7).