上一篇:http://www.cnblogs.com/index-html/p/js-network-firewall.html
對抗 v2
之前的那些奇技淫巧,純屬娛樂而已,并不能撐多久。
但簡單、好玩,似乎這正是對抗的樂趣。之前從未想過,居然還能把腳本黑科技,用在網絡防御上。
于是,又陸陸續續對抗了一段時間。
直到興致淡卻,懶得再頻繁升級了,于是換上一個更復雜的腳本。其中打包了大量的算法庫,光是代碼,就能嚇退一些密集恐懼癥者。
此外,還暗藏了一些自檢功能,干擾腳本的分析破解。
這時,要把腳本邏輯移植出來,就格外困難了。
這迫使攻擊者,不得不用另一種方式。。。
對抗 v3
為何要破解腳本,為何要了解其中的細節?直接讓攻擊器運行腳本,不就可以了!
之前擔心的,還是發生了。升級后的攻擊器,居然會彈網頁了,看起來和正常用戶一樣。。。
黑盒攻擊!加密混淆那些都沒用了,只能尋找一些破綻。開始收集區分“真網頁”和“內嵌網頁”的黑魔法。
例如,有些攻擊者為了隱蔽,把網頁彈在屏幕之外。因此,分析頁面 screenLeft、screenTop 就可以識破。
例如,內嵌網頁的尺寸是鎖定的。而彈出的網頁,沒準能調整大小,可以改變一兩個像素試試。
.....
于是,光坐標尺寸,就扛了一陣子。
事實上,大多攻擊者都不注重細節。所以,破綻還是不少的。
不過,發現破綻后怎么處理?直接在前端中止嗎?當然不是,這樣太明顯。
即使識破,仍會發送請求,仍能進白名單。只是,請求里悄悄做了標記,暗示這是一個可疑用戶 —— 最終白名單的有效時間,比正常短得多。
這樣,就把測試效果延后了,增加破解時間。
同時,升級了防火墻策略,增加了“黑名單”機制。黑名單的 IP,是永遠不能變白的。
因此,某些用戶的可疑值積累到一定程度,就直接拉黑了。
隨著防火墻裝機量增加,將黑名單進行了共享,避免了不少重復分析。
對抗 v4
前端的秘密,早晚會被發現的。
最后,逼迫攻擊器也采用了“內嵌網頁”!之前的黑魔法,又紛紛失效了。。。
然而,破綻總還是有的。
很多攻擊器,程序界面是隱藏的。這,會導致一些渲染上的差異。
例如,Flash 就有這么個機制:當界面不可見時,幀率會降到 2 fps,以節省開銷。
例如,復雜的 JS 動畫特效,原本跑的并不流暢。但界面擋住后,就能毫無壓力的運行。
.....
當然,這些只能用來參考,并非一定正確。
同時,對防火墻的策略也進行了調整:只有當機器壓力大時,才開啟攔截。盡量降低被“黑科技”誤傷的可能。
就這樣,修修補補又一年。
對抗 v5
Chrome 瀏覽器流行后,極大激發了人們研究前端的熱情。同時,腳本調試也變得更容易了。
為了不喪失最后的優勢,決定“反其道而行之” —— 將腳本的部分邏輯,換成了 VBScript,迫使停留在 IE 上。而正常用戶都運行于 WebBrowser,并無影響。
同時還將一些功能,做到了 Flash 里。
整個流程,需要 JS、VBS、Flash、iframe 等交互才能完成,大幅增加了調試復雜度。
對抗 v6
在對抗窘迫時,甚至還嘗試了一些下策。例如,彈出一個對話框:
alert('歡迎光臨 XXX')
只有點了確定,才能繼續運行。于是,一些假人就卡死在了這里。
當然,攻擊者很快做出回應 —— 屏蔽了對話框。
我是如何知道的呢?因為每次彈框,都記錄了停頓時間:
t = time()
alert(...)
t = time() - t
然而這其中,居然有 0ms 的!!!
這是有多快的手速??即使一直按著 ESC 鍵,對話框好歹也會閃一下,至少也有幾十毫秒了。怎么試不出這么快的~~~
最終,將過短的時間都 XXX
對抗 v7
一段時候后,攻擊者也摸索出了規律,不直接屏蔽了。
先讓它彈出來,延時幾秒,再發送回車鍵去關閉。。。反正我都想到了,人家也想得到。
于是,改成彈兩個、三個、隨機個對話框,而對方也許只會點一次。
當然,這都是臨時的搞笑方案。
。。。
最后,迫不得己,不再使用系統對話框。而是用 HTML 畫一個,并且只能通過鼠標點擊關閉。
其實這早已想過,但一直不敢實施 —— 因為這只是個內嵌網頁,即使不點,也不影響程序使用。一些用戶可能沒注意到,就錯過了。
系統對話框沒有這個問題。因為它會阻塞整個程序的消息,不點就無法其他操作。
為了不讓用戶錯過,這次做了一個格外醒目的浮層,并配上聲音和閃爍效果。
回到了 HTML,對抗優勢就大幅增加了。
盡管攻擊者也能模擬鼠標點擊,但是,光點擊是遠遠不夠的 —— 鼠標不可能一出來,正好就在關閉按鈕上吧,肯定還得先移進去。
因此,還統計了鼠標 move、over、out 等事件。如果次數特別少,也是極其可疑的。
類似的行為分析方式,還有不少。配合獨特的思路,陸續更新直到最后。
其他對抗
當然,并非所有攻擊,都從腳本著手的。
還是有不少喜歡簡單暴力的 —— 網絡攻擊。尤其那臺“授權服務器”,自然成了眾矢之的。
使用傳統的負載均衡?簡單,但不隱蔽。攻擊者只需跟蹤域名,既可遍歷出 IP。
為了隱蔽,于是將 IP 列表寫在腳本里,讓腳本程序來負載。而腳本,是經過加密混淆的。
這樣,又把攻擊者帶回“前端黑魔法”這個坑里了!
當然,“授權服務器” 的實際 IP,在網頁運行時還是能夠觀察到,只是麻煩一些。
同時,結構上也進行一些策略優化。
例如,在游戲服務器上,也開了一個“授權服務”。
平時攔截未開啟時,可直接走這條“綠色通道”;只有走不通時,才通過“授權服務器”中轉。
這樣,就大幅降低對“授權服務器”的依賴!
當然,這么做也有弊端:授權服務的邏輯泄露了。所以,防火墻的部分模塊,也做了一些加殼處理。
結束
隨著前端技術日趨成熟,優勢大不如從前。而且對黑科技的淡卻,以及其他工作,逐漸減少了更新。
到了大學結束前,已徹底放棄了更新。
雖然其中趣事還有不少,但這是最長、最有科技的一段。不,并沒有什么高級技術,除非“思路”也算。
前前后后絕大多數的時間,都花在“想”上面,“碼”的過程少之又少。
當然,這其中也想過一些其他類型的 “JavaScript 防火墻”,例如“跨站防火墻”、“流量劫持防火墻”等等。后來也都變成了現實,用在了工作之中。
用前端腳本玩轉安全防御,從那一刻起,持續至今。
文章列表