当前位置:   article > 正文

kellect:Windows内核级别事件日志的采集工具

kellect

github开源地址
gitlink开源地址

kellect 简介

kellect(a Kernel-based efficient and Lossless event log collector)是一个用于内核级别事件日志的完整处理系统框架 ,包括收集、清理、融合、存储和分析。

kellect作为首发版本,是一款基于ETW(Event Tracing for Windows)的多线程Windows内核日志收集器,采用C++语言开发,性能高效。 kellect可以跟踪Windows系统的内核级事件信息,如FileIO、Process、Thread、ImageLoad、Registry等。

该程序集成了事件收集、事件分析、事件语义校正、事件输出等功能。最后以JSON格式输出,可以指定输出到文件路径或通过socket传输到另一台主机。

用户可以直接通过PowerShell.exe或cmd.exe使用该工具,并根据需要进行命令参数的设定,无需修改源代码。我们还提供了一些配置文件,用户可以根据需求进行定制。

实现细节

kellect使用一些第三方依赖库,如下所示,请查阅LICENSE-3RD-PARTY获取更多信息。

模块名称版本License链接
easyloggingppv9.96.7https://github.com/amraynonweb/easyloggingpp
moodycamel::ConcurrentQueue/https://github.com/cameron314/concurrentqueue
nlohmann::jsonv3.10.4https://github.com/nlohmann/json

kellect的开发主要依赖于Clion开发工具,编译主要依赖于MSVC编译器。开发用到的软件和版本如下表所示:

工具名称版本
Visual Studio16.11.13
MSVC19.29.30143.0
Windows SDK10.0.20348.0
Clion2022.1

kellect的目录结构如下所示:

目录名称说明
include头文件
lib第三方库
source源文件
source/config配置文件
release发布版本

kellect 说明

通过命令行调用

经过测试,kellect可以在Windows7(x64)系统以上版本运行。

采集器必须以管理员身份运行。如下所示,可通过配置参数的形式进行功能的选择。

image-20220503171012480

我们可以通过以下命令进行数据采集:

kellect.exe -e 1 -f test.json
  • 1

注意: 参数 -e 请输入十进制格式参数。

配置文件的用法

用户可以通过配置filter.txt实现不同功能。通常采集器运行不需要进行修改,除非有定制化的需求。

  • filter.txt的功能是去过滤不需要的日志数据。配置中可以进行三种不同类型的配置:进程ID、事件类别、Image文件路径的黑白名单。默认配置如下所示:
filteredProcessID
0 4 128

filteredEventIdentifier
2429279289 76
2429279289 69
2429279289 74
2429279289 75
2429279289 84
2429279289 82
2429279289 80
2429279289 81
2429279289 79
2429279289 83
2429279289 86
3208270021 11
3208270021 17
3208270021 27
3208270021 26
3208270021 10
1030727888 11

blacklistOfImageFiles

whitelistOfImageFiles
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

配置文件不同标签详情:

  1. [filteredProcessID]

    表示根据此标签中的 ID 列表过滤事件。 进程 ID 由空格分隔。

  2. [filteredEventIdentifier]

    表示通过Event ProviderID和opcode的组合过滤事件,我们称之为EventIdentifier。 具体的事件日志详情可以在微软文档中获取. ProviderID 是 Guid 类第一部分的十进制形式,opcode 是每个 BaseEvent Class Page 的 Remarks 下的 EventType 值。

    image-20220503171251436

    image-20220503171255065

  3. [blacklistOfImageFiles]

    可以通过此标签中列出的Image过滤 Image 和 CallStack 类型的事件。

  4. [whitelistOfImageFiles]

    可以通过此标签中列出的Image来保留Image和 CallStack 类型的事件。

输出格式

我们以 JSON 格式输出事件记录。 每个 BaseEvent 都有两部分属性:公共属性和私有属性。 各部分说明如下:

  • 公共属性
属性描述
threadID产生事件的线程ID
processID产生事件的进程ID
processName产生事件的进程名称
timestamp事件发生的时间
  • 私有属性

    此类型属性因事件类型而异。 例如:

  1. file_create 事件

    属性描述
    IrpPtrIO请包
    TTID正在创建文件的线程的线程标识符
    FileObject可用于在文件创建和关闭事件之间将操作与同一打开的文件对象实例相关联的标识符
    CreateOptions在 CreateOptions 和 CreateDispositions 参数中传递给 NtCreateFile 函数的值
    FileAttributes在 FileAttributes 参数中传递给 NtCreateFile 函数的值
    ShareAccess在 ShareAccess 参数中传递给 NtCreateFile 函数的值
    OpenPath文件路径
  2. FileIo_Name 事件

    属性描述
    FileObject将此指针的值与 DiskIo_TypeGroup1 事件中的 FileObject 指针值匹配以确定 I/O 操作的类型
    FileName文件的完整路径,不包括驱动器号
  3. CallStack 事件 . 我们收集的API是Windows自己提供的,不收集用户自定义dll文件中的任何API。

    属性描述
    callStackInfo进程操作的调用栈.
    (每个调用的格式如下所示 : ModulePath:APIName, 如: C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock)
  4. … 我们可以在微软的文档中找到其他的时间属性描述

需要注意的是,我们已经修改或填充了大部分事件的属性,所以Windows提供的原生事件和我们的会有一些差异。

输出情况如下:

#FileIO的create 事件
{
    "EventName":"FileIOCreate",
    "ProcessID":11144,
    "ProcessName":"clion64.exe",
    "ThreadID":15692,
    "TimeStamp":132959694278638867,
    "arguments":{
        "CreateOptions":50331744,
        "FileAttributes":128,
        "FileObject":251724112,
        "IrpPtr":116229640,
        "OpenPath":"C:\Users\Administrator\AppData\Local\JetBrains\CLion2022.1\caches\contentHashes.dat.keystream.len",
        "ShareAccess":7,
        "TTID":15692
    }
}

#callstack事件
{
    "EventName":"CallStack",
    "ProcessID":11144,
    "ProcessName":"clion64.exe",
    "ThreadID":15692,
    "TimeStamp":132959694278638867,
    "arguments":{
        "stackInfo":"C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:LdrSystemDllInitBlock,
        C:\Windows\System32\ntdll.dll:RtlCaptureStackContext"
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/706236
推荐阅读
相关标签
  

闽ICP备14008679号