无进程无端口DLL木马的设计与实现1论文 - 图文

更新时间:2024-06-04 02:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

无进程无端口DLL木马的设计与实现

摘 要

随着网络技术的发展,越来越多的人开始接触到互联网。在人们感叹互联网功能强大的同时,面对了越来越多的网络信息安全的问题。网络木马程序对于网络信息安全是一个极大的挑战,它不同于计算机病毒,它能够盗取他人主机上的信息,或者拦截、监听、篡改他人发布到互联网上的信息。

DLL木马正是在研究木马程序的工作原理和工作方式的前提下,利用线程插入技术设计并开发出一种动态连接的木马,并且实现无进程和无端口的特点。木马设计主要侧重于将进程隐藏、端口隐藏和破坏word文档这三个功能实现并且有机的结合起来,对木马的远程注入有待进一步研究。

论文介绍了木马程序的工作原理和实现的功能,描述了主要的API函数,并且总结了一些查杀DLL木马的方法。

关键词:木马;线程插入;动态链接库;无进程

The Design and Implement of No-process and No-port DLL

Trojan Horse

Abstract

With the development of the network technology, more and more people begin to use Internet. At the time people found the powerful function of the Internet, people have to face to more and more information security problems in the Internet. The Trojan horse program is a big challenge to the information security .It is different from computer’s virus. It could obtain the information of others’ computers and hold up, monitor, falsify others’ information which is distributed in the Internet.

The DLL Trojan horse makes use of the thread injecting technology to design and implement a dynamic link of Trojan horse after the study of Trojan horse work theory and mode. It has realized the features of no- process and no-port. The design of Trojan horse is to realize these three functions: hiding process and ports, destroying word files. The technology about long-distance injecting will be researched in the future.

The thesis introduces the work principle of Trojan horse program and the functions of realization. It also gives full descriptions of main API functions and summarizes some methods of killing DLL Trojan horse.

Key words: Trojan horse; Thread injecting; Dynamic Link library;

No-process

目录

论文总页数:19页

1 引言....................................................................... 1 1.1 课题背景 ............................................................... 1 1.2 国内外研究现状 ......................................................... 1 1.3 本课题研究的意义 ....................................................... 1 2 相关理论基础 ............................................................... 1 2.1 动态链接技术 ........................................................... 1 2.2 应用编程接口 API ....................................................... 2 2.3 木马的有关知识 ......................................................... 3 2.3.1 木马的定义 ......................................................... 3 2.3.2 木马发展的方向 ..................................................... 3 2.3.3 木马程序分类 ....................................................... 4 3 需求分析 ................................................................... 4 3.1 功能需求 ............................................................... 4 3.2 性能需求 ............................................................... 5 3.3 开发环境需求 ........................................................... 5 3.3.1 单机模式 ........................................................... 5 3.3.2 Visual C++ 6.0开发软件 ............................................ 6 4 设计与实现 ................................................................. 6 4.1 系统结构原理的介绍 ..................................................... 6 4.1.1 木马的主体 ......................................................... 6 4.1.2 木马的注入 ......................................................... 6 4.1.3 木马的启动 ......................................................... 6 4.1.4 系统的各结构关系 ................................................... 7 4.2 具体设计的步骤及相关函数 ............................................... 8 4.2.1 木马功能的设计 ..................................................... 8 4.2.2 木马的注入 ......................................................... 9 4.2.3 木马的启动 ........................................................ 12 4.3 木马的防治 ............................................................ 13 5 系统测试 .................................................................. 15

5.1 测试环境: ............................................................ 15 5.2 测试效果: ............................................................ 15 5.3 测试结果: ............................................................ 16 结 论 .................................................................... 16 参考文献 .................................................................... 17 致 谢 .................................................................... 18 声 明 .................................................................... 19

1 引言

1.1 课题背景

木马的定义为:隐藏在正常程序中的一段具有特殊功能的恶意代码,是具

备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。木马的发展经过了伪装型病毒,AIDS型木马,网络传播性木马这三代。现在的木马功能越来越强,破坏性也越来越大,隐蔽性越来越好,所以也就越来越难查找和杀除掉。

1.2 国内外研究现状

从有关的文献看,国外一些学术组织和团体机构已经开始重视研究和探讨木马的发展趋势和特点,以帮助更多的计算机用户能更好的防范木马程序的攻击,使网络攻击的危害减少到最小。而我国虽然也开始重视网络安全领域的研究,但是在木马的研究上还处于起步阶段,所以我们更应该不断的学习研究,以提高防御木马的能力。

