PowerShell 可疑的发现相关 Windows API 函数

编辑

PowerShell 可疑的发现相关 Windows API 函数

编辑

此规则检测 PowerShell 脚本中使用的与发现相关的 Windows API 函数。攻击者可以使用这些函数来执行各种与态势感知相关的活动,例如枚举用户、共享、会话、域信任、组等。

规则类型: 查询

规则索引:

  • winlogbeat-*
  • logs-windows.powershell*

严重程度: 低

风险评分: 21

运行频率: 5 分钟

搜索索引起始时间: now-9m (日期数学格式,另请参阅 额外的回溯时间)

每次执行的最大警报数: 100

参考:

标签:

  • 域:终端
  • 操作系统:Windows
  • 用例:威胁检测
  • 战术:发现
  • 战术:收集
  • 战术:执行
  • 资源:调查指南
  • 数据源:PowerShell 日志

版本: 316

规则作者:

  • Elastic

规则许可证: Elastic License v2

调查指南

编辑

分类和分析

调查 PowerShell 可疑的发现相关 Windows API 函数

PowerShell 是系统管理员用于自动化、报告例程和其他任务的主要工具之一。这使其可以在各种环境中使用,并为攻击者执行代码创造了一种有吸引力的方式。

攻击者可以使用 PowerShell 与 Win32 API 交互,通过使用 PSReflect 或 Get-ProcAddress Cmdlet 等库来绕过基于命令行的检测。

可能的调查步骤

  • 检查触发检测的脚本内容;查找可疑的 DLL 导入、收集或数据泄露功能、可疑函数、编码或压缩数据以及其他潜在的恶意特征。
  • 调查脚本执行链(父进程树)中是否存在未知进程。检查它们的可执行文件是否普遍存在、是否位于预期位置以及是否使用有效的数字签名进行签名。
  • 检查相关 PowerShell 进程中的文件或网络事件是否存在可疑行为。
  • 调查过去 48 小时内与用户/主机相关的其他警报。
  • 评估用户是否需要使用 PowerShell 完成任务。
  • 检查是否有其他 PowerShell 和命令行日志指示已运行导入的函数。

误报分析

  • 如果发现活动本身是孤立发生的,并且脚本不包含其他功能,并且没有其他与用户或主机相关的警报,那么它们本身不是恶意的;可以忽略此类警报。但是,分析师应记住,这不是获取信息的常用方法,这使得它变得可疑。

相关规则

  • PowerShell PSReflect 脚本 - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe

响应和补救

  • 根据分类结果启动事件响应流程。
  • 隔离受影响的主机,以防止进一步的入侵后行为。
  • 使用 GPO、AppLocker、Intune 或类似软件限制 IT 和工程业务部门以外的 PowerShell 使用。
  • 确定攻击者滥用的初始向量,并采取行动以防止通过同一向量再次感染。
  • 运行全面的反恶意软件扫描。这可能会揭示系统中遗留的其他工件、持久性机制和恶意软件组件。
  • 使用事件响应数据,更新日志记录和审计策略,以提高平均检测时间 (MTTD) 和平均响应时间 (MTTR)。

设置

编辑

设置

必须启用PowerShell 脚本块日志记录日志记录策略。使用高级审核配置实施日志记录策略的步骤

Computer Configuration >
Administrative Templates >
Windows PowerShell >
Turn on PowerShell Script Block Logging (Enable)

通过注册表实施日志记录策略的步骤

reg add "hklm\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1

规则查询

编辑
event.category:process and host.os.type:windows and
  powershell.file.script_block_text : (
    NetShareEnum or
    NetWkstaUserEnum or
    NetSessionEnum or
    NetLocalGroupEnum or
    NetLocalGroupGetMembers or
    DsGetSiteName or
    DsEnumerateDomainTrusts or
    WTSEnumerateSessionsEx or
    WTSQuerySessionInformation or
    LsaGetLogonSessionData or
    QueryServiceObjectSecurity or
    GetComputerNameEx or
    NetWkstaGetInfo or
    GetUserNameEx or
    NetUserEnum or
    NetUserGetInfo or
    NetGroupEnum or
    NetGroupGetInfo or
    NetGroupGetUsers or
    NetWkstaTransportEnum or
    NetServerGetInfo or
    LsaEnumerateTrustedDomains  or
    NetScheduleJobEnum or
    NetUserModalsGet
  ) and
  not powershell.file.script_block_text : (
    ("DsGetSiteName" and ("DiscoverWindowsComputerProperties.ps1" and "param($SourceType, $SourceId, $ManagedEntityId, $ComputerIdentity)")) or
    ("# Copyright: (c) 2018, Ansible Project" and "#Requires -Module Ansible.ModuleUtils.AddType" and "#AnsibleRequires -CSharpUtil Ansible.Basic") or
    ("Ansible.Windows.Setup" and "Ansible.Windows.Setup" and "NativeMethods.NetWkstaGetInfo(null, 100, out netBuffer);")
  )

框架: MITRE ATT&CKTM