首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ProcessHider利用分析

ProcessHider利用分析

作者头像
C4rpeDime
发布2020-03-05 17:49:27
8650
发布2020-03-05 17:49:27
举报
文章被收录于专栏:黑白安全黑白安全

0x00 前言

ProcessHider能够在任务管理器和Process Explorer之类的监视工具中隐藏指定进程,本文将要介绍实现原理,分析代码细节。

0x01 简介

本文将要介绍以下内容:

  • ProcessHider测试
  • ProcessHider的实现原理
  • ProcessHider的代码分析
  • ProcessHider的检测

0x01 简介

ProcessHider能够在任务管理器和Process Explorer之类的监视工具中隐藏指定进程

地址如下:

https://github.com/M00nRise/ProcessHider

支持以下参数:

  • pid
  • 进程名

两种启动形式:

  • exe
  • powershell

ProcessHider能够自动识别操作系统版本和进程位数,向32位和64位进程分别注入Payload.dll,通过Hook API NtQuerySystemInformation()实现进程隐藏

注入的代码使用Dll反射,地址如下:

https://github.com/stephenfewer/ReflectiveDLLInjection

Hook的代码使用NtHookEngine,地址如下:

https://www.codeproject.com/Articles/21414/Powerful-x86-x64-Mini-Hook-Engine

参数实例:

ProcessHider.exe -n "putty.exe" -x "procexp.exe"

能够在procexp.exe中隐藏进程名putty.exe,并且默认针对以下进程进行隐藏:

Taskmgr.exe

powershell.exe

procexp.exe

procexp64.exe

perfmon.exe

注:

目前不支持对tasklist.exe的进程隐藏

编译时需要注意的问题:

工程ProcessHider需要编译成32位,不能编译成64位

这是因为工程ProcessHider包含了针对64位进程的识别和利用代码

0x02 ProcessHider的实现原理

工程ProcessHider实现流程如下:

1.判断当前操作系统版本

对应代码isSystem64BitWow()

如果是32位系统:

(1)监控进程列表

对应代码LaunchDaemon(InjectAll);

(2)向符合条件的进程注入Payload.dll

对应代码reactToProcess((DWORD) pCurrent->ProcessId, pCurrent->ImageName.Buffer);

注入的代码使用了ReflectiveDLLInjection中的代码

如果是64位系统:

(1)同级目录下释放文件x64Hider.exe,用作64位的守护进程

对应代码CopyResourceIntoFile(x64filesList[i], MAKEINTRESOURCE(x64resourceIDint[i])

(2)解析命令行参数

对应代码createCommandLine(argc, argv, buffer, MAX_COMMANDLINE_LEN);

(3)启动64位的守护进程x64Hider.exe

对应代码CreateProcessFromLine(buffer,false);

传入启动的参数

示例如下:

"c:\test\x64Hider.exe" "-n" "putty.exe" "-x" "cmd.exe"

(4)将Payload.dll写入x64Hider.exe的进程空间

这个过程不向硬盘写入文件,增加隐蔽性

对应代码WriteDLLsToProcess(pi)

x64Hider.exe的功能如下:

监控64位的进程列表

向符合条件的64位进程注入64位的Payload.dll

(5)监控32位的进程列表

对应代码LaunchDaemon(InjectAll);

(6)向符合条件的32位进程注入32位的Payload.dll

对应代码reactToProcess((DWORD) pCurrent->ProcessId, pCurrent->ImageName.Buffer);

Payload.dll分别对应工程x64Payload和x86Payload

这是基于ReflectiveDLLInjection实现的dll反射

优点是注入成功后在进程空间不存在dll的名称

流程如下:

1.创建互斥量

对应代码hMutex = CreateMutex(0, TRUE, NULL);

2.读取参数

如果参数为空,从固定文件"C:\Program Files\Internet Explorer\mdsint.isf"读取参数

3.Hook API NtQuerySystemInformation()

隐藏进程的代码:

NTSTATUS WINAPI HookedNtQuerySystemInformation(
__in       SYSTEM_INFORMATION_CLASS SystemInformationClass,
__inout    PVOID                    SystemInformation,
__in       ULONG                    SystemInformationLength,
__out_opt  PULONG                   ReturnLength
)
{
NTSTATUS status = RealNTQueryFunc(SystemInformationClass,
SystemInformation,
SystemInformationLength,
ReturnLength);
if (SystemProcessInformation == SystemInformationClass && NT_SUCCESS(status))
{
//
// Loop through the list of processes
//
PSYSTEM_PROCESS_INFO pCurrent = NULL;
PSYSTEM_PROCESS_INFO pNext = (PSYSTEM_PROCESS_INFO)SystemInformation;
do
{
pCurrent = pNext;
pNext = (PSYSTEM_PROCESS_INFO)((PUCHAR)pCurrent + pCurrent->NextEntryOffset);
if (isHiddenProcess((int)pNext->ProcessId,pNext->ImageName.Buffer))
{
if (0 == pNext->NextEntryOffset)
{
pCurrent->NextEntryOffset = 0;
}
else
{
pCurrent->NextEntryOffset += pNext->NextEntryOffset;
}
pNext = pCurrent;
}
} while (pCurrent->NextEntryOffset != 0);
}
return status;
}

这段代码同SubTee之前开源的代码AppInitGlobalHooks-Mimikatz基本相同

我在之前的文章《利用globalAPIhooks在Win7系统下隐藏进程》有过介绍

SubTee的Github目前无法访问,但我当时fork了他的代码,地址如下:

https://github.com/3gstudent/AppInitGlobalHooks-Mimikatz/blob/master/AppInitHook/main.cpp#L39

所以说,我们使用之前的代码也能实现相同的功能

1.编译dll

使用代码:

https://github.com/3gstudent/AppInitGlobalHooks-Mimikatz/

编译生成dll

2.注入dll

这里可以使用我之前写的dll注入的代码,地址如下:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/NtCreateThreadEx%20%2B%20LdrLoadDll.cpp

但是需要把FreeDll()的功能去掉

综上,ProcessHider的实现原理如下:

通过Dll注入来Hook API NtQuerySystemInformation(),实现进程隐藏

0x03 ProcessHider的检测

在检测上主要识别以下行为:

Dll注入

Hook API NtQuerySystemInformation()

0x04 小结

本文介绍了ProcessHider的实现原理和代码细节,分析利用思路,给出检测建议。

文由https://3gstudent.github.io/3gstudent.github.io/ProcessHider%E5%88%A9%E7%94%A8%E5%88%86%E6%9E%90/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-021,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 简介
  • 0x02 ProcessHider的实现原理
  • 0x03 ProcessHider的检测
  • 0x04 小结
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档