记一次公司服务器被当肉鸡的经历
-
事故起因
- 2023年4月21日晚上运维在群里说生产服务器磁盘满了(此刻还不知道问题严重性),群里后端和运维商量了一下,将文件迁移到比较大磁盘下,然后没分析原因就将此事搁置了。
- 第二天,2023年4月22日,公司技术群里说阿里云拦截到了其他域名对我们服务器的请求,拦截的域名疑似色情网站,这时候我们才明白了,我们的服务器是被当做别人资源服务器了。
- 对方大体的做法如下,为下面书写方便这里就把这个人称为水果哥吧:
- 发现了商场小程序接口 /base/update/feedback/ 游客可以访问,可以上传数据。ps:这个接口本意是用于给使用小程序的人可以反馈一些意见;
- 然后开始测试我们这个服务器的接口上传格式验证,如大小限制,文件名格式等,然后就开始写入文件。
- 然后利用原本的这个接口返回数据格式,知道访问上传资源的url大致的拼接格式;
- 然后在GitHub,建立一个项目,里面放html页面,html页面写入一个video播放器,src路径引入取回资源,GitHub.io可以发布静态页面的功能,就可以当做一个web视频网站在网上分发;
-
事故影响
- 从发现22日正式发现后,往回查历史,发现从16日0点开始,们资源服务器的请求数暴增,导致付费cdn服务被刷了很多流量,截止22日共6日共刷了3万元流量;
- 21日资源服务器磁盘被写满,导致21日晚到22日上午这段时间上传图片丢失,没记录到;
- 涉及停用的接口,修复期间内无法使用;
-
事故处理
- 对于接口 /base/update/feedback/ 立刻停止接口;
- 阿里云开启防盗链,添加白名单;
- 删除水果哥在服务器放的资源,避免一直非常高的请求。(这个删除后还一直能访问那些资源,才想起我们静态资源服务器cdn的也会有缓存,后面刷新了cnd后才无法访问那些资源);
- 排查所有base/update类似接口,评估安全性,不符合安全和不会影响主要业务都暂时停止;
- 我们静态资源使用的是阿里云的cdn,这个根据对之前的数据先限制了一个最高额度;
- 完善对这部分游客可以上传资源接口进行一个临时资源访问token验证,结合小程序登录验证提高安全性,并对该接口加入更加多信息的日志;
- 制定对后续上传接口改造计划,改为阿里云的oss上传,避免出现此次磁盘被突然塞满,其他上传接口都无法正常上传图片的情况;
-
总结
- 暴露了我们对服务器监控薄弱;
- 收费的服务记得限额控制损失;
- 清除资源记得如果cdn,cdn记得刷新;
- 服务器资源记得做多机,异地备份;
- 游客接口也需要做信息验证和次数限制与本人识别;