提醒:本文最后更新于 137 天前,其中某些信息可能已经过时,请谨慎使用!
你似乎正在查看一篇很久远的文章。
为了你这样的访客,我特地保留了我的历史博文。不要笑话过去的我,用温柔的目光看下去吧。

聊聊免杀

既然总有人问,也就聊聊免杀吧。

首先就是从杀软的原理出发,首先杀软会对文件进行静态查杀,之后是对陌生文件或可疑文件进行云查杀,其后在文件执行过程中会对可疑行为进行提示,以及在文件执行机敏感函数调用时进行的内存查杀。

1.静态查杀 杀软会在本地或云端对可疑程序进行静态分析,通过相关规则判断或打分,从而识别恶意软件和可疑的恶意软件。这一部分主要依赖对程序特征的识别,包括但不限于函数方法名,字符串,导出函数,加壳与否,文件大小,资源图标,签名等。 一定程度的混淆,动态加载敏感函数,避免明显的加壳特征,降低程序熵值,修改资源图标,添加或伪造签名等都能有效的避免被静态查杀。(可以看看yara规则,了解静态查杀原理)

2.云查 常见杀软基本都会有自己的云沙箱,用于对程序进行自动化动态分析,这里同样适用于any.run等专业沙箱。 沙箱或虚拟机都是基于虚拟化,可以快速实现程序测试环境,其后通过内核挂钩,注入dll等方法,获取程序行为,实现自动分析。 由于虚拟化不可避免与真实环境存在区别,可以通过对沙箱及虚拟机的识别,实现绕过。具体操作包括但不限于,识别真人行为,识别硬件信息,识别ip区段,识别虚拟机相关软件文件进程注册表,根据计算机使用历史记录判断等。 除此之外,对于部分不够完善的沙箱,可以考虑使用syscall等方法,绕过其检测。国内大多数沙箱都是基于Cuckoo开发,其原理为注入dll进行监控,绕过较为容易。

3.行为 杀软经常报的恶意行为种类繁多,下面仅列举部分(不考虑白加黑的情况下): 启动项,不同杀软对启动项的策略不同,需要针对性处理,建议自己手动排查,注意不要放弃很多常见的启动方法,稍微修改可能就可以成功绕过。 注入,最常见的远程线程注入监控最为严格,尤其是WriteProcessMemory及CreateRemoteThread两个函数及其近似效果的函数,建议寻找通过函数回调,侧加载等注入的方法进行尝试。 联网,大多数提示仅限于tcp,可以考虑更改连接协议。 其他诸如Bypass UAC等行为,均需自己寻找杀软逻辑漏洞或未查杀的方法。

4.内存查杀 国内大多数杀软并没有发现在内存查杀有太多实践,所以国内环境只有Windows Defender需要考虑,国外不少杀软内存查杀较严格。 一般来说,内存查杀较难处理,目前来说比较实用的方法是手动修改特征,避免查杀。因为内存查杀一般仅在进程启动及敏感函数调用时进行,所以还有种方法是在执行敏感操作时将程序主体加密,执行后再恢复。

总体来说,对于国内的环境及仅考虑在现有基础上修改的前提下,转成shellcode并使用加载器是最简单的方法。

发表评论

共有 0 条看法