當前位置: 華文星空 > 知識

從0到1搭建即時反外掛機制,多維度補充手遊攻防力

2021-07-07知識

【2020年中國遊戲產業報告】顯示,2020 年,中國移動遊戲市場實際銷售收入 2096.76 億元,同比增長 32.61%。

伴隨著遊戲市場繁榮發展,手遊玩家與遊戲廠商也面對著日益復雜的手遊安全問題,如破解、盜版、掛機、修改器、模擬點選、模擬器等外掛惡意作弊場景。這些常見的惡意場景直接打擊了玩家公平的遊戲體驗,也嚴重損害了廠商利益。

網易易盾憑借多年遊戲與套用反外掛經驗與技術積累,基於大數據技術與演算法模型,構建了移動端即時反外掛系統。本文將介紹易盾手遊即時反外掛系統的建設思路與實踐經驗,以期為遊戲廠商抵禦外掛作弊行為提供一些幫助。

01 反外掛系統目標與流程設計

對於反外掛系統,基本業務目標是辨識與對抗。例如,準確辨識行動裝置,自動化檢測遊戲盜版簽名,玩家特征;準確辨識遊戲環境,風險外掛使用;甚至有效捕捉玩家遊戲鍵鼠軌跡。根據對抗策略,對辨識的外掛惡意玩家,直接閃退或者警告。

在大部份遊戲場景,外掛辨識與對抗處理流程,分為經典的三個環節:事前,事中,事後。

事前:遊戲客戶端釋出上線前,必須先加固,以提升防破解能力,在加固過程中,同時配置基礎的反外掛特征、對抗策略,以及熱更策略,進一步提高對抗的即時性和靈活性。

事中:在遊戲執行時,可以本地辨識與直接對抗,或者上報嫌疑數據給伺服端,透過線上的規則與演算法模型,準確辨識風險,並即時下方對抗策略,如閃退、文本彈窗警告。

事後:數據統計分析,驗證玩家嫌疑程度,進一步透過黑白名單進行標記,同時,采集,統計,分析,保存玩家作弊證據,支撐業務封號等處理。

02 反外掛業務特點與技術選型

從風險管控要求看,反外掛系統必須兼顧即時、快速與靈活決策特點。

即時處理難題:為了解決超大規模數據的即時處理挑戰,易盾基於Apache Flink大數據處理技術,構建了即時反外掛數據處理系統。Apache Flink作為開源的即時大數據處理框架,已經被業界廣泛采用,主要下面幾大優勢:區分事件時間、處理時間,能夠保持數據產生的時序性,解決延遲上報問題;內建時間視窗概念,支持不同業務場景聚合計算;提供分布式快照(Check Point)容錯機制,自動持久化數據狀態和系統執行後設資料,當任務異常時重新開機時,能夠從快照中恢復數據,保障數據處理一致性。

動態靈活性:為了滿足辨識與對抗的靈活性,在即時數據處理基礎上,開發了規則處理引擎。其中,規則運算式由QLExpress解析與執行,規則內容即時更新到Redis緩存,由Flink感知並拉取到本地。

高並行請求:為了響應即時高並行請求,基於Openresty技術,構建了嫌疑數據上報接收服務,風險對抗查詢服務。Openresty封裝了標準的Nginx核心模組,能夠充分利用Nginx事件模型來完成無阻塞I/O通訊,透過編寫Lua指令碼開發Web套用服務。

03 即時反外掛系統架構

整個系統架構的核心模組如下圖1所示,按數據處理環節,劃分為:智慧管家,嫌疑數據上報接收,數據預處理,規則引擎,演算法模型,決策模組,風險對抗查詢服務,資料倉儲,數據統計分析系統,告警服務,風險數據開放介面服務。其中關鍵模組設計要點說明如下。

圖1 | 即時反外掛系統核心模組

3.1 智慧管家

智慧管家,主要管理對抗黑白名單,舉報驗證,線上配置同步等,如支持線上動態策略更新,支持根據不同遊戲廠商外掛特點,客製個人化的特征。支持配置灰度下發,如按渠道,按目標使用者數量,按指定裝置。

3.2 嫌疑數據上報接收

基於Openresty技術開發了數據上報接收服務。該模組需要實作二個目標:Kafka直接轉發,數據處理鏈路高可用保障。

Kafka轉發:Openresty將收到數據初步處理後,透過Openresty Kafka Lua外掛程式,直接把數據發送給Kafka佇列,減少數據落盤IO壓力。從效能調優經驗看,對超大規模數據時,非常有必要建立兩級數據分片。如預先建立16個Topic,每個Topic劃分32個分區,有利於後期透過提高並行度,最佳化數據處理吞吐量和響應時間,能夠快速從數據傾斜中恢復。

高可用保障:接收模組的下遊是Flink預處理模組。由於Flink CheckPoint啟用時候,Flink作業會將Kafka後設資料直接存在CheckPoint State中,每個作業的Kafka消費Offset不能被多個Flink 作業共用。

當Flink作業釋出更新時候,數據處理任務需要先下線,在下線時間內,數據不能被處理,達不到7x24不停機消費要求。因此Flink數據處理模組,會啟動兩個以上作業同時執行,每個作業有獨立的輸入Kafka Topic。

