一個CPO的心得分享:搭建風控系統道路上踩過的坑
從業近10年,大大小小參與了3家公司不同領域的風控系統的設計,從前到后把風控系統所有環節都細細的琢磨過,然而至今仍然感覺剛剛一只腳踏進門而已。
大多數人做的產品都是目的明確的,比如訂單支付、賬戶體系要做什么一開始就知道了,而且也有很多的競品可以去參考;風控系統卻完全不一樣——未來要面對什么問題不可能完全了解,做每個功能都謹小慎微,因為一個不注意走錯了方向,可能就會在未來的某個階段要全盤推翻。
而對于研發資源緊缺的安全需求來看,往往會在某個時間把自己擺到一個非常尷尬的境地,問題解決不了,改造又面臨大量的時間和溝通成本。
所以,把本人踩過的一些坑在這里分享出來,讓準備搭建風控的人心里有個數。
業務安全風控設計101-信息采集
業務風控主要做四件事:
- 拿到足夠多的數據
- 做足夠靈活的分析平臺去分析數據
- 產出風險事件進行阻攔風險
- 量化風險攔截的價值和不斷分析案例進行策略優化
拿數據這件事幾乎是決定風控系統成敗的核心,由于篇幅問題我們先主要說這點,主要有三件事要考慮:
1?拿到的數據越詳細越好
拿賬號安全這件事來舉例子,如果能拿到基礎的登陸注冊數據,就可以從頻率、登陸注冊特征來進行分析;
如果可以進一步拿到登陸注冊行為的上下文,比如登陸前訪問了哪些頁面,登陸后去訪問了什么,就可以從訪問行為軌跡來增加更多的分析維度,例如頁面停留時間,是否有訪問到必訪問的頁面等;
如果還可以拿到用戶的操作行為數據,比如鼠標移動的軌跡,鍵盤輸入,那么可以進一步的從操作過程來增加分析維度,比如是不是輸入密碼的時候有過多次輸入刪除?是不是直接復制粘貼的賬號密碼?
2建立標準的日志格式
確認好能拿到哪些數據以后,就要開始建立標準的日志格式。
常見的登陸、注冊、下單、密碼修改、綁定憑證修改等等都要給出一個標準的日志格式,而且要充分考慮到字段命名的統一,比如密碼、用戶名字段的名稱如果在不同的日志中叫法不統一,在后續分析和指定策略的時候都會遇到不小的麻煩。
3拿到的數據質量
必要的字段是否都能拿到?
往往風控關心的信息比如IP地址、UserAgent、referer這些信息業務都是不關心的,但這些信息的缺失可能造成很多策略沒法做,所以在采集信息開始的時候就要有個明確的信息列表,一旦妥協了后面再去返工讓研發加是會遭白眼的。
數據信息拿的是否準確?
比較常見的是需要用戶的訪問IP,結果拿到的IP地址是內網的服務器IP;或者是想要用戶名,結果傳遞過來的是UID。這點需要大量的前期溝通確認工作,一旦上線了以后發現數據不對再改也同樣要遭白眼。
拿數據有主動方式和被動方式兩種:
1主動方式方式
主動方式是自己去數據庫、日志里面去讀。
這種方式實時性比較差,而且基本有什么拿什么,想加信息是比較難的,但不需要研發配合太多事情,適合喜歡自己動手豐衣足食的場景。
當然有些比較成熟的公司有自己的消息總線,風控可以去實時的訂閱信息然后作為數據源進行分析,但這種通常為少數;
2 被動方式方式
被動方式就是提供接口給研發,讓業務把消息按格式標準噴過來。
這種配合周期非常長,但可以按照標準來拿到高質量的信息,所以是比較常見的風控系統搭建方式。
踩坑記
1號坑:
如果拿消息是多數據源的時候,必須要考慮到消息的時間序問題:
比如登陸日志是公共服務發過來的,網頁訪問是拿的access_log,用戶操作行為數據是頁面JS或者SDK發過來的,那么這三者的時間是不一致的。
這就必須要在確認所有的消息到位之后再進行分析判斷。否則,如果實時策略考慮了登陸的時候必須有頁面鍵盤點擊,而兩個數據到位的時間不一致,就可能出現大量的誤封造成事故。
2號坑:
對采集回來的數據必須定期的對數據質量進行監控——
已經采集到的數據可能因為技術架構調整,代碼更新等各類奇葩原因造成采集回來的數據不準了,如果無法及時發現可能造成后面一系列分析過程都出現錯誤。
3號坑:
采集點盡量選擇穩定的業務點,比如采集登陸日志,一次性在公共服務采集好,后面出現問題只要找一個點。
如果是去前端從WEB、移動端等各個調用登陸服務的點去采集,出了問題要改動的工作就會成倍增加,還有可能出現新業務點的日志無法覆蓋的情況。
4號坑:
關于技術選型:
消息隊列是必須的,用restful只能處理業務日志比如登陸這種1秒最多幾次的類型,如果后期要去采集頁面訪問行為這種一秒上千的消息就必須要用到隊列.
開源的可以考慮RabbitMQ或者Kafka,穩定性都還不錯。
5號坑:
關于日志存儲:
ELK是不錯的選擇,為后續的分析平臺提供基本的查詢功能。
101 信息采集 結語
信息采集往往是實施風控的最難的一個環節,但也是最重要的環節,覆蓋、質量、時效都決定了項目的成敗。
因為出于溝通的壓力,往往會有比較多的妥協,也就為后期風控系統的搭建埋下了隱患,其實也很難一篇文章把細節描述詳盡。
業務安全風控設計102-風險分析
上一章介紹了第一點,如何去獲取足夠多的數據,而接下來的事情就是要創建一個機制去靈活的處理這些信息,為自動分析捕捉風險事件提供基礎原料,進而借助規則引擎從中分析出風險事件。
在開始前,我們還是回顧下業務風控主要做四件事:
- 拿到足夠多的數據
- 做足夠靈活的分析平臺去分析數據
- 產出風險事件進行阻攔風險
- 量化風險攔截的價值和不斷分析案例進行策略優化
接下來,同樣的有三件事情需要考慮:
1.讓分析人員可以快速的查詢原始日志
日志并不是簡單的存下來,從風控分析的需求來看,通過IP、用戶名、設備等維度在一個較長的跨度中搜索信息是非常高頻的行為,同時還存在在特定類型日志,比如在訂單日志或者支付日志中按特定條件搜索的需求。
而這些主要是為了能夠讓分析人員可以快速的還原風險CASE,例如從客服那邊得到了一個被盜的案例,那么現在需要從日志中查詢被盜時間段內這個用戶做了什么,這個過程如果有一個界面可以去做查詢,顯然比讓分析人員用grep在一大堆文件中查詢要快的多,并且學習門檻也要低得多。
如果在日志做過標準化的前提下,也可以進行后續的業務語言轉譯,將晦澀難懂的日志字段轉化為普通員工都能看得懂的業務語言,也能極大的提升分析師在還原CASE時閱讀日志的速度。
2. 實時或定時的計算加工消息成變量&檔案
例如在分析某個帳號被盜CASE的時候,往往需要把被盜期間登錄的IP地址和用戶歷史常用的IP地址進行比對,即使我們現在可以快速的對原始日志進行查詢,篩選一個用戶的所有歷史登錄IP并察看被盜IP在歷史中出現的比例也是一個非常耗時的工作。
再比如我們的風控引擎在自動判斷用戶當前登錄IP是否為常用IP時,如果每次都去原始日志里面查詢聚合做計算也是一個非?!百F”的行為。
那么,如果能預定義這些變量并提前計算好,就能為規則引擎和人工節省大量的時間了,而根據這些變量性質的不同,采取的計算方式也是不同的。不過還好我們有一個標準可以去辨別:頻繁、對時效敏感的利用實時計算(比如訪問頻率、時間間隔);而相對不頻繁、對時效不敏感的利用定時計算(比如用戶的常用IP、設備,即使少算短期內的登錄記錄,也不會受到太大影響)。
3. 選擇規則引擎將人工策略自動運行
一個設計優雅的規則引擎是把分析師的經驗決策和數據最終轉化為風險輸出的核心模塊,首先說為什么需要規則引擎而不是選擇硬編碼邏輯——
筆者無數次遇到過這種場景,一個上午剛剛上線的策略,沒過1個小時,攻擊者或者欺詐者就已經試出繞過策略的方法了,如果你的風險控制邏輯是硬編碼,那么恭喜你,再走一遍開發測試發布流程。
快速響應是安全的生命線,無法想象還有比被攻擊者胖揍48小時然后才反應過來去擋臉更讓人沮喪的事情了。
所以策略引擎必須能把策略邏輯從業務邏輯中解藕出來,讓防御者可以靈活配置規則在靜默模式下驗證和實時上線生效,并可以去隨時調整。
類似的開源框架有很多,各有優劣,但如果需要降低學習曲線,必須進行一層包裝(這里又是一個比較大的話題,就先略過了)。
坑位標注:
1、Sharding會影響到你的策略
為了支持并發和性能,通常在利用集群計算變量的時候我們會用到sharding。
sharding方式會按IP把數據分配到不同的運算單元中去處理,在讀取結果的時候按IP去集群中的某臺機器中去拿數據,以大幅提升并發處理讀取計算結果的能力。
那么,現在如果我想去按某個USER去拿數據的時候,就會發現一個用戶在不同IP下的信息被保存在不同的服務器上了,所以單一的Sharding分配肯定是不合理的,這點必須要注意。
2、策略中用到的變量,能不用現場算的就不用
有些簡易的策略引擎設計中用到的變量都是到數據庫里現場算的,雖然可以極大的提升靈活性(新的變量不需要考慮歷史數據回補),但會極大的影響穩定性和響應時長,尤其在業務請求爆發的時候幾乎都會出現宕機無響應的問題。
要知道業務研發對安全的結果并不是那么敏感,但如果出現了問題導致應用不穩定給人添麻煩,被拋棄可能就是早晚的事情,所以變量一定要盡量做到提前計算,并且設立緩存機制。
3、對風險分析要用到的計算資源有充分的認識
毫不夸張的說,合格的風險分析要做的實時、準實時計算量要大過應用內所有計算的總和甚至超過幾倍。
其實這也很好理解,比如一個典型登錄場景,業務要做的邏輯最主要的就是檢查密碼和帳號的身份是否吻合,而風控要把這登錄用戶的歷史檔案全部拉出來看個遍,然后根據風控策略來決定是否放行。所以在規劃風險分析要用到的資源時請不要吝嗇,按業務5X甚至10X的標準來評估風險分析的資源需求。
如果說信息采集主要看的是安全產品經理的溝通協調能力,設計風險分析功能更多的就是考驗安全產品經理的邏輯思維能力。
到了這樣一個階段,外部冗雜的溝通協調已經結束,但如何最大化利用前期打下的基礎,需要對風險問題的分析、決策過程有一個非常清晰的認識,這里也有一個比較好的標準來去檢驗:
- 分析平臺設計的差,那么就只有設計者自己會用;
- 設計的好,你會發現處理投訴的客服、分析師都會很樂意來用你的分析平臺為他們解決問題。
業務安全風控設計103-阻斷風險
本系列的上一篇文章介紹了在采集信息后如何去分析這些數據產出風險事件,而產出的報警已經脫離了業務系統并不能被采用的。說白了:
分析出來的東西不能光自己看著High,還得去阻攔這些風險才能真正產生業務價值。
在開始前,我們還是回顧下業務風控主要做的四件事:
- 拿到足夠多的數據
- 做足夠靈活的分析平臺去分析數據
- 產出風險事件進行阻攔風險
- 量化風險攔截的價值和不斷分析案例進行策略優化
到了第三步我們離整個系統核心框架的搭建就只剩一步之遙了,那么讓我們看看這個環節要考慮什么:
1、最終呈現給業務研發直白的判定結果
我們最終從數據中發現的報警和問題最終是要在業務邏輯中去阻攔的,在接入這些結果的時候,往往分析師覺得可以提供的信息有很多,比如命中了什么規則、這些規則是什么、什么時候命中的、什么時候過期,其中最讓接入方心煩的當屬風險分值當仁不讓了,很多接入風控的研發看到這些分值就一腦袋包:
你到底想讓我做什么,攔還是不攔?這時候如果你喏喏的再丟出個多少分值以上要攔,研發多半都會跟你說直接給我結果就好了。
是的,很多風控接口設計的都十分累贅,無用信息多到研發會覺得你在故意浪費帶寬,其實一個code list給他們說明對應希望做的操作就好,一定把你覺得那些很牛逼的中間結果等等包裝成最終結果再給出去。
2、T+0還是T+1
舉個例子來解釋實時(T+0)和異步(T+1)風險判斷的區別。
T+1
你在打拳擊比賽,選手A只會打臉,上來就照著你臉來了一拳,你分析了一下打臉很疼而且不科學,在第二拳往臉揮過來時你突然告知對方不可打臉,對方就成功的被你克制住了。這就是T+1的特點,至少要在第二次風險攻擊才可以生效;
T+0
拳擊比賽第二場對陣選手B,同樣被打臉后你說不可打臉,對方說好,結果沖著肚子就來了一拳。你說禁止打肚子,對方又一拳打腋下。這時你發現要在對方揮拳馬上打到你之前就要禁止。
這就是T+0了。
因為T+0在接入的時候要額外承擔很多計算成本,結果要現場算出來而延時要求又很高,所以一般都只在攻擊者得手關鍵步驟采取實時判斷(比如訂單支付或者提現請求)。而對于其他場景可以選擇T+1方式,比如登錄或者提交訂單等。
3、阻斷邏輯到阻斷產品
這一點我們豈安在對外演講的時候介紹過很多,在阻斷風險的時候事件發生的點是不同的,但短期又不可能讓業務研發在所有的地方接入風險阻斷怎么辦?
所以我們需要考慮幾個基本的保底措施,比如統一的驗證碼驗證頁面在IP層全局防止任何爬蟲腳本行為,在賬號層通過登錄態管理統一攔截單個賬號在登錄后任何風險行為(全局強制登出)。
可能這些措施在體驗上不是最好的,但是在發生特殊問題的時候要等研發給你臨時加阻斷邏輯這個時間就沒法控制了。
坑位
1、接入風控阻斷的邏輯位置
登錄的時候賬號輸入框鼠標失焦就要去走風控了,登錄結果出來之后再去判斷就沒意義,而資金相關的一般是在跳轉去收銀臺之前,你會發現一般風險判斷都是在結果出來之前(收集本次行為完整日志之前),所以如果你要做T+0判斷,就要求研發在進行風險判斷的時候要提供更完整的信息,而不是只給個IP或者賬號名就行了(往往T+1就之要這些就夠)。
2、對業務流量充分調研并關注
平時可能流量很小的業務,突然因為某個活動(比如秒殺)流量大增,除了在接入之初要對風險判斷請求有了解,對后續的活動也要提前準備,否則如果資源預估不足,突然又趕上這個點接了T+0接口有很多要現場計算的邏輯,陡增的業務流量分分鐘教你做人。
3、bypass ! bypass ! bypass
風控風險判斷的最基本原則就是要不影響業務邏輯,所以超時機制在一開始就要嚴格約定并執行,一旦發現風控接口超過預計響應時間立馬放行業務請求。
4、讓一線同事們知道你在做什么
任何風控準確率都不是100%的,所以在和研發溝通好接入后一定要告訴一線同事們風控阻斷可能出現的表象,以及大致的原因,以避免一線客服們對風險攔截的投訴不知道如何解釋,并給出具體的阻斷回復措施(加白名單、刪除黑名單等等,上帝們在某些日子比如315維權意識是非常強的)。
103 阻斷風險 結語
阻斷是最終產生真實價值的環節,另外也是關聯部門最敏感的環節(嚇唬我半天逼著我把風控接了,結果一天到晚給我出毛???生產環境是給你們玩的??。?,請保護這至關重要的信任,你后面會越做越順的。
業務安全風控設計104-風險分析
風控系統和大部分的產品項目一樣,最終需要對領導層匯報這個項目為公司帶來了什么價值,這是評估項目成功與否的要素;另外是哪里做的不夠好,如果改善了能帶來更多的價值,給出了預期才有后續資源的補充,整個項目才能轉起來形成一個良性循環。
而這個系列的最后一話:我們來講講如何對風控系統進行效果評估與優化。與之前三期的文章一樣,我們再來洗一次腦業務風控要做的四件事:
- 拿到足夠多的數據
- 做足夠靈活的分析平臺去分析風險
- 產出風險事件進行阻攔風險
- 量化風險攔截的價值和不斷分析案例進行策略優化
讓我們看一下這個環節要考慮的:
1.找到錢在哪里
風控項目的基本價值在于省錢,而省錢的思路基本有三種:
- 直接攔截風險帶來的止損(比如提前阻止了一筆欺詐交易所挽回的損失)
- 提升服務穩定性所帶來的業務基本指標提升(比如因阻止風險事件所降低的服務響應延時而提升的業務轉化)
- 降低服務不可用概率事件所帶來的直接業務損失(比如降低了風險事件導致服務宕機所帶來的營收損失)
可以看出這三點是按風險事件的暴力程度做出的簡單劃分,其實也還有很多其他不同的視角來分類,很大程度上和對應企業的互聯網業務形態有關。
而我們做這樣劃分的目的是為了在一開始就明確風控項目從哪里可以挖掘效益,很多情況下風險事件不是一個獨立的問題,而是一個鏈條,由一些看起來影響不大的問題逐層深入的。
比如,交易欺詐并不是一個獨立的問題,而是因為注冊環節發生的垃圾注冊問題攻擊者手里有了大量的賬號所導致的,所以任何一個風險問題都是有價值的,無利不起早,但作為風險分析者應當有能力找到其中的關聯轉化關系,并預測對方的得手點進行效果評估會有更好的效果。
2.有效利用預期價值的力量
天下沒有100%準確的風控策略,所以在接入攔截的過程中業務方可能存在種種阻力,往往的一個誤區是沒有攔截就認為風控沒有效果,其實效果評估不只是在最后項目落地評估價值所用,在推行項目中間也有很好的效果,雖然沒有攔截,但預期效果放在那里,這對決策者平衡業務影響有著重要的價值。
3.學會考慮企業財務目標
風控系統并不是一個可有可無的東西,其實大部分企業中安全已經是業務的必要組成部分了,那么我們知道在資源有限、而業務風險問題無限的情況下,所有的資源投入都必然有一個優先級,而這個優先級與整個企業發展的現狀必須是牢牢捆綁在一起的,講簡單些:風控系統解決什么問題,評估出的效果與企業目前業務關心的問題息息相關,如果企業目前的業務重點在一次年度促銷活動,那么風控的重點就應當在促銷羊毛黨;如果企業目前面臨嚴重的賬戶盜用投訴問題,那么重點就應在賬號安全。
尤其在風控系統啟動之初,配合系統的需求交付時間選擇對應的重點問題,對于項目效果的評估是一個巨大的加分項,切記一開始就貪大貪全。
4.策略的生命周期和健康度
風控系統的規則有多少?哪些已經很久沒有觸發了?產生誤判投訴的對應規則有哪些?
一個新規則在建立起初的效果肯定是最有效的(因為這時風險問題正在發生,而規則正好對應了風險),但隨著時間其有效性是快速下降的,比如攻擊者都知道網站三次輸入密碼錯誤觸發驗證碼,那么他們會傻傻的嘗試第三次猜測密碼的概率有多大?那么是否有人在定期的去統計分析這些規則的效率就是風控產品的重要運營環節了,而運營風控產品所要付出的代價是往往大于常規互聯網業務產品的,并且是保證項目能夠持續產出價值并不斷迭代進化的一個前提。
寫在最后
業務風控是一個非常具有挑戰性的項目,我一直把它比作一種競技游戲,而這種攻防不同于傳統安全(在傳統安全你并不能有足夠的技術能力預測所有人的攻擊方法),它更強調邏輯和預測,攻守雙方在一個雙方充分了解的環境下(業務邏輯簡單到任何人都可以理解,但又可以產生無數的變化和組合)不斷的博弈,而這正是業務風控系統的樂趣所在。
業務風險問題足夠簡單而又足夠復雜,正是這樣的原因其參與攻擊者并沒有太高的門檻限制。處于國內互聯網的環境下,任何一家企業都不可能逃開業務風險問題的影響。
作一個比喻,這片土壤是有著自己的一些特質的,而企業如果是生長在這片土壤中的一顆樹,投入足夠的養分才能快速生長,而業務風險則是寄生于樹木竊取養分的角色,只有能夠充分抵御這種風險的才能成長為參天大樹。
作者:劉明,豈安科技聯合創始人,首席產品技術官。超過6年的風控和產品相關經驗,曾就職網易,負責《魔獸世界》中國區賬戶體系安全?,F帶領豈安科技互聯網業務風控團隊為客戶提供風控服務。
本文由 @劉明 原創發布于人人都是產品經理。未經許可,禁止轉載。
66666
辛苦
詳盡且貼近互聯網金融的實際~感謝分享!
樓主文筆真好 好幽默