ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RemoteSysmon实战:基于Sysmon与WEC的Windows日志集中监控方案

RemoteSysmon实战:基于Sysmon与WEC的Windows日志集中监控方案 如果你管理过一批Windows服务器大概也会有这种体会想确认某台机器上某个进程到底什么时候启动的、有没有对外建立异常连接、某个关键文件是不是被动过靠系统自带的事件日志和任务管理器基本是抓瞎。日志里信息太碎记不记还看系统心情真出事了翻起来人先疯一半。SysmonSystem Monitor本来是解决这个问题的标准答案但它的输出落在本机日志里服务器一多逐台登录查看就成了灾难。我这次做的RemoteSysmon说白了就是把Sysmon采集到的系统活动日志统一收集、集中查看、远程管理的一个工具包让一台台孤岛式的服务器变成可统一观测的整体。这篇文章不含水分从头到尾都是可落地的方案适合被Windows日志问题困扰的运维、安全和开发同学参考。开始之前先把话说清楚RemoteSysmon不是一个从零写内核驱动的轮子它的底层还是Sysmon但它补上了Sysmon最让人难受的那块短板——远程能力。你可以把它理解成一个给Sysmon接上了“遥控器”和“中央显示器”的管理层。我会把整个工具拆开讲包括它背后的Windows事件日志转发机制、服务端和客户端的协作逻辑、部署时最容易翻车的几个坑以及日常监控中最实用的事件筛选规则。读完这篇你可以照着在自己的环境里把它跑起来。1. 为什么单机Sysmon不够用远程采集的刚需场景在聊RemoteSysmon的具体方案之前我觉得有必要先把问题本身讲透。很多人一听Sysmon就头疼觉得配置复杂、日志量大、看了白看。但真实情况是——不是Sysmon不好用而是你只用了它一半的能力而且用错了方式。1.1 Sysmon能采集什么底层事件类型全景Sysmon本质是一个轻量级的驱动型监控工具它在系统里挂了很多内核回调把关键行为记录成结构化的事件。它最值钱的地方不是一个笼统的“做了什么”而是非常具体、可按字段检索的行为链条。我平时最依赖的几类事件简单梳理如下事件ID事件含义关键字段我的用途1进程创建Image、CommandLine、ParentProcessId揪可疑命令、马甲进程3网络连接SourceIp、DestinationIp、DestinationPort挖矿行为、外联扫描、反向Shell5进程终止Image、ProcessId分析生命周期7镜像加载ImageLoaded、SignedDLL注入或异常加载排查8远程线程创建SourceProcessId、StartAddress跨进程恶意操作特征11文件创建TargetFilename勒索软件写文件、webshell落地13注册表改动TargetObject持久化后门、自启动项22DNS查询QueryName域名外联、DGA域名请求单独看某一台机器这些事件也很有价值但价值发挥不出来。举个我亲历的案例一批服务器中有一台内存占用异常飙高任务管理器打开进程列表排了个序看到某个名字很木马的进程但没法迅速确认它的父进程是谁、由什么命令拉起、有没有对外建立网络连接。如果是单机状态你要么在这台机器上开Sysmon等下次复现要么事后翻日志翻到崩溃。而在RemoteSysmon的架构里所有服务器的进程创建事件、网络事件早就源源不断地汇入中心端我只需要在搜索框里输入进程名它从哪来、连了哪、现在死没死一目了然。这就是“远程”两个字的分量。1.2 Sysmon原生使用方式的三个限制我不是否定Sysmon本身它的采集能力至今仍是Windows平台上同类工具的标杆。但它的原生工作方式有三个绕不开的限制正好是RemoteSysmon要解决的核心痛点。第一个限制是日志分散。每台机器的Sysmon日志都留在本机的Microsoft-Windows-Sysmon/Operational通道里。三五台机器还好二三十台以上每台都要远程桌面或者PowerShell进去捞日志效率为零。而且等你想起来去捞的时候事件可能已经被日志策略滚掉了。第二个限制是默认配置不友好。Sysmon不装配置文件的时候只会用默认事件记录很多关键行为根本不采集。但就算你用了主流配置文件没有一个集中的查询入口规则再全也白搭。安全分析讲究“时间的确定性”和“全场的可见性”缺了集中收集这两点都谈不上。第三个限制是管理成本。Sysmon的配置更新、卸载升级都得逐台机器操作如果想调整文件规则或者网络规则意味着要重新对每台机器跑一遍sysmon -c。这个动作在有几台机器时还能忍受机器规模上来之后基本就等于放弃治疗。RemoteSysmon要做的就是把“逐台维护”变成“中心配置、批量分发”。1.3 RemoteSysmon解决什么问题四个具体能力RemoteSysmon的核心能力我总结成四句话第一集中收。所有被监控的Windows机器通过Windows事件转发WEC把Sysmon日志统一发到一台中心收集服务器这台服务器既可以是专门的日志机也可以是已有的运维跳板机。第二远程查。中心端能按条件跨机器查询所有服务器的事件不用再逐台登录。想看某台机器某个时间段的网络连接事件一条命令或者一个界面筛选搞定。第三集中管。Sysmon的配置文件可以以中心端为基准进行统一管理和更新多台客户端只需要做一次基础部署后续调规则不再逐台跑命令。第四快定位。当中心端配置了告警规则之后异地登录、异常端口外联、高危进程启动这类事件会自动触发通知做到了从“事后翻日志”到“事情发生就知道”的转变。这四个能力做下来RemoteSysmon在中小型服务器集群里完全可以充当一个轻量级、零商业授权的EDR雏形来用。2. RemoteSysmon整体架构事件如何从客户端流入中心端RemoteSysmon的技术底座是基于Windows Event ForwardingWEC实现的。WEC不是新东西Windows Server 2012 R2以后自带的Event Collector服务就是干这个的。RemoteSysmon做的事情是把WEC和Sysmon组合成一套开箱可用的监控方案。理解它的整体架构先理解两个角色。2.1 订阅管理器与转发结构Push模式和Pull模式的取舍WEC体系里有两个核心角色一个是源计算机也就是被监控的客户端另一个是收集器也就是中心端。收集器上会创建一个订阅Subscription订阅描述了“要收集哪些事件”和“从哪些机器收集”。WEC支持两种事件传输模式这在RemoteSysmon里需要根据实际情况权衡。Pull模式是收集器主动到每台客户端拉取事件它需要每台客户端允许远程事件日志管理Remote Event Log Management防火墙规则并且以收集器的身份去读客户端的日志。这种模式的优点是中心端可以按需拉取缺点是你得为每台客户端配置相关的访问权限和防火墙规则规模化部署时身份模型很啰嗦。Push模式则是客户端主动把事件推给收集器。客户端通过WinHTTP把事件发送到收集器的5985或5986端口默认走的是5985HTTP或5986HTTPS上的Event Collector服务。这种模式在网络层只开一个入站端口就行配置重心从“每台客户端开放权限”变成“收集器对外可访问”对多台客户端的环境更友好。RemoteSysmon默认采用Push模式就是因为这种模式下客户端的部署动作最小只需要初始化转发配置后续事件就能自动流向中心端。这个区别很关键很多人第一次搭WEC容易把Pull和Push搞混结果配置好了之后发现事件没过来排查老半天才发现是模式理解反了。Push模式像学生主动交作业Pull模式像老师挨个到座位上要作业量大了以后哪个体验好不用我多说。2.2 事件流转链路从内核回调到中心端数据库RemoteSysmon的完整事件流转链路可以拆成如下几个环节客户端上的Sysmon驱动捕获内核操作按配置文件过滤后生成事件写入本机的Microsoft-Windows-Sysmon/Operational日志通道。Windows Event Log服务把这个通道中的事件按照配置的转发订阅规则筛选后交给Windows Event Forwarder插件。插件通过WinHTTP把事件封装成SOAP/XML格式发往中心收集器的5985/5986端口。中心收集器的Event Collector服务接收事件验证来源计算机账户权限后将事件写入中心端的ForwardedEvents日志。RemoteSysmon控制层的服务定时读取ForwardedEvents日志经过规范化处理之后存储到中心数据库默认可选SQLite或SQL Server。查询界面和告警引擎从数据库读取数据对外提供检索、统计和告警输出。从第2步到第4步是标准WEC链路从第5步往后是RemoteSysmon自己在封装层做的事情。这样设计有个好处即使RemoteSysmon的数据库长时间不可用原始日志依然存在于中心端的ForwardedEvents里不会因为上层故障丢数据。对于追求稳定性的运维场景这个冗余设计几乎对事故恢复起到了决定性的作用。2.3 客户端连接中心端的权限模型事件要能从客户端推送到中心端牵扯到机器账户的认证这也是配置中比较容易出问题的地方。在Push模式下客户端不是用某个人的账户发日志而是用这台机器自己的计算机账户DOMAIN\COMPUTERS来认证。要让中心端接受某台客户端的推送必须把它的计算机账户加入中心端的Event Log Readers组。在域环境里这个操作可以通过组策略完成直接在中心收集器上执行Event Log Readers组的批量添加或者在一台域控上配置“受限组”。在工作组环境里则需要在客户端手动创建与中心端同名的本地账户或者在两端都使用相同的本地管理员凭据完成认证。这个环节我见过的失败案例很多后面排查章节详细展开。3. 服务端构建与WEC订阅配置先搭好接收日志的“总闸”给RemoteSysmon做中心端第一步不是装数据库也不是搞查询界面而是先把Windows事件收集器服务这一层跑通。这一步考验的是对Windows原生服务的熟悉程度没有任何花哨的东西但细节里的坑实打实多。3.1 安装Event Collector角色并验证基础服务中心收集器建议用Windows Server 2016以上的版本不管是实体机还是云主机都可以。准备工作有两点第一确保5985端口HTTP或5986端口HTTPS在企业防火墙里对客户端的网段开放第二为这台机器设置静态IP不要用DHCP动态地址否则后续订阅、组策略和客户端转发配置都会面临地址漂移的麻烦。角色安装很简单管理员权限的PowerShell里执行Install-WindowsEventCollector -Force装完之后系统里会多出两个关键服务Windows Event Collector服务名Wecsvc和Windows Remote Management服务名WinRM。它们的启动类型建议设为“自动”。可以用如下命令确认Get-Service Wecsvc, WinRM | Format-Table Name, Status, StartType正常情况下Wecsvc依赖WinRMWinRM正常启动是Wecsvc顺利工作的前提。我的经验是先启动WinRM再启动Wecsvc顺序颠倒偶尔会出现服务假死的情况。3.2 创建源计算机组把要监控的机器管起来中心端接收事件之前先把客户端分成组是一个好习惯。在“计算机管理—事件收集器”里源计算机组Source Computer Groups的创建位置比较隐蔽很多人第一次找半天。操作路径是计算机管理本地—事件收集器—源计算机组右键新建组把要监控的机器名一个个加进去。这里有个重要细节组里填的名字必须和客户端的实际机器名完全一致而且建议用完全限定的域名FQDN格式比如srv-web-01.example.local而不是srv-web-01。在工作组环境里如果DNS解析不保证FQDN能通那么填NetBIOS名也可以但前提是中心端能正确解析。批量加机器的时候不用一台台在界面里点可以直接编辑这个XML定义文件。源计算机组的本质是一个XML列表位于C:\Program Files\Windows Event Collector\sources\目录直接往XML里面加Computer节点再刷新组列表即可。我之前给十几台机器创建组用这个方法几分钟就搞定了。3.3 配置订阅定义“收什么”和“收多少”订阅Subscription是整条转发链路里最核心的配置。创建订阅前想清楚这三个问题收什么日志、从哪收、怎么收。RemoteSysmon的订阅类型默认是“收集器启动”Collector initiated也就是Pull模式要改成“源计算机启动”Source computer initiated也就是Push模式这样客户端才取得主动转发的资格。订阅的查询条件用的是XPath这是配置订阅时最容易写错的地方。只需要订阅Sysmon的通道查询条件写QueryList Query Id0 PathMicrosoft-Windows-Sysmon/Operational Select PathMicrosoft-Windows-Sysmon/Operational*/Select /Query /QueryList如果想只收特定事件ID比如只要进程创建和网络连接可以把Select部分改成Select PathMicrosoft-Windows-Sysmon/Operational*[System[(EventID1 or EventID3)]]/Select事件的高级筛选就在这个地方做。很多环境的网络带宽并不充裕事件量又大合理的筛选能减轻中心端的存储压力。但我的建议是首次部署先全量收跑几天确认稳定后再逐步收窄筛选规则宁可多收不可漏收。订阅创建好之后把运行账户设为NetworkService然后在“高级”里设置事件批处理参数。默认的批处理交付超时是5分钟意味着客户端的事件最多可能滞后5分钟才到中心端。对安全监控来说这个延迟太大建议修改为“速度优先”设置批处理超时为1分钟、批处理项目数为5个。这是配置完成之后等事件全部稳定传输再根据实际事件规模微调。3.4 转发事件的落库与保留策略中心端接收到的事件默认存在ForwardedEvents日志里。这个日志默认大小只有约1GB对于多台服务器持续输出Sysmon事件来说是远远不够的。所以我强烈建议把ForwardedEvents日志的最大大小调大按每台被监控机器每天约200MB的Sysmon事件量毛估再留30天以上的保留周期设置好之后在事件查看器的ForwardedEvents属性里填就行。不过这里还要多说一层ForwardedEvents只是原始缓冲数据量大了以后查询性能很快恶化。我在RemoteSysmon的落地实践中中心端会同时启动一个定时任务每隔几分钟把ForwardedEvents里新到的数据批量写入SQLite数据库。日志查询全部走数据库从根本上避免了海量事件日志导致的事件查看器卡死。4. 客户端部署与配置分发如何让一台机器“开口说话”中心端准备好之后客户端部署就顺理成章了。这一步虽然命令就那么几条但顺序敏感每一条命令的含义和执行时机都值得展开讲。4.1 安装Sysmon并应用基线配置客户端的第一步是装Sysmon并导入配置。Sysmon.exe从微软Sysinternals官网获取然后在客户端本机管理员权限的命令行中执行sysmon64.exe -accepteula -i sysmon-config.xml这里的sysmon-config.xml是预先下载好的基线规则如果是像我一样自己维护一套那这份XML只保留自己关心的事件类型和过滤条件即可。有一点需要提醒配置文件里的很多过滤条件是从事件源头就做的这比“全量采集再查询时筛选”要高效得多但规则太少也可能漏掉安全事件所以配置文件需要在实际监控中不断迭代。我自己的基线是采集事件1、3、7、11、13、22和25进程篡改其他事件按需增补。安装完成后可用命令验证当前生效的配置sysmon64.exe -c这条命令的输出会列出事件类别和过滤字段。经常有人问我如果sysmon-config.xml已经下发了之后要调整规则是不是还要重新跑一次-i不需要调整规则用sysmon64.exe -c new-config.xml新配置会立即替换当前配置不需要重启服务也不影响已采集日志的历史数据。4.2 初始化WinRM与事件转发设置Sysmon装好之后客户端还没有开始往中心端发日志。要让转发开始工作需要在客户端配置WinRM的信任主机并启用事件转发插件。这一步是RemoteSysmon自动化部署脚本的核心做法如下以管理员身份执行winrm quickconfig -q这条命令会自动启动WinRM服务并开放5985端口的防火墙规则。接下来需要把中心收集器的地址加入本机的TrustedHosts列表。之所以要加这一步是因为Push模式下客户端会主动连中心端而WinRM默认不会信任列表中不存在的目标主机。如果这一步漏掉最典型的故障现象是事件一直堆积在本地中心端的ForwardedEvents里什么都收不到。winrm set winrm/config/client {TrustedHostscollector.example.local}最后启用Event Forwarding插件wecutil ec /enable部分Windows版本上这条命令可能需要配合“服务Mcx2Svc”一起设置把Mcx2SvcWindows事件转发插件服务启动类型改为“自动”并立即启动。这个机制在Windows Server 2016上并不是默认的容易被忽略。我的批量部署脚本里会固定加这两条sc config Mcx2Svc start auto net start Mcx2Svc4.3 订阅类型与客户端注册Push模式下的最后一步为了让客户端知道往哪里推、推什么我们还需要在客户端本机引用中心端创建好的订阅。这一步不是通过图形界面手动完成的而是通过组策略或者一条本地命令完成。域环境里最干净的做法是配置组策略路径是“计算机配置—管理模板—Windows 组件—事件转发—订阅管理器”。在Server 2008 R2之后的系统中需要手动添加一个字符串值Serverhttp://collector.example.local:5985/wsman/SubscriptionManager/WEC并设置订阅类型为“源计算机启动”。这条策略生效后客户端会向中心端发起连接并上报自己可用的事件列表中心端再把订阅中的查询条件下发到客户端。这里的URI必须严格匹配中心端创建的订阅地址搞错一个字符客户端连接就会失败。不在域环境的话可以在客户端命令行直接注册订阅但这一步需要额外的组策略编辑器权限。比它更轻量的替代方案是通过PowerShell脚本批量执行wecutil cs http://collector.example.local:5985/wsman/SubscriptionManager/WEC运行之后我们在客户端的事件查看器里应该能看到Microsoft-Windows-Forwarding/Operational通道开始记录转发日志的事件这就说明转发链路已经通了。4.4 客户端健康检查确认日志到底发没发出去部署完客户端最怕的就是看起来一切正常但日志其实没发出去。我习惯用一个三步法来做客户端健康检查先用事件查看器打开Microsoft-Windows-Forwarding/Operational看有没有持续产生事件ID 1转发开始和事件ID 5转发周期。这些事件说明转发插件正常工作。然后再打开ForwardedEvents日志通道按来源计算机字段筛选看有没有来自该客户端的事件。最后打开命令行执行Get-WinEvent -LogName Microsoft-Windows-Forwarding/Operational -MaxEvents 20如果这个通道里能看到“The Forwarder is successfully initialized”的字样并且中心端出现了对应客户端的事件那么整条链路就畅通了。如果中心端始终不见该客户端的事件优先排查两个地方客户端的防火墙有没有放行到中心端5985端口以及客户端事件转发插件是否处在正常运行状态。这两个是“一切配置都对但就是没数”时最常见的元凶。5. 事件筛选与告警策略让日志变成有价值的信号日志收上来之后如果只是堆在那里等于又造了一个“日志垃圾场”。RemoteSysmon的真正价值在于你能从它里面提炼出可以对外输出信号的内容。这里分享几个我在实际使用中最常用的筛选组合与告警设计思路。5.1 高价值事件筛选重点关注事件ID组合Sysmon的单个事件ID价值有限更需要关注的是它们之间的组合关系。我总结了几组在实践中命中率很高的“事件链条”分享给大家参考。进程创建配合网络连接是排查挖矿和木马外联最常用的一组。先看事件ID 1找到从可疑父进程衍生出来的非预期进程然后立刻切到事件ID 3看这个新进程的PID有没有对应的外联记录。我之前抓过一次服务器被植入挖矿程序的事件就是通过查找一个父进程为WMI Provider Host的powershell进程很快在事件3里看到它频繁连接某个境外矿池地址。文件创建配合DNS查询可以发现Webshell落地和数据回传的迹象。Webshell落地时通常会有脚本类文件如.aspx、.php首次出现在Web目录中且伴随了脚本进程的外联字符串。在事件ID 11里筛选Web目录路径下的文件创建记录再配合事件ID 22确认脚本进程是否解析了外部域名是一条成熟可靠的分析链路。注册表改动配合镜像加载可以捕获持久化注入。攻击者在目标机器上建立持久化机制基本上绕不开Run注册表项或者通过服务、计划任务实现。筛选事件ID 13的TargetObject包含CurrentVersion\Run的记录再查看同一时间窗口里有没有事件ID 7或8的可疑DLL加载行为。这两类事件同时出现基本就是一个典型的持久化后门画像。5.2 基线告警规则三种日志外联特征有了事件链路下一步是把其中最确定的部分固化成自动告警。RemoteSysmon提供了基于规则的告警引擎规则本质上是一条SQL语法条件命中后触发通知。我按实践难度整理了三种典型告警第一种是外联IP黑名单告警。用威胁情报源提炼一批已知的C2、矿池IP段写入告警规则事件ID 3的DestinationIp命中即告警。这个规则的误报率和威胁情报源的质量强相关建议用多家情报源交叉验证。第二种是特定进程行为告警。比如常见运维工具被利用的事件特征cmd.exe发起网络连接且连接的端口不在运维白名单端口列表里这类规则过滤条件写清楚之后误报率相对可控。第三种是高频DNS异常告警。事件ID 22的域名特征包含了DGA随机域名常见的高熵字符串对单台机器在短时间段内的DNS查询次数做阈值统计超过预设值就告警。这个规则在挖矿和木马活动期很好用但也需要针对业务域名的正常解析频率做一段时间的基线学习。5.3 查询性能优化百万级事件下的检索思路随着事件规模增长你会感受到数据库检索越来越慢。我在实际运维中总结了几条查询提速的经验。第一永远不要全表扫。查询时务必带上时间范围和来源计算机字段RemoteSysmon在数据库里对这两个字段建有索引不带索引条件的查询会拖累所有用户。第二尽量用精确字段而不是模糊匹配。比如SourceIp为“192.168.1.108”的查询远比CommandLine含“powershell”的查询快得多。对CommandLine这类文本字段做模糊检索只用于重点排查不要做成常态化查询。第三定期做数据归档。超过30天的事件定期从主表导出到归档表主表只保留热数据查询速度和数据库压力都能明显缓解。我设置的归档周期是每天凌晨2点执行一次归档完成后自动删除主表中对应时间段的数据。做了这三件事之后千万级事件量的查询仍然能保持在秒级响应完全够用。6. 配置分发与批量部署一次配置多台生效多台服务器的配置管理和日志采集是RemoteSysmon和单机Sysmon拉开差距的关键。这部分看着不复杂实际上是工程化落地中最拉效率的地方。6.1 按角色划分监控模板实际环境里Web服务器、数据库服务器、域控服务器需要监控的重点差异巨大。我不建议所有机器用同一套Sysmon配置文件。比如Web服务器要重点采集文件创建事件尤其是网站目录下新增文件数据库服务器的网络监听端口和进程启动行为是重点文件创建反而次要域控服务器的关注点在账户登录和特权使用Sysmon采集注册表改动和进程创建结合Windows安全日志才有意义。RemoteSysmon的配置分发机制支持给不同机器分配不同配置文件模板。我会在中心端预置web-server.xml、db-server.xml、dc-server.xml三套基线配置每套配置在该停机评估的规则上做了针对性调整——比如web-server里增加对IIS目录C:\inetpub\wwwroot下所有文件创建的采集db-server里增加对端口监听变化的检测dc-server里则重点采集进程创建和注册表持久化项。6.2 利用组策略与脚本完成批量初始化客户端初始化环节我建议采用两种通道并行推进。域内机器靠组策略推送启动脚本脚本内容按上文4.2到4.3的顺序依次执行域外或云上临时机器用一个PowerShell脚本参数化拼接机器名和中心端地址交给运维批量执行。脚本化的另一个价值是解决了“人肉配置必然出错”的难题。每台机器的机器名、IP、DNS后缀都可能不同这些在脚本里通过参数传递避免把A机器堂堂正正填成B机器地址。脚本执行完后自动输出健康检查结果把Not OK的机器清单直接列出来省去逐台确认的功夫。6.3 配置更新的灰度发布配置更新也要讲节奏。我的习惯是先选一台测试机应用新配置确认事件采集正常、对业务无影响后再分批次推送到生产机器。灰度分批的好处是万一新配置有问题比如漏采了某个关键事件或者过滤条件写错导致PROD日志全被丢弃影响面可以被控制在最小范围。RemoteSysmon的更新流程本身支持得很平滑在中心端上传新配置文件指定目标分组系统会在客户端下一个同步周期自动完成更新。这个同步周期默认是15分钟如果情况紧急也可以手动触发立即同步。7. 从收到告警到定位问题一次完整的安全排查实战演示讲了这么多原理和配置来一个完整的实战案例。假设我管理的服务器集群中RemoteSysmon突然弹出一条高优先级告警某台Web服务器出现进程创建与异常外联组合命中下面还原我处理这个告警的完整排查链路。告警内容显示srv-web-03这台机器上的winword.exe进程尝试连接了一个未在白名单内的IP地址218.92.xx.xx。一个Web服务器为什么会跑winword.exe光凭这个组合就足够触发我的第一反应——文档类程序出现在服务器上大概率不是正常业务可能是邮件附件型木马被用户点击执行了。我打开RemoteSysmon查询界面按来源计算机输入srv-web-03时间范围选告警前10分钟到后10分钟快速拉出这台机器上的事件序列。首先看事件ID 1定位winword.exe的父进程是OUTLOOK.EXE这个答案几乎是教科书式的钓鱼邮件链条用户在服务器上打开邮件附件winword.exe释放载荷并外联。如果这里是攻击行为那无非是通过Outlook挂在Web终端摸进来的入侵入口触发的宏。我继续查看事件ID 11winword.exe进程行为里果然有一条在高危目录C:\Users\Administrator\AppData\Roaming\Microsoft\Word\STARTUP下创建了新的模板文件的可疑记录。我把这个文件的创建时间、进程账户和网络连接的对应记录组合在一起基本可以认定为一次通过文档宏下发的恶意载荷活动。处置动作就清晰了先隔离这台服务器禁止出网访问提取winword.exe进程及其子进程的完整行为链和它释放的所有文件之后在威胁情报平台查询218.92.xx.xx确认确实是标注木马控制的节点。最后基于这个事件特征我在RemoteSysmon的告警规则里加了一条更严格的规则任何Office系列进程在网络连接事件中的出现优先级直接提到最高不管外联目标是否命中黑名单只要出现就通知安全组核查。这个案例能走出来核心依赖是RemoteSysmon把进程创建、文件创建、网络连接三类事件在一条时间线上完整串起来。单靠任意一类事件都只能看到冰山一角。8. 部署前必读常见踩坑记录与性能建议最后一部分没有高深理论全是实际操作中会让人血压升高的问题。我把部署RemoteSysmon过程中最容易踩的坑和对应的处理经验集中列出来每一个都是我用真金白银换来的。8.1 配置了转发却收不到事件的十二个排查点如果中心端迟迟收不到某台客户端的事件不要急着反复改配置按下面这个顺序逐步排查大部分问题都能在几分钟内定位。排查点检查内容典型原因Sysmon是否安装成功sysmon64 -c 输出是否正常配置安装失败事件通道未创建WinRM服务Get-Service WinRM服务未启动大部分转发链路会直接断掉TrustedHostswinrm get winrm/config/client中心端地址未加入信任列表连接被拒防火墙规则Test-NetConnection 中心端 -Port 5985出站或入站5985端口被拦截事件转发服务Get-Service Mcx2Svc服务未启用事件无法发送给转发插件中心端订阅事件源计算机组是否包含该机器订阅未包含只会被忽略账户权限客户端计算机账户是否加入Event Log Readers组认证失败事件无法写入中心端DNS解析中心端能否正确解析客户端FQDN解析失败导致中心端无法下发订阅订阅地址客户端配置的URI是否与中心端完全一致端口、路径可写错即无法连接事件查询条件XPath筛选是否正确条件写错过滤掉了目标事件系统时间客户端与中心端时间差是否超过5分钟时间差过大会影响事件批处理判断日志大小ForwardedEvents最大大小是否太小日志满了之后开始丢事件这个检查清单多打印一份贴在工位上真不丢人。8.2 事件量过大导致中心端磁盘爆满的解法Sysmon默认全量采集时事件量非常惊人。我见过一台比较活跃的服务器一天能产生大几十GB的Sysmon事件数据。在中心端多台服务器的数据汇聚之后磁盘压力会在短时间内爆发。解法之一是源头减少数据量。审视Sysmon配置文件里每条规则的过滤条件对不必要的进程、路径做排除。比如Windows Update进程每秒钟产生大量网络连接事件若安全团队无明确需求直接在配置里排除。运维基线里能够确认的进程可以做一层白名单排除。解法之二是分级存储。热数据保留7天于高性能磁盘冷数据归档到二次存储全量历史数据保留至少180天。安全分析常用的数据窗口是“最近7天”真正重要的攻击行为7天之内基本都能定位完毕再早的历史数据用于事后复盘时可以接受用归档库慢速查询。解法之三是压缩数据库。SQLite数据库在频繁插入删除之后会产生大量碎片定时执行一次VACUUM命令能够回收空间并加快查询响应。SQL Server等则依赖自动收缩和索引维护建议把维护计划纳入日常运维任务。8.3 中心收集器本身的安全防护中心收集器是所有客户端日志的汇聚点它的安全等级应该比普通被监控机器更高。我的建议是中心收集器不承载其他业务限制登录IP只允许运维跳板机访问开启Sysmon自身的事件采集对它自己的行为也进行监控。中心收集器如果被攻破意味着所有服务器的行为画像全部暴露这个风险一定要前置控制。8.4 性能调优的几组参考数值最后给一组我在稳定运行环境下的参考配置供初次部署的同学结合实际环境调整参数参考值备注客户端批处理交付频率1分钟安全与流量消耗的平衡点客户端批处理项目数5单批事件量过多会占用带宽ForwardedEvents日志上限8GB以上至少能容纳24小时全量事件数据库热数据保留周期15天之后转归档订阅心跳间隔5分钟客户端健康状态检查频率SQLite写入批大小500条/事务过高会导致锁竞争这些都是我在实际运行中调整出来的数值不保证适合所有环境但可以作为起点。尤其是批处理交付频率设成1分钟意味着安全事件的实时性较好同时产生的网络开销和中心端压力都可控我强烈不建议为了省流量把它拉到5分钟以上。RemoteSysmon这套方案搭好以后我的日常运维状态发生了很明显的变化过去那种“出了问题再上机器翻日志”的模式变成了“事件实时躺在数据库里随时可以检索”。排查流程里任何一步的安全事件都能在几分钟内完成定位。Windows服务器的安全监控本来就重在持续观测RemoteSysmon把我从繁琐的逐台登录中解放了出来。这个方案没有用到任何昂贵的商业授权全部基于Windows原生能力加开源组件是真正意义上的拿来即用。如果你们团队和我当初一样正被多台Windows服务器的活动监控困住那这篇实践足够帮你把地基打牢。
返回列表