sigma规则是面对日志检测的规则,yara是面对文件检测的规则,snort是面向网络检测的规则。主要通过对sigma规则的学习,了解Windows上的日志工作原理和作用。

sigma的官方库

据说比较好的资料:Loginsoft Blog - Threat Detection with SIGMA Rules

官方库推荐的文章:https://www.nextron-systems.com/2018/02/10/write-sigma-rules/

前置

SIEM

参考:什么是安全信息与事件管理 (SIEM)?| IBM

安全信息和事件管理 (SIEM) 方案融合了安全信息管理 (SIM) 和安全事件管理 (SEM),可提供对事件的实时监控和分析,以及出于合规性或审计目的跟踪和记录安全数据。

SIEM 是一种安全解决方案,可帮助组织及早识别潜在的安全威胁和漏洞,以免业务运营遭受破坏。

反正总而言之他就是一个一体化的一个实时的安全检测平台,这个平台可以动态实时的收集、分析数据,帮助企业减少外部攻击的伤害,日志分析是他的一个功能。

yaml

YAML 是一种较为人性化的数据序列化语言,可以配合目前大多数编程语言使用。

YAML 的语法比较简洁直观,特点是使用空格来表达层次结构,其最大优势在于数据结构方面的表达,所以 YAML 更多应用于编写配置文件,其文件一般以 .yml 为后缀。sigma的规则一般采用的是yaml格式。

该语言是:

  • 大小写敏感

  • 标识注释

  • 缩进不能使用tab,必须用空格(校赛平台配置题目就是yaml)

  • 同级必须上下对齐

  • 用“ --- ”即三个破折号表示一份内容的开始

  • 用“ ... ”即三个小数点表示一份内容的结束(非必需)

  • 使用“冒号+空格”来分开

  • 支持流式风格( Flow style)

    • key: { child-key1: value1, child-key2: value2 }
      
  • “破折号+空格”开头的数据组成一个数组

    • values:
        - value1
        - value2
        - value3
      
  • 字符串一般不需要用引号包裹,但是如果字符串中使用了反斜杠“\”开头的转义字符就必须使用引号包裹

  • “true”、“True”、“TRUE”、“yes”、“Yes”和“YES”皆为

  • “false”、“False”、“FALSE”、“no”、“No”和“NO”皆为

  • “null”、“Null”和“~”都是空,不指定值默认也是空

  • 6.8523015e+5 # 使用科学计数法

  • 0001_0000 # 二进制表示

  • YAML 也支持 ISO 8601 格式的时间数据

    • date1: 2020-05-26
      date2: 2020-05-26T01:00:00+08:00
      dete3: 2020-05-26T02:00:00.10+08:00
      date4: 2020-05-26 03:00:00.10 +8
      

sigma

Sigma是一种通用且开放的检测规则格式(SIEM 系统的通用签名格式)。也支持进行不同SIEM系统的格式转换。同时Sigma可以通过行为规则生成ATT&CK Navigator热力图,直观看到行为模型的覆盖程度。

image-20230521113719729

该项目运行需要基于python,不像yara那样自己就能跑。他为啥就不能像yara那样自己集成一个exe呢?

image-20230521114539192

根据介绍可以看到他使用起来还是比较方便的。nmd这个玩意没有官方文档,就一个youtube的视频。

sigma 主要组成

主要有三个组成部分:

  • 通用Sigma规则格式的语言规范。
  • Sigma签名的开放存储库,包含针对多个攻击者行为和技术的1000多条规则。
  • Sigmac是一个转换实用程序,用于把Sigma规则转为不同的SIEM工具所支持的搜索查询语句。

简介

Sigma规则是用YAML编写的,它定义了在系统日志中查找的内容和位置。

每个Sigma规则还可以指定元数据,例如:规则的作者、唯一规则标识符 (UUID)、MITRE ATT&CK技术和参考。

支持日志类型:

  • 防火墙日志
  • Web应用程序日志
  • 代理/VPN网络日志
  • 操作系统日志
    • 事件日志
    • 进程创建和审核日志
    • 系统事件

基础框架

title: 这是一个例子 (标题)
id: 5ea8faa8-db8b-45be-89b0-151b84c82702(编号)
status: 实验 (状态)
description: 关于目标的一些描述 (描述)
author: yunzui        (作者)
date: 2022/07/31       (日前)
modified: 2022/07/31
references:   (参考)
    -  参考文章的地址,还是有启发意义的
tags:          (对应的ATT&CK)
    - attack.initial_access
    - attack.t1190
logsource:       (日志)
    category: webserver
# 上面的东西都没啥实际效果,重要的都在下面,上面的除了tags和logsource随便写就行,不影响准确性
detection:       (检测)
    keywords:    (匹配特征)
        - 'yunzui'

    filter:       (过滤)
        - 'mitian'

    condition: keywords and not filter  (命令逻辑)
falsepositives:    (误报)
    - 描述字段,用于解释哪些事件或情况可能触发导致误报的规则
level: high         (安全级别)

随便挑一个yml对比一下就很清楚了

image-20230521121437387

cmd删除命令日志

以存储库中的Sigma规则/rules/windows/process_creation/proc_creation_win_cmd_del_execution.yml为例,此规则检测使用Windows Cmd命令删除文件。

title: File Deletion Via Del
id: 379fa130-190e-4c3f-b7bc-6c8e834485f3
status: experimental
description: |
    Detects execution of the builtin "del"/"erase" commands in order to delete files.
    Adversaries may delete files left behind by the actions of their intrusion activity.
    Malware, tools, or other non-native files dropped or created on a system by an adversary may leave traces to indicate to what was done within a network and how.
    Removal of these files can occur during an intrusion, or as part of a post-intrusion process to minimize the adversary's footprint.
    检测为了删除文件而执行的内置“ del”/“擦除”命令。对手可能会删除他们的入侵行为留下的文件。恶意软件、工具或其他非本地文件丢弃或创建的系统上的对手可能会留下痕迹,以表明在网络中做了什么以及如何做。
    删除这些文件可能发生在入侵期间,或者作为入侵后过程的一部分,以尽量减少对手的足迹。
