砍價活動風控的跟蹤記錄


前段時間,突遇滑鐵盧的砍價活動可讓我頭發禿了一大把。

砍價活動的業務線很簡單,APP或小程序參與然后直接邀請微信好友助力,被助力成功后就可以領取限量獎品,先到先得,而賬號是跟手機號綁定的。

總體看來功能也不算復雜,再到上線后的跟蹤,前幾期活動都沒啥大問題。

但我總覺得有點太順利了。。。

終於在開始第四期的活動時,發現一些數據很可疑。

1,線上監控日志發現很多異常調用接口的請求

2,存在部分新注冊的用戶頭像一樣,雖然手機號不一樣

3,砍價過程中獎品庫存數量減少得很快,一個獎品最快2-3分鍾就砍完了(砍價主要是邀請新用戶)。

4,活動接入的第三方風控沒有預警

4,發現邀請的新用戶助力時間分布間隔非常近

因為項目開發時就已經考慮了第三方風控,所以首先查看第三方風控的日志記錄,發現風控后台的賬號(手機號)檢測正常,這就有點矛盾了。。。

 第一期數據采集分析

因為正常流程是在小程序發起的,而且新用戶助力需要在小程序登錄,所以可以記錄到用戶的unionId,結合線上被刷接口的日志。

分析后做了以下優化:

  • 助力請求包含用戶的unionId,后端保存該unionId
  • 前端增加第三方的數據埋點

接着是測試后第五期活動上線,並實時跟蹤線上活動效果,發現原本能持續3天活動獎品,當天就被搶完了,這庫存減少速度明顯着異常,看來是遇到羊毛黨了。

好了,第五期活動一結束就拉着相關人員開會,也算是風控的真正開始。

第二期風控優化

通過會議討論,初步發現:

1,數據庫中約80%的助力記錄中沒有unionId,小程序最新版本正常助力會傳unionId

2,由於微信小程序更新存在延遲,線上存在部分老版本,故無法回傳unionId

3,部分運營反饋的風險用戶,其中部分助力數據顯示正常(沒有重復的unionid、手機號、ip等)

4,其中第三方埋點統計的按鈕點擊次數也與總助力次數相差極大(考慮到用戶可能多次點擊,正常情況下同一次砍價流程,埋點數>=助力次數)

5,第三方風控本次活動檢測數為上期活動檢測數的1/4,即大部分助力繞過了風控平台

6,由於活動助力僅能在小程序發起,即必定會綁定小程序,而unionId是用戶綁定小程序的唯一憑證,所以unionId可以作為助力必傳字段

由於第三方風控可是付費了的!先從這邊入手。

發現當時為了提高性能,后端設計時,僅是在助力頁面加載時做了風控效驗,助力接口上沒有效驗。那么羊毛黨獲取到相關參數后,通過助力接口就可以繞過檢測。

那么是否把風控效驗放到助力接口上?

接着順便找了幾個賬號對風控做了准確性測試,發現羊毛黨賬號中的全部助力用戶僅能識別50%的用戶為可信用度低,其他均為白名單用戶,即返回數據存在誤殺。

如果風控效驗放到助力接口上,又不想誤殺,第三方風控人員建議我們接入滑塊效驗,由於接入滑塊可能需要更改業務流程,影響性能的同時改動周期比較長(涉及購買合同等等),暫時不考慮。

分析后做了以下優化:

  • 前端助力接口必傳unionId參數,且后端驗證unionId是否已存在,不存在則判斷用戶助力失效,重復unionId用戶的助力機會取活動的助力次數上限。
  • 助力用戶的IP地址的風控限制,由於切實存在IP地址相同的場景,該值上限可做配置化。
  • 前端優化助力操作的第三方埋點事件(助力成功后才會統計),包括小程序的版本號。
  • 由於效果一般,先去掉第三方風控。

異常訂單處理,后置風控!

對照第三方埋點數據,通知運營對異常訂單不發貨,進一步避免損失吧!

我的頭發開始掉了。。。

接着是測試后第六期活動上線(獎品數量較少),並實時跟蹤線上活動效果,發現初期活動獎品的庫存減少速度正常,后期庫存減少速度異常,半天后活動全部獎品砍完。

可以看出:初期由於風控使羊毛黨用戶無法正常砍價,而后期懷疑羊毛黨偽造腳本升級導致異常,即上期風控存在效果但還需要持續優化!

第三期風控優化

通過會議討論,初步發現:

1,用戶小程序授權后不進行小程序登錄,通過調用app登錄接口,獲取相關信息后也能進行砍價(漏洞)
2,而且運營在用戶群里面發現了活動幫砍廣告,進一步發現羊毛黨開發了針對性的砍價工具,繳少許費用后就能幫砍成功(如下圖,太囂張了)
 
 3,后端監控日志發現登錄接口被刷,而登錄接口與線上活動接口不知何時關閉了驗簽功能(汗顏) 
 
針對1漏洞,用戶小程序登錄的流程分為兩步(小程序登錄的  官方參考鏈接 ):
  • 第一步是授權,其中授權后服務端就會保存該用戶的unionId,只是此時不生成用戶ID。
  • 第二步是登錄,老用戶授權后自動為登錄狀態,如果是新用戶登錄,之前授權的unionId就會與用戶ID生成綁定關系。

所以非法調用APP登錄以獲取到有效token,就能繞過小程序登錄,也能正常助力,但該情況不會生成綁定關系。

於是助力人的unionId與該用戶ID存在綁定關系才能助力成功!

此外還准備了兩個殺手鐧,一是頁面接口加入身份校驗參數A,助力時入參需要把參數A帶上;二是助力接口入參PB化(Protobuff),門檻瞬間提高幾丈。

