last-byte/PersistenceSniper

PersistenceSniper 是一个 Powershell 模块,蓝队、事件响应者和系统管理员可以使用它来搜寻植入 Windows 机器的持久性。该脚本也可在Powershell Gallery上找到。该工具正在积极开发中,每周都会发布新版本,因此请确保使用最新版本:

  • last-byte/PersistenceSniper/PersistenceSniper
  • PersistenceSniper 1.0

    为什么

    为什么要写这样一个工具,你可能会问。好吧,对于初学者来说,我试着环顾四周,但没有找到适合我的特定用例的工具,该用例正在寻找已知的持久性技术,自动跨多台机器,同时还能够快速轻松地解析和比较结果。当然,Sysinternals 的自动运行是一个了不起的工具,它绝对值得使用,但是,鉴于它以非标准格式输出结果并且不能远程运行,除非你用它的命令行等价物做一些恶作剧,我觉得它不适合我。
    另外,据我所知,到目前为止我在 PersistenceSniper 中实现的一些技术还没有在 Autoruns 中实现。无论如何,如果您需要的是一个易于使用、基于 GUI 的工具,并且具有许多已经实现的功能,那么 Autoruns 是您的必经之路,否则让 PersistenceSniper 试一试,它不会错过它:)

    用法

    使用 PersistenceSniper 就像以管理员身份启动 Powershell 并运行一样简单:

    1. PS C:\> git clone https://github.com/last-byte/PersistenceSniper
    2. PS C:\> Import-Module .\PersistenceSniper\PersistenceSniper\PersistenceSniper.psd1
    3. PS C:\> Find-AllPersistence

    如果您更喜欢使用 Powershell Gallery 版本(每次在 Github 上推送新版本时,它都会通过 Github 操作自动更新),以管理员身份打开 Powershell 并运行:

    1. PS C:\> Install-Module PersistenceSniper
    2. PS C:\> Import-Module PersistenceSniper
    3. PS C:\> Find-AllPersistence

    如果您需要详细说明如何使用该工具或哪些参数可用以及它们如何工作,PersistenceSniperFind-AllPersistence支持 Powershell 的帮助功能,因此您可以在导入模块后使用以下命令获得详细的更新帮助:

    1. Get-Help -Name Find-AllPersistence -Full

    如果您只想检查单个持久性技术,则可以依赖Find-AllPersistence’PersistenceMethod参数。例如,您只想检查通过 Run 和 RunOnce 注册表项植入的持久性:

    1. PS C:\> Find-AllPersistence -PersistenceMethod RunAndRunOnce

    该PersistenceMethod参数使用 Powershell 的ValidateSet指令,因此您可以通过它来切换而不是写下选择的持久性方法:PersistenceSniper:Windows-PowerShell | 持久化植入程序 - 图1
    PersistenceSniperFind-AllPersistence返回一个 PSCustomObject 类型的对象数组,具有以下属性:

    1. $PersistenceObject = [PSCustomObject]@{
    2. 'ComputerName' = $ComputerName
    3. 'Technique' = $Technique
    4. 'Classification' = $Classification
    5. 'Path' = $Path
    6. 'Value' = $Value
    7. 'Access Gained' = $AccessGained
    8. 'Note' = $Note
    9. 'Reference' = $Reference
    10. 'Signature' = Find-CertificateInfo (Get-ExecutableFromCommandLine $Value)
    11. 'IsBuiltinBinary' = Get-IfBuiltinBinary (Get-ExecutableFromCommandLine $Value)
    12. 'IsLolbin' = Get-IfLolBin (Get-ExecutableFromCommandLine $Value)
    13. }

    这允许轻松的输出格式化和过滤。假设您只想查看允许攻击者以 NT AUTHORITY\SYSTEM(又名系统)重新获得访问权限的持久性:

    1. PS C:\> Find-AllPersistence | Where-Object "Access Gained" -EQ "System"

    PersistenceSniper:Windows-PowerShell | 持久化植入程序 - 图2
    当然,作为 PersistenceSniper 是一个基于 Powershell 的工具,可以执行一些很酷的技巧,比如将其输出传递给Out-GridView,以便与基于 GUI 的表进行交互:
    PersistenceSniper:Windows-PowerShell | 持久化植入程序 - 图3

    解释结果

    如前所述,Find-AllPersistence输出一组 Powershell 自定义对象。每个对象都有以下属性,可用于过滤、排序和更好地理解函数寻找的不同技术:

  • ComputerName:这相当简单。如果Find-AllPersistence不带-ComputerName参数运行,PersistenceSniper 将只在本地机器上运行。否则它将在您指定的远程计算机上运行;

  • 技术:这是技术本身的名称,在社区中很常见;
  • 分类:此属性可用于根据其 MITRE ATT&CK 技术和子技术编号快速识别技术。对于那些没有MITRE ATT&CK分类的技术,使用其他分类,最常见的是Hexacorn,因为他发现了很多技术。当无法可靠识别技术的来源时,使用“未编目技术 N.#”分类;
  • 路径:这是在文件系统或注册表中植入该技术的路径;
  • 值:这是技术使用的注册表属性的值,或者使用的可执行文件/库的名称,以防它是一种依赖于在文件系统上植入某些东西的技术;
  • 获得的访问权限:这是该技术授予攻击者的访问权限。例如,如果它是 HKCU 下的 Run 键,则获得的访问权限将在用户级别,而如果它在 HKLM 下,则将在系统级别;
  • 注意:这是对该技术的快速解释,以便可以轻松掌握其工作原理;
  • 参考:如果分析师需要更多地研究它,这是对该技术更深入解释的链接;
  • 签名:此属性报告与找到的持久性技术相关的二进制文件的签名信息;
  • IsBuiltinBinary:此布尔属性报告与找到的持久性技术相关的二进制文件是否通常在操作系统上找到并被认为是内置的;
  • IsLolbin:如果与找到的持久性技术关联的二进制文件是 LOLBin,则此布尔属性设置为True

    处理误报

    让我们面对现实吧,寻找持久性技术也需要处理大量误报。发生这种情况是因为,虽然有些技术几乎从未被合法使用,但许多确实是通过需要在系统启动或用户登录时自动运行的合法软件。
    这带来了一个挑战,在许多环境中,可以通过创建一个包含已知误报的 CSV 文件来解决这个问题。如果您的组织使用类似黄金映像的方式部署系统,您可以在刚刚创建的系统上运行 PersistenceSniper,获取结果的 CSV 并使用它来过滤其他机器上的结果。这种方法具有以下好处:

  • 不必管理可能乏味且容易出错的持久性白名单;

  • 为使用该工具的组织及其组织单位定制误报;
  • 通过不在工具代码中公开披露误报,让想要混入误报的攻击者更难。

