被攻击了!

为您报道【网站被攻击现场】,伤害不大,侮辱性极强!

大家好,我是鱼皮。

前段时间,我的网站疑似被攻击了,今天带大家一起来事故现场看看,并且分享事故分析思路和事后防控手段。

孽起

先看看我是怎么发现网站被攻击的吧。

通常,为了保证线上网站和后台服务的稳定运行,我们需要给项目添加监控告警功能,出现意外情况时,系统会第一时间向管理员发送通知。

由于我的项目使用 腾讯云云开发 来部署,默认提供了额度监控和告警,可以防止资源消耗过多,非常方便。

额度监控

但光有告警还不够,真出了问题,靠什么去分析呢?必须给故障排查提供一些线索。

腾讯云云开发默认为云函数、云托管等提供了监控和日志记录,一行代码都不用写,就能够看到资源的运行信息和详细日志,比如请求时间、IP 地址、请求头信息等,非常方便。

日志记录

此外,我还在开发时,给服务添加了一些日志和数据上报,比如哪位用户在哪个时间执行了什么操作。记录的越详细,排查问题就越方便。当然,无意义的内容就不用记录了,否则看日志的时候密密麻麻的,伤眼又低效!

我一直把项目当成自己的孩子(虽然我还没有孩子),因此,我每天都会看一下监控和日志,来了解下 “孩子” 的身体状况。

我最常看的监控指标是服务的 调用次数,它很大程度上反映了用户流量的访问情况。

正常情况下,调用次数随时间的曲线图应该是下面这样的,夜里没人看,白天流量还算平稳,偶尔会有一些小高峰:

正常调用次数 - 时间曲线

但有一天,我突然看到了下面这个曲线图,大家看看这个曲线有什么特点?

没错,地中海上偏偏长了一根长毛!在 25 分附近,调用次数突然飙升,我们一般把这种现象称为 “流量突刺”,把监控图上这一枝独秀称为 “毛刺”。

大多数情况下,有毛刺可不是什么好事。看到这个曲线,我的第一反应不是 “卧槽,项目火了?”,而是 “卧槽,被攻击了!”

到底是不是被攻击了?是谁攻击我了呢?不会我真的火了吧(还带有一丝幻想)?

带着这些疑问,赶紧来分析一下。

分析

光看上面的曲线图,是分析不出来的,必须要从事故现场找找线索。

还好云开发帮我们记录了访问日志,选择事故发生的时间段(以 25 分钟为基准,前后各空 5 分钟),然后就筛选出了对应日志。

查看日志

为了更灵活地分析,我们将日志导出到本地,使用 Excel 等表格软件打开它。

然后,我们来分析下日志,先看 日志生产时间 这列,即案发时间:

查看日志

大家发现了么?日志生产时间非常均匀!每秒大概 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 地址都是相同的!

这下我松了口气,应该只是一个人在小打小闹吧。

然后我看了几条连续日志的请求地址,大概是这样:

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" 我大致明白了,这位攻击者应该是在用字典枚举的方式扫描我的网站,企图找出网站的后台地址。

攻击的原理很简单,就根小时候我们尝试破解别人密码一样,一个一个疯狂乱试。只不过攻击者通常会使用一些网站扫描工具,将可能的密码作为一本字典,交给机器,代替人工来试而已。试的次数和频率高了,就被称为 “爆破”。

又回想起了大学时被网络安全课支配的恐惧。。。

基于以上的分析,这位 “攻击者” 应该只是拿我的网站来练练手,毕竟扫描频率不高、持续时间不长,当然,我希望如此。

防控

这件事虽然伤害不大,侮辱性极强!让我充分意识到自己的网站在安全性上是缺斤少两的。最起码应该在异常流量出现的是否给我告警,发个短信啥的吧!

如果是自己搭建服务器来部署网站项目,需要自行接入或开发一个业务监控告警系统,虽然网上的这类第三方系统很多,比如 Zabbix、Prometheus(AlertManager)、Grafana 等,但都需要自己来部署和维护,需要一定的人力物力成本。

