先说一个很多人都经历过的场景:某天早上打开自己的站,首页正常、后台能登、速度也没变,一切正常。几天后收到一封邮件,说页面在搜索结果里被标了「此网站可能被入侵」,或者有访问者反馈被跳转到了一个莫名其妙的站。
网站被动手脚,最麻烦的从来不是修复,是发现。攻击者通常会留一个很不起眼的入口,悄悄用你的站做跳转站、发垃圾外链或者当跳板,而站本身照常打开——所有「还能访问」的监控都是绿的。
这篇讲怎么让 OpenClaw 每天做一次网站安全巡检。它和站内两篇相邻内容的分工要先讲清楚:OpenClaw 监控服务器 管的是「机器活得好不好」——CPU、内存、磁盘、端口和服务可用性;OpenClaw 安全使用完全指南 管的是「配置做得对不对」——事前加固与权限收口。这一篇管第三件事:机器活着、配置也没动过,但有没有人动过你的文件和账号。三件事互补,谁都替代不了谁。
一、巡检五项:不查全,但要查得准
市面上的安全扫描工具动辄报几百条,其中九成是噪音,用不了两周就没人看了。所以这套巡检的第一原则是宁可漏报,不可虚报。下面五项,每一项只问一个具体问题。
1. 文件完整性:有没有不该出现的文件
问题定义得很简单:今天和昨天比,多了什么、改了什么。具体检查四类:
- 新增的可执行文件:网页目录里新出现的 .php、.phtml、.jsp、.cgi——尤其是上传目录、缓存目录、图片目录里出现的。
- 被修改的核心文件:主题的 functions.php、入口文件、配置文件、.htaccess。这些文件平时几乎不会变,一变就该问为什么。
- 伪装文件:扩展名是 .jpg 但开头不是图片头字节、文件名带多个扩展名(logo.jpg.php)、文件名里混进特殊字符或超长随机串。
- 时间戳异常:创建时间和修改时间不一致、大量文件在同一分钟被改动。
要点是必须有基线。没有昨天的哈希表,「今天多了什么」这个问题根本没法回答。基线建立之后,每天只输出差异,不输出全量清单——这是让日报能被人读完的关键。
2. 后门特征:用关键词+结构双重过滤
单靠关键词会误报满天飞,比如一个正常插件里就有 base64_decode。所以要用两层:先匹配可疑特征,再看上下文结构。
第一层,常见可疑特征:eval、assert、base64_decode、gzinflate、str_rot13、preg_replace 带 /e、create_function、shell_exec、passthru、file_put_contents 配合外部变量、$_REQUEST/$_POST 直接拼进执行函数。
第二层,结构特征(这些才是真正的判据):一段超长的单行混淆字符串、变量名无意义但结构高度规律、文件很小但塞进了完整执行链、注释里带版权信息却和文件行为不符。命中第一层又命中第二层的,才是高危。
另外别忘了三处容易被忽略的地方:隐藏的 .htaccess 改写(把所有请求挂到一个文件上)、图片目录里的可执行文件、以及数据库里的模板表(内容型后门最喜欢藏在这里)。
单个文件怎么判断是不是后门,思路和站内 OpenClaw 日志怎么看、报错怎么排查 里的分层定位法一致:先看它从哪来,再看它动了什么。
3. 页面与数据库:看用户能看到什么
文件层面可能干净,但内容层面已经被改。这一项检查的是「呈现出去的东西」:
- 首页和文章页里新增的外链
<script>、<iframe>、跳转 JS、base64 编码的脚本串。 - 移动端判断(如
user_agent是手机就跳转到陌生域名)——这是最阴的一种,站长本人在电脑上永远看不到。 - 数据库里的可疑项:新增的管理员账号、被改动的站点地址、无主插件注入的内容表、autoload 里体积异常大的选项。
- 站点地图和 robots.txt 被改(常见做法是屏蔽搜索引擎对自己的巡检,或往 sitemap 里塞垃圾链接)。
这一项建议让 Agent 每天抓固定几个页面做 diff,而不是抓全站——首页、一个栏目页、一篇文章页、robots.txt,四个页面就够了。
4. 账号与登录:谁进来了
这一项关注的是访问控制有没有被绕过:
- 登录失败次数:同一 IP 或同一账号在短时间内的失败次数,超过阈值单独提示。持续的高频失败本身就是信号,哪怕没成功。
- 成功登录的异常特征:非工作时段、陌生 IP、新设备、同一账号多地同时在线。
- 账号变动:新出现的账号、权限被提升的账号、头像或邮箱被改的账号。
- 接口放大:旧接口(如部分建站系统的 xmlrpc)被用于批量猜密码,请求量会明显异常。
这一项的告警必须实时,不能等第二天日报。其他四项可以日结,登录异常建议单独做一条即时通知。
5. 异常外联与进程:机器在跟谁说话
前面四项都是「站内看站内」,这一项换个视角:看你的服务器主动连出去的是谁。被控的机器通常会和固定几个外部地址保持连接,用于收指令或传数据。
检查方式:按天统计出站连接的域名与 IP,和基线比对;新增的、非常见端口(如 4444、5555、8888 这类)、指向陌生国家或云服务商的连接,单独标出来。同时看一眼计划任务(cron)里有没有新增条目、有没有被写入到系统临时目录里的可执行文件。
这项噪音相对大(正常业务也会连很多外部服务),所以一定要先做一段时间只观察不告警的基线期,否则第一天就会把日报淹没。
二、怎么做到「只在出事时打扰你」
巡检系统最容易死在噪音上。要让它活得久,得做三件事。
第一,建基线,并且基线要被审。第一次运行必然全是「新增」,把当天的结果人工过一遍,把正常项加进白名单,之后只报差异。白名单本身也要定期复查——攻击者最喜欢做的事,就是慢慢地把自己加进白名单。
第二,按风险分级,只让高危穿透到人。建议分三级:高危(新增可执行文件、核心文件被改、新管理员账号、异常外联)立即通知;中危(文件被修改但属可解释范围、登录失败激增)进当日简报;低危(文件新增但内容明显正常)只记录不通知。这个分级思路和站内 AI Agent 异常分级怎么做 是同一套逻辑:分级的目的不是分类,是分配人的注意力。
第三,每条发现都必须带证据。格式固定:文件路径、行号、命中的特征、原文片段(截断到两百字以内)、首次发现时间、是否在基线中。没有证据的告警等于没有告警——你还是要自己去翻一遍。留证据的整体做法可以参考站内 AI Agent 证据包怎么留。
三、发现之后:处置顺序比处置动作更重要
这是最容易被搞砸的一步。很多人一看到后门就直接删文件,结果第二天又活了——因为入口还在。正确顺序是:
- 先隔离,先别删。把可疑文件改名或移出网页目录(保留内容和时间戳),记下修改时间。保留原件是为了回溯:从它反推入口、反推被改了什么。
- 从日志反查入口窗口。以可疑文件的创建时间为锚点,往前推一段时间看访问日志、登录日志和文件修改记录,找出攻击者进来的那条路。这一步不做,后面全是反复。
- 按顺序清理:入口 → 后门 → 被篡改的内容 → 新增账号 → 计划任务。顺序错了就得返工。
- 改凭证,并且是全部。被入侵过一遍的机器上,所有密码、密钥、令牌都要视为已泄露。这一步不能省,也不能只改其中一个。相关做法可参考站内 OpenClaw 权限与凭证管理。
- 重设基线。清理完成后重新采集一次文件哈希基线,否则接下来一周的日报全是误报。
- 补一道防线。入口是怎么被打穿的,就补哪里——弱口令、过期插件、公网暴露的管理后台,都是常见入口。系统性梳理可以参考站内 生产级 Agent 的七道安全防线。
四、三条必须守住的边界
边界一:默认只读。巡检任务不给写权限,发现问题的动作是「报告」,不是「自动清理」。自动删文件在误报时会直接搞出故障,代价远大于多留一天后门。要自动化,也只在「隔离到隔离区」这一个动作上自动化,且必须记日志。
边界二:别在业务高峰扫全站。全量哈希和逐文件读取会消耗 IO,几十万文件的站更是明显。把全量扫描排在凌晨,日常只做增量。
边界三:巡检凭证本身要最小化。只读账号、只读密钥、单独的网络出口。巡检 Agent 持有的凭证如果权限过大,它自己就成了新的风险点——站内 AI Agent 权限管理 讲的正是这件事。
五、优缺点和适合人群
优点:把「发现」从运气变成流程;日报只报差异,可长期坚持;所有结论带证据,便于追溯;处置顺序固定,避免清理一半又复发。
缺点:基线建立期必然有一轮噪音;特征库需要跟着新型后门更新,长期看是个维护活;内容型后门(只藏在数据库里)比文件型更难自动判断,命中后仍需人工确认;它替代不了操作系统级的入侵检测,主要覆盖的是网页层。
适合谁:自建站点的站长、独立开发者、运维资源有限但有公网站点的团队。凡是「站点还能打开所以一直没发现问题」的场景都值得做。
不适合谁:站点在托管平台上、平台已经承担安全责任的情况——边界要划清,重复劳动意义不大;以及完全没有日志和文件权限的场景,先解决可观测性再谈巡检。
总结
- 定位:这篇讲的是「机器活着但被人动过」这一类问题,与资源监控、事前加固三方互补。
- 五项检查:文件完整性、后门特征、页面与数据库、账号与登录、异常外联与进程。
- 防噪音三招:建基线并定期审白名单、按高危/中危/低危分级只让高危穿透、每条发现必须带证据。
- 处置顺序:隔离不删 → 反查入口 → 按序清理 → 全量改凭证 → 重设基线 → 补防线。
- 三条边界:默认只读、避开高峰、巡检凭证最小权限。
最后一句:安全这件事,能每天发现一点小异常,比每年做一次大扫除有用得多。后门不怕被找到,怕的是半年后才发现。
0 条评论