攔截撞庫的幾點心得
前段時間嘉木遭遇了一次撞庫攻擊。所幸經過小夥伴們一周的努力,惡勢力的陰謀最終沒有得逞。在這其中有一些經驗和心得,分享給有需要的同學。
- 多層次攔截
Anti-Spam不是依靠一個單一的功能就能實現,同樣,撞庫的攔截也需要多種手段疊加之後才能實現預期的效果。
- 驗證碼
驗證碼是第一道門檻。之前在「驗證碼何時可以退出歷史舞台?」中提到過驗證碼的作用。單次撞庫期間的登錄請求量至少是百萬級別的。這麼大的量級不可能是人工操作,一定是程序自動操作。作為識別是人還是機器的驗證碼,就可以在其中發揮很大作用。
普通的字元型驗證碼可以比較容易的被破解,目前已經有人經機器學慣用在驗證碼的識別上,準確率可以達到70%以上。針對這點有兩個思路。第一個是增加驗證碼套數,破解了一套驗證碼還有第二套,破解了第二套還有第三套。目前騰訊光字元型驗證碼就已經做了上千套了。第二個就是更換驗證碼類型。這個方式做起來很難,但如果能出的話收益很高。
之前好多人討論過 極驗驗證碼,在仔細調研過後,發現用戶體驗有了較大提升,但安全性並沒有得到太多提升。(調研當時的結果,不清楚之後是否有升級)
最後說一下人工打碼。對於任何一種驗證碼,人工打碼都是繞不過的一道坎。對於驗證碼而言,只要能將撞庫逼到人工打碼這條路上,就算是成功了。人工打碼是有成本的,只要我們能不斷地抬高對方的成本,當成本大於收益的時候,撞庫自然就停止了。
- 行為監控
撞庫涉及的頁面較少,往往只有一個登錄頁。登錄頁面元素少,交互往往也較少,可以收集的行為不多。比較常見的行為有以下4種:
- 滑鼠軌跡
- 輸入框激活時間
- 輸入框鍵盤點擊數
- referer
滑鼠軌跡收集起來較為麻煩,而且要考慮到客戶端沒有滑鼠這個情況,適用性較低,不建議考慮。
輸入框激活時間和輸入框鍵盤點擊數這個信息價值比較大,即使不能識別也可以直觀地延長對方在頁面停留的時間。時間成本也是成本的一環。但需要注意這個信息的採集可能被對方偽造,需要考慮如何防範。
referer相對來說意義較小,畢竟登錄頁往往是首頁,直接訪問的請求本來就較多。
- 登錄策略限制
基於ip、用戶常駐城市、用戶常用設備、登錄頻率、登錄結果等信息,以策略的方式對登錄行為進行限制。
對於小批量的行為,ip資源可以認為是無限的。但對於短期內大量的行為,ip資源就可以認為是有限的了。對於百萬的登錄請求,如果每個ip只發2次,就需要50萬個不同ip。這是一個非常大的量。
常見的策略例子如:短時間內,同一ip上登錄了多個不在常駐城市且不在常用設備上的用戶,並且登錄結果全是失敗,可以認為這些登錄全是撞庫並且這個ip是危險ip。
補充一下策略和模型的關係。模型準確率高,但維護成本高、見效慢;策略準確率低一些,成本低同時可以快速響應。
- 二步驗證
確認是正常的登錄請求,我們放過;對於確認是撞庫的登錄請求,我們攔截。但對於那些有可能是撞庫但又拿不準到底是不是撞庫的請求,我們可以使用二次驗證來處理。
二步驗證可以是下行手機驗證碼,也可以是下行郵件,必要的時候甚至可以是上行手機驗證碼。這塊就不多說了,直接抄apple或是google的二步驗證就好了。
- 異地登錄提醒
向異地登錄成功的用戶發送消息,告知其異地登錄的時間、地點、ip前三段,並告知「若不是本人登錄請及時修改密碼」。發消息時優先手機,沒有手機的發郵件。
- 行為攔截
如果撞庫行為伴隨著後續行為,如修改個人資料、發布騷擾廣告、提現等等行為時,可以基於之前登錄策略攔截的判斷結果,與異常行為結合。如果一次登錄請求有中等可能性是撞庫,但隨後這個用戶就發生了異常的行為。我們就可以認為這個用戶是被撞庫成功了。
對於確定被撞庫成功的賬號,要及時對賬號進行保護性鎖定,同時發郵件或簡訊告知用戶,及時修改密碼。
推薦閱讀:
TAG:网络安全 | 反垃圾Anti-Spam | 验证码 |