企业安全 - 理论基础
准备阶段
明确的政策文件应急手册应急人员、法律部门、管理、IT支持、通讯媒体、执法部门、互联网服务提供商、基础设施、外部响应团队的联系方式响应剧本IOC共享政策和流程黄金映象网络基线网络拓扑图资产管理数据库特殊权限账户紧急资金
取证分析工具包特殊隔离的取证工作站数字取证图像采集和分析工具内存捕获和分析工具日志分析工具网络捕获和分析工具IOC搜索工具网线和交换机记录的硬盘螺丝刀
终端基线禁用 LLMNR/NetBIOS实施 LAPS 并取消普通用户的管理权限在“ConstrainedLanguage”模式下禁用或配置 PowerShell如果使用 Microsoft Defender,则启用攻击面减少 (ASR) 规则设置可执行脚本白名单,重点关注LOLBin表单中的文件阻止LOLBin表单中程序的出站流量部署EDR
网络保护逻辑分区态势感知设备确保只有组织批准设备才能接入网络
特权账户管理杜绝弱密码和密码复用问题多因素认证
漏洞扫描对公司主机进行定期扫描
用户意识培训每月钓鱼演练每月USB钓鱼演练
AD域安全评估Bloodhound检查配置错误
紫队演习反复确认攻击路径的可见性
检测和分析阶段
来源异常行为员工告警(EDR、IDS、防火墙、SIEM)威胁感知第三方通知
检测地点网络边界 -- WAF、IPS、IDS内部网络 -- 主机入侵检测、防火墙、IDS端点检测 -- EDR、IDS应用检测 -- 应用日志、服务日志
调查报告内容事件描述事件严重程度和影响范围调查过程遏制过程根除过程恢复过程剧本表现情况分析及改进点该类事件的预防措施使用的工具集合
调查报告内容&调查手段
事件描述
- 报告事件的日期/时间。此外,谁发现了该事件和/或谁报告了该事件?
- 该事件是如何被发现的?
- 发生了什么事?网络钓鱼?系统不可用?等等。
- 汇总受影响系统的列表(如果相关)
- 记录谁访问了受影响的系统以及采取了哪些措施。记下这是持续发生的事件还是可疑活动已被停止
- 物理位置、操作系统、IP 地址和主机名、系统所有者、系统用途、系统当前状态
- (如果涉及恶意软件)IP 地址列表、检测时间和日期、恶意软件类型、受影响的系统、带有取证信息的恶意文件的导出(例如哈希值、文件副本等)
事件严重程度和影响范围
- 攻击影响是什么?
- 攻击条件是什么?
- 任何关键业务系统是否会受到该事件的影响?
- 是否有任何建议的补救措施?
- 有多少系统受到了影响?
- 该漏洞是否正在被野外利用?
- 该漏洞是否具有类似蠕虫的功能?
调查过程
以IOC为节点依次探查新的线索和新的受感染系统,类似分支散叶似的。
遏制过程
打蛇打七寸
尽可能保证一次防御打瘫攻击者,因为攻击者在被惊动后可能会做出意外的举动尽可能保证不更改当前系统环境的情况下,切断攻击者的控制链
将系统丢入隔离区
将系统丢入隔离区防止受感染主机进一步感染其他主机,且保证当前业务正常。
将系统下线
业务变得不正常,但攻击者的控制链将被切断
修改攻击者C2 DNS记录
攻击者控制链被切断,但很可能会复原
示例一
内网公共区服务器 青藤云发出告警。
我们通过态势感知设备快速确认攻击者感染了DMZ区服务器1台,且感染了内网公共区服务器1台,并对其余网段主机进行扫描活动。
为确认公共区和DMZ区感染情况,我们查看各受影响主机的网络情况,筛选出通互联网且存在外连C2服务器的主机,将这些主机在确保不影响正常业务的情况下放入了隔离区。
对于影响业务的主机,我们做了修改C2 DNS名称的操作,拖延攻击者的攻击进度,并持续监控DNS记录。
排除C2后,我们进一步分析了Webshell和VPN、RDP等以内网IP形式的异常行为。
首先梳理攻击链路,找到问题源头。
如果问题源头是RDP、VPN账号盗用导致则修改账号完成控制链切断。如果问题源头是公开漏洞导致则查明对应的漏洞编号和对应补丁,并下线系统修补完成后使用D盾查杀杀死残留的Webshell。
根除过程
恢复过程
剧本表现情况分析及改进点
该类事件的预防措施
使用的工具集合
SIEM
SIEM常用搜索
###禁用用户登录失败
event.code:4625 AND winlog.event_data.SubStatus:0xC0000072###admin*用户登录失败
event.code:4625 AND user.name: admin*
构建SIEM用例
了解您的需求和风险,并相应地建立警报以监控所有必要的系统。
确定优先级和影响,然后将警报映射到杀伤链或 MITRE 框架。
建立警报的检测时间 (TTD) 和响应时间 (TTR),以评估 SIEM 的有效性和分析师的表现。
创建用于管理警报的标准操作程序 (SOP)。
概述基于 SIEM 监控细化警报的过程。
制定事件响应计划 (IRP) 来处理真正发生的事件。
在团队之间设置服务水平协议 (SLA) 和操作水平协议 (OLA),以处理警报和遵循 IRP。
实施并维护用于管理分析师的警报和事件报告的审计流程。
创建文档以审查机器或系统的日志记录状态、创建警报的基础及其触发频率。
建立知识库文档,包含案件管理工具的基本信息和更新。
报告用例
- 进程名称
- 进程.父进程.名称
- 事件.动作
- 检测到警报的机器
- 与机器关联的用户
- 警报生成后 +/- 2 天内的用户活动
- 收集这些信息后,防御者应该与用户接触并检查用户的机器,以分析来自 SIEM 的系统日志、防病毒日志和代理日志,以获得全面的可视性。
有用的Windows事件日志
- 事件 ID 1074
(System Shutdown/Restart)
:此事件日志指示系统关闭或重启的时间和原因。通过监视这些事件,您可以确定是否存在意外关机或重启,从而可能揭示恶意活动,例如恶意软件感染或未经授权的用户访问。- 事件 ID 6005
(The Event log service was started)
:此事件日志标记事件日志服务启动的时间。这是一个重要的记录,因为它可以表示系统启动,为调查该期间的系统性能或潜在安全事件提供起点。它还可用于检测未经授权的系统重启。- 事件 ID 6006
(The Event log service was stopped)
:此事件日志表示事件日志服务停止的时刻。通常在系统关闭时出现。此事件的异常或意外发生可能表明故意中断服务以掩盖非法活动。- 事件 ID 6013
(Windows uptime)
:此事件每天发生一次,以秒为单位显示系统的正常运行时间。正常运行时间短于预期可能意味着系统已重新启动,这可能表示系统上存在潜在的入侵或未经授权的活动。- 事件 ID 7040
(Service status change)
:此事件表示服务启动类型发生变化,可能从手动变为自动,反之亦然。如果关键服务的启动类型发生变化,则可能是系统被篡改的迹象。- 事件 ID 1102
(The audit log was cleared)
:清除审计日志通常是试图删除入侵或恶意活动证据的标志。- 事件 ID 1116
(Antivirus malware detection)
:此事件特别重要,因为它会在 Defender 检测到恶意软件时进行记录。这些事件的激增可能表明存在针对性攻击或广泛的恶意软件感染。- 事件 ID 1118
(Antivirus remediation activity has started)
:此事件表示 Defender 已开始删除或隔离检测到的恶意软件的过程。监视这些事件对于确保补救活动成功至关重要。- 事件 ID 1119
(Antivirus remediation activity has succeeded)
:此事件表示检测到的恶意软件的补救过程已成功。定期监控这些事件将有助于确保有效消除已识别的威胁。- 事件 ID 1120
(Antivirus remediation activity has failed)
:此事件与 1119 相对应,表示补救过程失败。应密切监视并立即解决这些事件,以确保有效消除威胁。- 事件 ID 4624
(Successful Logon)
:此事件记录成功的登录事件。此信息对于建立正常的用户行为至关重要。异常行为(例如在非正常时间或从不同位置尝试登录)可能表示存在潜在的安全威胁。- 事件 ID 4625
(Failed Logon)
:此事件记录登录尝试失败。多次登录尝试失败可能表示正在进行暴力攻击。- 事件 ID 4648
(A logon was attempted using explicit credentials)
:当用户使用显式凭据登录以运行程序时,会触发此事件。这些登录事件中的异常可能表明网络内存在横向移动,这是攻击者常用的一种技术。- 事件 ID 4656
(A handle to an object was requested)
:请求对象(如文件、注册表项或进程)的句柄时会触发此事件。这对于检测访问敏感资源的尝试非常有用。- 事件 ID 4672
(Special Privileges Assigned to a New Logon)
:每当帐户以超级用户权限登录时,都会记录此事件。跟踪这些事件有助于确保超级用户权限不会被滥用或恶意使用。- 事件 ID 4698
(A scheduled task was created)
:创建计划任务时会触发此事件。监视此事件可以帮助您检测持久性机制,因为攻击者经常使用计划任务来维持访问权限并运行恶意代码。- 事件 ID 4700和事件 ID 4701
(A scheduled task was enabled/disabled)
:记录计划任务的启用或禁用。计划任务经常被攻击者操纵以保持持久性或运行恶意代码,因此这些日志可以提供对可疑活动的宝贵见解。- 事件 ID 4702
(A scheduled task was updated)
:与 4698 类似,当计划任务更新时会触发此事件。监控这些更新有助于检测可能表示恶意的更改。- 事件 ID 4719
(System audit policy was changed)
:此事件记录了计算机上审核策略的更改。这可能表明有人试图通过关闭审核或更改要审核的事件来掩盖其踪迹。- 事件 ID 4738
(A user account was changed)
:此事件记录对用户帐户所做的任何更改,包括对权限、组成员身份和帐户设置的更改。意外的帐户更改可能是帐户接管或内部威胁的迹象。- 事件 ID 4771
(Kerberos pre-authentication failed)
:此事件类似于 4625(登录失败),但专门用于 Kerberos 身份验证。这些日志数量异常可能表明攻击者试图暴力破解您的 Kerberos 服务。- 事件 ID 4776
(The domain controller attempted to validate the credentials for an account)
:此事件有助于跟踪域控制器凭据验证的成功和失败尝试。多次失败可能表明存在暴力攻击。- 事件 ID 5001
(Antivirus real-time protection configuration has changed)
:此事件表示 Defender 的实时保护设置已被修改。未经授权的更改可能表示有人试图禁用或破坏 Defender 的功能。- 事件 ID 5140
(A network share object was accessed)
:每次访问网络共享时都会记录此事件。这对于识别对网络共享的未经授权的访问至关重要。- 事件 ID 5142
(A network share object was added)
:此事件表示创建新的网络共享。未经授权的网络共享可用于窃取数据或在网络上传播恶意软件。- 事件 ID 5145
(A network share object was checked to see whether client can be granted desired access)
:此事件表示有人试图访问网络共享。频繁进行此类检查可能表明用户或恶意软件正在试图规划网络共享以备将来利用。- 事件 ID 5157
(The Windows Filtering Platform has blocked a connection)
:当 Windows 筛选平台阻止连接尝试时,将记录此事件。这有助于识别网络上的恶意流量。- 事件 ID 7045
(A service was installed in the system)
:突然出现未知服务可能表明安装了恶意软件,因为许多类型的恶意软件都会将自身安装为服务。
Windows安全日志
自定义搜索
Sysmon 日志
sysmon日志是基于Windows的安全日志构成的。这个日志更加符合安全人员的需求
DLL异常查询 - ID 7
dll注入是木马的常见方式,所以我们需要监控ID 7 事件,然后查看异常情况。
发现异常:应用程序加载目录异常
DLL加载目录异常
Powershell托管程序使用了异常DLL
处理异常:sysmon ID 7 定位恶意dll获取SHA256,在沙箱对撞SHA256
关注重点,可以加快我们的速度
事件发生时间
恶意用户名
恶意电脑名
进程名
应用名
应用程序加载目录异常
恶意程序很可能会在不常用的地方启动exe,这应该被视为异常。特别是服务器,行为应该非常规范,一旦出现不规范的情况我们应当重视。
DLL 加载目录异常
恶意程序有时候可能不是直接加载exe,而是劫持了dll,比如环境变量劫持dll,逆向程序劫持Dll等等。所以如果出现了不常见的dll加载目录,我们也应当重视。
Powershell托管程序使用了异常DLL
有时候Csharp会注入Powershell,这会导致某个应用程序被托管,托管应用会出现新的dll,我们应当了解新dll的情况。
IOC碰撞sysmon-ID-7
sysmon-ID-7中会有恶意DLL文件的SHA256,我们拿取这个SHA256到威胁情报库当中进行对撞,一旦碰撞成功,就可以告警。
敏感服务监控 - ID 10
敏感服务比如lsass.exe,攻击者通常会以这个进程为目标,因为这个进程会导致内容里面的hash泄露。所以对于敏感的进程,我们应该监控他们。
event viewer 查看目标服务为lsass.exe的日志
这样可以监控到攻击者使用mimikatz等攻击工具的日志。
ETW 日志
ETW 日志是Windows存储的event tracing for windows。该ETW回避Sysmon所提供的日志更加准确和详细,这可能让我们更少的被欺骗。
有用的ETW
Microsoft-Windows-Kernel-Process
:此 ETW 提供程序有助于监控 Windows 内核中的进程相关活动。它可以帮助检测异常的进程行为,例如进程注入、进程挖空以及恶意软件和高级持续性威胁 (APT) 常用的其他策略。Microsoft-Windows-Kernel-File
:顾名思义,该提供商专注于文件相关操作。它可以用于检测未经授权的文件访问、关键系统文件的更改,以及可能表明数据泄露或勒索软件活动的可疑文件操作。Microsoft-Windows-Kernel-Network
:此 ETW 提供程序可在内核级别提供对网络相关活动的可见性。它在检测基于网络的攻击(例如数据泄露、未经授权的网络连接以及命令与控制 (C2) 通信的潜在迹象)方面尤其有用。Microsoft-Windows-SMBClient/SMBServer
:这些提供商监控服务器消息块 (SMB) 客户端和服务器活动,提供文件共享和网络通信的洞察。它们可用于检测异常的 SMB 流量模式,这些模式可能预示着横向移动或数据泄露。Microsoft-Windows-DotNETRuntime
:此提供程序专注于 .NET 运行时事件,使其成为识别 .NET 应用程序执行中的异常、.NET 漏洞的潜在利用或恶意 .NET 程序集加载的理想选择。OpenSSH
:监控 OpenSSH ETW 提供程序可以提供有关安全外壳 (SSH) 连接尝试、成功和失败的身份验证以及潜在的暴力攻击的重要见解。Microsoft-Windows-VPN-Client
:此提供程序支持跟踪虚拟专用网络 (VPN) 客户端事件。它有助于识别未经授权或可疑的 VPN 连接。Microsoft-Windows-PowerShell
:此 ETW 提供程序跟踪 PowerShell 执行和命令活动,使其对于检测可疑的 PowerShell 使用、脚本块日志记录以及潜在的滥用或利用非常有用。Microsoft-Windows-Kernel-Registry
:此提供程序监视注册表操作,使其可用于检测与注册表项更改相关的场景,这些场景通常与持久性机制、恶意软件安装或系统配置更改有关。Microsoft-Windows-CodeIntegrity
:此提供程序监控代码和驱动程序完整性检查,这对于识别加载未签名或恶意驱动程序或代码的尝试至关重要。Microsoft-Antimalware-Service
:此 ETW 提供程序可用于检测反恶意软件服务的潜在问题,包括禁用的服务、配置更改或恶意软件采用的潜在逃避技术。WinRM
:监控 Windows 远程管理 (WinRM) 提供程序可以发现未经授权或可疑的远程管理活动,通常表明横向移动或远程命令执行。Microsoft-Windows-TerminalServices-LocalSessionManager
:此提供程序跟踪本地终端服务会话,可用于检测未经授权或可疑的远程桌面活动。Microsoft-Windows-Security-Mitigations
:该提供商密切关注现有安全缓解措施的有效性和运行情况。这对于识别这些安全控制措施的潜在绕过尝试至关重要。Microsoft-Windows-DNS-Client
:此 ETW 提供程序可以查看 DNS 客户端活动,这对于检测基于 DNS 的攻击至关重要,包括 DNS 隧道或可能表明 C2 通信的异常 DNS 请求。Microsoft-Antimalware-Protection
:此提供程序监控反恶意软件保护机制的运行情况。它可以用于检测这些机制的任何问题,例如禁用的保护功能、配置更改或恶意行为者使用的规避技术的迹象。
Microsoft-Windows-DotNETRuntime 监控LotL的攻击
LotL攻击是指Living off the land攻击,这种攻击在Sysmon中的ID7日志也很难发现异常,因为这些工具都是正常的运行,我们可以使用EWT追踪工具来扩展我们所能获得的信息。
SilkETW
Performance Monitorlogman
处理过程
异常发现:我们应当关注LotL集合中的应用程序的使用情况
处理异常:使用SilkETW查看详细的ETW,判断LotL是否存在真实攻击情况。
加速技巧
关注恶意程序名
进程PID
综合日志查询工具
Get-WinEvent
###获取全部日志
Get-WinEvent -ListLog * | Select-Object LogName, RecordCount, IsClassicLog, IsEnabled, LogMode, LogType | Format-Table -AutoSize###获取日志来源列表
Get-WinEvent -ListProvider * | Format-Table -AutoSize###从指定来源获取日志
#获取系统日志
Get-WinEvent -LogName 'System' -MaxEvents 50 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize#获取Winrm日志
Get-WinEvent -LogName 'Microsoft-Windows-WinRM/Operational' -MaxEvents 30 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize#获取排序的Winrm日志
Get-WinEvent -LogName 'Microsoft-Windows-WinRM/Operational' -Oldest -MaxEvents 30 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize###从文件中检索日志
Get-WinEvent -Path 'C:\Tools\chainsaw\EVTX-ATTACK-SAMPLES\Execution\exec_sysmon_1_lolbin_pcalua.evtx' -MaxEvents 5 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize###筛选日志
#基于名称
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; ID=1,3} | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize#基于来源文件和ID
Get-WinEvent -FilterHashtable @{Path='C:\Tools\chainsaw\EVTX-ATTACK-SAMPLES\Execution\sysmon_mshta_sharpshooter_stageless_meterpreter.evtx'; ID=1,3} | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize#基于时间
PS C:\Users\Administrator> $startDate = (Get-Date -Year 2023 -Month 5 -Day 28).DatePS C:\Users\Administrator> $endDate = (Get-Date -Year 2023 -Month 6 -Day 3).DatePS C:\Users\Administrator> Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; ID=1,3; StartTime=$startDate; EndTime=$endDate} | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize#XML过滤日志,解析XML文件获取对应的值,更加灵活
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; ID=3} |
`ForEach-Object {
$xml = [xml]$_.ToXml()
$eventData = $xml.Event.EventData.Data
New-Object PSObject -Property @{SourceIP = $eventData | Where-Object {$_.Name -eq "SourceIp"} | Select-Object -ExpandProperty '#text'DestinationIP = $eventData | Where-Object {$_.Name -eq "DestinationIp"} | Select-Object -ExpandProperty '#text'ProcessGuid = $eventData | Where-Object {$_.Name -eq "ProcessGuid"} | Select-Object -ExpandProperty '#text'ProcessId = $eventData | Where-Object {$_.Name -eq "ProcessId"} | Select-Object -ExpandProperty '#text'
}
} | Where-Object {$_.DestinationIP -eq "52.113.194.132"}#XML过滤日志,解析XML文件获取对应的值,更加灵活
PS C:\Users\Administrator> $Query = @"<QueryList><Query Id="0"><Select Path="Microsoft-Windows-Sysmon/Operational">*[System[(EventID=7)]] and *[EventData[Data='mscoree.dll']] or *[EventData[Data='clr.dll']]</Select></Query></QueryList>"@
PS C:\Users\Administrator> Get-WinEvent -FilterXml $Query | ForEach-Object {Write-Host $_.Message `n}#FileterXPath 参数过滤
PS C:\Users\Administrator> Get-WinEvent -LogName 'Microsoft-Windows-Sysmon/Operational' -FilterXPath "*[EventData[Data[@Name='Image']='C:\Windows\System32\reg.exe']] and *[EventData[Data[@Name='CommandLine']='`"C:\Windows\system32\reg.exe`" ADD HKCU\Software\Sysinternals /v EulaAccepted /t REG_DWORD /d 1 /f']]" | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize#基于 property 过滤
PS C:\Users\Administrator> Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; ID=1} -MaxEvents 1 | Select-Object -Property *