Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sigmalite — 用于解析和执行 Sigma 检测规则的 Go 库,支持字段修饰符、CIDR 匹配和自定义字段解析器,适用于安全监控中的日志条目。 | Kitploit
工具/GitHubGitHub/runreveal/sigmalite
静态分析漏洞分析代码分析入侵检测日志分析
GitHubrunreveal/sigmalite

sigmalite

用于解析和执行 Sigma 检测规则的 Go 库,支持字段修饰符、CIDR 匹配和自定义字段解析器,适用于安全监控中的日志条目。

查看仓库
583121年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

github.com/runreveal/sigmalite

sigmalite 包提供了 Sigma 检测格式 的解析器和执行引擎。

rule, err := sigmalite.ParseRule([]byte(`
title: My example rule
detection:
  keywords:
    - foo
    - bar
  selection:
    EventId: 1234
  condition: keywords and selection
`))
if err != nil {
  return err
}
entry := &sigmalite.LogEntry{
  Message: "Hello foo",
  Fields: map[string]string{
    "EventId": "1234",
  },
}
isMatch := rule.Detection.Matches(entry, nil)

安装

go get github.com/runreveal/sigmalite

规则

规则以 YAML 格式编写,且至少必须包含 title 和 detection:

title: My example rule
detection:
  keywords:
    - foo
    - bar
  selection:
    EventId: 1234
  condition: keywords and selection

detection 块中的 condition 字段是一个逻辑表达式,用于连接 detection 块中的其他字段选择器。在此示例中,该规则将匹配任何满足以下条件的日志条目:EventId 字段正好是 1234,并且其消息中包含 "foo" 或 "bar"。

字段也可以通过 正则表达式 进行匹配:

title: My example rule with a timestamp
detection:
  selection:
    Timestamp|re: ^2024-06-01T(01|02|03):[0-5][0-9]:[0-5][0-9]$
  condition: selection

以及 CIDR:

title: My example rule with IP addresses
detection:
  local:
    DestinationIp|cidr:
      - "127.0.0.0/8"
      - "10.0.0.0/8"
      - "172.16.0.0/12"
      - "192.168.0.0/16"
      - "169.254.0.0/16"
      - "::1/128" # IPv6 回环地址
      - "fe80::/10" # IPv6 链路本地地址
      - "fc00::/7" # IPv6 私有地址
  condition: not local

更多信息请参见 官方 Sigma 规则文档。

字段修饰符

本库支持以下 字段修饰符:

  • all
  • cidr
  • contains
  • endswith
  • expand
  • re
  • startswith
  • windash
  • base64/base64offset

字段解析器

FieldResolver 接口扩展了标准 Sigma 规范,以支持超越简单键/值对的复杂字段查找场景。这允许您实现自定义的字段解析逻辑,用于:

  • 嵌套 JSON 结构:使用点号表示法访问深层嵌套字段(例如 event.process.user)
  • 数组处理:从日志条目的数组中提取值
  • 通配符匹配:支持如 process.*.user 或 network[*].ip 等字段模式
  • 多字段聚合:合并多个相关字段的值
  • 大小写规范化:处理字段名称变体及大小写敏感性问题
  • 复杂数据转换:在字段匹配前应用自定义逻辑
  • 外部数据源查找:从外部数据源查找字段值。

接口定义

type FieldResolver interface {
    Resolve(fieldName string, entry *LogEntry) []string
}

Resolve 方法接收来自您 Sigma 规则的字段名称,并返回所有匹配的值,作为字符串切片。如果未找到匹配项,则返回 nil 或空切片。

基本使用示例

// CustomResolver 演示了为结构化日志进行字段解析的示例
type CustomResolver struct{}

func (r *CustomResolver) Resolve(fieldName string, entry *sigma.LogEntry) []string {
    switch fieldName {
    case "process.users":
        // 从多个来源聚合用户字段
        var users []string
        if user, ok := entry.Fields["Event.Process.User"]; ok {
            users = append(users, user)
        }
        if user, ok := entry.Fields["Event.Login.User"]; ok {
            users = append(users, user)
        }
        if user, ok := entry.Fields["Event.Session.User"]; ok {
            users = append(users, user)
        }
        return users

    case "network.internal_ips":
        // 从所有与网络相关的字段中提取 IP 地址
        var ips []string
        for fieldName, value := range entry.Fields {
            if strings.Contains(strings.ToLower(fieldName), "ip") {
                // 简单的 IP 验证(实际使用中请使用合适的验证方法)
                if strings.Contains(value, ".") {
                    ips = append(ips, value)
                }
            }
        }
        return ips

    default:
        return nil
    }
}

func matches(detection *sigmalite.Detection) bool {
  opts := &sigmalite.MatchOptions{
		FieldResolver: CustomResolver{},
  },

  entry := &sigmalite.LogEntry{
		Message: string("Message Text"),
		Fields:  nil, // 使用解析器,因此此处可以为空
	}

	return detection.Matches(entry, opts)
}

字段解析器与所有字段修饰符无缝协作,允许您将正则表达式模式、不区分大小写的匹配以及其他转换应用于解析后的值。

许可

Apache 2.0

下载工具