无进程无端口DLL木马的设计与实现论文Word下载.docx
- 文档编号:16866587
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:20
- 大小:161.27KB
无进程无端口DLL木马的设计与实现论文Word下载.docx
《无进程无端口DLL木马的设计与实现论文Word下载.docx》由会员分享,可在线阅读,更多相关《无进程无端口DLL木马的设计与实现论文Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
DynamicLinkLibrary;
No-process;
No-port
目录
论文总页数:
20页
1引言1
1.1课题背景1
1.2国内外研究现状1
1.3本课题研究的意义1
2相关理论基础1
2.1动态链接技术1
2.2应用编程接口API2
2.3木马的有关知识3
2.3.1木马的定义3
2.3.2木马发展的方向3
2.3.3木马程序分类4
3需求分析5
3.1功能需求5
3.2性能需求5
3.3开发环境需求6
3.3.1单机模式6
3.3.2VisualC++6.0开发软件6
4设计与实现6
4.1系统结构的介绍6
4.1.1木马的主体6
4.1.2木马的嵌入6
4.1.3木马的启动7
4.1.4系统的各结构关系7
4.2具体设计的步骤及相关函数8
4.2.1木马主体的设计8
4.2.2远程嵌入9
4.2.3木马的启动12
4.3DLL木马的防治13
5系统测试15
5.1测试环境:
15
5.2测试效果:
5.3测试结果:
16
结论17
参考文献18
致谢19
声明20
1引言
1.1课题背景
木马的定义为:
隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。
木马的发展经过了伪装型病毒,AIDS型木马,网络传播性木马这三代。
现在的木马功能越来越强,破坏性也越来越大,隐蔽性越来越好,所以也就越来越难查找和杀除掉。
1.2国内外研究现状
从有关的文献看,国外一些学术组织和团体机构已经开始重视研究和探讨木马的发展趋势和特点,以帮助更多的计算机用户能更好的防范木马程序的攻击,使网络攻击的危害减少到最小。
而我国虽然也开始重视网络安全领域的研究,但是在木马的研究上还处于起步阶段,所以我们更应该不断的学习研究,以提高防御木马的能力。
1.3本课题研究的意义
在这个万“马”奔腾的时代,网络上充斥着各种各样的木马,不过随着杀毒技术的进步和大家防毒意识的提高,传统木马已渐渐失去市场。
而DLL木马则“与时俱进”以其强大的生命力,继续网络中“为非作歹”。
因为DLL木马的启动方式比较特别,它不像传统的木马,启动时会在进程列表中暴露自己,它可以通过插入系统进程运行自己,具有很强的隐蔽性。
通过本设计的研究能更好的掌握DLL木马的原理和特点,使我们能更好的防范这种木马的攻击。
2相关理论基础
2.1动态链接技术
1.DLL的定义
Windows系统使用一种新的链接技术,这种被称为“动态链接”(DynamicLink)的新技术同样也是使用库文件,微软称它们为“动态链接库”——DynamicLinkLibrary,DLL的名字就是这样来的。
动态链接本身和静态链接没什么区别,也是把通用代码写进一些独立文件里,但是在编译方面,微软绕了个圈子,并没有采用把库文件加进程序的方法,而是用了把库文件做成已经编译好的程序文件,给它们开个交换数据的接口,程序员写程序的时候,一旦要使用某个库文件的一个功能函数,系统就把这个库文件调入内存,连接上这个程序占有的任务进程,然后执行程序要用的功能函数,并把结果返回给程序显示出来,在我们看来,就像是程序自己带有的功能一样。
完成需要的功能后,这个DLL停止运行,整个调用过程结束。
微软让这些库文件能被多个程序调用,实现了比较完美的共享,程序员无论要写什么程序,只要在代码里加入对相关DLL的调用声明就能使用它的全部功能。
2.DLL的类型
当您在应用程序中加载DLL时,可以使用两种链接方法来调用导出的DLL函数。
这两种链接方法是加载时动态链接和运行时动态链接。
加载时动态链接:
在加载时动态链接中,应用程序像调用本地函数一样对导出的DLL函数进行显式调用。
要使用加载时动态链接,请在编译和链接应用程序时提供头文件(.h)和导入的库文件(.lib)。
当您这样做时,链接器将向系统提供加载DLL所需的信息,并在加载时解析导出的DLL函数的位置。
运行时动态链接
在运行时动态链接中,应用程序调用LoadLibrary函数或LoadLibraryEx函数以在运行时加载DLL。
成功加载DLL后,可以使用GetProcAddress函数获得要调用的导出的DLL函数的地址。
在使用运行时动态链接时,无需使用导入库文件。
2.2应用编程接口API
API的英文全称(ApplicationProgrammingInterface),WIN32API也就是MicrosoftWindows32位平台的应用程序编程接口。
对这个定义的理解,需要追溯到操作系统的发展历史上,当WINDOWS操作系统开始占据主导地位的时候,开发WINDOWS平台下的应用程序成为人们的需要。
而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。
所以可以认为API函数是构筑整个WINDOWS框架的基石,在它的下面是WINDOWS的操作系统核心,而它的上面则是所有的华丽的WINDOWS应用程序。
但是,那时的WINDOWS程序开发还是比较复杂的工作,程序员必须熟记一大堆常用的API函数,而且还得对WINDOWS操作系统有深入的了解。
然而随着软件技术的不断发展,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。
这些优秀可视化编程环境操作简单、界面友好(诸如VB、VC++、DELPHI等),在这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能,事实上这些类库和控件都是构架在WIN32API函数基础之上的,是封装了的API函数的集合。
它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程。
有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。
实际上如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。
这也是API函数使用的场合,所以我们对待API函数不必刻来研究每一个函数的用法,那也是不现实的(能用的到的API函数有几千个呢)。
在Windows里,最基本的3个DLL文件是kernel32.dll、user32.dll、gdi32.dll。
它们共同构成了基本的系统框架。
2.3木马的有关知识
2.3.1木马的定义
木马:
指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。
2.3.2木马发展的方向
1.跨平台性:
主要是针对windows系统而言,木马的使用者当然认为一个木马可以在95/98下使用,在NT、windows2000下也可以使用更好。
在95/98下也许大家没感觉,但NT和windows2000都具有了权限的概念,这和95/98是不同的,黑客NT、windows2000的木马需要更高的手段,如控制进程等,现在的一些木马也的确做到了这一点。
2.模块化设计:
似乎模块化设计是一种潮流,winamp就是模块化的典范,现在的木马也有了模块化设计的概念,像bo、netbus、sub7等经典木马都有一些优秀的插件在纷纷问世就是一个很好的说明。
3.更新更强的感染模式:
传统的修改ini文件和注册表的手法已经不能适应更加隐秘的需要,目前的很多的木马的感染方式已经开始在悄悄转变,像前一阶段的YAI事件就给了我们很多的启发,像病毒一样的感染,感染windows下的文件,我认为这件事对木马设计者们有很多的启发。
4.即时通知:
木马是否已经装入?
目标在哪里?
如果中招的人是使用固定IP的话,还能够补救,如果目标使用的是动态IP那么怎么办?
如果要进行扫描,速度太慢,现在的木马已经有了即时通知的功能,如IRC,ICQ通知等,但还是太少,我不使用ICQ,也不是每次都用IRC,但是以后会更加的完善的,也许说不定某天木马们的即时通知功能变成了一个专门的软件也说不定。
5.更强更多的功能:
每个人都是不满足的,每当出现强大功能的时候,我们就期望更强大的功能,以后的木马的功能会如何呢?
我也不大清楚,也许会让大家大吃一惊的。
2.3.3木马程序分类
1.“反弹端口”技术
由服务器主动连接客户端,因此在互联网上可以访问到局域网里通过NAT代理(透明代理)上网的电脑,并且可以穿过防火墙(包括:
包过滤型及代理型防火墙)。
与一般的软件相反,反弹端口型软件的服务端(被控制端)主动连接客户端(控制端),为了隐蔽起见,客户端的监听端口一般开在80(提供HTTP服务的端口),这样,即使用户使用netstat等端口扫描软件检查自己的端口,发现的也是类似TCP UserIP:
1026 ControllerIP:
80ESTABLISHED的情况,稍微疏忽一点你就会以为是自己在浏览网页(防火墙也会这么认为的)。
2.线程插入技术
无进程、无端口的DLL(动态链接库)木马。
这种木马涉及比较高深的编程技术(WindowsSocket2SPI技术),所谓的无进程实际上是将DLL木马,注入到其它EXE文件中,使其成为木马的合法载体。
(一般黑客会选择Explorer.exe、Svchost.exe等系统关键性服务程序,这样用户就很难终止木马的运行)。
而所谓的无端口,实际上是重复利用了机器已经打开的端口(如80、135,139等常用端口)来传送数据,这样就避免了开新端口,也能骗过防火墙。
并且这样的端口复用是在保证端口默认服务正常工作的条件下进行复用,这是它区别于端口劫持的地方。
3.多线程技术
在操作系统中,进程是存储器、外设等资源的分配单位,同时也是处理器调度的对象,为提高进程内的并发性,Windows中引入了线程的概念,一个进程可以同时拥有多个并发线程。
顾名思义,三线程就是指一个木马进程开启了三个线程,其中一个为主线程,负责远程控制的工作。
另外两个为辅助线程,其中一个辅助线程称为监视线程,它负责检查木马程序是否被删除和是否被停止自启动,举例而言,一般木马侵入一台电脑后会创建一个备份文件,并在注册表中添加键值,以实现自启动。
这个监视线程会定时检查木马程序和注册表中的键值是否存在,如果不存在则使用备份文件恢复木马,并向注册表添加自启动键值。
另外一个辅助线程称为守护线程,它驻留在别的EXE文件内,与木马进程同步,一旦木马进程被停止,它就会重新启动该木马,并将自身数据赋给它,类似断点续传,这样就能保证木马程序一直运行。
3需求分析
3.1功能需求
无进程,实际上是将DLL木马,注入到其它EXE文件中,使其成为木马的合法载体。
而所谓的无端口,实际上是重复利用了机器已经打开的端口来传送数据,这样就避免了开新端口,也能骗过防火墙。
在实现木马无进程无端口的特点的前提下,木马会实现一些破坏性的作用,以损害计算机的文件功能,比如破坏word文档的正常运行。
木马的具体功能模块和特点如图1所示:
图1功能设计流程图
3.2性能需求
整个系统应当操作简便,界面友好,维护简便。
木马要求运行稳定,执行速度快,装载和卸载的安全性高。
软件系统本身运行对计算机硬件平台和操作系统平台要求适中。
3.3开发环境需求
3.3.1单机模式
本设计主要应用于一台个人计算机,不要求有网络连接,可以在一台计算机中完成演示的功能,没有客户端和服务器端,只是通过木马的演示程序把木马植入木马所在的计算机便能实现木马的功能。
3.3.2VisualC++6.0开发软件
本设计通过VisualC++6.0程序开发软件进行开发和设计。
C++作为一种面向对象的程序设计语言,具有对象、类、方法、消息等概念,同时支持面向对象方法的封装机制和继承、多态性机制,具有强大的开发功能。
VisualC++6.0是基于Windows环境下的可视化的集成开发环境,将编译、编辑、链接和执行集成为一体,适用于32位的程序和各种系统。
4设计与实现
4.1系统结构的介绍
4.1.1木马的主体
千万别把木马模块写得真的像个API库一样,这不是开发WINAPI。
DLL木马可以导出几个辅助函数,但是必须有一个过程负责主要执行代码,否则这个DLL只能是一堆零碎API函数。
如果涉及一些通用代码,可以在DLL里写一些内部函数,供自己的代码使用,而不是把所有代码都开放成接口,这样它自己本身都难调用了,更不可能发挥作用。
DLL木马的标准执行入口为DllMain(),所以必须在DllMain()里写好DLL木马运行的代码,或者指向DLL木马的执行模块。
4.1.2木马的嵌入
Windows中,每个进程都有自己的私有内存空间,别的进程是不允许对这个私人领地进行操作的,但是,实际上我们仍然可以利用种种方法进入并操作进程的私有内存,这就是动态嵌入,它是将自己的代码嵌入正在运行的进程中的技术。
动态嵌入有很多种,最常见的是钩子、API以及远程线程技术,现在的大多数DLL木马都采用远程线程技术把自己挂在一个正常系统进程中。
其实动态嵌入并不少见,罗技的MouseWare驱动就挂着每一个系统进程。
远程线程技术就是通过在另一个进程中创建远程线程(RemoteThread)的方法进入那个进程的内存地址空间。
在DLL木马的范畴里,这个技术也叫做“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上去执行了,没有新进程产生,要想让木马停止惟有让挂接这个木马DLL的进程退出运行。
4.1.3木马的启动
直接把这个DLL加入系统启动项目是不可以的。
前面说过,DLL不能独立运行,所以无法在启动项目里直接启动它。
要想让木马跑起来,就需要一个EXE使用动态嵌入技术让DLL搭上其他正常进程的车,让被嵌入的进程调用这个DLL的DllMain函数,激发木马运行,最后启动木马的EXE结束运行,木马启动完毕。
启动DLL木马的EXE是个重要角色,它被称为Loader,如果没有Loader,DLL木马就是破烂一堆,因此,一个算得上成熟的DLL木马会想办法保护它的Loader不会那么容易被毁灭。
Loader可以是多种多样的,Windows的rundll32.exe也被一些DLL木马用来做了Loader,这种木马一般不带动态嵌入技术,它直接挂着rundll32进程运行,用rundll32的方法(rundll32.exe[DLL名],[函数][参数])像调用API一样去引用这个DLL的启动函数激发木马模块开始执行,即使你杀了rundll32,木马本体还是在的,一个最常见的例子就是3721中文实名,虽然它不是木马。
注册表的AppInit_DLL键也被一些木马用来启动自己,如求职信病毒。
利用注册表启动,就是让系统执行DllMain来达到启动木马的目的。
因为它是kernel调入的,对这个DLL的稳定性有很大要求,稍有错误就会导致系统崩溃,所以很少看到这种木马。
4.1.4系统的各结构关系
虽然DLL不能让自己运行,可是Windows在加载DLL的时候,需要一个入口函数,就如同EXE的main一样,否则系统无法引用DLL。
所以根据编写规范,Windows必须查找并执行DLL里的一个函数DllMain作为加载DLL的依据,这个函数不作为API导出,而是内部函数。
DllMain函数使DLL得以保留在内存里,有的DLL里面没有DllMain函数,可是依然能使用,这是因为Windows在找不到DllMain的时候,会从其它运行库中找一个不做任何操作的缺省DllMain函数启动这个DLL使它能被载入,并不是说DLL可以放弃DllMain函数。
所以在木马的主体必须通过应用程序进行调动,各部分的关系如图2所示:
图2结构关系图
4.2具体设计的步骤及相关函数
4.2.1木马主体的设计
木马的主体包含了木马需要实现的具体的功能和作用,在这个设计里木马只是起到了一些破坏作用,并没有类似远程控制的功能,而是只针对了木马所在的计算机进行了一个小的破坏,即破坏了该计算机word文档,使他不能正常开启。
木马主体的这个功能设计代码如下:
DWORDWINAPIMainThread(LPVOIDlpParam)
{
//不停循环查找word进程,存在即杀掉
while
(1)
{
HANDLESnapshot;
Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息
PROCESSENTRY32processListStr;
processListStr.dwSize=sizeof(PROCESSENTRY32);
BOOLreturn_value;
return_value=Process32First(Snapshot,&
processListStr);
//获得系统进程链表中第一个进程的信息
while(return_value)
{
HANDLEProcessHandle;
ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processListStr.th32ProcessID);
//利用数组ID指定的获得存在的一个进程的句柄
if(stricmp(processListStr.szExeFile,"
winword.exe"
)==0)
{
TerminateProcess(ProcessHandle,0);
}
return_value=Process32Next(Snapshot,&
}
Sleep(2000);
}
}
1.整个木马主体都写在MainThread()这个函数中,方便DLL函数调用木马主体。
2.使用Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)函数获得当前系统的进程、堆(heap)、模块(module)或线程的快照信息。
3.用Process32First(Snapshot,&
processListStr)获得系统进程链表中第一个进程的信息。
4.ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processListStr.th32ProcessID)利用数组ID指定的获得存在的一个进程的句柄。
5.判断第一个进程是否为word进程,if(stricmp(processListStr.szExeFile,"
)==0)。
6.如果第一个进程是word进程,就利用TerminateProcess(ProcessHandle,0)函数结束进程。
4.2.2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 端口 DLL 木马 设计 实现 论文