昨晚九点被拉回前公司,解决一个 php 网站被黑的问题。
现象
网站首页被篡改成了澳门特色网站。 从代码看,只有 index.php 文件被修改。确切地说是被完全覆盖了。
而且触发的时机也非常有趣,都是下午 5:31 分左右,在你正好下班的时候触发。。。
排查的思路
- 首先过了一遍线上变化的文件。没有发现问题。
- 然后在上传目录 grep 了包含 php 关键字的图片及其他格式的文件。抽查了几个,也没有问题。而且历史悠久,不太可能潜伏这么久。都没有发现问题。
因为同一个服务器上还有其他的网站也被同样篡改了。怀疑是另一个项目里有恶意代码,然后扫全盘,修改 index.php。但这也是一个猜测,需要验证。
我觉得应该有现成的服务端监测工具,自动扫描发现这种恶意脚本,毕竟都是特征明显的代码。 即便没有,自己写一个也许会有市场。
漏洞的源头
还是没找到,不知道具体是怎么入侵进来的。从前同事描述看,代码很像之前利用图像上传漏洞远程执行 php 代码。
于是,首先要做的是防止代码文件修改再次发生。
预防措施一
将 index.php 设置成只读。使用命令。
chattr +i /data/financial.txt
生效之后,即便 root 用户也无法修改,删除,覆盖。
预防措施二
早上拉屎时想到的,另一个解决方案,就是开启 php fpm opcache,这个开启了,即使 php 文件被修改了,只要没有执行 fpm reload 就不会导致新代码被启用。
日志问题
由于网站针对海外用户,开启了 cloudflare cdn。导致日志里存的请求 ip 都是 cdn 节点的 ip,即便发现了异常 ip 也无法封禁。还是得记录源 ip。
使用 golang 写服务,或网站还是有优势
不用担心代码被修改。而且版本升级方便,不至于像 php 这种,远古项目依赖版本过低,升级工作量巨大,没人敢升级。
太晚了,已经12点了,身体重要,回家睡觉。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式