恶意软件分析-代码注入

admin 2024年12月9日23:38:25评论36 views字数 2235阅读7分27秒阅读模式

欢迎加入我的知识星球,目前正在更新免杀相关的东西,129/永久,每100人加29,每周更新2-3篇上千字PDF文档。文档中会详细描述。目前已更新65+ PDF文档

加好友备注(星球)!!!

恶意软件分析-代码注入

恶意软件分析-代码注入恶意软件分析-代码注入
恶意软件分析-代码注入
介绍

代码注入是一种将恶意代码注入目标进程内存并在目标进程的上下文中执行的技术,也称之为进程注入,攻击者可以通过代码注入技术,将其恶意代码插入到目标进程中,比如explorer.exesvchost.exe等等,并在目标进程中运行这些恶意代码。

一般攻击者会选择合法的系统进程作为目标进程以掩盖恶意活动,恶意代码注入到目标进程的内存后,可以执行各种恶意的操作。

注入的代码可能是一个模块,比如EXE文件,动态链接库DLL或者直接的shellcode,一旦代码被注入到远程进程中,那么攻击者就可以执行以下的一些操作了。

  1. 强制执行恶意代码: 攻击者可以强制远程进程执行注入的代码,并将远程进程的API调用重定向到该模块中的恶意函数,恶意函数可以拦截API调用的输入参数,同时过滤输出参数,篡改正常功能。

  2. 攻击者可以强制远程进程执行注入的代码,进行恶意操作,例如下载额外的文件或记录键盘输入(键盘记录)。

  3. 向已经运行的进程注入代码,允许攻击者在系统中持久化存在,增强恶意软件的隐蔽性。

  4. 注入代码到可信的进程,例如系统进程之后,攻击者可以绕过安全产品,并隐藏其恶意行为,使用户难以察觉。

进程内存

在windows操作系统中,每当创建一个新的进程时,系统都会为该进程分配一个独立的,私有的内存地址空间,这被称之为进程内存。

每一个进程内存都有自己专属的内存地址空间,这个地址空间与其他进程隔离,确保一个进程不会直接影响到另外一个进程的内存,这意味着如果A进程崩溃了,是不会影响B进程的。

进程内存实际上是虚拟内存的一部分,虚拟内存并非是真实的物理内存,而是由操作系统的内存管理器创建的一种假象。通过虚拟内存,操作系统可以将其有限的物理内存映射到更大的地址空间,从而支持更多的程序运行。

Shellcode注入

恶意软件直接注入到目标进程的内存中,而不需要将相关组件写入磁盘,攻击者一般通过CreateRemoteThread函数来创建一个远程线程,然后将新线程的起始地址指向注入代码块中的代码或函数。这种方法的优势在于恶意进程无需将恶意DLL文件写入到磁盘中,恶意软件可以直接从二进制文件的资源段(.rdata)读取,或者通过网络获取并直接进行代码注入。

其实shellcode注入很简单,一般都是通过VirtualAllocEx函数在远程进程中申请一块内存,然后通过WriteProcessMemory函数将其shellcode写入到目标进程的内存中,再去通过VirtualProtect将其远程进程中的内存更改为可读可写可执行的权限,最后通过CreateRemoteThread函数来创建一个远程线程,将新线程的起始地址指向shellcode或函数。

首先第一步肯定是需要枚举进程的,枚举进程很简单,无非就是创建进程快照,然后遍历,判断传递进来的进程名是否是一样的,然后通过OpenProcess函数来获取到该进程句柄。

如下图我们可以看到现在已经将shellcode写入到目标进程中了。

恶意软件分析-代码注入

最后通过CreateRemoteThread函数创建线程去执行。

现在让我们将其恶意文件拉到IDA中查看。我们可以在导入的函数中看到了OpenProcess函数,VirtualAllocEx函数。以及CreateRemoteThread函数。这些函数都是用于进程注入的。

恶意软件分析-代码注入

我们可以双击OpenProcess函数,然后右键->Jump to...或直接按下x键,来到调用该函数的地方。

恶意软件分析-代码注入

前面的三个push是调用OpenProcess函数之前需要传递的参数。

恶意软件分析-代码注入

我们需要在VirtualAllocEx函数这里也去下一个断点。

恶意软件分析-代码注入

CreateRemoteThread函数以及WriteProcessMemory函数这里下一个断点。

恶意软件分析-代码注入

现在让我们来调试一下,这里首先把notepad.exe进程打开,然后在IDA这里按下debugger即可。

从压入到栈中的参数可以得知,这个恶意文件注入的目标进程是notepad.exe这个进程。

恶意软件分析-代码注入

现在我们来看看恶意软件的下一步应该就是申请远程进程中的内存了。如下图是调用了VirtualAllocEx函数所申请的远程进程内存,这里调用完VirtualAllocEx函数之后的返回值会存储在EAX寄存器中。这里EAX寄存器的值为0xB670000,我们在Process Hacker中也可以直接查看。

恶意软件分析-代码注入

那么申请完内存之后,恶意软件会通过WriteProcessMemory函数将shellcode写入到目标进程内存中。我们再来观察内存可以看到,shellcode已经被写入了。

恶意软件分析-代码注入

紧接着恶意软件通过调用VirtualProtect函数将其远程进程内存更改为可读可写可执行的权限。

恶意软件分析-代码注入

在接着就是创建远程线程去执行shellcode了,将线程的起始地址指向shellcode的地址。这里主要我们需要查看lpStartAddress参数,这里是push eax,将eax寄存器中的值压入到栈中,为调用CreateRemoteThread函数参数做准备,这里eax寄存器中的值其实就是我们前面申请远程进程内存的地址,也就是shellcode的地址。

恶意软件分析-代码注入

本次就到这里 期待和您的下次相遇!!!!

原文始发于微信公众号(Relay学安全):恶意软件分析-代码注入

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月9日23:38:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   恶意软件分析-代码注入https://cn-sec.com/archives/3476861.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息