天天看點

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

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

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

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

由于我的項目使用 <code>騰訊雲雲開發</code> 來部署,預設提供了額度監控和告警,可以防止資源消耗過多,非常友善。

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

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

騰訊雲雲開發預設為雲函數、雲托管等提供了監控和日志記錄,一行代碼都不用寫,就能夠看到資源的運作資訊和詳細日志,比如請求時間、IP 位址、請求頭資訊等,非常友善。

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

此外,我還在開發時,給服務添加了一些日志和資料上報,比如哪位使用者在哪個時間執行了什麼操作。記錄的越詳細,排查問題就越友善。當然,無意義的内容就不用記錄了,否則看日志的時候密密麻麻的,傷眼又低效!

我一直把項目當成自己的孩子(雖然我還沒有孩子),是以,我每天都會看一下監控和日志,來了解下 “孩子” 的身體狀況。

我最常看的監控名額是服務的 <code>調用次數</code>,它很大程度上反映了使用者流量的通路情況。

正常情況下,調用次數随時間的曲線圖應該是下面這樣的,夜裡沒人看,白天流量還算平穩,偶爾會有一些小高峰:

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

但有一天,我突然看到了下面這個曲線圖,大家看看這個曲線有什麼特點?

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

沒錯,地中海上偏偏長了一根長毛!在 25 分附近,調用次數突然飙升,我們一般把這種現象稱為 “流量突刺”,把監控圖上這一枝獨秀稱為 “毛刺”。

大多數情況下,有毛刺可不是什麼好事。看到這個曲線,我的第一反應不是 “卧槽,項目火了?”,而是 “卧槽,被攻擊了!”

到底是不是被攻擊了?是誰攻擊我了呢?不會我真的火了吧(還帶有一絲幻想)?

帶着這些疑問,趕緊來分析一下。

光看上面的曲線圖,是分析不出來的,必須要從事故現場找找線索。

還好雲開發幫我們記錄了通路日志,選擇事故發生的時間段(以 25 分鐘為基準,前後各空 5 分鐘),然後就篩選出了對應日志。

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

為了更靈活地分析,我們将日志導出到本地,使用 Excel 等表格軟體打開它。

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

然後,我們來分析下日志,先看 <code>日志生産時間</code> 這列,即案發時間:

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

大家發現了麼?日志生産時間非常均勻!每秒大概 3 - 4 條。

從這點就說明了,大機率不是人工通路服務,而是機器自動按照某個頻率發送請求。

再看下日志的内容,每條日志的結構如下:

其中,請求時間、請求 IP、請求位址是關鍵資訊。時間剛剛已經分析過了,再看看請求 IP 和位址。

我直接在表格中全局搜尋上述 IP,發現所有的 IP 位址都是相同的!

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

這下我松了口氣,應該隻是一個人在小打小鬧吧。

然後我看了幾條連續日志的請求位址,大概是這樣:

看到 "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

技術交流群、最新資訊關注微信公衆号【騰訊雲雲開發】

繼續閱讀