10.1节介绍了通过msfvenom生成shellcode ,并通过Python程序加载执行,又 介绍了如何将Python的.py文件生成为exe文件。使用pyinstaller生成的可执行文件 本身就具有一定的免杀能力,但是在与杀毒软件对抗时,部分杀毒软件也可以通 过分析可执行文件的内容来判断文件是否为恶意程序,导致这些代码仍然具有被 杀的可能。
对于用msfvenom生成的shellcode ,在生成时可以通过参数将shellcode优化, 使用-b选项禁止生成的shellcode 中出现易被杀毒软件检测的字符,如图10-7所示。
图10-7 优化shellcode
除此之外,还可以使用msfvenom的-e选项选择相应的编码器,对shellcode进 行编码处理,如图10-8所示。
通过这种方式对脚本的源代码进行混淆后,可有效避免部分杀毒软件的查 杀。与此同时,可以将shellcode 的顺序打乱,增加查杀难度。
除了在代码层上对脚本进行优化外,还有其他免杀方式,比如通过加壳进行 免杀。
什么是壳?壳的全称是“可执行程序资源压缩” ,压缩后的程序可以直接打
开。除此之外,另一种常见的加壳方式就是在二进制程序中植入一段代码,在主 程序运行前优先获得程序控制权,之后再将控制权交给主程序代码。这样能够有 效地隐藏程序的入口点(OEP)。我们需要使用的便是加壳后隐藏OEP的功能,
以达到免杀效果。大多数的病毒制作也都是使用了这个方法。多数壳对于程序的 原始二进制文件内容还会进行加密、混淆。免费的壳免杀效果相对商业壳来说还 是有一定的差距,但要初步做到免杀,使用免费壳即可。此外,还有一些第三方 的免杀工具也可以利用,比如:
·Veil工具,可以生成基于C 、Go 、Ruby 、Python 、C# 、Perl 、Powershell等格 式的Payload 。该工具是采用Python语言编写的免杀框架,能够将任意shellcode编 译转化成Windows的可执行文件,并且可以与Metasploit相结合。
图10-8 选择编码器
·Venom工具,利用msfvenom生成不同格式的shellcode ,如C 、Python、
Ruby 、DLL 、MSI 、hta-psh等,然后将生成的shellcode注入程序中,并使用类似 gcc 、mingw32或pyinstaller等编译器生成Windows系统下的Payload文件。
· Shellter工具,安装非常简单,使用也非常便捷,而且生成的Payload免杀效 果也比较好,Windows和Linux下都可以使用。可以使用自动配置和手动配置两种 模式,手动配置生成的Payload免杀效果会更好。
·BackDoor-factory工具,又称后门工厂(BDF),利用该工具,可以在不破 坏原来的可执行文件功能的前提下,在代码中注入恶意的shellcode攻击代码。
BackDoor-factory不仅可以单独使用,还可以嵌入其他工具生成的shellcode 中。其 原理是替换原有程序的二进制数据中的00字段,并且在程序执行时跳转到替换的 代码段,触发Payload程序。
免杀的工具多种多样,但运用的方式大致都是相同的。免杀处理大致可以分 为两种类型:一种是通过二进制实现免杀,或通过修改asm代码、二进制数据、
其他数据来完成免杀;另一种是源码免杀,可以通过修改源代码免杀,也可以结 合二进制进行免杀。也可以分为静态文件免杀、动态行为免杀。
其中,静态免杀可以通过修改特征码来进行。要查找文件的特征码,可以使 用特征码定位工具,如CCL 、MYCCL 、VirTest等。找到特征码后,修改特征码 的值,就能做到静态免杀。还可以通过一些工具的加密、加壳等手段进行静态免 杀。
动态监测的原理是通过拦截恶意行为,如注册表操作、文件写入、杀进程、 劫持等来发现木马程序。恶意的行为都是通过API的调用完成的,杀毒软件通过 拦截这些API的调用来实现拦截。那么动态免杀的思路就出来了,分为以下几
种:
· 替换API 。使用有同等功能的API替换,杀毒软件并不会拦截所有的API操 作,所以替换成杀毒软件不拦截的API进行操作即可绕过动态监测。
· 未导出API 。寻找具有相同功能且未被导出的API ,分析API的内部调用情 况,进行API替换。
·重写API ,即通过逆向操作重写API的功能。
·跳字节。一部分杀毒软件的API拦截操作是通过对API的前几个字节内容的 监测实现的,如果跳过了头部字节,就可以避开这种拦截方式。
·底层API 。可通过寻找底层的API调用绕过拦截。
防御策略
了解了免杀原理后,我们再来看如何针对这些操作进行防御。10.3节中介绍 过,免杀处理主要是分为静态文件免杀和动态行为免杀,那么杀毒软件的防御应 该着重关注这两个方面。常用的杀毒软件的检测方法有特征代码法、校验法、行 为检测法、模拟法等。
·特征代码法:通过相同的一种病毒或木马文件的部分代码是相同的原理,来 识别病毒文件,即通过对比特征来发现病毒和木马。
·校验法:计算文件的校验值并保存,定期进行对比或者在调用文件时对比, 从而检测文件是否被感染。
· 行为检测法:通过分析病毒或木马的行为特征,如注册表操作、添加或删除 用户等来进行检测。
·模拟法:通过模拟病毒运行的方式检测病毒。