1.3 本课题研究的意义

在这个万“马”奔腾的时代,网络上充斥着各种各样的木马,不过随着杀毒技术的进步和大家防毒意识的提高,传统木马已渐渐失去市场。而DLL木马则“与时俱进”以其强大的生命力,继续网络中“为非作歹”。因为DLL木马的启动方式比较特别,它不像传统的木马,启动时会在进程列表中暴露自己,它可以通过插入系统进程运行自己,具有很强的隐蔽性。通过本设计的研究能更好的掌握DLL木马的原理和特点,使我们能更好的防范这种木马的攻击。

2 相关理论基础

2.1 动态链接技术

1.DLL的定义

Windows系统使用一种新的链接技术,这种被称为“动态链接”(Dynamic Link)的新技术同样也是使用库文件,微软称它们为“动态链接库”——Dynamic Link Library,DLL的名字就是这样来的。动态链接本身和静态链接没什么区别,也是把通用代码写进一些独立文件里,但是在编译方面,微软绕了个圈子,并没有采用把库文件加进程序的方法,而是用了把库文件做成已经编译好的程序文件,给它们开个交换数据的接口,程序员写程序的时候,一旦要使用某个库文件的一个功能函数,系统就把这个库文件调入内存,连接上这个程序占有的任务进程,然后执行程序要用的功能函数,并把结果返回给程序显示出来,在我们看来,就像是程序自己带有的功能一样。完成需要的功能后,这个DLL停止运行,整个调用过程结束。微软让这些库文件能被多个程序调用,实现了比较完美的共享,程序员无论要写什么程序,只要在代码里加入对相关DLL的

第 1 页 共 19 页

调用声明就能使用它的全部功能。

2. DLL 的类型

当您在应用程序中加载 DLL 时,可以使用两种链接方法来调用导出的 DLL 函数。这两种链接方法是加载时动态链接和运行时动态链接。

加载时动态链接:

在加载时动态链接中,应用程序像调用本地函数一样对导出的 DLL 函数进行显式调用。要使用加载时动态链接,请在编译和链接应用程序时提供头文件 (.h) 和导入的库文件 (.lib)。当您这样做时,链接器将向系统提供加载 DLL 所需的信息,并在加载时解析导出的 DLL 函数的位置。

运行时动态链接

在运行时动态链接中,应用程序调用 LoadLibrary 函数或 LoadLibraryEx 函数以在运行时加载 DLL。成功加载 DLL 后,可以使用 GetProcAddress 函数获得要调用的导出的 DLL 函数的地址。在使用运行时动态链接时,无需使用导入库文件。

2.2 应用编程接口 API

API的英文全称(Application Programming Interface),WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。对这个定义的理解,需要追溯到操作系统的发展历史上,当WINDOWS操作系统开始占据主导地位的时候,开发WINDOWS平台下的应用程序成为人们的需要。而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。所以可以认为API函数是构筑整个WINDOWS框架的基石,在它的下面是WINDOWS的操作系统核心,而它的上面则是所有的华丽的WINDOWS应用程序。

但是,那时的WINDOWS程序开发还是比较复杂的工作,程序员必须熟记一大堆常用的API函数,而且还得对WINDOWS操作系统有深入的了解。然而随着软件技术的不断发展,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。 这些优秀可视化编程环境操作简单、界面友好(诸如VB、VC++、DELPHI等),在这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能,事实上这些类库和控件都是构架在WIN32 API函数基础之上的,是封装了的API函数的集合。它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程。有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的

第 2 页 共 19 页

设计上,而不必过于关注技术细节。

实际上如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用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、net bus、sub7等经典木马都有一些优秀的插件在纷纷问世就是一个很好的说明。

3. 更新更强的感染模式:传统的修改ini文件和注册表的手法已经不能适应更加隐秘的需要,目前的很多的木马的感染方式已经开始在悄悄转变,像前一阶段的YAI事件就给了我们很多的启发,像病毒一样的感染,感染windows下的文件,我认为这件事对木马设计者们有很多的启发。

4. 即时通知:木马是否已经装入?目标在哪里?如果中招的人是使用固定IP的话,还能够补救,如果目标使用的是动态IP那么怎么办?如果要进行扫描,速度太慢,现在的木马已经有了即时通知的功能,如IRC,ICQ通知等,但还是太少,我不使用ICQ,也不是每次都用IRC,但是以后会更加的完善的,也许说不定某天木马们的即时通知功能变成了一个专门的软件也说不定。

