“⿊客”深度学习之“⽊马程序的原理与实现”
⼤家应该对"⽊马"这个名词都不陌⽣,很多⼈感觉⾃⼰的“电脑系统变慢了”,“某些⽂件打不开了”,“打开⽹页慢了”就怀疑⾃⼰是不是中"病毒⽊马"了,其实这⾥要给⼤家解释⼀下,"病毒"和"⽊马"并不是⼀个统⼀概念,本质上还是有⼀些区别的,⽊马虽然属于病毒中的⼀类,但是要单独的从病毒类型中间剥离出来.独⽴的称之为"⽊马"程序。
⽊马和病毒的主要区别:
1、病毒是当已感染的软件运⾏时,这些恶性程序向计算机软件添加代码,修改程序的⼯作⽅式,从⽽获取计算机的控制权。
2、⽊马是指未经⽤户同意进⾏⾮授权操作的⼀种恶意程序。它们可能删除硬盘上的数据,使系统瘫痪,盗取⽤户资料等。⽊马程序不能独⽴侵⼊计算机,⽽是要依靠⿊客来进⾏传播,它们常常被伪装成"正常"软件进⾏散播。
3、他们最⼤的区别就是病毒具有感染性,⽽⽊马⼀般不具有感染性,另外,病毒⼊侵后⽴刻有感觉,⽽⽊马⼊侵后希望你没有感觉,这样才有利于她"开展⼯作"。
好的,⼤家理解了⽊马和病毒的区别以后,今天咱们进⼊正题,阐述⼀下"⽊马程序的原理与实现"!
⼀、⽊马程序简介
1、⽊马的由来和定义
由来:
先讲个故事,故事发⽣在在三千多年的古希腊,特洛伊的王⼦帕⾥斯爱上了斯巴达国王的妻⼦——绝世美⼥海伦。王⼦把她带回了特洛伊古城,这时斯巴达王⾮常的愤怒,他到了⾃⼰的哥哥,迈锡尼国王阿加伽门农,请求他的的帮忙,阿伽门农正好也希望征服特洛伊,于是借此机会建⽴了⼀⽀希腊联军讨伐特洛伊古城。然后事情却没那么简单,建军围攻了特洛伊古城9年仍未攻下,到了第⼗年,将领奥德修斯想出⼀计,将⼀批勇⼠藏于⼀批巨⼤的⽊马腹内,放在城外,⼤部队则佯装退军。特洛伊⼈以为敌军已退,就打开城门,打扫战场,并把敌军留下的那只⽊马作为战利品带进了城中。全程饮酒狂饮,到了夜间,全城军民进⼊梦乡,⽽埋伏在⽊马中的勇⼠们跳了出来,并打开城门四处放⽕,城外将⼠⼀拥⽽⼊,部队⾥应外合,攻下了特洛伊城池。后代称这只⼤⽊马为"特洛伊⽊马"。后来,⼈们在写⽂章时,就常⽤"特洛伊⽊马"这⼀典故⽐作在敌⽅营垒内埋下伏兵⾥应外合的活动。
基础定义:⼊侵者编写⼊侵他⼈电脑并进⾏控制和破坏的程序,就叫做"⽊马程序"。⽊马与计算机⽹络中常常要⽤到的远程控制软件有些相似,但由于远程控制软件是"善意"的控制,因此通常不具有隐蔽性;"⽊马"则完全相反,⽊马的⽬的是要达到 "偷窃"性的远程控制,如果没有很强的隐蔽性的话,
那就是"毫⽆价值"的。
2、⽊马的主要特点
(1)伪装性:⽊马总是伪装成其他程序来迷惑管理员。
(2)潜伏性:⽊马能够毫⽆声响地打开端⼝等待外部连接。
(3)隐蔽性:⽊马的运⾏隐蔽,甚⾄使⽤任务管理器都看不出来。
(4)⾃动运⾏性:当系统启动时⾃动运⾏。
3、⽊马被⼊侵者⽤来做什么?
(1)⼊侵
当基于认证和漏洞的⼊侵⽆法进⾏时,就需要考虑使⽤⽊马⼊侵。
(2)留后门
由于⽊马连接不需要系统认证并且隐蔽性好,为了以后还能控制远程主机,可以种⽊马以留后门。
⼆、⽊马的⼯作原理
1、基本原理
⽊马是⼀种基于远程控制的⿊客⼯具,⼀般来说,⽊马程序包括客户端和服务端两部分。
其中,客户端运⾏在⼊侵者的操作系统上,是⼊侵者控制⽬标主机的平台;服务端则是运⾏在⽬标主机上,是被控制的平台,⼀般发送给⽬标主机的就是服务端⽂件。
⽊马主要是依靠邮件附件、软件下载、淫秽图⽚、通信软件等途径进⾏传播,然后,⽊马通过⼀定的提⽰诱使⽬标主机运⾏⽊马的服务端程序,实现⽊马的种植。
例如:⼊侵者伪装成⽬标主机⽤户的朋友,发送了⼀张捆绑有⽊马的电⼦贺卡,当⽬标主机打开贺卡后,屏幕上虽然会出现贺卡的画⾯,但此时⽊马服务端程序已经在后台运⾏了。
⽊马的体积都⾮常⼩,⼤部分在⼏KB到⼏⼗KB之间。
当⽬标主机执⾏了服务端程序之后,⼊侵者便可以通过客户端程序与⽬标主机的服务端建⽴连接,进⽽控制⽬标主机。对于通信协议的选择,绝⼤多数⽊马使⽤的是TCP/IP协议,但也有使⽤UDP协议的⽊马。
⽊马的服务端程序会尽可能地隐蔽⾏踪,同时监听某个特定的端⼝,等待客户端的连接;此外,服务端程序为了在每次重新启动计算机后能正常运⾏,还需要通过修改注册表等⽅法实现⾃启动功能。
2、关键技术
(⼀) 隐藏技术
1) 程序隐藏
⽊马程序可以利⽤程序捆绑的⽅式,将⾃⼰和正常的exe ⽂件进⾏捆绑。当双击运⾏捆绑后的程序时,正常的exe ⽂件运⾏了。程序隐藏只能达到从表⾯上⽆法识别⽊马程序的⽬的,但是可以通过任务管理器中发现⽊马程序的踪迹,这就需要⽊马程序实现进程隐藏。
2) 进程隐藏
隐藏⽊马程序的进程显⽰能防⽌⽤户通过任务管理器查看到⽊马程序的进程,从⽽提⾼⽊马程序的隐蔽性。主要有两种:
API拦截属于进程伪隐藏⽅式通过利⽤Hook技术监控并截获系统中某些程序对进程显⽰的API 函数调⽤,然后修改函数返回的进程信息,将⾃⼰从结果中删除,导致任务管理器等⼯具⽆法显⽰该⽊马进程。
远程线程注⼊属于进程真隐藏⽅式主要是利⽤CreateRemoteThread函数在某⼀个⽬标进程中创建远程线程,共享⽬标进程的地址空间,并获得⽬标进程的相关权限,从⽽修改⽬标进程内部数据和启动DLL ⽊马。
3) 通信隐藏
可以从通信连接的状况中发现⽊马程序的踪迹。因此,很有必要实现⽊马程序的通信隐藏。主要有两种⽅式:
可以从通信连接的状况中发现⽊马程序的踪迹。因此,很有必要实现⽊马程序的通信隐藏。主要有两种⽅式:
端⼝复⽤技术,它让⽊马服务端程序共享其他⽹络程序已打开的端⼝和客户端进⾏连接,从⽽防⽌重新开启端⼝降低隐蔽性。关键之处在于,⽊马程序应增设⼀个数据包转交判断模块,该模块控制主机对数据报的转交选择。
利⽤ICMP和HTTP 协议,通常⽹络防⽕墙和⼊侵检测系统等安全设备只检查ICMP报⽂的⾸部,对数据部分不做处理。因此,可以将⽊马程序的通信数据隐藏在ICMP 报⽂格式的选项数据字段进⾏传送,如把服务端程序向客户端程序传输的数据伪装成回显请求报⽂,⽽把客户端程序向服务端程序传
输的数据伪装成回显应答报⽂。这样,就可以通过PINGPINGRESPONSE的⽅式在⽊马服务端程序和客户端程序之间建⽴起⼀个⾼效的秘密会话信道。利⽤ICMP 协议传输数据还有⼀个很⼤的优点,即ICMP 属于IP 层协议,它在传输数据时并不使⽤任何端⼝,从⽽具有更好的隐蔽性。
(⼆) ⽊马⾃启动技术
⾃启动功能是必不可少的。⾃启动可以保证⽊马不会因为⽤户的⼀次关机操作⽽彻底失去作⽤。下⾯介绍经常使⽤的⼏种⽅法。
1)在Win.ini中启动
在Win.ini⽂件中的[Windows]字段中有启动命令"load="和"run="。默认情况下,"="后⾯是空⽩的。这两项分别是⽤来当系统启动时⾃动加载和运⾏的程序,如果⽊马程序加载到这两项中,那么系统启动后即可⾃动地加载和运⾏。
2)在System.ini中启动
在System.ini⽂件中的[boot]字段的中是⽊马常⽤的隐藏加载的地⽅。⽊马最惯⽤的伎俩就是把本应是""变成⾃⼰的程序名,名称伪装成⼏乎与⼀样,只需稍稍改"Explorer"的字母"l"改为数字"1",或者把其中的"o"改为数字"0",这些改变如果不仔细留意是很难被
⼈发现的。或者是 的后⾯加上⽊马程序的路径,如: ,这⾥的就是⽊马服务端程序。
3)通过启动组实现⾃启动
启动组是专门⽤来实现应⽤程序⾃启动的地⽅。启动组⽂件夹的位置为"C:Documents and SettingsAll Users「开始」菜单程序启动"。
[注:"All Users"即对所有⽤户都有作⽤]
4)通过注册表启动
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun,
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce,
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun,
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce
5)修改⽂件关联
修改⽂件关联是⽊马常⽤⼿段。
例如:在正常情况下,txt⽂件的打开⽅式为⽂件,但⼀旦中了⽂件关联⽊马,则txt⽂件打开⽅式就会被修改为⽤⽊马程序打开。例如著名的国产⽊马冰河就是这样。
6)捆绑⽂件
电脑主机打不开⼊侵者可以通过⼀些⿊客软件,如著名的Deception Binder,完成⽂件的捆绑,之后将这些捆绑⽂件放到⽹站、FTP、BT等资源下载场所,当⽤户下载并执⾏捆绑⽂件,同时就启动了⽊马的服务端程序。
BT等资源下载场所,当⽤户下载并执⾏捆绑⽂件,同时就启动了⽊马的服务端程序。
(三) ⽊马植⼊技术
1)图标伪装
⿊客为了迷惑⽤户,将⽊马服务端程序的图标换成⼀些常见的⽂件类型的图标。
2)⽂件捆绑欺骗
⽂件捆绑就是通过使⽤⽂件捆绑器将⽊马服务端和正常的⽂件捆绑在⼀起,达到欺骗对⽅从⽽运⾏捆
绑的⽊马程序的⽬的。
例如,把⽊马服务端和某个游戏,或者flash⽂件捆绑成⼀个⽂件通过QQ或邮件发送给受害者。当受害者对这个游戏或flash感兴趣⽽下载到机器上,并开打了该⽂件,⽊马程序就会悄悄运⾏。
3)定制端⼝
很多⽼式的⽊马端⼝都是固定的,只要查⼀下特定的端⼝就知道感染了什么⽊马。现在很多新式的⽊马都加⼊了定制端⼝的功能,控制端⽤户可以在1024~65535之间任选⼀个端⼝作为⽊马端⼝,⼀般不选1024以下的端⼝,这就给判断所感染的⽊马类型带来了⿇烦。
4)扩展名欺骗
例如,图像⽂件的扩展名不可能是.exe,⽽⽊马程序的扩展名⼜必定是.exe,⼤多数⽤户在看到扩展名为".exe"的⽂件时,就会很⼩⼼。于是设计者就将⽂件名进⾏⼀些改变,例如将"picture.tiff"更改为"",因为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及⽊马清除⼤师等。程序杀⼿⽊马的功能就是关闭⽬标机器上运⾏的⽊马查杀程序,让⽊马更好地发挥作⽤。