當其中一個作業下線時,開發的Openresty監測服務,能夠感知到作業下線,會把對應數據轉發給其他作業的輸入Topic,由其他作業繼續承擔消費數據,實作不間斷即時處理,保障數據處理高可用。

3.3 Flink核心作業

數據預處理:主要完成數據解密,清洗,和業務後設資料關聯。當前效能瓶頸出現在加解密部份,消耗時間接近0.5ms/條,嚴重依賴CPU效能,也直接影響數據處理吞吐量。未來計劃使用易盾自研的白盒加解密技術,減少解密消耗時間。

另外,基於Kakfa和Flink的數據處理,都存在一個弊端,數據都是被批次拉取,Flink再序列處理,對於時間敏感的業務,如規則閃退,有必要啟動多執行緒並列處理,減少序列阻塞和拉取抖動。

規則引擎:規則引擎系統分為兩部份,基於Spring Boot實作的規則管理,和基於Flink、Redis、QLExpress構建的執行引擎。

其中,執行引擎的主要挑戰是有狀態規則的高效能執行和大規模狀態更新保存。如某條規則要求匹配,最近一周同個裝置上出現的IP數量大於10的嫌疑數據。該規則涉及大基數去重統計,需要在每個有效裝置指紋上計算去重IP數量,並且時間維度保持連續變化。

針對此類上億級別的大基數精確去重統計難題,當前方案是以Redis sorted set作為去重儲存結構,數據時間戳作為排序score分值,使用zcount命令執行任意時間段去重計數。

另外,每當計數超過上限閾值時,會發送刪除事件,異步刪除過長成員,減少儲存長度,在讀寫效能最佳化上,采用Flink AsyncIO,結合Redis Lettuce異步客戶端,實作異步無阻塞讀寫,提升吞吐量。

決策模組:規則引擎輸出的數據,包含各類外掛的標記資訊,在不同的業務場景如規則閃退,註冊登入保護,分別會有不同的決策策略,根據標記資訊再細分為各種風險等級,有些場景也會結合演算法模型輸出結果參與判斷,如模擬點選演算法檢測,註冊登陸保護檢測。

3.4 數據中心服務

風險明細數據:數據處理作業最終輸出為風險明細數據,明細封包含了各種外掛資訊,建議遊戲客戶對接開放API介面,即時拉取明細數據,驗證玩家使用外掛情況,必要時可以進行事後封號處理。

資料倉儲:資料倉儲分為即時與離線倉庫。即時倉庫主要由Redis中業務後設資料,Kafka Topic中處理數據,Click House中統計數據,和Elastic Search中的明細數據索引構成。

Elastic Search中明細數據索引,按天分割,由別名統一對映各天索引,在易盾官網上,可以多條件組合查詢與匯出明細數據,支持匯出超過1萬條數據。

離線資料倉儲,在網易猛獁大數據平台上,采用分層分主題構建。風險明細數據作為基礎明細層,再關聯業務後設資料,根據業務需求抽取計算,匯聚成各種套用層數據表,如裝置指紋外掛風險表,模擬點選外掛風險表等。離線倉庫數據主要用於演算法訓練,如模擬點選演算法模型訓練。

數據統計分析:反外掛數據分析系統,主要用於即時告警,即時趨勢,匯總統計報表,以及固定周期分析報告。目前采用Click House系統構建數據分析中心,整個集群擁有4個數據節點,3個Zookeeper節點。集群中數據儲存都采用2分片,1副本,保障數據安全高可用。

相關數據寫入,使用Nginx作為負載均衡,先寫入到本地表,再透過Zookeeper復制副本數據;數據查詢直接使用分布式表原生的分布式查詢能力。

從儲存效果看,Click House基於列式的壓縮儲存,極大降低磁盤空間,例如300億條明細數據,匯入Click House後,儲存包括副本僅占用4.4T。

Click House在使用過程中,也碰到一些挑戰,在復雜查詢時,嚴重占用CPU計算資源,容易影響並行請求量。因此下一階段最佳化目標是查詢緩存和請求佇列管理,保障系統服務穩定可靠。

04 展望

2020年,易盾移動端即時反外掛系統,已經覆蓋5.1億終端,為幾百款遊戲和套用,抵禦各類威脅280多億次,為手遊玩家創造健康公平遊戲環境,為Android和iOS套用安全保駕護航。

下一步計劃從5大重點方向布局:一是,支持開放更多的業務客製規則;二是,繼續深入演算法模型建設,如重點挖掘打金工作室、模擬點選等問題;三是,推廣新一代易盾裝置指紋系統,擴大可信裝置在各類反外掛,反作弊風控場景套用;四是,繼續提升智慧數據中心能力,提供更豐富的數據分析報表;五是,支持反外掛系統私有化部署。

制作遊戲外掛軟體將面對法律的嚴懲。在巨大的利益驅使下,法律並不能完全勸退外掛,外掛黑色產業鏈日益膨脹,精細分工,環環相扣。有人專門負責遊戲外掛的開發更新,開發好之後,再交給供應商代理銷售。遊戲開發者、營運商應拿起手裏的技術武器,還玩家一片凈土。