| 在互聯網時代,安全已經成爲企業的命脈。美團信息安全團隊須要採用各類措施和手段來保障業務安全,從而確保美團平臺上的用戶和商戶利益不會受到侵害。前端
本文主要介紹了美團在打造自有規則引擎Zeus(中文名「宙斯」)的過程當中,信息安全團隊遇到的挑戰以及對應的解決方案,並分享了不少踩過的坑,同時還有一些思考和總結。但願對從事安全領域相關工做的同窗可以有所啓發或者幫助。算法
美團App天天都面臨着各種的欺詐、盜號、做弊、套現以及營銷活動被惡意刷單、惡意搶佔資源等風險。而業務安全團隊採用的主要措施和手段就是在業務請求中識別出誰、在什麼時間、經過什麼方式、作了什麼事。這個識別邏輯的制定過程叫作策略的生產。同時,還要對已經完成生產的策略進行快速的驗證和落地,以防止風險變化後策略失效。從發現風險通過策略生產、驗證,再到最終的落地部署,全流程的處理速度和效果將決定整個業務的成敗。後端
在業務發展初期,咱們能夠經過硬編碼的方式將風控邏輯部署在業務邏輯中實現,但美團的業務比較複雜,從最初的團購形式,通過與大衆點評、摩拜、貓眼等業務的融合,發展到涵蓋餐飲、到店、貓眼、外賣、金融、酒店、旅遊、大交通等多個垂直領域。隨着業務的快速發展,適用於初期的硬編碼方式出現了策略分散沒法管理、邏輯同業務強耦合、策略更新迭代率受限於開發、對接成本高等多種問題。此時,咱們須要有一套可配置化的規則管理平臺,進而實現風控策略與業務解耦、快速部署、驗證。數組
但規則引擎的建設初期,會面臨着各類困難和挑戰,主要包括如下幾個方面:緩存
針對以上這些挑戰,咱們打造了自有的規則引擎 Zeus(中文「宙斯」,來源於「宙斯盾」做戰系統的啓發,指望規則引擎平臺能同「宙斯盾」同樣成爲先進的中央做戰決策系統,實現對風險的精準、高效打擊)。安全
下面,咱們就來具體介紹一下,美團信息安全團隊在系統構建過程當中面臨的挑戰以及對應的解決方案。微信
規則引擎最先只是業務系統中的一個函數,逐步演化成了獨立的服務。而這個獨立服務與業務後臺的交互是單點方式,即業務後臺在關鍵動做節點前調用規則引擎,判斷「有沒有風險」。但這樣每次新增長一個業務或新出現一個風險場景時,規則引擎和業務都要從新進行對接聯調。頻繁地調整給上下游團隊都帶來了不小的負擔,並且在頻繁的更改中,系統質量也難以保證。如何便捷、快速地實現業務接入是系統設計的核心目標之一。架構
在接入成本上,一次性集中接入每每是最便捷的方式。所以咱們選擇在每一個業務都會通用節點接入規則引擎,例如:用戶中心、商戶中心、訂單中心、收銀臺等均爲各種業務的通用節點,規則引擎同這些通用節點對接,業務在調用通用節點時,通用節點調用規則引擎便可完成業務的接入。機器學習
隨着美團業務和場景種類的增多,如今也存在不通過通用節點的業務。所以,咱們須要提供通用的接入接口,目前業務側直接調用一個獨立服務接口便可得到風控判斷。異步
風險點多且業務多,進一步增長了場景、策略邏輯的複雜度。表達式語言可支持的邏輯計算範圍有限,複雜的邏輯若仍經過硬編碼實現,會存在效率低、不易複用等問題。
受模塊化思惟啓發,咱們將複雜的邏輯封裝成模版,實現配置化,並支持邏輯複用。這樣就大大提高了規則引擎可實現的邏輯範圍。目前,咱們已經建設的幾類經常使用的封裝邏輯以下:
風險點多的另外一個挑戰點是在多業務中會存在同質性,即制定的風險策略是可複用的。當一百條規則須要複用在幾十個場景中,逐個配置的效率過低,不只一致性難以保障,後續的修改也是問題。同時又衍變出部分複用、部分差別化,讓業務直接複用場景行不通。所以,咱們引入【規則組】的概念,將規則聚類管理。好比衆包識別規則組、虛假設備規則組、涉黃內容識別規則組等。業務在應用時,可在本身的場景中進行差別化的應用。
當外部風險變化時,風控的對抗也須要及時響應,這是一個爭奪「主導權」的比賽。風控經過對不一樣階段的組合打擊,實現策略的健壯性,包括用於識別有沒有風險的基礎對抗階段、引導節奏混淆視聽的「短平快」階段、誘敵深刻的「高精尖」階段。對應系統須要支持不一樣階段的策略配置、迭代和驗證需求。而在策略迭代和部署階段,須要特別注意因配置錯誤致使的誤命中問題。
參考開發環境分類:測試環境、預發佈環境和生產環境。規則引擎在規則的部署和迭代上,可經過標記、雙跑和回溯功能,咱們經過應用實時線上流量和歷史數據來驗證策略的有效性。
經過這些功能,能夠下降策略迭代的風險,縮短策略部署上線的時間週期。
在確認清楚挑戰和解決方案以後,規則引擎的總體建設思路就已經造成了。現今,規則引擎隨着業務的快速擴張,由一個內部系統逐漸發展爲服務多個風控團隊的公共平臺。
從初期主要圍繞風控防控痛點進行搭建的表達式服務包,升級到配置化平臺,在配置效率和執行效率也獲得了很大的提高。同時,隨着人工智能技術的應用和風控對抗進入白熱化,規則引擎也將從配置化快速迭代至自動化、智能化。
在系統建設中,進行了充分的論證後就須要快速落地,避免因長項目週期需求發生裂變而致使不可控。在初期,咱們已經創建了aviator表達式服務包並穩定服務。所以,配置化平臺搭建時仍基於表達式語言,引入場景、規則、因子、決策等概念搭建,將策略的執行分爲執行層和計算層。
執行層:經過場景得到一堆規則集合,規則執行完成後將其結果和對應的決策返回。
結果和:在規則執行時會進行其構成因子計算。
規則引擎搭建的初衷之一是提高風控對抗的總體效率。在對抗過程當中,咱們須要各類角色配合,例如開發建設系統、策略制定者、策略使用者和風險用戶等,所以須要針對各種角色定向開展提效工做。
(1)風險用戶處理提效(風險用戶)
業務已經能夠實時得到風控的決策,但發現風險用戶會在不少場景下重複攻擊。對這類用戶的處理,除了對當次行爲阻斷,還要阻斷其將來的行爲,所以就有名單管理的訴求。咱們經過與名單庫的聯動,提高該類用戶的處理效率。
例如:在美團金融項目場景下,嚴重逾期的用戶會加入禁貸名單,再次申貸時取消其貸款資格。
(2)業務接入提效(業務方)
除了上面介紹的統一接入外,還有一種常見的狀況:業務沒法在發起請求時就將執行所須要的所有參數準備好,此時就須要引擎能主動獲取外部數據。針對這類狀況,規則引擎經過數據接口的方式實現了外部數據的補充,在策略執行時根據計算須要動態獲取相關的參數。在實現與外部數據聯動的功能後,大大下降了使用規則引擎業務方數據準備階段的壓力,從所有參數準備簡化爲僅提供核心參數便可,剩餘參數按需引擎自行調度便可。
(3)策略管理提效(產品)
策略產品是規則引擎的主要用戶,主要的工做流程是圍繞策略管理、分析、驗證進行提效。如何管理大量的規則和應用場景?怎樣快速驗證策略有效性、評估誤傷率?客訴反饋問題,如何快速還原規則命中狀況?針對這些維度,咱們分別提供不一樣的產品功能進行提效。
(4)工程效率提效(工程師)
複雜的邏輯且具備通用性就能夠對特徵邏輯封裝,避免工程師重複進行邏輯開發工做,釋放出的開發資源能夠進行其它維度的提效。
(5)算法/模型接入提效(算法工程師)
當對抗升級時,策略的產生者由人變爲算法/模型。而機器的生產效率遠遠高於人,人工搬運算法/模型會成爲迭代效率的瓶頸,怎樣跟算法、模型平臺進行快速聯動呢?最簡單、快速的方式就是使用引擎提供的外部數據聯動方式,將模型結果包裝成數據接口使用。但在實踐過程當中,咱們發現模型的出入參數較多且存在變化,總體的配置化效率低,模型應用和迭代頻率受限制。公司內部提供的深度學習仍是算法工程平臺,目前主攻計算、訓練等場景,在上下游應用提供標準化的數據產出,但沒法同相似引擎的平臺對接。
所以,僅聚焦在引擎與算法平臺的聯動上,可經過建設調度模塊實現:1.訓練樣本預處理-->2.算法平臺對接-->3.自動化生成接口-->4.自動註冊接口/策略至引擎-->5.評估任務啓動-->6.評估結果處理(策略上下線、樣本數據沉澱)-->1.訓練樣本預處理的閉環流程。
隨着引擎在多業務場景的應用,咱們發現幾個實時引擎很差處理的場景。好比拉新場景,須要結合「註冊+登錄+交易」等多種行爲來判斷是否有「薅羊毛」等黑灰產行爲,須要將不少事件放到一塊兒去綜合斷定。當發現風險時,或在當前時間點漏過的變異風險在發現以後,須要對歷史數據進行回撈,這些在實時引擎中都不太好實現。當前已有的異步引擎也沒法很好地進行覆蓋。爲了不作「重複造輪子」的事情,團隊充分地討論了實時、異步和離線引擎的定位和服務邊界。
在實時引擎已經覆蓋的邏輯基礎上,咱們引入新的封裝邏輯-個體因子,全局因子實現SQL語句的配置化管理,進而實現批量累計、聚合特徵的計算,好比:近一年某商家的平均下單金額,近30天商戶大盤下單均值,標準差等批數據的複雜邏輯。並基於Spark和實時引擎底層,實現多流和批數據的處理,解決上述場景沒法處理的一些問題。
交易安全
策略產品在平常工做中,經過對業務分析發現風險、挖掘風險特徵並應用在策略中。經過Zeus實現策略的部署和應用,大大下降了業務風險,提高風險防控效率。例如:在某業務地推場景中發現B、C端聯合刷單風險,以返利、送贈品收到誘騙下單。
金融安全
金融風控主要有反欺詐和信用安全。反欺詐同業務安全在策略形態上相同,都是判斷有無風險,在決策結果上是經過和拒絕。所以,經過普通決策便可知足業務需求。
但信用安全會比前二者複雜一些,在決策上,除了經過和拒絕外,對於經過的請求要進行分層實現金融的差別化訂價。所以,須要在規則引擎中引入更多功能,來知足業務需求。主要包括:
目前規則引擎正處於配置化階段,正在向自動化、智能化的階段發展,從而不斷提高策略的管理和迭代的速度。但業務間的智能化訴求和進程不一樣,平臺能夠提供更多集成託管服務,從而提高各業務的智能化覆蓋度。
其次,引擎仍然存在沒法處理的幾個問題:
一些長時間週期特徵沒法快速應用的問題,例如近一年的時間週期。如何將離線引擎和實時引擎在特徵計算上組合,實現特徵的快速生產、驗證和應用,從而擴展引擎的計算能力範圍、提高風控業務的對抗效率。
當前引擎的接入對非複雜邏輯需求的業務就比較重。而接入成本是各業務接入時重點評估的因素,如何實現快速、低成本的業務接入(包括技術接入和人員操做接入),考慮提供模塊化的引擎計算服務能力適用於各種業務訴求,實現按需接入,比較「臃腫」的全局接入會更快速和便捷。但這種在引擎側怎樣更好地管理這些模塊,也是一個挑戰。
最後,業務流量和策略的增加速度仍在高速增加,引擎的穩定性和策略管理效率也須要持續提高。
規則引擎建設時兼容各種業務場景,具有了極高的靈活性,同時自身也相對複雜。從頂層的路由場景到底層的參數(路由場景-場景-規則組-規則-決策-因子-參數-數據接口-參數)每個節點、節點間都是由用戶配置的,在產品上指望用戶的操做流程是連貫的,在一個操做流程中解決儘可能多的問題。系統架構上,包括配置層、執行層、計算層、數據獲取層等,各層之間相互依賴,對最終引擎的輸出結果負責,底層上須要儘可能的解耦合,纔將下降單模塊對引擎的影響。但在實踐中,隨着業務訴求的增多,慢慢就出現來產品上的低耦合、架構上的高耦合狀況。
例如:在用戶修改生產策略時的強制更新流程優化項目中 ,就涉及了這個問題。在產品功能上用戶修改策略-->雙版本策略並行執行-->兩版本數據覈驗-->修改完成;但在系統架構上,上述的產品流程就產生了系統架構高耦合,即生產修改雙版本問題,配置層、執行層、計算層高度耦合。項目一期上線後在性能上、後續功能擴展性上都有瓶頸。隨後,技術項目優化配置層的緩存模式,採用增量更新方式。產品功能上增長用戶進入修改模式後修改。從新立項後,實現了用戶修改流程閉環、系統架構上僅配置層兼容雙版本,執行層和計算層無耦合。
所以,在產品功能設計上除了用戶閉環操做外,還須要考慮是否低耦合。在技術優化時須要前瞻性的開展去耦合項目。
隨着接入業務的增多,又須要兼容新業務定製化需求,就面臨這一個問題:定製化的功能不具備通用性,大量定製功能將加劇平臺的複雜度。這個問題一直困擾引擎建設團。,目前,咱們採用的也許不是最優但比較有效的辦法。主要經過定、判、看Gap,將業務需求轉化爲系統模塊升級功能和非系統功能:
對於系統模塊升級功能,可逐個完成。對於非系統功能,可經過提供公共對接服務的外掛來實現。
人工操做會存在各種誤操做引發的風險問題,在產品設計上,用戶操做簡潔的初衷是好的,但須要增長防止錯誤發生的限制方法。在實踐中這些「防呆」設置大大下降了人工誤操做Case,例如:
要認可一個事實就是,最瞭解功能使用的可能不是規則引擎的產品經理。在規則引擎的建設中出現了這樣的」驚喜」,例如:
總結而言,作好業務按期應用回訪和應用監控是很是有必要的。
美團信息安所有正在招聘實習生,業務方向包括:安全後端開發機器學習算法天然語言處理風控策略數據開發Web前端測試開發產品經理產品運營安全與隱私合規等。工做地點:北京/上海。歡迎感興趣的同窗發送簡歷至:tech@meituan.com(郵件標題註明:美團信息安全團隊)
閱讀更多技術文章,請掃碼關注微信公衆號-美團技術團隊!