为了寻找你,我搬进了鸟的眼睛,时常盯着路过的风,也忘了听猎人的枪声。
安全技术存在的价值在于对抗的较量,在攻与防中寻求突破一直是技术提升的保障。
首先,在开始介绍之前,我们需要了解一下分解型后门。
分解型后门:分解型后门也称之为分解病毒,这是一种可以寄生在任何文件里的一段数据,它本身不是病毒,不具有危害性,但当它进行代码整合时,就成为了具有危害性的病毒或木马程序,缘由它自我分解和组合能力和云层的拼接类似,所以名为分解型后门。
当病毒主程序在本地机器上运行时,主程序把病毒核心文件数据分解到任何文件里,然后执行PE头注入,源文件头EIP指向病毒执行代码地址,当任意被感染的文件里存在病毒主程序代码时,开始执行病毒数据组合,促发病毒代码。
感染文件的基本步骤:
1.判断目标文件开始的两个字节是否为“MZ”。
2.判断PE文件标记“PE”。
3.判断感染标记,如果已被感染过则跳出继续执行程序,休眠2秒,否则进行感染。
4.对标记为PE文件的进行PE头注入感染。
5.主程序对相关病毒核心代码进行分解附加到任何文件中,标志位感染标号。
6.主程序任务完成,删除自身,病毒等待触发。
病毒促发的基本步骤:
1.病毒促发
2.开始组合代码
3.执行病毒
以下为病毒促发后执行流程图:
1.不在磁盘上存在任何文件,以寄生为主。
2.病毒使用dll注入技术。
3.只在内存中执行,不产生文件。
4.接收病毒数据方式多样性。
5.不产生任何进程,依附寄生程序。
6.变种简单,编写灵活。
1.远程利用
(1)病毒主文件负责请求外部服务器数据到本机,并把相关数据存储在变量缓冲区中,当下载完毕后,从内存变量中读取数据,附加到任意文件中,注入病毒loader代码到PE文件,删除自身。
(2)本地连接远程服务器,远程服务器通过发送数据到本地,本地把相关数据存储在变量缓冲区中,当接收完毕后,从内存变量中读取数据,附加到任意文件中,注入病毒loader代码到PE文件,删除自身。
(3)本地连接远程服务器,远程服务器通过发送数据到本地,本地把相关数据进行分段存储,当接收到感染指令的时候,对病毒进行组装并加载进内存,对本地进行感染,对外进行感染,否则进行潜伏。
(4)本地连接远程Web服务器,读取远程Web服务器网页上的数据文本,本地把相关数据进行分段存储,注入病毒loader代码到PE文件,删除自身。
2.本地使用
本地执行病毒主程序时,开始注入PE文件,修改EIP指向,分解病毒程序,删除自身。
3.后门使用
本地执行病毒主程序时,开始注入PE文件,修改EIP指向,分解病毒程序,删除自身。
当病毒被激活时,主动或者被动监听端口,等待接收Shellcode并执行命令。
病毒程序:一个弹MessageBox的病毒演示程序。
感染程序:模拟感染cmd.exe
这里就不演示病毒loader和dll内存注入了,就简单演示病毒促发后怎么组合代码,为了易懂,我们用python来写代码。
我们把病毒程序(MessageBox.exe)以十六进制读取出来,保存为messagebox.txt。
读取代码
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
def payload(files):
shellcode = ""
ctr = 1
maxlen = 15 #to create rows
try:
for b in open(files, "rb").read():
shellcode +=b.encode("hex")
if ctr == maxlen:
ctr = 0
ctr += 1
print "Code length: " + str(len(shellcode))
return shellcode
except:
print "转换失败,请检查!"
f = open('messagebox.txt','w')
files = "messagebox.exe"
a = payload(files)
f.write(a)
f.close()
然后进行代码分解追加代码到文件中,这里代码少,不做分解。
然后查看数据,病毒数据已全部分解注入到目标程序了,并且程序可正常运行。
分解注入代码
f1 = open('cmd.exe','a+')
F2= open('messagebox.txt','r')
cmd_data = f1.read()
mess_data = f2.read()
f1.write(mess_data)
f1.close()
F2.close()
下面就是从文件中读取数据进行代码重组了
首先,我们应该知道病毒写入文件的大小,读取标记(不做演示),组合数据写进内存(不做演示)。
读取病毒数据代码
c = open('messagebox.txt','r')
r = c.read()
print len(r)
s = open('cmd.exe','rb')
b = s.read()
bb = b[-31522:]
cb = bb.decode("hex")
f = open('mess.exe','wb')
f.write(cb)
执行mess.exe程序(实际促发中,存储介子不会产生此程序),可以看到,程序被重新组合出来,并且能成功运行
本篇只简单对分解型后门进行了一个科普,在现实环境中,往往在我们向重要的PE文件里写入数据的时候,会被杀毒软件盯上,所以向不是系统的相关文件里面写入病毒loader能够减少被杀的风险。分解型后门应用可以很广,编写思路灵活,所以变种相当容易,被查杀的风险很低,不过分解型后门用来做后门是相当不错的。