sigma规则是面对日志检测的规则,yara是面对文件检测的规则,snort是面向网络检测的规则。主要通过对sigma规则的学习,了解Windows上的日志工作原理和作用。
据说比较好的资料:Loginsoft Blog - Threat Detection with SIGMA Rules
官方库推荐的文章:https://www.nextron-systems.com/2018/02/10/write-sigma-rules/
前置
SIEM
安全信息和事件管理 (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热力图,直观看到行为模型的覆盖程度。
该项目运行需要基于python,不像yara那样自己就能跑。他为啥就不能像yara那样自己集成一个exe呢?
根据介绍可以看到他使用起来还是比较方便的。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对比一下就很清楚了
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的静态匹配进行工作。
这个痛苦金字塔里,TTPs在最顶层,对于一个成熟的组织来说,改变成本是巨大的。具体来说就是我们可以利用sigma直接去匹配进程名称和启动的父进程等等的信息。
sigmac
要将Sigma规则转换为任何SIEM平台所支持的搜索查询语句,需要使用sigmac进行“编译处理”。下图是在ubuntu18上执行成功的python3.6.6
版本问题
最开始的sigma版本:https://github.com/SigmaHQ/sigma,但是在readme里面,作者提到了:
看起来好像是该仓库不再受到支持了,最近一次更新是在4个月前。该中还是有近期的提交记录的,所以主要功能还是使用这个库为主(不是CLI的库)。
平台使用
基于python写的程序,linux和Windows应该都可以使用,但是在Windows使用的时候,他无法定位到自己的库中类或者函数,他的from import
是有问题的,在Linux中使用没有任何问题。具体原因还不知道为啥
Windows运行:
需要改一下他import的语法和方式,但是在Ubuntu上可以直接通过
sudo python3 setup.py install #不用sudo会报错。
Windows我改半天一直有问题,不想改了,直接用ubuntu里的就行了。