红队安全研发系列之免杀原理和绕过研究——起始

 

前言(更新版)

世面上很多的杀软免杀文章,但经过笔者实战,发现一个问题,会有很多方法推荐给你,例如加壳,加花指令等等的方式。本来不会被查杀的程序,被加壳后还被查杀了。这对新手十分不友好。那么有没有一种实战性强(既免杀率高,免杀效果持久),一站式的免杀流程和方案来让你制作免杀。并且该免杀方案还能保持一些原则来增加程序的免杀持久性。答案是有。接下来我们将在该系列中介绍一种一站式免杀流程和方案,让新手更快的学会和应用。

在该系列文章中将静态免杀动态免杀,划分方式为是否运行程序。主要分为以下两种情况:

1.如果放置进杀软环境被查杀则可能静态查杀动态查杀(沙箱查杀DLL,因为DLL并不会直接运行)。

2.如果双击运行被查杀,则为动态查杀

 

静态查杀

静态查杀可以分为两种查杀,一种为查杀已知类型查杀,一种为查杀未知类型查杀。其中通过指定文件hash,或文件中存在多个字符串则可以通过指定存在这些特征的则为这一类病毒,以下分别介绍。

已知病毒查杀-特征码查杀

特征码是表示,知乎按照指定模式进行特征匹配的算法,而具体使用什么类型的规则(既各种扫描算法)取决于扫描器,下面我们来介绍一种模式匹配规则,YARA规则。YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具,使用YARA可以基于文本或二进制模式创建恶意软件家族描述信息,当然也可以是其他匹配信息。接下来我们来分析一个出名通用远控PoisonIvy的yara规则。

rule PoisonIvy_Generic_3 {
    meta:
        description = "PoisonIvy RAT Generic Rule"
        license = "https://creativecommons.org/licenses/by-nc/4.0/"
        author = "Florian Roth"
        date = "2015-05-14"
        hash = "e1cbdf740785f97c93a0a7a01ef2614be792afcd"
    strings:
        $k1 = "Tiger324{" fullword ascii

        $s2 = "WININET.dll" fullword ascii
        $s3 = "mscoree.dll" fullword wide
        $s4 = "WS2_32.dll" fullword
        $s5 = "Explorer.exe" fullword wide
        $s6 = "USER32.DLL"
        $s7 = "CONOUT$"
        $s8 = "login.asp"

        $h1 = "HTTP/1.0"
        $h2 = "POST"
        $h3 = "login.asp"
        $h4 = "check.asp"
        $h5 = "result.asp"
        $h6 = "upload.asp"
    condition:
        uint16(0) == 0x5a4d and filesize < 500KB and
            ( 
                $k1 or all of ($s*) or all of ($h*)
            )
}

上述规则说,满足k1或s规则或h规则且大小小于500kb为pe文件的则为poisonlvy病毒。可以从规则上来看,大小,字符串,使用的DLL等等软件构成部分都可以成为检测病毒的一部分。总结一下即程序符合特定规则则认定这个程序为指定病毒

未知病毒查杀-静态启发式查杀

启发式查杀是对单一特征码查杀的补充,解决未知病毒查杀。早期杀软都是发现病毒,制作该病毒的特征码,但是对于未知病毒就无法查杀,而启发式则是将一类病毒总结后,归纳其特征,其后的演变都为一类病毒,这既是启发式算法。具体启发式算法可以由杀软来定,比如可以使用机器学习把家族病毒聚类,或简单的通过使用通用型yara规则,例如文件大小小于100kb,且没有图标则可以识别为病毒,以此达到查杀壳病毒。例如,有的杀软会查杀main函数中仅仅有几行无效代码。这也是我们经常遇到的误报

动态查杀

动态查杀同样分为两种查杀,一种为指定类型查杀,一种为未知类型查杀。

已知病毒查杀查杀-内存特征

例如,某数字查杀cobaltstrike等知名远控则是通过shell code内存匹配来进行查杀。

未知病毒查杀-启发式查杀和主动防御

杀软通过拦截程序运行的api调用,通过api序列,或其是否高危来判定是否为病毒。

举几个例子,

1.Kas针对cobaltstrike的查杀是通过联网URL的地址特征,进行查杀。

2.通过将Dll拷贝到磁盘后,会被沙箱进行行为分析。例如,Dll下载者会被查杀,很明显DLL是没办法直接双击运行,但某些杀软依旧会查杀。

3.注入explorer.exe直接被干掉。

4.Bitdexxxxx会在运行时查杀空壳且名字随机的1.exe,asd.exe,干扰免杀。

注意:主动防御有的杀软会在断网模式不开启该功能。

免杀流程

 

参考资料:

https://github.com/Micropoor/Micro8
https://lolbas-project.github.io/ Windows白名单列表
https://www.antiy.com/response/EQUATION_DRUG/EQUATION_DRUG.html 方程式组织EQUATION DRUG平台解析
https://github.com/TideSec/BypassAntiVirus
https://bbs.pediy.com/thread-252772.htm 免杀壳编写
https://bbs.pediy.com/thread-225735.htm 反虚拟机

(完)