父进程欺骗 即创建一个进程,然后指定其他进程作为该新建进程的父进程
父进程(PPID)
欺骗方法可以绕过
AV/EDR
检测,使其认为是 lsass.exe
这样的合法进程在进行活动。它通过欺骗进程的 PID
以匹配其父进程的 PID
来做到这一点。这种方法可能带来的另一个好处是,如果父进程以
SYSTEM
权限运行,则可以凭借访问令牌的继承,使其子进程也具有相同的
SYSTEM
权限。
1 | 进程:**在 `Windows` 中,应用程序由一个或多个进程组成。简单来说,当前正在运行的程序的一部分称为进程。不同的应用程序可能会使用相同的进程(如`cmd.exe`),并且为避免歧义,会分配一个整数来区分一个进程和另一个进程。该整数称为`PID`。 |
使用CreateProcessA进行欺骗
CreateProcessA函数允许用户创建新进程,默认情况下,会通过其继承的父进程完成创建。该函数有一个名为“lpStartupInfo”的参数,该参数允许使用者自定义要使用的父进程。 lpStartupInfo参数指向一个名为“STARTUPINFOEX”的结构体,该结构包含变量“lpAttributeList”,这个变量在初始化时可以调用“UpdateProcThreadAttribute”回调函数进行属性添加,可以通过“PROC_THREAD_ATTRIBUTE_PARENT_PROCESS”属性从而对父进程进行设置。
如果在dwCreationFlags中EXTENDED_STARTUPINFO_PRESENT标准,那么lpStartupInfo传入的就会是一个名为STARTUPINFOEXA的结构体,而这个结构体能指定父进程的相关信息,最终传入的PPID会被写入到新进程_eprocess结构体的InheritedFromUniqueProcessId位置
寻找explorer.exe进程的ID
1 | DWORD FindExplorerPID() { |
1 | int main() |
References
https://blog.f-secure.com/detecting-parent-pid-spoofing/ https://xz.aliyun.com/t/8387 https://idiotc4t.com/defense-evasion/fake-ppid