ShellSweepPlus 概述
ShellSweepPlus是一款开源工具,旨在帮助安全团队检测潜在的 Web Shell。它是 ShellSweep 的增强版
Webshell 的威胁
Web shell 对组织构成重大威胁,因为它们为攻击者提供了对受感染 Web 服务器的未经授权的访问和控制。攻击者可以利用这些 shell 来:
-
窃取敏感数据。 -
部署额外的恶意软件。 -
发动进一步的攻击。
及时检测潜在的 Web Shell 对于最大限度地减少漏洞的影响和防止进一步的损害至关重要。
ShellSweepPlus 如何增强威胁防御
ShellSweepPlus 通过增强现有安全工具的影响力为安全团队提供了巨大的价值。
通过将 ShellSweepPlus 集成到安全堆栈中,组织可以增强防御能力并更全面地了解其 Web 应用程序的安全状况。该工具的高级检测方法(例如熵分析、模式匹配和启发式分析)使安全专业人员能够高精度地识别潜在的 Web Shell,即使它们被严重混淆或采用了新技术。
此外,ShellSweepPlus 使安全团队能够识别可能被忽视的威胁。其详细的报告和警报功能可以快速响应潜在的 Web Shell 威胁,从而缩短检测到补救之间的时间。
通过主动搜寻异常和可疑文件,安全专家可以领先攻击者一步,并增强组织的整体安全弹性。
无论您是经验丰富的安全专家还是刚入行不久,ShellSweepPlus 都是一款不可或缺的模块化可配置工具。其多功能性、易用性和强大功能使其成为对抗 Web Shell 持续威胁的宝贵工具。
ShellSweepPlus:主要增强功能和特性
对于 ShellSweepPlus,我们引入了多项增强功能以增强其检测能力:
-
启发式分析:ShellSweepPlus 引入了“Perform-HeuristicAnalysis”功能,该功能采用高级启发式规则来识别异常并检测最难以捉摸的 Web Shell。此附加功能大大增强了该工具发现以前未知的威胁的能力。 -
增强的模式检测:已实施“Detect-WebshellPatterns”功能来识别已知的恶意模式,从而提供额外的保护层。通过利用一套全面的可疑模式,ShellSweepPlus 可以快速标记潜在的 Web Shell 文件。 -
熵和标准偏差集成:ShellSweepPlus 擅长计算每个文件扩展名的熵值的平均值和标准偏差。与预期熵范围有显著偏差的文件会被标记,从而实现精确而全面的检测。 -
混合模式检测:ShellSweepPlus 采用基于熵的检测、基于标准偏差的检测和混合模式检测(利用标准偏差和硬编码阈值)的协同混合。这种多方面的策略可确保全面覆盖并增强识别潜在 Web Shell 的可靠性。 -
静态代码分析:该工具采用复杂的基于模式的检测机制,静态分析代码以识别和标记已知的恶意模式。
虽然 ShellSweepPlus 引入了这些高级功能,但我们认识到基准测试和真正了解您的环境的重要性。ShellCSV和ShellScan等强调基准测试的工具仍然是 ShellSweepPlus 的重要伴侣,可让您了解系统的行为。
当我们深入研究 ShellSweepPlus 这一激动人心的新篇章时,请加入我们探索其增强的功能,并了解它如何增强您的 Web Shell 检测工作。
ShellSweepPlus 的新功能
在深入了解 ShellSweepPlus 的功能之前,重要的是要记住 ShellSweep 是一套协同工作的工具。
-
首先,使用 ShellScan 对你的服务器进行基准测试,以更新熵值。 -
通过修改扩展和熵值来调整 ShellSweepPlus 以适应您的服务器。 -
最后,设置 ShellSweep|Plus 并运行。
这些步骤在原始 ShellSweep 博客中有详细概述。(ShellSweep 流程图,Splunk 2024)
现在,让我们看看我们添加的新功能。
关键词分析
我们最初尝试采用的方法之一是关键字匹配。为了实现这一点,我们编写了一个 PowerShell脚本,用于扫描大量 Web Shell 目录并检查文件中的单词。
我们的主要目标是确保只包含那些在多个 Web Shell 中一致出现的关键字。我们设置了 3 个阈值,这意味着一个单词必须出现在三个或更多文件中才能添加到哈希表中并随后输出。
下面是我们使用的脚本。它也可以在ShellSweep 存储库中找到。
# 该脚本用于从一组包含 webshell 文件的目录中提取关键字。
# 它读取每个文件,将内容拆分为单词,并在哈希表中更新每个单词的频率。
# 然后,它会过滤掉出现超过 3 次的单词,并将其视为可疑单词。
# 然后将可疑单词写入文件“suspiciousPatterns.txt”。
$webshellDirectoryPath = @(
'C:UsersAdministratorDownloadsreGeorg-masterreGeorg-master',
'C:UsersAdministratorDownloadsp0wny-shell-master',
'C:UsersAdministratorDesktop10684728197_human2_cisa_report',
'C:UsersAdministratorDownloadsxl7devWebShell-master',
'C:UsersAdministratorDownloadswebshells-masterwebshells-master',
'C:UsersAdministratorDownloadswebshell-masterwebshell-master',
'C:UsersAdministratorDesktop10660311902'
)
$wordFrequencyInDirectory = @{}
# 遍历目录
Get-ChildItem中的每个文件$webshellDirectoryPath -File | foreach {
$content = Get-Content $_.FullName -Raw
# 将内容拆分成单词,并更新哈希表中每个单词的频率
$content -split 's+' | foreach {
if ($wordFrequencyInDirectory.ContainsKey($_)) {
$wordFrequencyInDirectory[$_]++
} else {
$wordFrequencyInDirectory.Add($_, 1)
}
}
}
# 过滤掉出现次数超过 3 次的单词
$suspiciousWords = $wordFrequencyInDirectory.GetEnumerator() | Where-Object { $_.Value -gt 3 } | ForEach-Object { $_.Key }
$output = "`$suspiciousPatterns = @(" + "`r`n"
foreach ($word in $suspiciousWords) {
$output += " '$word'," + "`r`n"
}
$output += ")"
$output | Out-File -FilePath 'C:tempsuspiciousPatterns.txt'
(生成的可疑关键字,Splunk 2024)
这是该脚本的输出:我们可以接受并直接放入 ShellSweepPlus 的哈希表。
静态代码分析
在 ShellSweepPlus 中,我们引入了强大的静态代码分析功能,增强了该工具识别潜在 Web Shell 的能力。此功能使用一组预定义的可疑模式**($suspiciousPatterns)**执行基于模式的深入检测,使 ShellSweepPlus 能够捕获最难以捉摸的威胁。
静态代码分析通过Detect-WebshellPatterns函数实现,该函数扫描每个文件的内容并将其与可疑模式进行匹配。这些模式可以包括常见的 Web Shell 关键字、函数或通常与恶意活动相关的代码片段。
以下是对Detect-WebshellPatterns 函数的详细介绍:
函数 Detect-WebshellPatterns {
参数(
[参数(Mandatory=$true)] [string] $FileContent
)
$matchedPatterns = @()
foreach ($pattern in $suspiciousPatterns) {
if ($FileContent -match $pattern) {
$matchedPatterns += $pattern
}
}
返回 $matchedPatterns
}
该函数将文件内容作为输入,并迭代**matchedPatterns**数组中。最后,该函数返回匹配模式的列表。
您可以轻松自定义和扩展可疑模式,以包含特定于您的环境的其他模式或新发现的 Web Shell 指标。这种灵活性使 ShellSweepPlus 能够:
-
适应不断演变的威胁。 -
保持其检测Webshell的有效性。
当 ShellSweepPlus 处理文件时,会调用Detect-WebshellPatterns函数来识别文件内容中的任何可疑模式。如果找到匹配项,则将其包含在结果对象中,从而提供有关潜在 Web Shell 的宝贵信息。
以下是静态代码分析如何集成到文件处理中的示例:
函数 Process-File {
参数(
[hashtable] $file,
[string] $detectionMethod,
[double] $baseScore,
[double] $sdForExt = $null
)
#...
$matchedPatterns = Detect-WebshellPatterns -FileContent $content
$confidenceScore = Adjust-ConfidenceScore -baseScore $baseScore -matchedPatterns $matchedPatterns
$result = Create-ResultObject -path $path -entropy $entropy -sdForExt $sdForExt -hash $hash -lastModified $lastModified -detectionMethod $detectionMethod -confidenceScore $confidenceScore -matchedPatterns $matchedPatterns
$result | ConvertTo-Json -Compress
}
在Process-File函数中,使用文件内容调用Detect-WebshellPatterns函数,并将匹配的模式存储在**$matchedPatterns**变量中。然后使用这些匹配的模式来调整置信度分数,并将其包含在结果对象中。
ShellSweepPlus 中的静态代码分析功能增加了一层额外的检测能力,补充了基于熵和基于标准偏差的检测方法。通过识别文件内容中的可疑模式,ShellSweepPlus 可以标记可能逃避其他检测技术的潜在 Web Shell。
静态代码分析和其他检测方法的强大组合使 ShellSweepPlus 成为识别和减轻环境中 Web shell 风险的综合工具。
熵和标准差积分
在 ShellSweepPlus 中,我们引入了一项强大的功能,利用标准差的统计概念来增强我们基于熵的检测能力。
标准差是衡量一组值与其平均值的离散程度的指标。在熵分析中,它有助于我们识别与给定文件扩展名的预期熵范围存在较大偏差的文件。
如果您熟悉 Splunk 的stdev函数或遇到过使用该函数的内容,您会很高兴知道我们已将类似的方法直接纳入我们的 PowerShell 脚本中。通过计算每个文件扩展名的熵值标准差,我们可以建立基线并标记表现出异常熵水平的文件。
该功能在ShellSweepPlus中的实现如下:
# 此哈希表将存储每个文件扩展名的平均熵和标准差
$statsPerExtension = @{}
# 计算每个扩展名的平均值和标准差
foreach ($extension in $entropiesPerExtension.Keys) {
$entropies = $entropiesPerExtension[$extension]
# 计算平均熵
Write-Verbose "计算 $extension 文件的平均熵..."
$meanEntropy = ($entropies | Measure-Object -Sum).Sum / $entropies.Count
# 计算与平均值的平方差
$squaredDifferences = $entropies | ForEach-Object {
$difference = $_ - $meanEntropy
return [Math]::Pow($difference, 2)
}
# 计算平方差的平均值
$meanOfSquaredDifferences = ($squaredDifferences | Measure-Object -Sum).Sum / $squaredDifferences.Count
# 计算熵的标准差
Write-Verbose "计算 $extension 文件熵的标准差..."
$sdEntropy = [Math]::Sqrt($meanOfSquaredDifferences)
$statsPerExtension[$extension] = @{
'Mean' = $meanEntropy
'StandardDeviation' = $sdEntropy
}
}
让我们分解一下此过程所涉及的步骤:
-
我们首先初始化一个名为**$statsPerExtension**的哈希表来存储每个文件扩展名的平均熵和标准差。 -
我们遍历**$entropiesPerExtension**哈希表中的每个文件扩展名,其中包含按扩展名分组的文件的熵值。 -
对于每个文件扩展名,我们通过将所有熵值相加并除以具有该扩展名的文件的数量来计算平均熵。 -
接下来,我们计算每个熵值与平均熵之间的平方差。此步骤对于计算标准差是必要的。 -
我们将平方差相加并除以文件数量,从而计算出平方差的平均值。 -
最后,我们通过取平方差的均方根来计算每个文件扩展名的熵值的标准差。 -
每个文件扩展名的平均熵和标准差都存储在**$statsPerExtension**哈希表中以供日后使用。
通过整合这种熵和标准偏差积分,ShellSweepPlus 获得了一种更细致、更自适应的方法来检测异常文件。它使我们能够识别熵值明显不同于其各自文件扩展名标准的文件,从而提供更强大、更可靠的检测机制。
启发式分析
ShellSweepPlus 通过引入“Perform-HeuristicAnalysis”功能将 Web Shell 检测提升到一个新的水平。
此高级功能采用复杂的启发式规则来识别异常并检测最难以捉摸的零日 Web Shell,大大增强了该工具发现以前未知的威胁的能力。
启发式分析由 Perform-HeuristicAnalysis
函数执行,该函数扫描每个文件的内容并将其与一组预定义的启发式规则 ($heuristicRules
) 进行匹配。这些规则旨在识别通常与 Web Shell 相关但可能无法通过传统的基于签名的检测方法捕获的模式、技术或行为。
以下是对 Perform-HeuristicAnalysis
函数的进一步介绍:
函数 Perform-HeuristicAnalysis {
参数(
[参数(Mandatory=$true)] [字符串] $FileContent
)
$matchedHeuristics = @()
foreach ($rule in $heuristicRules) {
如果 ($FileContent -match $rule.pattern) {
$matchedHeuristics += $rule.description
}
}
返回 $matchedHeuristics
}
以下是一些利用“Perform-HeuristicAnalysis”函数的开箱即用的启发式规则:
$heuristicRules = @(
@{ 'pattern' = 'eval('; 'description' = 'eval 函数的使用' },
@{ 'pattern' = 'base64_decode('; 'description' = 'base64_decode 函数的使用' },
@{ 'pattern' = 'shell_exec('; 'description' = 'shell_exec 函数的使用' },
@{ 'pattern' = 'proc_open('; 'description' = 'proc_open 函数的使用' },
@{ 'pattern' = 'popen('; 'description' = 'popen 函数的使用' },
@{ 'pattern' = 'passthru('; 'description' = 'passthru 函数的使用' },
…
@{ 'pattern' = 'register_tick_function('; 'description' = 'register_tick_function 的使用' },
@{ 'pattern' = 'ob_start('; 'description' = 'ob_start 函数的使用' },
@{ 'pattern' = 'ob_get_contents('; 'description' = 'ob_get_contents 函数的使用' },
@{ 'pattern' = 'ob_get_clean('; 'description' = 'ob_get_clean 函数的使用' },
@{ 'pattern' = 'ob_end_clean('; 'description' = 'ob_end_clean 函数的使用' },
@{ 'pattern' = 'ob_flush('; 'description' = 'ob_flush 函数的使用' },
@{ 'pattern' = 'ob_end_flush('; 'description' = 'ob_end_flush 函数的使用' }
)
该函数将文件内容作为输入,并迭代 $heuristicRules
数组中定义的每个启发式规则。每条规则都由一个模式和一个描述组成。如果在文件内容中找到模式,则将相应的描述添加到 $matchedHeuristics
数组中。最后,该函数返回匹配的启发式列表。
您可以根据新发现、新出现的威胁或在您的环境中观察到的 Web Shell 的特定特征,轻松扩展和自定义启发式规则。这种灵活性确保 ShellSweepPlus 能够有效检测最复杂和最具有规避性的 Web Shell。
当 ShellSweepPlus 处理文件时,将调用 Perform-HeuristicAnalysis
函数来识别文件内容中的任何异常或可疑行为。如果找到匹配项,则将其包含在结果对象中,从而为潜在的 Web Shell 提供有价值的见解。
ShellSweepPlus 中的启发式分析功能为检测过程增加了额外的智能层,补充了其他检测方法。通过识别传统签名可能无法涵盖的异常和可疑模式,ShellSweepPlus 显著增强了其检测零日 Web Shell 和以前未知的威胁的能力。
混合模式检测
ShellSweepPlus 采用多方面方法进行 Web Shell 检测,结合了基于熵的检测、基于标准偏差的检测和混合模式检测。这种综合策略可确保全面覆盖并增强识别潜在 Web Shell 的可靠性。
ShellSweepPlus 中的混合模式检测功能结合了基于熵和基于标准偏差的检测方法的优势,并增加了硬编码阈值的优势。通过利用多种检测技术并结合其结果,ShellSweepPlus 在识别 Web Shell 威胁方面实现了更高的准确性和有效性。
以下是 ShellSweepPlus 中混合模式检测的实现方式:
# 根据标准偏差修改阈值以及硬编码 GT 值检测异常
Write-Verbose "执行混合模式检测..."
foreach ($file in $allFiles) {
$extension = [System.IO.Path]::GetExtension($file['Path'])
$sdForExt = $statsPerExtension[$extension]['StandardDeviation']
Process-File -file $file -detectionMethod "Mixed Mode" -baseScore $weights["Mixed Mode"] -sdForExt $sdForExt
}
在混合模式检测循环中,ShellSweepPlus 遍历每个文件并执行以下步骤:
-
它从 $statsPerExtension
哈希表中检索文件扩展名和相应的标准偏差值。 -
它调用 Process-File
函数,传递文件、检测方法(“混合模式”)、基本分数(“$weights["Mixed Mode"]”)和文件扩展名的标准差值。
然后,Process-File
函数将混合模式检测逻辑应用于文件:
函数 Process-File {
参数(
[hashtable] $file,
[string] $detectionMethod,
[double] $baseScore,
[double] $sdForExt = $null
)
#...
$matchedPatterns = Detect-WebshellPatterns -FileContent $content
$confidenceScore = Adjust-ConfidenceScore -baseScore $baseScore -matchedPatterns $matchedPatterns
$result = Create-ResultObject -path $path -entropy $entropy -sdForExt $sdForExt -hash $hash -lastModified $lastModified -detectionMethod $detectionMethod -confidenceScore $confidenceScore -matchedPatterns $matchedPatterns
$result | ConvertTo-Json -Compress
}
在 Process-File
函数内部,混合模式检测执行以下步骤:
-
它调用“Detect-WebshellPatterns”函数来识别文件内容中任何已知的恶意模式。 -
它使用“Adjust-ConfidenceScore”函数根据匹配的模式调整置信度分数。 -
它使用“Create-ResultObject”函数创建一个结果对象,包括文件路径、熵、标准差、哈希值、最后修改日期、检测方法、置信度分数和匹配模式。 -
最后将结果对象转换为JSON格式并输出。
混合模式检测利用文件扩展名的标准偏差值来确定文件的熵是否在预期范围内。它还利用 $fileExtensions
哈希表中定义的硬编码阈值来进一步完善检测过程。
ShellSweepPlus 中的混合模式检测功能结合了基于熵的检测、基于标准偏差的检测和硬编码阈值,提供了一种可靠且强大的方法来识别潜在的 Web Shell。它考虑了多种因素和检测技术,以便对文件成为 Web Shell 的可能性做出明智的决策。
混合模式检测以及 ShellSweepPlus 中的其他高级功能(如启发式分析和增强模式检测)创建了一个全面有效的解决方案,用于检测和减轻您环境中的 Web shell 风险。
如何实现 ShellSweepPlus
ShellSweepPlus 可以单独实施,也可以与 Splunk Universal Forwarder 配合使用。下面我们将重点介绍这两种方法。
使用 Splunk 实施
与ShellSweep一样,它相当容易启动并部署到整个集群的 Web 服务器。
首先,为 ShellSweepPlus 找到一个家或创建一个新的 App。在 App 中,需要两项内容:
-
输入配置文件 -
Bin 目录中的 ShellSweepPlus.ps1 脚本
将脚本添加到inputs.conf中,该脚本将在每天午夜运行。根据需求进行修改。
[powershell://ShellSweepPlus]
脚本 = . “$SplunkHomeetcappswin_inputs_appbinShellSweepPlus.ps1”
已禁用 = false
源类型 = shellsweepplus
计划 = 0 0 * * *
索引 = win
现在,将 ShellSweepPlus 添加到 bin src。最新版本位于此处。默认情况下,ShellSweep 将输出为 JSON,以便 Splunk 轻松提取和提取。
一旦设置了输入和脚本,重新启动通用转发器,数据就会根据预定的时间开始显示。
然后在 Splunk 中查询数据:
index=win sourcetype=shellsweepplus
| 按检测方法、置信度分数、可疑关键字、匹配启发式文件路径熵、标准差哈希统计
通过 DetectionMethod 修改您的查询,以全面了解每个文件之间的差异。
运行 ShellSweepPlus
与 ShellSweep 类似,也可以单独运行 ShellSweepPlus 而无需 Splunk。也许对于事件响应或验证,其他预防控制措施可能已经错过了。它就像一个命令一样简单:
结束语
随着网络安全威胁不断演变,变得越来越复杂,组织采用能够跟上这些变化的工具非常重要。 ShellSweepPlus 代表了 Web Shell 检测的进步,它提供了一种全面且适应性强的解决方案,可以帮助组织保持领先地位。
原文始发于微信公众号(红云谈安全):ShellSweepPlus 介绍:开源 Web Shell 检测
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论