被攻击了!
鱼皮记者为您报道【网站被攻击现场】,伤害不大,侮辱性极强!
大家好,我是鱼皮。
前段时间,我的网站疑似被攻击了,今天带大家一起来事故现场看看,并且分享事故分析思路和事后防控手段。
孽起
先看看我是怎么发现网站被攻击的吧。
通常,为了保证线上网站和后台服务的稳定运行,我们需要给项目添加监控告警功能,出现意外情况时,系统会第一时间向管理员发送通知。
由于我的项目使用 腾讯云云开发
来部署,默认提供了额度监控和告警,可以防止资源消耗过多,非常方便。
![](https://filescdn.proginn.com/091115fb5dc2c5e71feaac7a2cf64e38/4ff663927ed26df6f480e7471b263776.webp)
但光有告警还不够,真出了问题,靠什么去分析呢?必须给故障排查提供一些线索。
腾讯云云开发默认为云函数、云托管等提供了监控和日志记录,一行代码都不用写,就能够看到资源的运行信息和详细日志,比如请求时间、IP 地址、请求头信息等,非常方便。
![](https://filescdn.proginn.com/b644e7e956d672c02f231e36b3bc5194/b98f99ef254e5eb01f496bf059f2313e.webp)
此外,我还在开发时,给服务添加了一些日志和数据上报,比如哪位用户在哪个时间执行了什么操作。记录的越详细,排查问题就越方便。当然,无意义的内容就不用记录了,否则看日志的时候密密麻麻的,伤眼又低效!
我一直把项目当成自己的孩子(虽然我还没有孩子),因此,我每天都会看一下监控和日志,来了解下 “孩子” 的身体状况。
![](https://filescdn.proginn.com/53b1afe6a6b37da0e74eb11f86e6bd25/16f9c35f9e71cb20fab83a448640a399.webp)
我最常看的监控指标是服务的 调用次数
,它很大程度上反映了用户流量的访问情况。
正常情况下,调用次数随时间的曲线图应该是下面这样的,夜里没人看,白天流量还算平稳,偶尔会有一些小高峰:
![](https://filescdn.proginn.com/9badbfaccf55fbc1312ecf33e1d6906d/6f092ce25a9686ee894f18f75a9b1cf1.webp)
但有一天,我突然看到了下面这个曲线图,大家看看这个曲线有什么特点?
![](https://filescdn.proginn.com/8bb2f425ae0410f15a79f2cfda8b6bb8/e011f7b1a77a3cb1d6ee37084c3d791c.webp)
没错,地中海上偏偏长了一根长毛!在 25 分附近,调用次数突然飙升,我们一般把这种现象称为 “流量突刺”,把监控图上这一枝独秀称为 “毛刺”。
大多数情况下,有毛刺可不是什么好事。看到这个曲线,我的第一反应不是 “卧槽,项目火了?”,而是 “卧槽,被攻击了!”
到底是不是被攻击了?是谁攻击我了呢?不会我真的火了吧(还带有一丝幻想)?
带着这些疑问,赶紧来分析一下。
分析
光看上面的曲线图,是分析不出来的,必须要从事故现场找找线索。
还好云开发帮我们记录了访问日志,选择事故发生的时间段(以 25 分钟为基准,前后各空 5 分钟),然后就筛选出了对应日志。
![](https://filescdn.proginn.com/ddcc5a78396e74e172f9e3bcdfdc8dfa/845dd9caa9938c06334a88366cff8624.webp)
为了更灵活地分析,我们将日志导出到本地,使用 Excel 等表格软件打开它。
![](https://filescdn.proginn.com/69ff45d8b901030243480f2c53fce0e1/7d161b47cb94a9a7cb19ab0a7c2fbac2.webp)
然后,我们来分析下日志,先看 日志生产时间
这列,即案发时间:
![](https://filescdn.proginn.com/93120c833b646f0f66bedb7f0458c669/0f23edac315788213fd7f1e9ca2fb85e.webp)
大家发现了么?日志生产时间非常均匀!每秒大概 3 - 4 条。
从这点就说明了,大概率不是人工访问服务,而是机器自动按照某个频率发送请求。
再看下日志的内容,每条日志的结构如下:
// 请求时间
2021-04-29T04:22:05.937752445Z
// 发起请求的 IP
stdout F 169.254.128.20
// 请求头
HEAD /webroot.bak HTTP/1.1\
// 响应状态码
200 0
// 请求地址
http://www.code-nav.cn/webroot.bak
// 请求浏览器身份
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
其中,请求时间、请求 IP、请求地址是关键信息。时间刚刚已经分析过了,再看看请求 IP 和地址。
我直接在表格中全局搜索上述 IP,发现所有的 IP 地址都是相同的!
![](https://filescdn.proginn.com/e6acbb134604c16c242d4278c3e021bc/0f87612360880e8d5aa6380db0777881.webp)
这下我松了口气,应该只是一个人在小打小闹吧。
然后我看了几条连续日志的请求地址,大概是这样:
http://www.code-nav.cn/111.gz
http://www.code-nav.cn/111.tar.bz2
http://www.code-nav.cn/111.dat
http://www.code-nav.cn/111.bz2
http://www.code-nav.cn/222.tgz
http://www.code-nav.cn/222.gz
http://www.code-nav.cn/333.zip
...
看到 "111"、"222"、"333" 我大致明白了,这位攻击者应该是在用字典枚举的方式扫描我的网站,企图找出网站的后台地址。
攻击的原理很简单,就根小时候我们尝试破解别人密码一样,一个一个疯狂乱试。只不过攻击者通常会使用一些网站扫描工具,将可能的密码作为一本字典,交给机器,代替人工来试而已。试的次数和频率高了,就被称为 “爆破”。
又回想起了大学时被网络安全课支配的恐惧。。。
![](https://filescdn.proginn.com/7941cc103e0bd84da6bba9ad23d43d29/0b15d1373cfb78530b03d131dc57c7e6.webp)
基于以上的分析,这位 “攻击者” 应该只是拿我的网站来练练手,毕竟扫描频率不高、持续时间不长,当然,我希望如此。
防控
这件事虽然伤害不大,侮辱性极强!让我充分意识到自己的网站在安全性上是缺斤少两的。最起码应该在异常流量出现的是否给我告警,发个短信啥的吧!
如果是自己搭建服务器来部署网站项目,需要自行接入或开发一个业务监控告警系统,虽然网上的这类第三方系统很多,比如 Zabbix、Prometheus(AlertManager)、Grafana 等,但都需要自己来部署和维护,需要一定的人力物力成本。
但使用腾讯云云开发,除了上面提到的基础资源额度告警外,还可以灵活自定义各种高级的告警策略。
比如给点赞功能添加调用次数限制告警,先选择告警对象为 “云函数”:
![](https://filescdn.proginn.com/9c4709c06c2b7354ac49bcb3bcffb9af/ff751ebfc8b4bb55472a9fab8488abee.webp)
再配置触发条件,比如 5 分钟内调用次数超过 100 次则告警:
![](https://filescdn.proginn.com/511ced306cc6ab06805b54f4397f481a/0f11193a2f5c8b580d5bc5b6edcd8667.webp)
再配置下告警接收人、告警方式、时间段等,支持邮件、短信、微信等,选择很多样:
![](https://filescdn.proginn.com/32fb0badcf1db754b69b1b1679eaba8f/5ccecb70a14259f5b54776ee0b8a226a.webp)
这样就大功告成了,如法炮制,可以给每个最小粒度的函数都添加上告警,出了事儿在第一时间就能感知到了。
最后,对于一个成熟的网站,其实以上的防护措施还是远远不够的。
还好,我的网站现在并不成熟,所以求求各位网络安全爱好者,放过孩子吧!
![](https://filescdn.proginn.com/92802b60b717046e25bbe945936933b6/f38bdba745ae9665a0f8d48690fb09d2.webp)