机器人防火墙:人机识别在应用安全及风控领域的一点实践
美劇?WestWorld?第二集里有個場景十分有意思:游客來到西部世界公園,遇到了一個漂亮的女接待員,但無法區分對方是否是人類,于是產生了如下對話:
Guest: "Are you real?" ?-- Are you a Human or a Host?
Host: "If you can't tell, Does it matter?"
可以說科技尤其人工智能的發展,機器人已經足以模擬人類達到以假亂真的地步,不過今天要談的并不是人工智能、不是機器學習。誠然AI可以在人機識別及諸多方面做得很好(假設有足夠的訓練樣本),但它未必是最好、也不是唯一的選擇,至少在我所說的當前場景中。
作為科普和背景鋪墊,感興趣的可以檢索:
驗證碼的前世今生(前世篇)
驗證碼的前世今生(今生篇)
直入主題,安全領域中爬蟲、暴力破解、掃描、DDoS等攻擊行為都是通過工具發起,操縱者預設指令而工具去自動執行直到任務完成或出于某種原因中斷運行。傳統安全機制而言,WAF、IPS等這類產品的確在一定程度能夠保護用戶免受攻擊,但鑒于它們都依賴于特征和規則庫又有很多限制。
時代在變化,攻擊者也在不斷嘗試新的機會和場景,比如競爭性爬蟲、撞庫、薅羊毛、虛假注冊、灌水刷評論等等。全局分析時,我們可以認為這些操作都是惡意且應被阻斷的,然而單獨來看每一個操作又是合法且正常的,沒有任何攻擊特征,WAF解決不了,代碼層面做諸多做限制也解決不了。
沒有攻擊特征,不代表無法識別,可以肯定的是這些針對業務發起的"定制"攻擊絕大多數來自于自動化工具,或者說機器人。然而問題難就難在這里,怎么區分一個請求的發起者是人還是機器?
業務方會做很多事情限制非法機器人的訪問,最常見的是使用圖形驗證碼、短信驗證碼。驗證碼機制早期確實很有效果,但現在也遭遇著巨大的挑戰,比如國內打碼平臺的出現及使用。另一方面,驗證碼會對用戶體驗造成較大傷害,企業不得不做一個安全與使用方便的折中,于是出現了滑塊驗證碼。相比扭曲的圖形驗證碼,理論上基于用戶行為的滑塊驗證碼無論從安全級別還是易用性都可以有巨大提升,然而它只是安全防護機制其中的一道,存在被突破的可能,而且已經被突破。
實力較好的公司有人專門負責風險控制(簡稱風控),國內目前也有很多風控服務和產品的提供商,大多是從多維度的數據層面(如過往操作記錄、設備指紋等)為某一個"用戶"的操作提供信譽評分,確定其是否合法,例如轉賬支付是否為本人操作。阿里云是這方面的杰出代表,不僅數據層面而且在用戶行為識別方面做了不少工作。不過其在風控方面的成就可復制性并不高,首先不是每家公司都有能力做好海量大數據分析,其次用戶行為識別需要有很強的前端技術能力,而這種能力又會以數據的形式轉化為大數據的分析能力。
下面介紹一下我們在用戶行為特別是人機識別上的一些實踐,以下均以Web應用為例說明。
對于Web應用而言,(視情況而定)本身就存在較多敏感信息,比如頁面內容、JS源代碼、后續鏈接、表單信息等,它們構成了一個應用的運行邏輯。只要能判斷這個邏輯,應用行為就是可以預測的,這也是爬蟲、掃描器等工具運作的基本原理。那如果我可以對應用頁面的源代碼進行混淆或加密,是否能使工具失去作用呢?答案是在一定程度上可以,但這里面臨幾個問題。
首先,頁面中包含各種標簽、表單、鏈接、JS等信息,哪些信息需要混淆需要明確。最重要的是,雖然可以使用算法進行混淆,但是把混淆后的代碼還原讓瀏覽器可以解析以保證應用可正常訪問則要難得多。正是因為還原混淆代碼的難度大,很少有應用采用這種保護方式。
其次,如果算法固定且考慮到性能問題,加密信息和算法可以被逆向還原,稍微做一些定制開發就可以使工具再次自動運行。如果有多種混淆算法,如何決定在某一時刻使用哪種算法?
上述兩個問題已經超越了本人能回答的范疇,但可以講一下我司已經實現的效果:(1)頁面的表單、URL、JS代碼全部使用專有算法封裝,可理解為加密,其余內容不做處理;(2)算法是動態變換的,每次請求譬如刷新頁面都會隨機使用不同算法,可使用算法數40億以上;(3)所有封裝通過JS實現,用于加密頁面的JS本身被混淆且沒有逆襲價值;(4)被保護頁面具備防止調試和虛擬執行的能力;(5)正常用戶通過瀏覽器進行訪問不受任何影響;
根據Distil公司的統計,54%的自動化工具不具備Javascript解析能力,這意味著超過一半的工具將無法使用,無需任何規則即可有效阻攔大量機器,此為人機識別第一步。
雖然商用掃描工具很多都具備JS解析能力,但對于這類機器行為仍有辦法識別——動態驗證。簡單來說,動態驗證會校驗JS的實際運行環境、獲取設備指紋,以及采集客戶端行為——例如是否有鍵盤鼠標操作及在頁面停留時間等。通過多維度數據分析可以區分操作的是人還是機器,此為人機識別第二步。
對于提交的表單信息,也可以選擇對其進行混淆,即便通過中間人攻擊截獲了請求,看到的都是亂碼,無法竊取信息、無法偽造、無法篡改。由于算法是動態的,同樣不擔心被逆向或破解。這一步本身不是用于識別工具行為,卻可以有效防御借助工具進行的中間人攻擊等行為。
動態令牌機制可以作為人機識別的第三步來看,可以有效防止請求重放等非法操作。即便不對頁面進行封裝,仍然會(根據上一個頁面的訪問)動態生成每個請求唯一的令牌,存放在Cookie中。保護模式下每個令牌都只能用一次,一旦令牌為空、重復使用、或者被篡改,請求就會被視為無效請求而攔截。
綜合以上幾個過程,從簡單到高級的Burp、爬蟲、掃描器、PhantomJS等機器行為都能被有效識別,理論誤判概率%0。最重要的是,做這么多事情無須應用改一行哪怕半行代碼,客戶端無需做任何更改,各大主流及非主流瀏覽器訪問均不受任何影響。
我們使用的方案除了人際識別當然還有更多的能力,這里不做描述,感興趣的可以聯系我。
實際上,如果能在非法請求到達后臺之前能夠對其進行識別并采取阻斷措施,帶來的效益除了減緩攻擊,還可以節約帶寬、服務器資源、過濾大量噪音和垃圾數據。更重要的是,我們使用的是一種全程防護的方式卻又很輕量級,變被動為主動,先發制人。
更多信息請見:https://www.riversecurity.com.cn | 私聊
轉載于:https://www.cnblogs.com/r00tgrok/p/RiverSecurity-Bots-FireWall.html
總結
以上是生活随笔為你收集整理的机器人防火墙:人机识别在应用安全及风控领域的一点实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wordpress后台404页面
- 下一篇: python中的enumerate函数