於是整理風控解決方案如下:
  • 針對助力接口,后端需要驗證該unionId是否與助力的用戶ID是否匹配,匹配正常才能助力。
  • 登錄接口與線上活動接口開啟驗簽功能。
  • 助力接口增加身份校驗參數,並對接口入參進行PB化。
  • 第三方埋點數據分析,用戶砍價存在助力的埋點記錄即為正常助力。
  •   異常用戶加入砍價黑名單,需要提供往期黑名單用戶

繼續異常訂單處理!

和上次一樣同步異常訂單給運營,運營已經面露難色!

我的頭發掉得更厲害了。。。

接着是測試后第七期活動上線(獎品數量多,但部分質量較低),並實時跟蹤線上活動效果,發現活動共持續了3天,獎品的庫存減少速度正常,到活動結束時仍然存在剩余獎品。

由於第三方數據平台會記錄小程序端助力的埋點數據,補充分析如下:

1,活動完成后,統計第三方埋點數據與總的助力次數,發現99.4%的數據是正常的(埋點統計可能存在誤差)——證明風控有較好效果

2,統計砍價成功的助力數據,如果助力次數<埋點次數,則用戶存在砍價異常(埋點統計可能存在誤差,5個以內可以接受)。

注:僅發現一個用戶偏差較大(占0.2%),已同步給運營,綜合分析后發現該用戶的各種砍價行為正常,可能需要再次觀察 ——證明風控存在較小風險

可以看出:活動期間庫存減少速度正常,短期內使羊毛黨用戶無法正常砍價,總體來看這次風控是有效的(部分獎品價值較低,不排除羊毛黨沒參與本次砍價),所以下期活動可以放開點。

兩天后第八期活動上線!

本期獎品數量多,但部分質量較低,原計划持續2天的活動僅持續了1天多點,結合反饋,第一天的凌晨后庫存減少速度開始異常,用戶助力時間分布間隔非常近。

。。。。。。so風控還需要再次優化!

第四期風控優化

通過會議討論,初步發現:

1,本期活動所有助力成功用戶記錄有8萬多條。

2,本期活動所有助力成功記錄埋點有7萬多條。

3,本期砍價成功的助力記錄為7萬多條,與神策次數對比,經過運營統計異常訂單占33%。

4,存在非法用戶購買了砍價工具,並發布了幫砍廣告。

通過后台日志分析,發現小程序登錄接口調用正常?

 

上圖為官方說明,我們在前端授權后,服務端會把正確的sessionKey返回給前端(官方提示不能傳),如果羊毛黨知道正確的OpenIdUnionID及對應的sessionKey,是不是就能反向破解sessionKey了。。。

能不能破解已經不敢想了,必須馬上隱藏sessionKey!!!

為了兼容老版本,sessionKey做了映射,相當於返回一個假的sessionKey並且每次使用后就會刪除映射關系。

通過會議討論,考慮到成本、時間與后期規划,解決方案如下:
1,小程序登錄參數秘鑰策略調整(sessionKey隱藏)
2,減少羊毛黨砍價速度,同一個用戶 新用戶1分鍾助力不得超過5次
3,人工實時預警,加入黑名單干預用戶砍價
4,購買並分析砍價工具,針對調整

又是異常訂單處理!

和上次一樣不太一樣的是,運營開始主動索要異常訂單了!

已經來不及關注頭發了。。。

接着第二天第九期活動上線,活動開始前兩小時,庫存減少正常,中午開始庫存減少異常,原計划持續2天的獎品,半天多獎品全部砍完,so上期風控優化點基本無效。

第五期風控優化

 通過會議討論,初步發現:
1,本期活動本期活動所有助力成功記錄第三方埋點有9千多條,約一半的助力記錄存在異常。
2,通過后台日志分析,發現小程序登錄接口調用正常,沒有出現偽造的調用記錄。
3,之前購買的砍價工具都是后台操作,前端根本看不出來啥,想到羊毛黨這方面應該有措施,直接放棄

先處理異常訂單吧!

有人投訴我們了,運營說,能不能風控前置,避免異常訂單!

頭發一抓一大把。。。

要不考慮下跟第三方埋點平台打通?一條埋點數據對應一次成功助力!

首先第三方埋點是小程序客戶端的按鈕事件,非法用戶首先得捕捉這個請求,其次得破解第三方埋點的通訊加密,偽造成本那是相當的高,但反過來想想。。。
我們如果要打通第三方平台
  • 需要第三方提供數據查詢或支持數據回傳的功能,第三方說都可以的,只不過要加錢。。。
  • 埋點數據會有延遲,實時性不高,意味着可能會花費很長時間去判斷一次助力是否正常!
  • 埋點數據會有誤差,可能客戶端產生4次事件,而第三方收集的數據可能只有3條,2條。
  • 打通第三方平台可能需要產品程度上重新設計。。。
思來想去,似乎這個工作量與費用不亞於一個新的第三方風控了,怎么辦?

該做的都已經做了,而且調用記錄都是正常的!!!

是不是微信登錄第一步授權已經被破解了,所以偽造的都是正常的數據?
網上一查,也有公司遇到過相同的問題,懷疑 wx.login() 獲取的臨時登錄憑證code可以被偽造,但是微信官方也沒有給出回答。。。
有點泄氣的我們,通過會議討論決定:
1,趁着還有點時間,拾起之前的第三方風控,做滑塊校驗
 
但經過對接后發現該風控的滑塊校驗不支持微信小程序。。。黔驢技窮, 由於運營計划的時間成本等原因,也來不及接入其他第三方風控了。

於是活動暫停,風控以失敗告終。。。

結語:雖然結果難以接受,但也收獲了很多,見識了真正的黑產,正所謂道高一尺魔高一丈,以目前的團隊還是有點捉襟見肘,慢慢提升自己吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM