事件的起因是这样的:
先前我的云服务器托管在腾讯云,在服务器上搭建了几个站点,包括我的博客、图床网站,前几天发现服务器无法ping通,登录腾讯云发现服务器被封禁了,原因是存在违法违规内容,随后提交工单咨询,客服回复是因为我的服务器搭建了博彩平台,无法解封,这时候我很纳闷,我的服务器一直都只有几个简单的网站啊,什么时候搭建博彩平台了,但是由于无法登录服务器我也没办法排查原因。好在数据还能追回来,我把之前的轻量应用服务器制作成了镜像,然后共享镜像再创建新的临时云服务器,随后在阿里买了一台新的云服务器(阿里有活动),将原来的数据通过宝塔迁移到阿里的服务器。
然后访问我的博客发现,原来是博客被人挂了iframe,导致我的博科进去就是一个博彩网站的推广(诈骗)页,这时候我考虑是遭到域名劫持了,但是往下滑还是我的博客页面,审查元素发现是被置顶了一个iframe,并且响应IP还是我的服务器IP,所以也就pass了域名劫持的可能性。
然后考虑可能是XSS注入,由于我之前给博客添加了首页弹幕的功能,并且开放发送弹幕的表单,这里可能存在XSS注入点,然后我去弹幕数据表中查看一番也没有找到相关的XSS代码,所以这个基本上也不是攻击原因。
由于我的博客是WordPress搭建的,所以我考虑更换一套主题,但是当我更换主题、清除缓存之后,仍然是先前的页面,这时候我有点迷了,我之前到主题目录中查看过相关2文件也没有被纂改。后来我查看了一下根目录的index.php文件才发现,原来是index.php文件被纂改了,所以导致内容没有被更新,一直是这个静态网页,将index.php更换回wordpress原来的内容这个问题就解决了。
但是攻击的来源还是没有查到。
审查一下网站日志,发现一连串可疑的请求:
这里把文件执行、SQL注入、XSS注入都集齐了,看来大概是这里的原因了,注意到这里使用了eval()和create_function函数,这两个函数是PHP中极其容易被利用的文件执行函数,看一下我的配置项:
发现exec、eval和craete_function这三个禁用函数之前都被我删除了,我真是个大聪明。
把这几个函数禁用了。
然后还有SQL注入的攻击,不过看了一下数据库似乎注入没有成功,这里他找到的注入点是我之前把文件解压错了把thinkphp的一部分源码解压到了这个站点根目录,现在已经全部删除了。
查了一下IP归属是香港的IP,估计是挂了代理,这个溯源就有点难了,查询iframe站点对应的服务器也是香港的,域名是一家国外小服务商注册的,whois也查不到有效信息,只能作罢。
接下来再优化一下服务器安全配置,由于现在服务器换到阿里云去了,先在阿里云控制台优化一下安全配置。
之前为了图省事把安全组全部放行了,现在优化一下策略,只放行常用的端口:
启用一键报警:
这里主要监控系统负载指标,接收到报警及时做出应急响应。
(按照之前的经验,对于DDOS攻击或者其他针对公网IP的攻击,可以临时申请一块弹性网卡绑定新的公网IP,并且解除挂载先前的公网IP,更换域名解析,使用CDN隐藏源IP来解除攻击。)
考虑到默认的22端口不够安全,所以将其更改为42061端口作为系统SSH端口。
编辑:
/etc/sshd/sshd_config
将:
#Port 22
更改为:
Port 42061
重启sshd服务:
systemctl restart sshd
同时防止弱口令和爆破登录,在配置文件中禁用密码登录,只允许使用公钥登录:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
同样重启sshd服务即可。
接下来修改Nginx配置文件,只允许GET|POST 方法:
if ( $request_method !~ "^(GET|POST)$" ){
return 444;
}
为了防止PHP报错信息的输出暴露出敏感信息,禁用错误详细显示:
;display_error
Comments NOTHING