但使用腾讯云云开发,除了上面提到的基础资源额度告警外,还可以灵活自定义各种高级的告警策略。

比如给点赞功能添加调用次数限制告警,先选择告警对象为 “云函数”:

新建告警策略

再配置触发条件,比如 5 分钟内调用次数超过 100 次则告警:

配置告警触发条件

再配置下告警接收人、告警方式、时间段等,支持邮件、短信、微信等,选择很多样:

这样就大功告成了,如法炮制,可以给每个最小粒度的函数都添加上告警,出了事儿在第一时间就能感知到了。


最后,对于一个成熟的网站,其实以上的防护措施还是远远不够的。

还好,我的网站现在并不成熟,所以求求各位网络安全爱好者,放过孩子吧!

#前端##学习路径#
全部评论
感谢参与【创作者计划3期·技术干货场】!欢迎更多牛油来写干货,瓜分总计20000元奖励!!技术干货场活动链接:https://www.nowcoder.com/link/czz3jsgh3(参与奖马克杯将于每周五结算,敬请期待~)
点赞 回复 分享
发布于 2021-05-28 11:50

相关推荐

头像
10-13 18:10
已编辑
东南大学 C++
。收拾收拾心情下一家吧————————————————10.12更新上面不知道怎么的,每次在手机上编辑都会只有最后一行才会显示。原本不想写凉经的,太伤感情了,但过了一天想了想,凉经的拿起来好好整理,就像象棋一样,你进步最快的时候不是你赢棋的时候,而是在输棋的时候。那废话不多说,就做个复盘吧。一面:1,经典自我介绍2,项目盘问,没啥好说的,感觉问的不是很多3,八股问的比较奇怪,他会深挖性地问一些,比如,我知道MMU,那你知不知道QMMU(记得是这个,总之就是MMU前面加一个字母)4,知不知道slab内存分配器->这个我清楚5,知不知道排序算法,排序算法一般怎么用6,写一道力扣的,最长回文子串反问:1,工作内容2,工作强度3,关于友商的问题->后面这个问题问HR去了,和中兴有关,数通这个行业和友商相关的不要提,这个行业和别的行业不同,别的行业干同一行的都是竞争关系,数通这个行业的不同企业的关系比较微妙。特别细节的问题我确实不知道,但一面没挂我。接下来是我被挂的二面,先说说我挂在哪里,技术性问题我应该没啥问题,主要是一些解决问题思路上的回答,一方面是这方面我准备的不多,另一方面是这个面试写的是“专业面试二面”,但是感觉问的问题都是一些主管面/综合面才会问的问题,就是不问技术问方法论。我以前形成的思维定式就是专业面会就是会,不会就直说不会,但事实上如果问到方法论性质的问题的话得扯一下皮,不能按照上面这个模式。刚到位置上就看到面试官叹了一口气,有一些不详的预感。我是下午1点45左右面的。1,经典自我介绍2,你是怎么完成这个项目的,分成几个步骤。我大致说了一下。你有没有觉得你的步骤里面缺了一些什么,(这里已经在引导我往他想的那个方向走了),比如你一个人的能力永远是不够的,,,我们平时会有一些组内的会议来沟通我们的所思所想。。。。3,你在项目中遇到的最困难的地方在什么方面4,说一下你知道的TCP/IP协议网络模型中的网络层有关的协议......5,接着4问,你觉得现在的socket有什么样的缺点,有什么样的优化方向?6,中间手撕了一道很简单的快慢指针的问题。大概是在链表的倒数第N个位置插入一个节点。————————————————————————————————————10.13晚更新补充一下一面说的一些奇怪的概念:1,提到了RPC2,提到了fu(第四声)拷贝,我当时说我只知道零拷贝,知道mmap,然后他说mmap是其中的一种方式,然后他问我知不知道DPDK,我说不知道,他说这个是一个高性能的拷贝方式3,MMU这个前面加了一个什么字母我这里没记,别问我了4,后面还提到了LTU,VFIO,孩子真的不会。
走呀走:华子二面可能会有场景题的,是有些开放性的问题了
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务