最近1 ~2年電商行業飛速發展,各種創業公司猶如雨后春筍大量涌現,商家通過各種活動形式的補貼來獲取用戶、培養用戶的消費習慣;但任何一件事情都具有兩面性,高額的補貼、優惠同時了也催生了"羊毛黨"。
"羊毛黨"的行為距離欺詐只有一步之遙,他們的存在嚴重破環了活動的目的,侵占了活動的資源,使得正常的用戶享受不到活動的直接好處。
今天主要分享下騰訊自己是如何通過大數據、用戶畫像、建模來防止被刷、惡意撞庫等的。會偏業務安全一些,有些組件,也會從邏輯、代碼層面進行介紹。
"羊毛黨"一般先利用自動機注冊大量的目標網站的賬號,當目標網站搞促銷、優惠等活動的時候,利用這些賬號參與活動刷取較多的優惠,最后通過淘寶等電商平台轉賣獲益。
他們內部有着明確的分工,形成了幾大團伙,全國在20萬人左右:
-
軟件制作團伙:專門制作各種自動、半自動的黑產工具,比如注冊自動機、刷單自動機等;他們主要靠出售各種黑產工具、提供升級服務等形式來獲利。
-
短信代接平台:實現手機短信的自動收發,其實一些平台亦正亦邪,不但提供給正常的商家使用,一些黑產也會購買相關的服務。
-
賬號出售團伙:他們主要是大量注冊各種賬號,通過轉賣賬號來獲利;該團伙與刷單團伙往往屬於同一團伙。
-
刷單團伙:到各種電商平台刷單,獲取優惠,並且通過第三方的電商平台出售優惠,實現套現。
這些黑產團隊,有三個特點:
-
專業化:專業團隊、人員、機器來做。
-
團伙化:黑產已經形成一定規模的團伙,而且分工明確;從刷單軟件制作、短信代收發平台、電商刷單到變賣套現等環節,已經形成完整的刷單團伙。
-
地域化:黑產刷單團伙基本分布在沿海的一些經濟發達城市,比如,北京、上海、廣東等城市,這或許跟發達城市更加容易接觸到新事物、新觀念有關。
對抗刷單,一般來講主要從三個環節入手:
-
注冊環節:識別虛假注冊、減少"羊毛黨"能夠使用的賬號量。在注冊環節識別虛假注冊的賬號,並進行攔截和打擊
-
登錄場景:提高虛假賬號登錄門檻,從而減少能夠到達活動環節的虛假賬號量。比如,登錄環節通過驗證碼、短信驗證碼等手段來降低自動機的登錄效率,從而達到減少虛假賬號登錄量、減輕活動現場安全壓力的目的。
-
活動環節:這個是防刷單對抗的主戰場,也是減少"羊毛黨"獲利的直接戰場;這里的對抗措施,一般有兩個方面:1)通過驗證碼(短信、語音)降低黑產刷單的效率,2)大幅度降低異常賬號的優惠力度
騰訊內部防刷的架構大概如下:
-
-
風險學習引擎:是利用python腳本來實現,訓練和調優的大部分工作都在線下進行,線下分析完成之后會形成一個配置文件同步到線上系統,線上系統在check配置文件的有效性ok之后,才會啟動更新。
線下我們一般在linux環境下通過crontab設定python腳本定時啟動分析過程,訓練完成之后會對比新老分類器的效果,如果新分類器在參數顯著性檢驗、R^2、AIC等參數指標明顯高於舊有分類器情況下就會啟動更新,這種情況一般都是惡意模式發生了明顯的變化。
邏輯回歸部分的python訓練代碼如下
風險學習引擎:效率問題,由於主要的工作都是線下進行,所以線上系統不存在學習的效率問題。線上采用的都是C++實現的DBScan等針對大數據的快速聚類算法,基本不用考慮性能問題。
線下一些機器學習的算法,比如層次聚類算法,隨着樣本的增加,訓練的開銷也呈指數級的增加:1W條記錄需要20分鍾左右訓練時間(40維度特征)
因此,線下訓練采用抽樣的辦法,每次隨機抽取2W條記錄,總共抽取5個批次(經驗值),最終的模型參數是這個5個批次訓練出來的均值。
風險引擎:采用了黑/白雙分類器風險判定機制,之所以采用黑/白雙分類器的原因就在於減少對正常用戶的誤傷。
例如,某個IP是惡意的IP,那么該IP上可能會有一些正常的用戶,比如大網關IP
再比如,黑產通過ADSL撥號上網,那么就會造成惡意與正常用戶共用一個IP的情況。
黑分類器:根據異常特征、通過機器學習算法,或者規則/經驗模型來判斷本次請求屬於異常的概率;
白分類器:根據異常特征、通過機器學習算法,或者規則/經驗模型來判斷本次請求屬於異常的概率。
我們以黑分類器為例來剖析下分類器的整個邏輯框架
總的來講我們采用了矩陣式的邏輯框架,最開始的黑分類器我們也是一把抓,隨意的建立一個個針對黑產的檢測規則、模型;
結果發現不是這個邏輯漏過了,那是那個邏輯誤傷量大,要求對那一類的賬號加強安全打擊力度改動起來也非常麻煩;
因此我們就設計了這個一個矩陣式的框架來解決上述的問題。
矩陣的橫向采用了Adaboost方法,該方法是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的弱分類器,然后把這些分類器集合起來,構成一個最終的分類器;
而我們這里每一個弱分類器都只能解決一種帳號類型的安全風險判斷,集中起來才能解決所有賬戶的風險檢測。
那么在工程實踐上帶來三個好處:
-
便於實現輕重分離,比如某平台虛假賬號集中在郵箱賬號,策略就可以加大對郵箱賬號的打擊力度,影響范圍也局限在郵箱帳號,而不是該平台所有的賬號
-
減少模型訓練的難度,模型訓練最大的難度在於樣本的均衡性問題,拆分成子問題,就不需要考慮不同賬號類型之間的數據配比、均衡性問題,大大降低了模型訓練時正負樣本比率的問題
-
邏輯的健壯性,某一個分類器的訓練出現了問題,受影響的范圍不至於擴展到全局
上面講的部分東西理解起來會比較艱澀,這里大家先理解框架,后續再理解實現細節
而且,矩陣的橫向有多個維度,比如IP維度、密碼維度、路徑維度、頻率限制維度、層次聚類維度、DBScan維度等,這樣一來相比單個維度作弊行為被漏檢的概率更低,提高了召回率;
矩陣縱向采用了Bagging方法,該方法是一種用來提高學習算法准確度的方法,該方法在同一個訓練集合上構造預測函數系列,然后以一定的方法將他們組合成一個預測函數,從而來提高預測結果的准確性。
我們以手機賬號為例來說明下明下:
-
在IP維度上,我們會有一些異常檢測邏輯;比如 IP總共有N個手機號碼,其中有大於80%的手機號碼歸屬地跟IP歸屬的地不一致,我們就認為這個IP上凡是與IP歸屬地不一致的手機號碼都是異常的,類似的還有其他邏輯。那么,80%是如何得出來的呢,如下圖所示:
這張是散點圖,橫坐標無意義,縱坐標是IP與手機號碼歸屬地不一致的比率,按照常識,不一致的比率越高,那么這種IP應該越少,也就是說在圖上自底向上的點應該是逐漸稀疏,而該圖在80%以上的區域有明顯的聚集,不正常。
這張是IP統計圖,橫縱坐標的意義如圖所示,一般正常情況下第二張圖應該滿足正態分布,圖的尾部不應該往上翹,這個就是黑產通過自動機撥號的方式作惡的量比較大從而導致尾部曲線的拉升。
-
同樣道理,那么我們還有其他的一些非IP聚集的異常維度;比如,針對每個請求形成一個向量 <比如昵稱是否字母 + 數字,郵箱是否是小公司域名(黑產亂搞郵箱域名),163郵箱的名稱是否異常(比如全數字), 等等>,利用該向量我們通過層次聚類,或者DBScan等方法來聚類,並且判斷某個類是否異常;
-
最后,綜合a & b兩步的結果通過邏輯回歸的辦法形成一個異常的概率(0 ~ 1);由於最終的結果是多個異常維度綜合評分的結果,所以准確率一般要比單個邏輯要高。
大數據一直在安全對抗領域發揮着重要的作用,從我們的對抗經驗來看,大數據不僅僅是數據規模很大,而且還包括兩個方面:
-
數據廣度:要有豐富的數據類型;比如,不僅僅要有社交領域的數據、還要有游戲、支付、自媒體等領域的數據,這樣就提供了一個廣闊的視野讓我們來看待黑產的行為特點。
-
數據深度:黑產的對抗,我們一直強調縱深防御,我們不僅僅要有注冊數據,還要有登錄,以及賬號的使用的數據,這樣我們才能更好的識別惡意。
所以想要做風控和大數據的團隊,自己一定要注意埋點拿到足夠多的數據。
我們的團隊研發了一個叫魔方的大數據處理和分析的平台,底層我們集成了mysql、mongodb,Spark、hadoop等技術,在用戶層面我們只需要寫一些簡單的SQL語句、完成一些配置就可以實現例行分析;
這里我們收集了社交、電商、支付、游戲等場景的數據,針對這些數據我們建立一些模型,發現哪些是惡意的數據,並且將數據沉淀下來。
畫像,本質上就是給賬號、設備等打標簽;
我們這里主要從安全的角度出發來打標簽,比如IP畫像,我們會標注IP是不是代理IP,這些對我們做策略是有幫助的;
以QQ的畫像為例,比如,一個QQ只登錄IM、不登錄其他騰訊的業務、不聊天、頻繁的加好友、被好友刪除、QQ空間要么沒開通、要么開通了QQ空間但是評論多但回復少,這種號碼我們一般會標注QQ養號(色情、營銷)。
類似的我們會采用一些邏輯發現QQ是不是工作室號碼,倉庫號等
畫像等於打標簽
所以這里可能大家有一個認識的誤區,以為畫像就是描繪圖像
標簽的類別和明細,需要做風控的人自己去設定,比如:地理位置,按省份標記。性別,安男女標記。其他細致規則以此規律自己去設定。
所以畫像=標簽
先來看看ip畫像,沉淀的邏輯如下圖
一般的業務都有針對IP的頻率、次數限制的策略,那么黑產為了對抗,必然會大量采用代理IP來繞過限制。
既然代理IP的識別如此重要,那我們就以代理IP為例來談下騰訊識別代理IP的過程。
識別一個IP是不是代理IP,技術不外乎就是如下四種:
-
反向探測技術,掃描IP是不是開通了80,8080等代理服務器經常開通的端口,顯然一個普通的用戶IP不太可能開通如上的端口
-
HTTP頭部的X_Forwarded_For,開通了HTTP代理的IP可以通過此法來識別是不是代理IP;如果帶有XFF信息,該IP是代理IP無疑。
-
Keep-alive報文,如果帶有Proxy-Connection的Keep-alive報文,該IP毫無疑問是代理IP
-
也可以查看IP上端口的情況,如果一個IP有的端口大於10000,那么該IP大多也存在問題,普通的家庭IP開這么大的端口幾乎是不可能的。
以上代理IP檢測的方法幾乎都是公開的,但是盲目去掃描全網的IP,被攔截不說,效率也是一個很大的問題。
因此,我們的除了利用網絡爬蟲爬取代理IP外,還利用一下三種辦法來加快代理IP的收集:
-
通過業務建模,收集惡意IP(黑產使用代理IP的可能性比較大),然后再通過協議掃描的方式來判斷這些IP是不是代理IP;每天騰訊都能發現千萬級別的惡意IP,其中大部分還是代理IP
-
產品線收集,qq空間每天有着幾十億次的登錄量,利用X_Forwarded_For我們可以收集到不少的代理IP,另外我們的一些客戶端也允許用戶使用代理IP,比如QQ面板上就有設置代理IP的登錄功能,這些也為我們收集代理IP提供了便利
-
業務特性,游戲用戶一般喜歡使用代理IP,如果正常的用戶登錄游戲的IP和登錄QQ等業務使用的IP不一致,那么該IP是代理的IP可能性非常大
我們再看一下手機號(同時綁定QQ號)的畫像
騰訊平台的業務,有比較多的場景需要關聯用戶的手機號碼:比如,QQ帳號的密保手機等;我們分成兩個方面來對手機號碼進行畫像:
-
手機號碼本身的安全標簽:一方面標注手機號碼是不是惡意,主要看該手機在騰訊平台的作惡情況。另外就是標注手機是不是正常用戶手機號,比如手機是用戶的密保手機。
-
手機號碼關聯的QQ號情況:
比如,某IP上的手機號碼關聯的都是僵屍QQ,那么該IP上的這些手機號碼屬於惡意的概率比較大;
又比如,某IP上的手機號碼關聯的QQ都是非社交領域QQ(比如游戲),同樣該IP屬於惡意IP的概率也很大,因為一個不喜歡社交的賬號,有理由相信其對電商也不會有太多的興趣。
第三個是設備畫像。
這主要是描述設備上安裝App的情況,以及設備歷史上是否有惡意行為。
設備畫像的基本內容如下圖12所示,由於這塊跟手機賬號畫像內容差不多,所以就不做過多的闡述了。
前面我們說過,我們最終會根據邏輯回歸來判定當前的風險概率。
風險概率<=0.5 對應我們的風險等級0,
0.5<風險等級>0.6對應等級1,
0.6<風險等級>0.7對應等級2,
0.7<風險等級>0.8對應等級3,
風險等級>0.8對應等級4;
經過我們人工核實發現,等級3 准確率在85%+,等級4准確率在90%左右,等級 1 &2它們的准確率相比較低,70%+;
核對模型的結果是否准確,理論上通過獨立模型互驗、交叉驗證、人工審核等方式來進行;
比如,郵箱帳號可以通過肉眼看出來,手機帳號可以打電話的方式來驗證;
另外,在騰訊自己的平台上,我們核實數據一般都采用交叉驗證的方式,登錄檢測到的惡意數據跟業務側發現的惡意數據、客服投訴舉報數據、假客戶端等數據做交叉驗證。
實時系統使用c/c++開發實現,所有的數據通過共享內存的方式進行存儲,相比其他的系統,安全系統更有他自己特殊的情況,因此這里我們可以使用"有損"的思路來實現,大大降低了開發成本和難度:
據一致性,多台機器,使用共享內存,如何保障數據一致性?其實,安全策略不需要做到強數據一致性;
從安全本身的角度看,風險本身就是一個概率值,不確定,所以有一點數據不一致,不影響全局。
但是安全系統也有自己的特點,安全系統一般突發流量比較大,我們這里就需要設置各種應急開關,而且需要微信號、短信等方式方便快速切換,避免將影響擴散到后端系統。
適應的場景包括:
1:電商o2o刷單、刷券、刷紅包
2:防止虛假賬號注冊
3:防止用戶名、密碼被撞庫
4:防止惡意登錄
問題1:風險學習引擎是自研的,還是使用的開源庫?
風險學習引擎包括兩個部分,線上和線下兩部分:
線上:自己利用c/c++來實現
線下:涉及利用python開源庫來做的,主要是一些通用算法的訓練和調優
問題2:都有哪些電商o2o使用這些系統?他們的訪問量大概多少? 有什么特別復雜嗎?可否簡單指出一個?
京東、58、餓了么、聚美優品、攜程、龍珠直播、微盟;
做活動的時候訪問量較高,但是qps目前還不到一萬
特別復雜的主要是在業務側埋點獲取數據、跑通實時模型流程、匹配風控規則。
問題3:請問魔方平台中用到的mongdb是不是經過改造?因為mongdb一直不被看好,出現問題也比較多
我們做了部分改造,主要是db的引擎方面
問題4:請問黑分類器和白分類器有什么區別?
白分類器主要用來識別正常用戶,黑分類器識別虛假用戶。
問題5:設備指紋算法 能說下不?
抱歉、這個屬於騰訊集團涉密范圍
問題6:風險概率的權重指標是如何考慮的?