《2020年中國遊戲產業報告》顯示,2020 年,中國移動遊戲市場實際銷售收入 2096.76 億元,同比增長 32.61%。
伴隨著遊戲市場繁榮發展,手遊玩家與遊戲廠商也面對著日益複雜的手遊安全問題,如破解、盜版、掛機、修改器、模擬點選、模擬器等外掛惡意作弊場景。這些常見的惡意場景直接打擊了玩家公平的遊戲體驗,也嚴重損害了廠商利益。
網易易盾憑藉多年遊戲與應用反外掛經驗與技術積累,基於大資料技術與演算法模型,構建了移動端實時反外掛系統。本文將介紹易盾手遊實時反外掛系統的建設思路與實踐經驗,以期為遊戲廠商抵禦外掛作弊行為提供一些幫助。
1.反外掛系統目標與流程設計
對於反外掛系統,基本業務目標是識別與對抗。例如,準確識別移動裝置,自動化檢測遊戲盜版簽名,玩家特徵;準確識別遊戲環境,風險外掛使用;甚至有效捕捉玩家遊戲鍵鼠軌跡。根據對抗策略,對識別的外掛惡意玩家,直接閃退或者警告。
在大部分遊戲場景,外掛識別與對抗處理流程,分為經典的三個環節:事前,事中,事後。
2.反外掛業務特點與技術選型
從風險管控要求看,反外掛系統必須兼顧實時、快速與靈活決策特點。
3.實時反外掛系統架構
整個系統架構的核心模組如下圖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計算資源,容易影響併發請求量。因此下一階段最佳化目標是查詢快取和請求佇列管理,保障系統服務穩定可靠。
4.展望
2020年,易盾移動端實時反外掛系統,已經覆蓋5.1億終端,為幾百款遊戲和應用,抵禦各類威脅280多億次,為手遊玩家創造健康公平遊戲環境,為Android和iOS應用安全保駕護航。
下一步計劃從5大重點方向佈局:一是,支援開放更多的業務定製規則;二是,繼續深入演算法模型建設,如重點挖掘打金工作室、模擬點選等問題;三是,推廣新一代易盾裝置指紋系統,擴大可信裝置在各類反外掛,反作弊風控場景應用;四是,繼續提升智慧資料中心能力,提供更豐富的資料分析報表;五是,支援反外掛系統私有化部署。
製作遊戲外掛軟體將面對法律的嚴懲。在巨大的利益驅使下,法律並不能完全勸退外掛,外掛黑色產業鏈日益膨脹,精細分工,環環相扣。有人專門負責遊戲外掛的開發更新,開發好之後,再交給供應商代理銷售。遊戲開發者、運營商應拿起手裡的技術武器,還玩家一片淨土。