被攻击了!
為您報道【網站被攻擊現場】,傷害不大,侮辱性極強!
大家好,我是魚皮。
前段時間,我的網站疑似被攻擊了,今天帶大家一起來事故現場看看,并且分享事故分析思路和事后防控手段。
孽起
先看看我是怎么發現網站被攻擊的吧。
通常,為了保證線上網站和后臺服務的穩定運行,我們需要給項目添加監控告警功能,出現意外情況時,系統會第一時間向管理員發送通知。
由于我的項目使用 騰訊云云開發 來部署,默認提供了額度監控和告警,可以防止資源消耗過多,非常方便。
但光有告警還不夠,真出了問題,靠什么去分析呢?必須給故障排查提供一些線索。
騰訊云云開發默認為云函數、云托管等提供了監控和日志記錄,一行代碼都不用寫,就能夠看到資源的運行信息和詳細日志,比如請求時間、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 次則告警:
再配置下告警接收人、告警方式、時間段等,支持郵件、短信、微信等,選擇很多樣:
這樣就大功告成了,如法炮制,可以給每個最小粒度的函數都添加上告警,出了事兒在第一時間就能感知到了。
最后,對于一個成熟的網站,其實以上的防護措施還是遠遠不夠的。
還好,我的網站現在并不成熟,所以求求各位網絡安全愛好者,放過孩子吧!
總結
- 上一篇: NVelocity系列:NVelocit
- 下一篇: 前辈学习C语言的四种方法,实际上不管学什