監控和告警 | 網站被攻擊了?

前段時間,我的網站疑似被攻擊了,今天帶大家一起來事故現場看看,並且分享事故分析思路和事後防控手段。

孽起

先看看我是怎麼發現網站被攻擊的吧。

通常,爲了保證線上網站和後臺服務的穩定運行,我們需要給項目添加監控告警功能,出現意外情況時,系統會第一時間向管理員發送通知。

由於我的項目使用 騰訊云云開發 來部署,默認提供了額度監控和告警,可以防止資源消耗過多,非常方便。

但光有告警還不夠,真出了問題,靠什麼去分析呢?必須給故障排查提供一些線索。

騰訊云云開發默認爲雲函數、雲託管等提供了監控和日誌記錄,一行代碼都不用寫,就能夠看到資源的運行信息和詳細日誌,比如請求時間、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 次則告警:

再配置下告警接收人、告警方式、時間段等,支持郵件、短信、微信等,選擇很多樣:

這樣就大功告成了,如法炮製,可以給每個最小粒度的函數都添加上告警,出了事兒在第一時間就能感知到了。

產品介紹

雲開發(Tencent CloudBase,TCB)是騰訊雲提供的雲原生一體化開發環境和工具平臺,爲開發者提供高可用、自動彈性擴縮的後端雲服務,包含計算、存儲、託管等serverless化能力,可用於雲端一體化開發多種端應用(小程序,公衆號,Web 應用,Flutter 客戶端等),幫助開發者統一構建和管理後端服務和雲資源,避免了應用開發過程中繁瑣的服務器搭建及運維,開發者可以專注於業務邏輯的實現,開發門檻更低,效率更高。
開通雲開發:https://console.cloud.tencent.com/tcb?tdl_anchor=techsite
產品文檔:https://cloud.tencent.com/product/tcb?from=12763
技術文檔:https://cloudbase.net?from=10004
技術交流羣、最新資訊關注微信公衆號【騰訊云云開發】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章