前言
本篇文章简单介绍下如何使用免费软件搭建自己的SEIM系统
组件
日志捕获组件:
日志捕获组件Sysmon
下载
https://learn.microsoft.com/en-us/sysinternals/downloads/Sysmon
安装配置
下载配置模板
https://github.com/SwiftOnSecurity/Sysmon-config
将其放到与sysmon同一路径,使用CMD以管理员权限执行
sysmon.exe -accepteula -i sysmonconfig-export.xml
更新配置文件时,使用
sysmon.exe -c sysmonconfig-export.xml
日志发送组件Winlogbeat
下载
https://www.elastic.co/cn/downloads/beats/winlogbeat
安装配置
以管理员身份打开 PowerShell,在Winlogbeat路径下执行
.\install-service-winlogbeat.ps1
遇到以下报错时
PS C:\Users\doinb\Desktop\Sysmon\winlogbeat-8.6.2-windows-x86_64> .\install-service-winlogbeat.ps1
.\install-service-winlogbeat.ps1 : 无法加载文件 C:\Users\doinb\Desktop\Sysmon\winlogbeat-8.6.2-windows-x86_64\install-s
ervice-winlogbeat.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ .\install-service-winlogbeat.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
运行以下命令解决
PS C:\Users\doinb\Desktop\Sysmon\winlogbeat-8.6.2-windows-x86_64> Set-ExecutionPolicy -Scope CurrentUser
位于命令管道位置 1 的 cmdlet Set-ExecutionPolicy
请为以下参数提供值:
ExecutionPolicy: RemoteSigned
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): A
PS C:\Users\doinb\Desktop\Sysmon\winlogbeat-8.6.2-windows-x86_64>
打开winlogbeat.yml,默会收集以下日志,不需要的日志类型可以注释掉
winlogbeat.event_logs:
- name: Application
ignore_older: 72h
- name: System
- name: Security
- name: Microsoft-Windows-Sysmon/Operational
- name: Windows PowerShell
event_id: 400, 403, 600, 800
- name: Microsoft-Windows-PowerShell/Operational
event_id: 4103, 4104, 4105, 4106
- name: ForwardedEvents
tags: [forwarded]
根据需要配置ELK,这里以配置Logstash为例
output.logstash:
# The Logstash hosts
hosts: ["ip:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
修改完winlogbeat.yml之后,PowerShell执行以下指令重新加载配置文件
.\winlogbeat.exe setup -e
之后就可以启动winlogbeat服务了,winlogbeat会实时将收集的日志文件发送到logstash
Start-Service winlogbeat
登陆Elasticsearch查看发送过来的数据,先选择management
选择索引管理查看Logstash转发过来的数据
正确找到创建的索引
创建Kibana视图
创建数据视图
规则导入及编写
Sigma规则
Sigma是一种通用且开放的签名格式,以直接的方式描述相关的日志事件。规则格式非常灵活,易于编写,适用于任何类型的日志文件。Sigma提供了一种结构化的形式,研究人员或分析师可以在其中描述他们曾设计开发的检测方法,并与其他安全人员共享。
Github https://github.com/SigmaHQ/sigma
我们可以使用官方库中的威胁检测主机收到的威胁,也可以自己编写规则,下面演示一下如何编写自己的sigma规则
Sigma规则编写测试
我们以Windows上使用net user /add
命令创建用户为例,使用下面的命令创建新用户
net user admin.123 admin1 /add
使用Windows时间查看器查看事件ID为4720的事件
日志名称: Security
来源: Microsoft-Windows-Security-Auditing
日期: 2023/3/16 15:31:03
事件 ID: 4720
任务类别: User Account Management
级别: 信息
关键字: 审核成功
用户: 暂缺
计算机: DESKTOP-31UM2QN
描述:
已创建用户帐户。
使用者:
安全 ID: DESKTOP-31UM2QN\doinb
帐户名: doinb
帐户域: DESKTOP-31UM2QN
登录 ID: 0x1576CA
新帐户:
安全 ID: DESKTOP-31UM2QN\admin.123
帐户名: admin.123
帐户域: DESKTOP-31UM2QN
属性:
SAM 帐户名: admin.123
显示名称: <未设置值>
用户主体名称: -
主目录: <未设置值>
主驱动器: <未设置值>
脚本路径: <未设置值>
配置文件路径: <未设置值>
用户工作站: <未设置值>
上次设置的密码:<从不>
帐户过期: <从不>
主要组 ID: 513
允许委托给: -
旧 UAC 值: 0x0
新 UAC 值: 0x15
用户帐户控制:
已禁用的帐户
'不要求密码' - 已启用
'普通帐户' - 已启用
用户参数: <未设置值>
SID 历史: -
登录时间(以小时计):全部
附加信息:
特权 -
事件 Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-a5ba-3e3b0328c30d}" />
<EventID>4720</EventID>
<Version>0</Version>
<Level>0</Level>
<Task>13824</Task>
<Opcode>0</Opcode>
<Keywords>0x8020000000000000</Keywords>
<TimeCreated SystemTime="2023-03-16T07:31:03.6696152Z" />
<EventRecordID>31488</EventRecordID>
<Correlation ActivityID="{404e6454-57b5-0001-8d64-4e40b557d901}" />
<Execution ProcessID="832" ThreadID="5620" />
<Channel>Security</Channel>
<Computer>DESKTOP-31UM2QN</Computer>
<Security />
</System>
<EventData>
<Data Name="TargetUserName">admin.123</Data>
<Data Name="TargetDomainName">DESKTOP-31UM2QN</Data>
<Data Name="TargetSid">S-1-5-21-3678678421-903751620-185585966-1001</Data>
<Data Name="SubjectUserSid">S-1-5-21-3678678421-903751620-185585966-1000</Data>
<Data Name="SubjectUserName">doinb</Data>
<Data Name="SubjectDomainName">DESKTOP-31UM2QN</Data>
<Data Name="SubjectLogonId">0x1576ca</Data>
<Data Name="PrivilegeList">-</Data>
<Data Name="SamAccountName">admin.123</Data>
<Data Name="DisplayName">%%1793</Data>
<Data Name="UserPrincipalName">-</Data>
<Data Name="HomeDirectory">%%1793</Data>
<Data Name="HomePath">%%1793</Data>
<Data Name="ScriptPath">%%1793</Data>
<Data Name="ProfilePath">%%1793</Data>
<Data Name="UserWorkstations">%%1793</Data>
<Data Name="PasswordLastSet">%%1794</Data>
<Data Name="AccountExpires">%%1794</Data>
<Data Name="PrimaryGroupId">513</Data>
<Data Name="AllowedToDelegateTo">-</Data>
<Data Name="OldUacValue">0x0</Data>
<Data Name="NewUacValue">0x15</Data>
<Data Name="UserAccountControl">
%%2080
%%2082
%%2084</Data>
<Data Name="UserParameters">%%1793</Data>
<Data Name="SidHistory">-</Data>
<Data Name="LogonHours">%%1797</Data>
</EventData>
</Event>
我们根据事件ID创建一条Sigma规则
title: 创建本地用户账户行为
status: test
description: 使用net user /add命令创建本地用户帐户
references:
- https://attack.mitre.org/techniques/T1136/001/
logsource:
product: windows
service: security
detection:
selection:
EventID: 4720 #已创建用户帐户。
condition: selection
falsepositives:
- 域控制器日志
- 由特权帐户管理工具管理的本地用户账户
level: low
使用sigmac
转换Sigma
规则为es-dsl
查询语句
PS D:\document\sigma\tools> python .\sigmac -t es-dsl -c .\config\winlogbeat.yml ..\rules\test_rules\test11.yml
{
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"match_phrase": {
"winlog.channel": "Security"
}
},
{
"match_phrase": {
"winlog.event_id": "4720"
}
}
]
}
}
}
}
}
在Elasticsearch开发工具中查询,可以看到成功匹配到了日志。