tobor88/PowerShell-Blue-Team

GitHub: tobor88/PowerShell-Blue-Team

面向 Windows 蓝队的 PowerShell 脚本集合,提供端口扫描检测与自动封禁、漏洞缓解、可疑命令监控、异常登录告警等防御功能。

Stars: 88 | Forks: 24

# PowerShell-Blue-Team 蓝队成员可能会用到的 PowerShell 函数和脚本集合 - Watch-PortScan.ps1 此 cmdlet 用于发现设备上尝试进行的端口扫描。它会在无限循环中运行。此 cmdlet 可用于发送包含日志信息的电子邮件警报,也可以自动将涉嫌端口扫描的源 IP 地址添加到 Windows 防火墙的黑名单中。触发警报的默认未初始化连接限制为 5。这意味着,当在两分钟内成功连接到设备上的 5 个端口时,将触发警报或黑名单 IP 操作。当然,您也可以选择不执行任何操作。此 cmdlet 从防火墙日志中获取 IP 地址。然后,它使用这些 IP 来查询 Windows 筛选连接事件日志。此脚本完成了在本地设备上配置权限和日志记录所需的一切操作。防火墙日志位置是 CIS Benchmark 推荐的,在创建防火墙日志文件并设置权限后需要重新启动。您还可以排除 IP 地址,以防止合法的端口扫描程序对漏洞扫描服务器进行扫描时被此功能阻止。某些服务器(例如文件服务器和 VoIP 服务器)会有来自大量不同 IP 地址的连接。在这些情况下,您需要使用 -IgnorePort 参数来定义诸如 445 的端口,以防止该端口被添加到某个 IP 的连接计数中。我仍在研究一种为这些流量较高的服务器过滤内容的方法。目前,此端口扫描监视器仅适用于每分钟不会收到上百个独立连接的服务器。 ``` PS> Watch-PortScan -LogFile C:\Windows\System32\logfiles\firewall\pfirewall.log -Limit 7 -Tail 8000 -ActiveBlockList -ExcludeAddresses '10.10.10.10', '10.10.10.11' -EmailAlert # 上面的示例检查 pfirewall.log 文件中最新 8000 条记录,并提取单个 IP 地址。检测阈值设为 10,因此当同一个 IP 在最近 2 分钟内连接了 7 个开放端口时,会触发邮件告警,并且得益于 -EmailAlert 和 -ActiveBlockList 开关参数,该 IP 将被添加到 Windows Firewall 中并阻止与其通信。Block List 设为 active 意味着任何被发现的 port scanner(不包括 IP 地址 10.10.10.10 和 10.10.10.11)都将添加一条 firewall rule,阻止与该 IP 的入站和出站连接。-EmailAlert 参数将使用您提供的信息发送邮件告警。您无需设置 50 个参数,只需在脚本中定义您的邮件信息。然后您将收到一封包含小型日志文件的邮件告警,其中包含一个表格,记录了发生的 port connections 信息,让您了解攻击者掌握了哪些情况。 ``` ![端口扫描警报结果](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b600b14f99222402.png) - Disable-WeakSSL.psm1 此函数用于更改 RC4 和 AES 密码以及 SSL2.0、SSL3.0、TLS1.0、TLS1.1 和 TLS1.2 的注册表值。启用所有开关将为 IIS 10 设置针对这些内容的推荐的 SCAP 禁用和启用值。 参考 [CIS Benchmarks](https://workbench.cisecurity.org/benchmarks) ``` PS> Disable-WeakSSL [ -WeakCiphers ] [ -StrongAES ] [ -WeakSSLandTLS ] ``` - Remove-RansomwareNote.ps1 此脚本用于使用 SMB 映射驱动器删除保存在多台服务器上大量位置的勒索软件说明文件 ``` PS> Remove-RansomwareNote -ComputerName "dc01","files","desktop1" -FileName "Ransom.txt" -Credential $LiveCred ``` - Setup-Secure-Autologon.ps1 此脚本用于加密自动登录密码。如果当前已设置自动登录,它将加密明文密码。如果尚未设置,系统将提示您输入要使用的凭据 ``` PS> .\Setup-Secure-Autologon.ps1 ``` - Resolve-CVE-2017-8529.ps1 此 cmdlet 旨在用于修补 64 位或 32 位架构上 Windows 计算机中的 CVE-2017-8529 漏洞。除通用参数外,它不接受任何其他参数。 ``` PS> Resolve-CVE-2017-8529 -Verbose ``` - Find-CVE-2020-0601.ps1 此 cmdlet 用于发现由于 CVE-2020-0601 而被入侵的证据 ``` PS> Find-CVE-2020-0601 -Verbose ``` - Resolve-CVE-2020-0796.ps1 此 cmdlet 旨在用于在存在漏洞的情况下修补 Windows 版本 1903 和 1909 上的 CVE-2020-0796 漏洞 ``` PS> Resolve-CVE-2020-0796 -ComputerName "DESK01", "DESK02" -Verbose PS> Get-ADComputer -Filter 'Name -like "DESK*"' | Resolve-CVE-2020-0796 # 使用以下命令撤销所做的更改 PS> Resolve-CVE-2020-0796 -ComputerName "DESK01", "DESK02" -Undo -Verbose ``` - Resolve-CVE-2020-1350.ps1 此 cmdlet 旨在在无法使用最新补丁 KB4569509 重启服务器的情况下,通过注册表设置来缓解 CVE-2020-1350。 ``` PS> Resolve-CVE-2020-1350 ``` - DNSZoneTransferAlert.ps1 此脚本旨在通过任务计划程序响应 DNS 服务器事件 ID 6001 来运行。每当发生 DNS 区域传输时,事件日志中就会触发此事件。触发此脚本运行将向 IT 管理员或您定义的任何人发送电子邮件,通知他们发生了 DNS 区域传输以及发起该传输的 IP 地址。某些 Windows DNS 服务器可能需要启用区域传输才能正常工作。此警报有助于将其转变为我们防御者的优势。 ``` PS> .\DNSZoneTransferAlert.ps1 ``` - Test-SslOptions.ps1 此函数用于检查设备能够使用的 TLS 协议和算法。它还会返回证书信息 ``` PS> Test-SslOptions -UrlDomain "osbornepro.com" -Port 443 PS> "osbornepro.com","btpssecpack.osbornepro.com","encrypit.osbornepro.com","writeups.osbornepro.com" | Test-SslOptions -Port 443 ``` - Get-DubiousPowerShellCommand.psm1 此函数旨在作为计划任务在服务器上运行。要使其正常工作,需要启用 PowerShell 命令日志记录。关于是否应该执行此操作存在争议。我坚信输入内容应该被记录下来。无论如何,这都会检查事件日志中是否存在被恶意使用的 PowerShell 命令。这包括诸如 __vssadmin__(监视域控制器上的 NTDS.dit 密码提取)、__IEX__(监视远程发出的命令),以及 __bitsadmin/Start-BitsTransfer__ 和 __certutil -urlcache -split -f__(监视通过命令行下载到设备)等命令。 ``` PS> Get-DubiousPowerShellCommand -Verbose ``` - Get-NewlyInstalledService.ps1 此函数旨在每当触发事件 ID 7009 或 7045 时,由任务计划程序在服务器上运行。这将通知管理员服务器上何时安装了新服务。我已经排除了 Windows Defender 更新。如果您有任何其他误报,只需在 Where-Object 中添加 -and,或者在 58 行附近添加 If 语句。我在邮件正文中提到的 BTOBTO 指的是一个 Python 漏洞利用程序,当管理员凭据被泄露时可以使用它。我见过的大多数其他 payload 都有 Base64 格式的随机服务名称。 ``` PS> Get-NewlyInstalledService -SmtpServer mail.smtp2go.com -To rosborne@osbornepro.com -From rosborne@osbornepro.com -Verbose ``` - NewOpenPortMonitor.ps1 此脚本旨在由任务计划程序运行。与服务器建立的任何唯一连接都会被记录并放入日志文件中。任何能够被解析的 IPv4 地址都会被解析,并放置在文档 C:/Users/Public/Documents/ConnectionDNSHistory.csv 中。任何服务器 Internet 连接都会记录在单独的文件 C:/Users/Public/Documents/ConnectionHistroy.csv 中。每当设备上有一个新端口作为侦听器打开时,您都可以通过接收电子邮件来配置警报。我不使用这些警报,因为我还没有完善那部分功能,因为这是我最早编写的脚本之一。不过仍然非常有用。 ``` PS> .\NewOpenPortMonitor.ps1 ``` - Search-ForCompromise.ps1 此 cmdlet 用于发现机器上可能存在的恶意更改。它需要一份 Windows 中 hosts 文件的参考副本。它还需要一份已知应用程序和已知当前用户应用程序的列表作为参考。我将其设置为如果这些文件位于网络共享中则更新它们,这正是我所使用的方式。 它检查以下项目 1. 对最消耗资源的进程进行排序。确保它们都是合法的。 2. 如果 hosts 文件被更改,将显示 IP 地址。然后该函数要求管理员手动输入 IP 地址。这将关闭任何打开的连接,并防止与发现的 IP 地址建立任何新连接。 3. 如果配置了被更改的起始页,它将显示给管理员,管理员需要删除该设置。 4. 检查本地机器和当前用户的注册表中是否存在以前未知的应用程序,并向管理员显示这些未知应用程序。管理员应验证这些应用程序是否安全。 5. 确保没有配置或更改任何代理设置。 6. 最后,查找并识别任何备用数据流(Alternate Data Streams) ``` PS> Search-ForCompromise -Verbose ``` - UnusualUserSignInAlert.ps1 这是另一个让我非常自豪的脚本。此脚本在用户可以登录任何计算机但被分配了 1、2 或 3+ 台计算机的环境中非常有用。此脚本的作用是查询过去 24 小时内的事件日志。只要发生成功登录(事件 ID 4624)的任何地方,都会记录下 IP 地址,并将其与您创建的 CSV 文件中的已分配 IP 地址列表进行比较。然后,您可以通过电子邮件通知您此登录信息。这在较小的环境中有点小众。 __重要提示:__ 要使其正常工作,您需要一个包含用户及其分配设备的 CSV 文件。该信息在进行处理之前会从 CSV 中导入。 ``` PS> .\UnusualUserSignInAlert.ps1 ``` - Compare-FileHash.ps1 这是一个非常简单的操作,旨在通过 PowerShell 简化将文件哈希值与校验和进行比较的过程。您不需要在 PowerShell 中使用 Get-FileHash 然后将该值与您下载文件的站点进行比较,此 cmdlet 会计算文件的哈希,并将该值与作为参数值之一的校验和进行比较。所有与 Get-FileHash cmdlet 中相同的哈希算法均可用。 "SHA1","SHA256","SHA384","SHA512","MD5","RIPEMD160","MACTripleDES" 如果未定义算法,则默认算法为 SHA256。 ``` Compare-FileHash -FilePath C:\Path\To\File.exe -Hash 'e399fa5f4aa087218701aff513cc4cfda332e1fbd0d7c895df57c24cd5510be3' -Algorithm SHA256 Compare-FileHash C:\Path\To\File.exe 'e399fa5f4aa087218701aff513cc4cfda332e1fbd0d7c895df57c24cd5510be3' ``` - Enable-DoH.ps1 此 cmdlet 用于在 Windows 机器上启用 DNS over HTTPS。它也可用于在 Windows 机器上禁用 DNS over HTTPS。 ``` # 此示例启用 DNS over HTTPS,但需要重启才能生效 PS> Enable-DoH # 此示例启用 DNS over HTTPS 并提示运行者重启 PS> Enable-DoH -Restart # 此示例禁用 DNS over HTTPS,但需要重启 PS> Enable-DoH -Undo # 此示例禁用 DNS over HTTPS 并提示运行者重启 PS> Enable-DoH -Undo -Restart ```
标签:AI合规, IPv6, Libemu, PowerShell, Windows防火墙, 插件系统, 端口扫描监控