披荊斬棘:論百萬級伺服器反入侵場景的混沌工程實踐
在繁雜的業務和網路環境下,在公司百萬級伺服器面前,要做到入侵發生時的及時檢測,那麼反入侵系統的有效性,即系統質量,是至關重要的。
洋蔥系統是騰訊公司級的主機反入侵安全檢測系統,它是實現了前端主機agent及後端分散式資料接入分析系統的一整套服務,覆蓋的系統模組眾多,部署的服務節點超百萬,面臨的業務網路環境區域複雜——洋蔥就是在這樣的環境下進行實時監測資料的採集、上報和分析。
然而我們發現,在實際的運營過程中總會出現元件異常、未部署、入侵漏水等一系列質量上的挑戰。
基於此,我們在對洋蔥系統進行實時質量建設和優化的同時,提出了引入混沌工程的解決思路,並介紹混沌工程在其中的初步實踐應用。即,建設整個系統實時質量的一個模型標準和穩態描述,結合實際入侵場景和服務異常的模擬進行混沌實驗,對系統的穩定性、可用性進行驗證,同時發現未知的質量問題,以此形成負反饋閉環,進一步推進反入侵質量建設和優化。
本文圍繞洋蔥系統的實時質量建設和優化,介紹混沌工程在其中的初步實踐應用。
要說明反入侵具體的工作內容,則要先對“入侵”進行定義。
這裡的入侵主要指“未經授權”的行為。一般來說入侵者實施入侵行為,主要目的有以下幾點:
獲取敏感資料,如關係鏈,使用者資訊等;
篡改資料,如惡意刪除,給自己賬戶充錢,篡改主頁(just for fun)等;
控制個人資產,如將個人機器當肉雞,對外發起DDoS攻擊,或者當做滲透其他目標的跳板;
挖礦行為。
從路徑上看,黑客可以通過網站漏洞、對外高危第三方應用漏洞、供應鏈攻擊、網路劫持、郵件釣魚、物理攻擊、零日漏洞攻擊等進入到公司伺服器,從而到達內網,然後通過內外掃描爆破等形式進一步滲透,設定種馬反連,最終達到完全控制伺服器的目的。
一般來說,從入侵動作基本能追溯到一條完整的行為鏈路。那麼說到反入侵,能夠在鏈路中的關鍵路勁層層設防,就是反入侵的基本。
反入侵系統,目標是及時發現入侵行為,對入侵行為進行回溯,然後加固系統的薄弱點。這裡我們提到騰訊公司級的反入侵系統——洋蔥。目前反入侵團隊在所有騰訊的伺服器上均有部署,客戶端agent會實時採集機器上的痕跡資訊(如命令執行,程式,網路連線,掃描,系統日誌,web檔案,高危app漏洞等),然後後端是分散式的叢集,對資料進行清洗和多維度資料聚合分析,最終輸出風險事件。
然而,目前騰訊反入侵工作也面臨著極大的困難。
首先,公司盤子越來越大,伺服器已經突破百萬級別了;其次,公司業務眾多,現網各種應用/第三方軟體的使用,及員工安全意識薄弱等,都給反入侵工作帶來挑戰。另外,網路環境複雜,基本上對外的每一個埠、每一個服務、每一個cgi、GitHub上託管的每一個密碼,都可以是黑客“入侵”的入口。
面對如此繁雜的業務和網路環境、如此大量的伺服器,要求系統及時感知、檢測到入侵,則反入侵系統的有效性,即系統質量則變得至關重要。
反入侵系統質量的好壞,已成反入侵體系是否有效的關鍵因素。然而,如何進行系統質量的有效建設,又是一個極大的工程。
指標化描述,是對質量建設和優化的基礎需求。對此我們提到了實時質量大盤的概念,用來實時表述整個系統有效覆蓋的健康度情況,以及異常分類的統計佔比和詳情輸出,這樣更有助於進行系統迭代優化,進而了一個完整正向質量建設的閉環。
針對所有場景的開發,梳理出各個可能發生異常的點,形成指標,然後迭代開發,將指標埋點上報,後端建立一個指標綜合分析的模型,最後輸出一個完整實時質量大盤,開發、運維和策略同學根據實時質量大盤中反饋出來的異常場景再進行分析優化開發,形成一個正向閉環。
但是現網的各個模組體系下,實際運營過程中還是出現了埋點指標外的相關異常情況,導致入侵漏水。那麼,是否有辦法能夠將這些可能存在的異常,儘可能快地暴露出來,以便更好把控系統的質量,發現入侵?我們的回答是肯定的。
混沌工程就是一種應用於此類場景的技術方案。
首先說明的是,目前洋蔥反入侵系統已經在架構上實現了分散式,自動容災,路由負載均衡,客戶端也是agent加外掛的形式存在,且實現了元件管理和心跳檢活邏輯——具備進行有意義的混沌實驗基礎。
關於混沌工程在反入侵場景下的結合和使用,我們的關注點集中在兩個層面,即系統有效覆蓋和入侵有效發現。
針對第一個層面,混沌實驗主要是對系統故障類的演習、驗證系統容錯能力;第二個層面,混沌實驗主要聚焦在入侵實驗上,從深度上我們分為模擬入侵撥測,和實際入侵對抗兩類。整個混沌實驗的結果,反饋回到正向系統質量建設中進行優化和監控,形成一個“負反饋”機制。從正反兩個面向,在流程上形成質量建設的閉環。
正向的質量建設,可以解決和閉環可預知的異常場景,針對未知場景,我們引入了混沌實驗來進行驗證,並形成一個負反饋機制,反哺到實時質量大盤的建設。這就是複雜規模下反入侵系統質量建設的整體思路。
那麼,反入侵場景下的混沌實驗,具體是如何進行的?
上面提到過,騰訊反入侵團隊主要關注兩個層面的系統能力,包括系統有效覆蓋,和入侵有效發現。在思路上,主要是通過“故障測試”驗證系統的有效覆蓋,通過“模擬入侵撥測”和“入侵對抗”驗證系統的有效發現能力。
1)故障測試
故障注入實驗,是混沌工程實踐中常用的一種工程手段,通過引入可控的異常和故障,觀察系統的反應和容錯,是針對系統各個功能模組有效覆蓋的驗證。
通過設定的隨機方法,在分散式系統的客戶端和後臺,引入可能影響入侵發現能力的異常情況,如在客戶端agent中主動降版本、刪除元件,或者刻意限制iptables強制agent斷開連線,在後臺側通過工具讓後端隨機機器產生cpu高負載,或者流量暴漲,甚者通過主動kill程式,讓服務故障下線。
即,將所有引入故障的動作工具化,通過任務通道,根據預先設定的隨機選擇方法下發到主機上執行,從而達到故障注入的效果。針對後端的故障引入,設計上會隨機分散到不同的叢集。然後,我們可以在前面建設好的實時質量大盤上,看對應指標是否產生質量波動。
2)模擬入侵撥測
為了發現在入侵場景和系統完整鏈路上的未知異常場景,騰訊反入侵團隊還引入了“模擬入侵撥測”和“入侵對抗”。在具體操作上,反入侵團隊根據入侵的路徑、手段方法,將入侵分為不同的場景。針對每個場景,通過採集特定的資訊,依據該場景行為特徵進行建模和檢測。
具體的實施閉環流程如下圖所示。從中間“撥測系統”發起模擬入侵攻擊。在這個過程中,洋蔥系統會按照正常的執行邏輯進行資料採集和傳輸(這個過程中,資料會全鏈路旁路落地記錄),然後進行入侵行為檢測。
撥測系統會自動進行行為結果的驗證,輸出撥測結果。如果出現異常而系統未發現,策略和研發同學會根據撥測結果進行復盤跟進,然後反饋回到實時質量大盤,或者進行策略優化。同時,如果有新的入侵策略場景釋出,會在釋出後,將對應模擬入侵行為加入到撥測系統中。如此形成一個閉環。
該模擬撥測方案已經在洋蔥中穩定應用了2年。歷史上通過撥測,發現了現網環境中多起測試和監控未覆蓋到的策略和研發質量問題,從而挖出了不少引起“搏鬥”的隱患因素。
3)入侵對抗
模擬入侵是針對已知的入侵場景的。但同時黑客技術也在發展,甚至戰場也在發生轉移。從服務漏洞,到供應鏈攻擊,到伺服器底層種馬(bios等)。所以引入入侵對抗實驗,也是為了反入侵系統能夠跟隨發展,走在前頭。
在實際的執行過程中,騰訊反入侵團隊通過兩個維度來進行入侵對抗的混沌實驗。
其一,內部建立藍軍機制。通過研究內外部情報,新的入侵工具技術和方法,隨時進行踩點滲透,以及控制伺服器等入侵行為,進行內部攻防演習;
其二,將白帽子在TSRC平臺提交的漏洞,和實際黑客入侵的案例都當作實驗的變數。通過上述兩方面建立起完整的入侵對抗閉環機制。
具體來看,模擬入侵的整個過程是如何閉環的呢?
藍軍一方面進行入侵,一方面自行記錄所有入侵過程中的行為;同時洋蔥系統在正常地執行檢測工作。如果產生了入侵告警,應急同事會緊急開展排查、定性、止損、定損、溯源等工作,並跟藍軍確認是否是藍軍演習;有時會當作真實入侵把藍軍清理出戰場。通過這樣的方式來持續對抗。
通過藍軍提供的完整入侵記錄,與實際入侵告警進行對賬,我們可以推演出哪些行為成功預警,哪些行為被繞過漏水了;或者確定部分行為的原始資料是否在當前有支援採集,等等,然後形成新的開發場景需求、策略優化需求,和質量優化點,反饋回到系統質量建設中。
本文介紹了反入侵工作的相關背景,以及反入侵洋蔥系統在質量建設方面的思路和推進方法。從反入侵場景下的質量建設出發,看待分散式系統的質量建設,需要從正反兩個方向入手,動態互補,才能不停推進系統的穩定和有效。
未來,騰訊反入侵團隊將持續細化、自動化故障注入驗證引入現網運營環境,演習常規化,同時將聚焦於IOT智慧硬體,伺服器底層(BIOS等)更高層次對抗能力和質量的建設。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559354/viewspace-2645115/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 披荊斬棘、共赴未來
- 中國農產品如何披荊斬棘?
- 披荊斬棘的Ta們!PSRC 2021年度榜單公佈!
- 經驗總結|IT程式設計師如何披荊斬棘?教你幾招可好程式設計師
- 低程式碼開發平臺,為實現企業數字化轉型披荊斬棘
- 樑其偉回顧《影之刃3》研發歷程:江湖路遠,披荊斬棘
- 聲網的混沌工程實踐
- 混沌工程最佳實踐 - 尋交流
- Netflix 混沌工程手冊 Part 3:實踐方法
- 混沌工程在創業公司的實踐 - 陸蓉蓉創業
- IDC銷售:從小白到高手的荊棘之路
- TDengine的實踐場景
- 直播混沌工程之故障演練實踐總結
- Spring Cloud 應用在 Kubernetes 上的最佳實踐 — 高可用(混沌工程)SpringCloud
- 混沌實踐訪談:混沌工程和系統可觀測性密不可分
- ChaosBlade混沌測試實踐
- 混沌演練實踐(一)
- 在 Ali Kubernetes 系統中,我們這樣實踐混沌工程
- 網易雙11“超級工程”:反欺詐系統應用實踐
- Apache Kafka的4個混沌工程實驗 | IDCFApacheKafka
- 實時數倉混沌演練實踐
- 如何讓混沌工程實驗降本增效
- 當Prometheus遇到混沌工程Prometheus
- 混沌工程入門指南
- RocketMQ 在多 IDC 場景以及多隔離區場景下的實踐MQ
- 前端自動化混沌測試實踐前端
- 美團多場景建模的探索與實踐
- AI 事件驅動場景 Serverless 實踐AI事件Server
- 【軟體工程理論與實踐】Homework(四.1)軟體工程
- TiDB 在咪咕雲原生場景下的實踐TiDB
- Sermant在異地多活場景下的實踐
- MongoDB 最佳實踐和場景避坑指南MongoDB
- 自然場景文字檢測工程中使用所以程式碼和理論
- 百萬級併發 之 MQTT 伺服器MQQT伺服器
- 【譯】混沌工程與區塊鏈區塊鏈
- Chaos帶你快速上手混沌工程
- Sermant熱插拔能力在故障注入場景的實踐
- 安全容器在邊緣計算場景下的實踐