references:
    - https://github.com/redcanaryco/atomic-red-team/blob/f339e7da7d05f6057fdfcdd3742bfcf365fee2a9/atomics/T1070.004/T1070.004.md
    - https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/erase
author: frack113
date: 2022/01/15
modified: 2023/03/06
tags:
    - attack.defense_evasion
    - attack.t1070.004
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        - Image|endswith: '\cmd.exe'
        - OriginalFileName: 'Cmd.Exe'
    selection_del:
        CommandLine|contains:
            - 'del '
            - 'erase '
    selection_flags:
        CommandLine|contains:
            - ' /f' # Force deleting of read-only files.
            - ' /s' # Delete specified files from all subdirectories.
            - ' /q' # Quiet mode, do not ask if ok to delete on global wildcard
    condition: all of selection_*
falsepositives:
    - False positives levels will differ Depending on the environment. You can use a combination of ParentImage and other keywords from the CommandLine field to filter legitimate activity
level: low

目录详情

logsource

描述了要应用检测的日志数据。Logsource schema如下,它可以使用以下仨属性中的一个或多个:

category [optional]

  • 用于选择某个系列产品生成的所有日志,例如:防火墙和Web服务器日志。
  • 类别示例包括:防火墙、防病毒、EDR、Web。

product [optional]

  • 用于选择特定产品生成的所有日志,例如:Windows、Apache。
  • 产品类型可以更进一步划分,例如:Windows日志类型可分为安全日志、系统日志、应用日志、和Windows Defender日志等。

service [optional]

  • 仅用于选择产品日志的子集,例如:Windows系统上的安全事件日志。

definition

含一组搜索标识符,表示对日志数据的搜索及其各自的评估机制,由两个属性控制:

  • selection(选择):搜索日志数据的标识符。该关键词包含很多后缀。
  • condition(条件):定义如何评估选择或过滤。是全要还是中一个就行还是其他条件。

检测可以由Lists和Maps两种数据结构组成。比如下面两个例子:

# from rules\windows\process_creation\proc_creation_win_cmd_del_execution.yml
detection:
    selection_img:
        - Image|endswith: '\cmd.exe'
        - OriginalFileName: 'Cmd.Exe'
    selection_del:
        CommandLine|contains:
            - 'del '
            - 'erase '
    selection_flags:
        CommandLine|contains:
            - ' /f' # Force deleting of read-only files.
            - ' /s' # Delete specified files from all subdirectories.
            - ' /q' # Quiet mode, do not ask if ok to delete on global wildcard
    condition: all of selection_*
# from rules\windows\process_creation\proc_creation_win_cmd_unusual_parent.yml
detection:
    selection:
        Image|endswith: '\cmd.exe'
        ParentImage|endswith:
            - '\csrss.exe'
            - '\ctfmon.exe'
            - '\dllhost.exe'
            - '\epad.exe'
            - '\FlashPlayerUpdateService.exe'
            - '\GoogleUpdate.exe'
            - '\jucheck.exe'
            - '\jusched.exe'
            - '\LogonUI.exe'
            - '\lsass.exe'
            - '\regsvr32.exe'
            - '\SearchIndexer.exe'
            - '\SearchProtocolHost.exe'
            - '\SIHClient.exe'
            - '\sihost.exe'
            - '\slui.exe'
            - '\spoolsv.exe'
            - '\sppsvc.exe'
            - '\taskhostw.exe'
            - '\unsecapp.exe'
            - '\WerFault.exe'
            - '\wergmgr.exe'
            - '\wlanext.exe'
            - '\WUDFHost.exe'
    condition: selection

具体应用

Tactics, Techniques and Procedures(战术、技术以及步骤),作为一种常用的威胁狩猎的方式,一般用于发现潜在的威胁,他是IOCs的超集,IOC是易失的,但是TTPs一般不会改变,利用sigma规则可以直接通过TTPs进行工作,但是yara只能通过IOCs的静态匹配进行工作。

img

这个痛苦金字塔里,TTPs在最顶层,对于一个成熟的组织来说,改变成本是巨大的。具体来说就是我们可以利用sigma直接去匹配进程名称和启动的父进程等等的信息。

sigmac

要将Sigma规则转换为任何SIEM平台所支持的搜索查询语句,需要使用sigmac进行“编译处理”。下图是在ubuntu18上执行成功的python3.6.6

image-20230522105558471

版本问题

最开始的sigma版本:https://github.com/SigmaHQ/sigma,但是在readme里面,作者提到了:

image-20230522100431361

看起来好像是该仓库不再受到支持了,最近一次更新是在4个月前。该中还是有近期的提交记录的,所以主要功能还是使用这个库为主(不是CLI的库)。

平台使用

基于python写的程序,linux和Windows应该都可以使用,但是在Windows使用的时候,他无法定位到自己的库中类或者函数,他的from import 是有问题的,在Linux中使用没有任何问题。具体原因还不知道为啥

Windows运行:

image-20230522105351626

需要改一下他import的语法和方式,但是在Ubuntu上可以直接通过

sudo python3 setup.py install        #不用sudo会报错。

Windows我改半天一直有问题,不想改了,直接用ubuntu里的就行了。

没有版权,随便复制,免费的知识应该共享 all right reserved,powered by Gitbook该文章修订时间: 2023-05-22 11:29:09

results matching ""

    No results matching ""