一、先想明白:备份防的不是硬盘坏,是"整片被端"
很多人做备份的动机还停留在"服务器别挂"。但勒索场景下,攻击者拿到权限后会先找备份、删备份、加密备份,再加密业务数据。如果你的备份文件就躺在网站根目录旁边,或者和网站用同一个数据库账号,那它跟没备差不多。所以第一条原则:备份的存放位置,必须和网站的运行环境在权限上隔开,网站被攻破时攻击者碰不到备份。
1、备什么。网站程序与静态资源文件(源码、模板、样式、图片、上传附件)和完整数据库,两样都要。只备文件不备库,恢复出来是个空壳;只备库不备文件,程序被改过的地方还在。数据库建议每天单独导出一份sql文件,和网站程序分开存放,导出时尽量保证数据快照一致。服务器配置、域名证书、环境参数这类配置文件容易被忽略,单独拎出来加密存放更稳妥,缺少配置信息会拉长恢复和上线时间。
2、备几份、放多久。一天一备是底线,保留最近七到三十天的版本比较实用。勒索软件有时会潜伏几天才发作,如果只留最新一份,可能那份已经被污染了。可以设置策略:保留最近7天的每日备份,再单独留存每周、每月的归档包,既控制存储开销,又保留长期回退点。
二、一天一备怎么落地,别搞复杂
频率提上来了,最怕的是人工操作跟不上。靠人记着每天点一下,迟早会断。
1、用定时任务自动化。服务器上的计划任务每天在低访问时段固定时间跑脚本:导出数据库、打包网站目录、按日期命名、压缩加密,然后推送到备份位置。脚本里加一行日志记录,哪天失败了能看出来,不至于以为一直在备、其实早停了。打包完成后先做基础校验,确认文件没有损坏再传输,不要直接覆盖旧备份。
2、备份文件加密再传。压缩包设密码,传输走加密通道。备份里往往包含用户数据和配置信息,明文放着等于多开一个泄露口子。备份传输用的账号密码不要和网站后台密码一样,最好用密钥登录,避免被撞库连带攻破。
3、定期验证,别只看"任务成功"。脚本跑完显示成功,不代表文件能用。每隔一段时间挑一个备份包,实际解压、导入、在测试环境里跑一遍。一份从来没有试过恢复的备份,可靠性是存疑的,恢复流程没演练过,真出事时手忙脚乱的概率很高。
三、异地备:让备份活在攻击者够不着的地方
"异地"不一定是另一个城市,关键是不同的账号、不同的存储位置、不同的访问凭据。同一个服务商、同一个账号下的两个目录,攻破一次就一锅端,算不上异地。
1、物理位置分开。网站跑在一台服务器上,备份推到另一台不同网络环境的机器,或者对象存储里。可以租一台低配服务器专门存备份,这台机器不跑任何网站服务,只做存储,也不要在 互联网上开放多余端口。。两边不要共用同一套登录密码,最好连管理员账号都不重名。另外,备份目录不要放在网站根目录下,更不能设777权限,否则攻击者通过浏览器就能下载你的备份包。
2、考虑不可变备份。一些存储支持"写入后一段时间内不可删除、不可修改"的模式,开启之后,即使攻击者拿到了推送备份的凭据,也没法把历史版本清掉,对勒索防护来说是很实用的一层保险。异地目录里至少保留最近三天的版本,防止唯一一份备份正好是脏数据。
3、离线副本留一手。定期把一份完整备份下载到本地移动硬盘,用完拔掉。离线的东西没有网络入口,勒索软件再厉害也够不着。频率不用高,一周或一月一次都行,作为最后的兜底。
四、真被勒索了,恢复时注意别把木马请回来
有备份不等于能安全恢复。攻击者常常在系统里留后门,你从备份还原业务数据,如果不先清理环境,等于给人家重新开门。
1、先隔离、再排查。发现被加密后,立刻断开受感染机器的网络、关站,保留现场,不要向攻击者支付赎金——赎金支付并不能保证解密成功,还会助长黑产。别急着重装,先搞清楚入口在哪,是弱口令、过期插件还是钓鱼邮件,不堵住入口,恢复了还会再中。
2、重建环境,只恢复数据。比较稳妥的做法是新装一套干净的系统,打好补丁,再从备份里只取网站文件和数据库导入。不要把旧系统的程序目录整个覆盖回去,那里面可能藏着被植入的脚本。
3、恢复后改全部凭据。数据库密码、后台管理员密码、服务器登录密钥、接口密钥,全部换掉。攻击者拿到过的东西,默认已经泄露。
说到底,"一天一备+异地备"不是什么高深技术,难的是坚持和验证。一天一备控制丢失数据量,异地备隔离风险,备份这件事平时看不出价值,出事那天就是全部。把它做成自动的、隔开的、能恢复的,勒索软件找上门时,你才有底气不付那笔钱。