5. 更强更多的功能:每个人都是不满足的,每当出现强大功能的时候,我们就期望更强大的功能,以后的木马的功能会如何呢?我也不大清楚,也许会

第 3 页 共 19 页

让大家大吃一惊的。

2.3.3 木马程序分类 1. “反弹端口”技术

由服务器主动连接客户端,因此在互联网上可以访问到局域网里通过 NAT 代理(透明代理)上网的电脑,并且可以穿过防火墙(包括:包过滤型及代理型防火墙)。

与一般的软件相反,反弹端口型软件的服务端(被控制端)主动连接客户端(控制端),为了隐蔽起见,客户端的监听端口一般开在80(提供HTTP服务的端口),这样,即使用户使用netstat等端口扫描软件检查自己的端口,发现的也是类似 TCP UserIP:1026 ControllerIP:80 ESTABLISHED 的情况,稍微疏忽一点你就会以为是自己在浏览网页(防火墙也会这么认为的)。

2. 线程插入技术

无进程的DLL(动态链接库)木马。这种木马涉及比较高深的编程技术,所谓的无进程实际上是将DLL木马,注入到其它EXE文件中,使其成为木马的合法载体。(一般黑客会选择Explorer.exe、Svchost.exe等系统关键性服务程序,这样用户就很难终止木马的运行)。

3. 多线程技术

在操作系统中,进程是存储器、外设等资源的分配单位,同时也是处理器调度的对象,为提高进程内的并发性,Windows中引入了线程的概念,一个进程可以同时拥有多个并发线程。顾名思义,三线程就是指一个木马进程开启了三个线程,其中一个为主线程,负责远程控制的工作。另外两个为辅助线程,其中一个辅助线程称为监视线程,它负责检查木马程序是否被删除和是否被停止自启动,举例而言,一般木马侵入一台电脑后会创建一个备份文件,并在注册表中添加键值,以实现自启动。这个监视线程会定时检查木马程序和注册表中的键值是否存在,如果不存在则使用备份文件恢复木马,并向注册表添加自启动键值。另外一个辅助线程称为守护线程,它驻留在别的EXE文件内,与木马进程同步,一旦木马进程被停止,它就会重新启动该木马,并将自身数据赋给它,类似断点续传,这样就能保证木马程序一直运行。

3 需求分析

3.1 功能需求

无进程,实际上是将DLL木马,注入到其它EXE文件中,使其成为木马的合法载体。在实现木马无进程的特点这个前提下,木马会实现一些破坏性的作

第 4 页 共 19 页

用,以损坏计算机文件的功能,比如破坏word文档的正常运行。木马的具体功能流程和特点如图1所示:

图1 功能设计流程图

结束 是否为word 进程 是 杀掉word进程 否 检查当前 运行进程 实现进程隐藏 寻找宿主进程 线程插入 木马启动 开始 3.2 性能需求

整个系统应当操作简便,界面友好,维护简便。木马要求运行稳定,执行速度快,装载和卸载的安全性高。软件系统本身运行对计算机硬件平台和操作系统平台要求适中。

3.3 开发环境需求

3.3.1 单机模式

本设计主要应用于一台个人计算机,不要求有网络连接,可以在一台计算机中完成木马的演示,没有客户端和服务器端,只是通过木马的演示程序把木马注入木马所在的计算机便能实现木马的功能。

第 5 页 共 19 页

3.3.2 Visual C++ 6.0开发软件

本设计通过Visual C++ 6.0程序开发软件进行开发和设计。C++作为一种

面向对象的程序设计语言,具有对象、类、方法、消息等概念,同时支持面向对象方法的封装机制和继承、多态性机制,具有强大的开发功能。

Visual C++ 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驱动就挂着每一个系统进程。

远程线程技术就是通过在另一个进程中创建远程线程(Remote Thread)的方法进入那个进程的内存地址空间。在DLL木马的范畴里,这个技术也叫做“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上去执行了,没有新进程产生,要想让木马停止惟有让挂接这个木马DLL的进程退出运行。

4.1.3 木马的启动

直接把这个DLL加入系统启动项目是不可以的。前面说过,DLL不能独立运行,所以无法在启动项目里直接启动它。要想让木马跑起来,就需要一个EXE

第 6 页 共 19 页

本文来源:https://www.bwwdw.com/article/zt16.html

Top