Find-AllPersistence带有允许将结果直接输出到 CSV 文件的参数,同时还能够将 CSV 文件作为输入并区分结果。

  1. PS C:\> Find-AllPersistence -DiffCSV false_positives.csv

PersistenceSniper:Windows-PowerShell | 持久化植入程序 - 图4

通过拍摄增量快照来寻找持久性

我的伙伴Riccardo建议使用 PersistenceSniper 的一种很酷的方法是以增量方式使用它:您可以设置一个每 X 小时运行一次的计划任务,通过-DiffCSV参数获取上一次迭代的输出并将结果输出到新的 CSV . 通过跟踪增量更改,您应该能够在相当短的时间内发现植入您正在监视的机器上的新持久性。

🙋‍♀️🙋‍♀️🙋‍♀️迄今为止实施的持久性技术🙋‍♀️🙋‍♀️🙋‍♀️

持久性主题,尤其是在 Windows 机器上,是基本上每隔一周就会有新发现的主题之一。鉴于研究人员迄今为止发现的大量持久性技术,我仍在实施它们。到目前为止,以下34 种技术已成功实施:

我还想感谢 @APTortellini的同事,特别是Riccardo Ancarani,感谢大量的想法帮助它从一个微不足道的面向文本的脚本成长为一个成熟的 Powershell 工具。

参考

Autoruns for Windows v14.09

Beyond good ol’ Run key – All parts

LOLBAS