bloke / smd_prognostics
当Textpattern CMS中的内容发生变化时,主动进行诊断并发出警报
Requires
- textpattern/installer: *
- textpattern/lock: >=4.7.2
This package is not auto-updated.
Last update: 2024-09-15 04:05:31 UTC
README
如果记得偶尔查看“管理 → 诊断”面板,那么它非常棒。但如果您的服务器被入侵,您将如何知道有隐秘的特洛伊木马或恶意软件,直到访客投诉或搜索引擎封锁您的网站?
答案是使用smd_prognostics来告知您何时发生变化,这样您可以立即采取行动。
功能
- 监控Textpattern安装周围及内部的文件和攻击。
- 自动检测任何更改并向指定的用户发送通知。
- 自定义检查的频率和位置。
- 确认已知变更,如果情况未得到检查,则按照可配置的间隔重复发出警报。
安装/卸载
需要Textpattern 4.7.2+
从GitHub或软件页面下载插件,将代码粘贴到Textpattern的“管理 → 插件”面板中,安装并启用插件。注意,建议插件以优先级1运行,以便它可以在其他插件之前检测到事物。
要卸载,请在“管理 → 插件”面板中删除。您可以使用smd_prefalizer删除插件创建的任何smd_prognostics_*
首选项。
访问论坛线程获取更多信息或报告插件的成功与否。
快速入门:检测的三个步骤
- 访问“扩展 → 预测”,根据需要更改设置信息,并确保您已保存
- 点击预测页面的“文件”按钮(现在忽略任何关于缺失校验和的警告:它们尚未创建),并选择您希望监控的文件。请确保您已保存更改
- 继续您的业务。如果文件系统发生变化,您将被告知。请考虑帮助改进插件
设置
“预测设置”页面包含以下配置选项
监控选项
; 检查公共侧点击的文件
: 每当人们访问管理侧标签时,都会进行检查。如果您更喜欢在访客/机器人浏览您的网站时检查文件,您也可以选择这样做(有关详细信息,请参阅它的工作原理)。
; 每次检查文件(最多)
: 插件不会在每次点击时检查文件,因为这会给服务器带来不必要的压力。相反,您可以选择一个可配置的时间——以秒为单位(删除后,将触发下一次管理侧或公共侧点击)。
; 检查文件之间的时间
: 文件将在一天中的两个时间之间检查。如果您更喜欢在非高峰时段设置此选项,以最小化插件对白天访客的影响。
: 默认:00:00 => 23:59
; 每次检查这么多文件
: 为了避免减慢您的网站/管理侧,每次插件被触发时,只检查文件的一个子集是良好的做法。
; 检测到警报后每隔一段时间
:当检测到有变化时,总是执行报警操作。但如果插件不断向你轰炸信息,那就烦人且不再那么有用。此设置允许您配置重复提醒相同信息的间隔。通常一天一次(默认为86400秒)通过电子邮件就足够了,除非你是受虐狂。注意,如果更改的文件更多——即使超时时间还未到——你将收到另一个警报。
:如果您希望指定两个值(以逗号分隔),则可以这样操作:第一个是通知Textpattern管理端的时间;第二个是电子邮件之间的时间。如果您只使用一个值,则它将应用于两者。
; 通过以下方式通知
:选择您希望如何被通知
:: Txp界面将在检测到变化时在Textpattern管理端显示一条消息。
:: 电子邮件将发送关于更改的电子邮件。
; 发送电子邮件到
:以逗号分隔的电子邮件地址接收者列表。如果这是空的,即使您选择通过电子邮件通知,也不会发送电子邮件。
; 发送法医学报告到
:以逗号分隔的电子邮件地址接收者列表,以接收法医学数据(标题为frognostics_)。如果您不想启用此功能,可以选择无人接收,或者发送给自己,或者发送给我进行分析更好。请注意,一些数据非常敏感,可能泄露您的文件或网站的路径。如果您希望保持私密,请务必清洗法医学数据,如果需要,将编辑后的重点发送给我进行分析。
实时选项
; 阻止请求头
:如果您启用此功能,可以选择阻止或允许某些类型的特殊 HTTP 请求。任何被勾选类型的请求将被阻止,并返回一条消息而不是页面。核心类型 GET、POST、HEAD 和 OPTIONS 会自动允许,因为 Textpattern 需要它们。其余三种 —— TRACE、PUT 和 DELETE - 是一些专业头信息,核心不使用但可能被某些插件需要。如果您希望允许它们,请清除相关的复选框,否则为了最大程度地保护,请保持所有三种类型的头信息都被勾选。-@ 这样的单词的评论都会触发注入器。对于有评论的网站,安全和误报之间的良好平衡是
; 防止 SQL 注入
: 监控传入的 URL 以防止 SQL 注入攻击,并以多种方式处理它们。当检测到攻击时,可以 @Block@ 阻止请求,或者发送一个 HTTP 状态头信息,以便您可以在错误页面上处理攻击。如果在 with
框中输入任何内容,则将在页面上显示该消息。
: 您可以在 with
框中指定 txp_form:name-of-form
以在结果被发送到页面之前首先将控制权交给自定义表单。例如,您可以使用此功能发送自己的诊断信息或决定 SQL 攻击是否合法,并自行阻止或删除任何可疑内容并发送请求。如果您想进一步操作,有一个 回调函数可用。
: 敏感性可以通过增加数字来调整;1 是最敏感的(即只要一个触发词就会触发开关)。您可以通过在框中放入两个以逗号分隔的值来独立控制 GET 和 POST 的敏感性。如果您网站上接受评论,提高 POST 值(第二个值)可能是明智的,因为任何包含像 select
或 union
或甚至 Textile 的 @1, 3
。如果您的评论者经常发布代码片段或 SQL 语句,请进一步提高。
:还有一个选项可以使用 XSS 防护盾,它将所有多余的字符进行编码,以帮助防止注入/cookie 攻击。请注意,由于评论预览步骤始终被跳过(以避免在预览时触发并烦扰不知情的目标),这可能会导致公开提交的评论不会像预览那样显示。特别是如果评论文本中使用了尖括号或标签。
; 发送法医信息
:当检测到头信息违规、SQL 注入或两者都存在时,将法医信息电子邮件发送到指定的电子邮件地址。
文件系统选项
; 检查文件
:选择您希望监控的类型更改:新文件添加、文件删除或文件修改。默认情况下,因为添加会带来(极小的)额外处理惩罚,所以不选择添加。因此,如果您想监控添加,则需要选择。
; 文件位置
:逗号分隔的目录列表,您希望从中选择用于监控的文件。请只选择顶级文件夹;其下的一切都将自动选择。默认为网站根目录。如果您使用的是多站设置,可能需要修改此设置。
; 排除文件夹
:由于 Textpattern 安装下的文件列表可能很大,您可以指定一些文件夹以自动排除,这样可以缩短文件列表。
:默认:images, files, tmp
。
; 忽略文件
:一些文件,如典型Linux主机上的错误日志文件,会突然出现,您可能需要定期删除它们。在开发站点上,这可能会导致调试期间的过度警报。为了最小化这种情况,您可以在这里列出始终希望忽略的文件。不需要路径:只需提供以逗号分隔的文件名列表。允许使用通配符(*和?)。
:请注意,预测性校验和文件始终被视为特殊情况,因此不需要显式列出。
插件选项
; 限制预测性配置到
:如果您必须将发布者/管理编辑权限授予他人以及自己,但又不想让任何人修改插件设置,请在此框中输入允许的用户名列表。小心。名称区分大小写,如果您拼写错误,您可能会锁定自己无法编辑设置!
; 管理端 URL
:您的‘textpattern’管理端URL。这通常是http://site.com/textpattern
,但如果您正在运行多站点或已更改目录,您可以在其中指定。
; 预测性文件夹
:预测性校验和文件将驻留的文件夹。该目录必须已存在且可写,否则您的选择位置将被忽略。强烈建议此文件夹位于您的网站文档根目录之外,即在非Web可访问的位置。
; 唯一前缀
:将此字符串作为校验和文件的名称前缀。如果您使用相同的(非docroot)文件夹来存储多个站点的校验和,则非常有用,可以避免文件冲突。
工作原理
理想情况下,插件将是一个每N秒运行一次的定时脚本。但这需要在您的宿主上有特定的软件(cron),而且无法保证它存在。因此,唯一可以“触发”插件的是Textpattern本身。插件在每次您与行政端交互时都会运行,但如果它每次点击都检查所有文件与您选择的校验和,那么您的行政端会变慢很多。折衷的办法是指定超时值和要检查的文件数量。这就是它的工作原理
- 当您点击选项卡或与行政端交互时,插件会查看您上次点击的时间,并询问“是否大于N(秒)?”其中N是设置面板上的
每最多检查文件
的值。它还会检查当前时间是否在检查文件之间的
指定的值之间。 - 如果是这样,它会获取您在
每次检查此许多文件
中指定的文件,测试它们并重置计时器。它会记录已完成的文件列表的进度,并在下次运行时从上次停止的地方继续。 - 如果N的值尚未达到,它将不执行任何操作,从而节省宝贵的处理器周期
如果您不断使用行政端并生成插件运行的点击,那么这一切都很棒。但一旦您将网站转交给您的客户,他们可能不会像您那样经常使用行政端——如果根本不用。因此,您的文件很少/永远不会被检查。为了解决这个问题,您可以要求插件响应公共端点击,这样每当访客(或机器人)爬取您的页面时,插件就会运行,检查超时是否已超过,如果是这样,它就会检查一些文件并重置计时器(就像在行政端上做的那样)。
这将把处理负载推到您的公共网站上,但由于它最多每N秒运行一次,并且您可以指定每次读取多少个文件以及什么时间,因此您可以通过匹配您希望“立即”知道某些东西已更改的愿望与网站的流量/访客量以及您希望延迟他们浏览的频率来控制其影响。
能够指定超时、一天中的时间和文件数量是一件好事,因为您可以确定插件是“小而频繁”运行还是在不那么频繁或淡季运行时占用更多资源。建议运行得相对频繁——10到60秒之间是好的——并且每次只处理少量文件,比如每次20或30个。
例如,如果您使用10秒的超时来监控一个标准的Tpx安装中的所有文件,并且每次检查30个文件,那么——假设您每分钟至少有五个点击——您将在一分钟内完成它们的循环。您的访客可能不会注意到延迟。如果您每分钟点击次数少于五个,那么循环文件将需要更长的时间,并且捕捉到更改的可能性会降低。但是,如果您运行得太频繁(比如,每1到2秒一次),您就会浪费访客的时间,服务器的资源,并增加插件错误通知您更改的可能性(下一个发生时,它可能仍在进行前一个运行并触发一个警告,表明某些东西不正确)。
插件编写得尽可能快和高效,以避免任何延迟;当然,当然还有改进的空间!请注意,没有任何检测系统是万无一失的,没有替代品比警觉性和好密码更好 :-)
监控文件
点击“文件”按钮将带您到一个带有textarea的屏幕,您可以在其中选择要监控的文件。顶部显示了当前监控文件的数量,以及您选择的文件位置中的文件数量。以下文件将出现在列表中
- 您在设置屏幕中指定的所有
文件位置
中的所有子目录中的所有文件 - 除了您选择的任何要排除的目录下的文件
- 除了您明确选择忽略的任何文件名
- 除了预测校验和文件
一开始,没有文件被选中,所以您将监控不到任何内容。选择您想要监控的文件,并保存更改。插件将跟踪这些文件。
如果您选择监控文件系统中的新增内容,那么在您点击“保存”时,不在列表中的任何文件(无论您是否正在监控它们)都将触发警报。您可以试一试:向您的服务器添加一些文件或安装一个新的主题或类似的内容,插件将通知您。
确认警报
如果一个或多个文件已更改、被删除或添加了新文件(取决于您选择的要监控的操作),那么在收到下一个管理或公共侧点击并超过超时周期时,插件将检测到这一点。然后,它将采取您选择的操作。请注意,如果您未登录,则不会看到管理侧警告!
发送给您的消息包含一个链接到确认页面(您也可以通过从预测面板点击 警报 按钮来访问此页面)。您将看到一个所有文件系统变更的列表。如果您了解这些变更——例如,您通过上传新版本文件启动了它们——则可以在知道包含合法变更的文件旁边放置勾选标记。当您从列表下方的下拉菜单中选择 确认 时,您向插件表明您接受这些变更。因此,新的文件成为基线。
如果您正在监控文件系统的添加,确认警报的行为表示您希望监控新文件。它们将自动添加到要监控的文件列表中(您可以通过访问预测面板的 文件 列表来验证这一点)。如果您了解一些文件(可能是新添加的)并且不想监控它们,请选择文件并选择 忽略。警报将被确认,但您不会监控这些文件。
如果您选择不确认/忽略某些或所有文件,您将根据指定的警报频率继续被提醒,直到您确认问题或将文件系统修复到原始状态。请记住,在配置频率时,过于频繁的警报可能会疏远用户,并使警报情况效果降低。
法医
在确认警报之前,您可以选择将法医信息发送到指定的电子邮件地址。以下信息将被发送
- 关于每个已更改/添加的文件的信息,例如其大小、修改时间以及用户/组所有权
- 文件的内容,以 BASE64 编码在电子邮件正文中
- 任何已删除文件的名称和路径
- 警报条件两侧发生的任何 Textpattern 日志条目(必须在您的 管理 → 预设 中启用日志记录)
您可以通过复选框选择要发送的文件信息。在法医信息发送后,您选择的选项将保留以方便您立即 确认 已通知的。
建议
点击 建议 按钮将运行一系列检查,并提供有关如何加固您的安装的建议。最重要的是,如果您收到有关预测校验和文件位于 docroot 的警告,强烈建议将其移至非 Web 可访问的位置。
回调
插件有自己的回调,允许您执行自定义的 SQL 注入测试。通过在 smd_frognostics
事件和 sql_injection
步骤上触发回调将您自己的代码挂钩到其中。如果启用 防止 SQL 注入
,则此回调在每个页面访问时都会触发。
您的代码可以返回
- -1 以断言“没有检测到任何注入,并且不运行插件的 SQL 检查”
- 0 以断言“没有检测到注入但运行插件检查”
- 1 以断言“检测到注入”(插件检查被绕过)
在任何情况下,如果启用了选项,插件将继续处理法医证据和 HTTP 重定向。如果您希望插件终止,请使用 exit()
或 txp_die()
脱出。
多站点设置
如果您正在使用 Textpattern 的多站点功能,还有一些其他事项需要注意
- 您应该在您希望保护的所有域名上设置 smd_prognostics,以避免将所有检查都加载到一个域名上。
- 选择一个域名作为“主域名”,该域名将监控 Textpattern 核心文件。
- 考虑将所有域名移出 docroot 的
/sites
文件夹。 - 确保您使用一个
唯一前缀
,否则您的校验和文件将发生冲突,导致异常行为。推荐的方法是使用预测文件夹
设置,将所有校验和文件移动到中央位置——在docroot之外——并为所有域名使用相同的目录。然后唯一前缀
将区分它们。 - 可能
管理端URL
是错误的:您可能需要为每个域名更改此设置。
帮助改进插件
如果smd_prognostics检测到您的文件系统中存在一些恶意元素,请考虑尽可能多地提供信息,并将取证信息发送到prognostics [at] stefdawson [dot] com。您可以从插件内部自动执行此操作(请参阅设置页面,但请注意发送的数据的一些敏感性)或复制并粘贴相关信息到电子邮件中。可能有用的信息包括
- 攻击发生时的Textpattern(和/或服务器)日志。
- 受影响的文件行(或整个文件)。
- 文件中添加或更改的任何附加行的内容。
- 您的Textpattern、PHP、MySQL和Apache版本。
- 您的托管公司名称。
等等。当然,所有信息都将受到严格的保密。分析这些数据可能允许我改进插件,也许可以关闭Textpattern本身的安全漏洞,甚至可以帮助插件更加主动,检测正在进行的各种攻击类型,并最小化对您文件系统的损害。感谢您的帮助。
作者 / 信用
由Stef Dawson编写。感谢Kevin Potts和Steve Dickinson进行beta测试和功能增强。还要感谢Hugo Sousa提供的phProtector类。