很多人察觉服务器异常,大多是网站打不开或者访问速度极慢,这时才意识到可能遭遇攻击。但攻击不会凭空出现,背后都有诱因。一部分是自身配置留下漏洞,另一部分是攻击者大范围扫描,刚好命中你的服务器。
流量类攻击最为普遍,简单说就是大量机器同时向服务器发送请求,占满带宽,正常用户无法接入。这类就是DDoS,攻击门槛很低,网上甚至有按小时售卖的攻击服务,几十元就能让小型网站瘫痪半天。还有一类更隐蔽的CC攻击,专门针对动态页面,搜索框、登录接口都是目标,每一次请求都会查询数据库、执行业务逻辑,短时间耗尽CPU资源、数据库连接池。CC攻击流量看着不大,但破坏效果很强。

漏洞是第二个主要入侵入口。大量网站基于开源程序搭建,WordPress、ThinkPHP、Discuz,程序本体或者插件经常爆出安全漏洞。没有及时更新补丁,攻击者使用扫描器探测,匹配版本号就能直接利用漏洞。SQL注入、文件上传、远程代码执行,听着专业,本质就是程序没有校验用户输入内容,恶意代码成功注入,服务器被攻击者接管。不少漏洞几年前就公开,补丁早已发布,没有升级更新,相当于大门敞开。
弱密码问题每年反复提醒,依旧不断有人踩坑。服务器SSH密码设置123456,数据库root密码和用户名一致,后台管理密码admin888。攻击者准备海量密码字典,批量尝试,几分钟就能爆破成功。Redis、MongoDB这类服务,默认安装没有设置密码,直接监听公网端口。一旦被扫描命中,数据清空、索要赎金,服务器还会被用来挖矿。收到云厂商告警邮件的时候,机器可能已经持续挖矿多日。
配置错误属于自己制造安全隐患。测试目录忘记删除,里面存放phpinfo、数据库连接文件;网站根目录存放备份压缩包,文件名www.zip,直接被下载;云存储桶权限设置公开,用户上传身份证照片任何人都能查看。这类情况不是被攻破,而是敏感资源直接暴露在公网。防火墙规则配置颠倒,本应拦截端口改为放行,IP访问限制全部放开。故障复盘的时候,会发现问题简单到后悔。
供应链安全问题这几年越来越突出。你的网站本身没有漏洞,但引入的第三方JS库、CDN、统计脚本、客服插件,任意一环被入侵,恶意代码就会加载到你的页面。之前有npm包作者修改代码植入挖矿脚本,数千网站受到牵连。还有支付接口被劫持,用户付款资金转入攻击者账户。排查自身服务器很久,最后才发现外部引用资源存在问题。
内部人员也是风险来源。离职开发人员保留服务器密码,在职员工不小心把包含数据库凭证的代码提交到公开GitHub仓库。攻击者有专门工具检索GitHub仓库,抓取AK、SK、数据库密码,拿到凭据直接使用。外包团队做完项目预留后门,方便后续维护,后门一旦被第三方发现,服务器就会失守。
另外要说明,很多攻击不是定向针对你,属于全网随机扫描。互联网每天大量自动化脚本扫描IP段,寻找开放端口、已知漏洞、默认口令。服务器只要接入公网,就会被扫描探测。没有打补丁、防火墙未配置、默认密码没有修改,等同于裸奔。攻击者甚至不知道站点归属,单纯批量扫描,找到可入侵主机就标记,后续用来发送垃圾邮件、挖矿,或者转手出售流量资源。
还有一类针对性攻击,业务本身容易引来攻击。电商站点可能遭遇竞品攻击,游戏站点会遇到玩家封号后的报复,金融相关业务数据本身价值高。这类场景攻击者愿意投入成本,研究架构寻找弱点,单纯基础防护不够,需要定制防护策略。
最棘手的一点,很多攻击发生之后很难察觉。服务器充当垃圾邮件发送节点、代理跳板、植入后门,网站表面访问完全正常。等到发现问题,可能已经过去几周甚至数月。缺少日志、监控、告警,故障之后只能猜测原因。与其等到服务器瘫痪紧急处理,不如日常做好漏洞修复、关闭无用端口、定期查看日志。攻击诱因多种多样,但绝大多数入侵入口就这几类,能封堵一处就降低一分风险。