本系列文章詳細介紹使用 .net core 和 WPF 開發 升訊威在線客服與營銷系統 的過程。本產品已經成熟穩定並投入商用。
在線演示環境:https://kf.shengxunwei.com 注意:演示環境僅供演示交流與評估,不保證 7x24 小時可用。安全
文章目錄列表請點擊這裏服務器
系統公開發表不久以後,遭到了一次來自不明人士的蓄意攻擊。(當你努力做一件事的時候,你永遠不知道有些人會怎麼想)
本篇詳細介紹問題的定位和處理過程。網絡
21日上午,收到報警,服務器 CPU 使用率持續超過 80%。我嘗試遠程桌面鏈接,很是卡,鏈接服務器後發現 CPU 佔用率 100%。查看任務管理器,客服系統後臺服務佔用了 CPU,
從新啓動客服系統後臺進程 ,CPU 佔用率恢復正常。查看網絡監控數據並無大的網絡流量流入流出,初步推測是對客服系統所使用的通訊端口的攻擊行爲。iview
更換系統所使用的監聽端口後繼續觀察。.net
23日晚間,再次收到 CPU 使用率報警,查看發現依然是客服系統後臺服務 100% 佔用了 CPU。重啓服務後恢復正常。幾小時後,我遠程服務器查看,發現 CPU 佔用率穩定在 50%,看來攻擊者爲了不引發個人注意,改進了攻擊手段,下降了攻擊強度。線程
相同的版本,部署在個人客戶的服務器上運行的環境則是一切正常,持續運行了兩週沒有任何異常狀況,並且客戶正式使用的環境,使用強度比個人演示環境要大的多。設計
在任務管理器裏,雖然能看到是客服系統後臺服務佔用了 CPU,可是沒法查看佔用的具體緣由。3d
在我第一次發現問題,更換端口,消停兩次以後,再次發生的攻擊行爲,看起來是和我槓上了。代理
首先,在攻擊行爲發生時,建立客服系統後臺服務的 Dump 文件,注意區分 x86 和 x64。調試
安裝 WinDbg 或 WinDbg Priview ,Windows 10 推薦使用 WinDbg privew,使用 WinDbg 打開 Dump 文件。
第一次打開時,會自動下載所需的 PDB 文件,等待下載完成後,便可加載調試信息,以下圖:
執行 reload 命令
執行 loadby sos clr 命令
執行 !tp 命令
顯示出 CPU 佔用率 51%。
接下來,咱們要找到形成 CPU 佔用具體的線程和位置,使用 !runaway 命令。定位到線程 41 長時間佔用 CPU。
使用命令 ~41s 進入線程。接着使用 !clrstack 命令顯示調用堆棧。
如圖,根據調用堆棧顯示的信息,很是明確的指示出,Socket 端口接收數據時,大量佔用了 CPU。
結合系統的其它日誌,判斷攻擊者經過鏈接 TCP 端口,高強度,大量的發送垃圾數據,致使服務器 CPU 高負荷運行,企圖拖垮服務器。明確攻擊位置和緣由以後,就好辦了,在 Socket 端口鏈接和監聽時,加入安全反制的機制,從新部署上線。
不久,抓到了一個國內 IP ,此 IP 發起了攻擊行爲,系統自動切斷了鏈接並拉黑了此 IP 地址。隨後的幾天中,攻擊者使用了國外代理髮起攻擊行爲,前後抓到了兩個不一樣國家的 IP,使用相同的方式發起攻擊行爲。雖然攻擊者切換了國外代理,但最初的國內 IP 已經暴露。
28日夜,攻擊者使用了一個位於荷蘭的 IP ,再次發起攻擊,服務器在識別到攻擊行爲後,幾秒鐘內切斷了鏈接。
其實我並不認爲目前我所作的一點點工做可以對業內其它作同類型軟件的企業產生什麼影響,我推測發起攻擊行爲的人只是普通的技術人員。正如我上文說的:當你努力做一件事的時候,你永遠不知道有些人會怎麼想。
我也沒有以某種方式運營這個系統的計劃。
在接下來的文章中,我將具體解構服務端程序的結構和設計、客服端程序的結構和設計,敬請關注。