我已经更新了,接下来该做什么?
如果您在收到我发出的某份安全通知之后更新了插件或您的 CMS,那很好。这是最重要的一步,对许多站点来说,也是唯一需要做的一步。
更新会从此刻起堵上这个漏洞,但它无法告诉您,在您堵上它之前是否已经有人发现了它。 本页面是一份实用的自查清单,大约需要 30 分钟,帮助您自己回答那个问题。它是为没有安全背景、 也没有安全预算的站点所有者而写的。这是通用的指导建议,而不是针对您站点的具体结论: 从外部我只能看到一个站点报告的软件版本号,除此之外一无所知。
第 1 步:弄清楚这个缺陷实际能做什么
并不是每个漏洞都需要同样的应对力度。请在安全通知页面上 找到您收到的那份通知,看看它属于哪一类(每个通知页面都会在靠近顶部的位置说明这一点):
- 账户接管或代码执行(攻击者可能获得管理员权限或运行他们自己的代码): 请完整走一遍下面的清单。
- 数据读取(攻击者可能读取您数据库中的信息,但无法更改您的站点): 重点关注第 2 步和第 5 步。这里的问题是当时存储了哪些数据,而不是您的站点是否被改动过。
- 影响范围较窄的问题(需要特定配置才能触发的缺陷,或只能影响后台管理页面的缺陷): 您所用组件对应的通知页面会说明有哪些内容值得检查(如果有的话)。通常仅仅更新就已经足够。
第 2 步:确定您的暴露时间窗口
有两个日期界定了真正需要关注的时间段:
- 漏洞在您站点上出现的时间。 通常就是您安装受影响版本的那一天。如果您不知道具体日期, 通知中提到的 CVE 通告(可从每个通知页面链接进入)上的日期是一个合理的替代参考: 从公开发布那天起,攻击者也同样知道了这个问题。
- 您完成更新的时间。 也就是您堵上漏洞的那一天。
下面的全部内容都围绕这个时间窗口展开。如果窗口很短,比如您在通告发布后一两天内就完成了更新, 那么风险真实存在但很小。如果窗口长达数月,就请认真对待这份清单。
第 3 步:检查谁可以访问您的站点
成功入侵的攻击者几乎总会给自己留一条重新进入的路。请按以下顺序检查:
- 管理员账户。 在 WordPress 中:进入 Users,然后按 Administrator 筛选。 在 Joomla 中:进入 Users,然后打开 User Manager。留意任何不是您创建的账户。 注意: 有些缺陷(例如 Simple Membership 的那个)允许攻击者接管一个已有的账户, 而不是新建一个,所以仅凭这一项检查什么也证明不了。这正是为什么即便用户列表看起来正常, 第 4 步中的凭据更换依然重要。
- 最近新增的插件、主题或扩展,尤其是不是您安装的那些。
- 计划任务(在 WordPress 中,WP Crontrol 插件可以列出它们; 很多后门会通过计划任务重新安装自己)。
- 应用程序密码(WordPress:Users,Profile,Application Passwords), 这是一种在密码重置之后仍能悄悄保留 API 访问权限的方式。
第 4 步:更换凭据
如果您收到的通知属于账户接管或代码执行这一类,并且暴露窗口超过了几天, 那么即使第 3 步没有发现任何异常,也请更换凭据:
- 所有管理员账户的密码。
wp-config.php中的密钥和 salt 值(WordPress)。这会让所有人退出登录, 包括任何持有被窃取会话的攻击者; 官方生成器可以提供全新的值。 在 Joomla 上,对应的是configuration.php中的$secret值。- 您的主机控制面板以及 FTP/SFTP 密码,如果它们与他人共用或者已经用了很久。
这只需要十分钟,无论是否真的发生过入侵,它都能堵住被窃取的会话和被破解的密码哈希这两条路。
第 5 步:扫描并检查文件
- 如果控制面板提供主机服务商的恶意软件扫描功能(大多数共享主机都有),请运行一次, 或者使用一款可靠的免费扫描工具。对于 WordPress,Wordfence 的免费扫描会把您的文件 与官方版本进行比对。
- 查看暴露窗口起点前后以及之后最近被修改过的文件,特别是上传目录中的 PHP 文件。 那些目录里基本上永远不应该出现 PHP 文件。
- 如果您的主机保留了访问日志,请大致浏览这段窗口内是否有来自您不认识的地址、 指向那个存在漏洞的组件的请求。在这里,没有发现证据说明不了太多(因为日志会轮转覆盖), 但一旦发现命中,那就是决定性的。
如果自查发现了问题
先不要删除任何东西。请先做一次完整备份,包括文件和数据库, 这样无论发生过什么,之后都还能被检查。然后,按成本从低到高:
- 您的主机服务商。 大多数服务商提供恶意软件清理服务,至少也会确认他们自己的扫描器 发现了什么。对大多数小型站点来说,这是最合适的第一通电话。
- 专业人士。 如果站点涉及客户数据或支付,或者扫描发现了后门, 那么花钱请人查清楚哪些数据被访问过是值得的;许多地区的数据保护法规正是以这个答案为准。
- 总是有效的终极手段: 从早于暴露窗口的备份中恢复,或者从官方渠道重新安装 CMS 和插件, 只保留您自己的内容。然后完成上面提到的更新和凭据更换。
如果您不确定自己看到的是什么情况,也可以直接回复那封通知邮件。我会阅读每一封回复, 而为别人指明正确的方向,本来就是我发送这些通知的原因之一。我并不在推销清理服务, 本页面也不是推销广告;请参见披露政策。
如果在我的邮件到达之前您就已经更新了
同样的逻辑依然适用:这份通知意味着您的站点在不久前曾报告过一个受影响的版本, 所以即便这个窗口现在已经关闭,它当时确实存在过。第 2 步到第 4 步仍然能回答那个真正重要的问题。