1. 程式人生 > >【趣事】用 JavaScript 對抗 DDOS 攻擊 (下)

【趣事】用 JavaScript 對抗 DDOS 攻擊 (下)

對抗 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 防火牆”,例如“跨站防火牆”、“流量劫持防火牆”等等。後來也都變成了現實,用在了工作之中。

用前端指令碼玩轉安全防禦,從那一刻起,持續至今。

相關推薦

趣事 JavaScript 對抗 DDOS 攻擊 ()

對抗 v2 之前的那些奇技淫巧,純屬娛樂而已,並不能撐多久。 但簡單、好玩,似乎這正是對抗的樂趣。之前從未想過,居然還能把指令碼黑科技,用在網路防禦上。 於是,又陸陸續續對抗了一段時間。 直到興致淡卻,懶得再頻繁升級了,於是換上一個更復雜的指令碼。其中打包了大量的演算法庫,光是程式碼,就能嚇退一些密集恐懼症

趣事 JavaScript 對抗 DDOS 攻擊

繼續趣事分享。 上回聊到了大學裡用一根網線發起攻擊,今天接著往後講。 不過這次講的正好相反 —— 不是攻擊,而是防禦。一個奇葩防火牆的開發經歷。 第二學期大家都帶了電腦,於是可以用更高階的方法斷網了。但裝置先進反而沒有了 GEEK 的感覺。於是,決定做些其他更有意義的事。 一天,幾個好友在吐槽,他們的遊戲伺

JavaScript寫一個區塊鏈

幾乎每個人都聽說過像比特幣和以太幣這樣的加密貨幣,但是隻有極少數人懂得隱藏在它們背後的技術。在這篇部落格中,我將會用JavaScript來建立一個簡單的區塊鏈來演示它們的內部究竟是如何工作的。我將會稱之為SavjeeCoin! 全文分為三個部分: part1:實現一個基本的區塊鏈

通俗易懂的話說hadoop是什麼,能做什麼

轉自http://blog.csdn.net/houbin0912/article/details/72967178hadoop是什麼?(1)Hadoop是一個開源的框架,可編寫和執行分散式應用處理大規模資料,是專為離線和大規模資料分析而設計的,並不適合那種對幾個記錄隨機讀寫

JavaScriptJavaScript實現一個集合

add(value) :向集合新增一個新的項。 delete(value) :從集合移除一個值。 has(value) :如果值在集合中,返回 true ,否則返回 false 。 clear() :移

JavaScriptJavaScript實現一個連結串列

append(element) :向列表尾部新增一個新的項。 insert(position, element) :向列表的特定位置插入一個新的項。 indexOf(element) :返回元素在列表中的索引。如果列表中沒有該元素則返回 -1 。 removeA

趣事一根網線發起的攻擊

剛上大學沒多久,就遇到件頭疼事。 富二代們剛來就帶著膝上型電腦,這讓咱們只能玩手機的屌絲輩們羨慕嫉妒恨。要命的事來了,晚上斷電不斷網,於是熄燈後筆記本仍然可以玩。 不巧的是,我們寢室也有個。常常熄燈後,非得把電池用乾淨才罷休。邊遊戲邊語音,還放著音樂,備受煎熬。雖經勸說有所好改,但過不了幾天又會復原。 為了

Linux 戶管理

文件夾 通過 useradd 遠程登錄 日期 賬號 改變自己 shell類型 查看 Linux用戶管理 ■  查看用戶整體情況   cat /etc/passwd可以查看用戶的一些基本信息。用finger <user>似乎更加方便   查看某一個特定的

WPF三角形網格構建三維圖形

遊戲 輸入 angle 結構 dash bsp 來看 適應 鼠標 雖然WPF只能支持部分三維模型,不過從應用功能開發的角度看,也已經夠用了(非遊戲開發)。WPF 的三維圖形,說得簡單一點,也就兩種而已。 1、把二維對象放到三維空間中,這個應該較為好辦,像 Image 控件

第五組例文檔+功能說明書+技術說明書

進行 興趣 成功 適應 數據 說明書 連接 事件 del 用戶使用說明書 1、標題:實現菜品推薦 查看 2、角色:使用HK軟件的用戶。 3、主要成功場景: (1)用戶在登錄之後可以看見新品推薦以及熱銷菜品,以及一些基礎信息

前端jQuery實現瀑布流效果

scrollto title n) 個性 避免 ive gets type turn jQuery實現瀑布流效果 何為瀑布流:   瀑布流,又稱瀑布流式布局。是比較流行的一種網站頁面布局,視覺表現為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數據塊並附加

BlazeMeter錄制JMeter測試腳本

打開 測試的 文件 wid mbo 自己的 .net 一個 tar 工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步驟: 以上工具準備好以後就可以錄制JMeter的測試腳本了, 在Chrome中點擊B

Python建立最簡單的web服務器

web服務 localhost 服務器 pos 根目錄 cal body -m -- 利用Python自帶的包可以建立簡單的web服務器。在DOS裏cd到準備做服務器根目錄的路徑下,輸入命令: python -m Web服務器模塊 [端口號,默認8000]

MT35復數得到的兩組恒等式

ges 時有 study height row 有關 itl wid 試題 特別的,當$r\rightarrow1^{-}$時有以下兩個恒等式:第二個恒等式有關的自主招生試題參考博文MT【31】傅裏葉級數為背景的三角求和評:利用兩種展開形式得到一些恒等式是復數裏經常出現的考

這些JavaScript編程黑科技,裝逼指南,高逼格代碼,讓你驚嘆不已

min 最短 window cat 最大值 暫時 哈哈 over 比較 【轉】這些JavaScript編程黑科技,裝逼指南,高逼格代碼,讓你驚嘆不已 Javascript是一門很吊的語言,我可能學了假的JavaScript,哈哈,大家還有什麽推薦的 本文秉承著:你看不懂是

前端深入淺出Javascript中的數值轉換

在操作 scrip 入參 ava 原理 過程 int() 字符串解析 p s 由於Javascript是一門弱類型的語言,在我們的代碼中無時無刻不在發生著類型轉換,所以了解Javascript中的類型轉換對於了解我們認識Javascript的運行原理至關重要。 本文主要從數

西安Leangoo做Scrum敏捷開發實戰課(免費)

帶來 互聯網產品 簽到 class -s 認證 名企 gin light Leangoo誠邀您參加 2017《用leangoo做Scrum敏捷開發》實戰課!在此實戰課上,您不僅可以聽到一線資深敏捷顧問帶來的敏捷落地實踐經驗,還可以和眾多企業同仁共同探討敏捷實踐過程中的酸甜

疑問python寫登錄驗證遇到的問題

password () http eas ini contact blog pre python 最近開始斷斷續續學習python,今天加入博客園,作為新人,和各位老師們討教了,以後多多照顧!為了大家能看清楚所以就截圖了,文末尾附源碼,說不定會有那位老師給我指教一番。###

itchatPython玩耍微信

說了 chatroom mage 等於 gis 表情 __main__ rec register 【itchat】   itchat是個基於網頁版微信的python微信API。功能目前做到基本可以滿足正常的消息收發,信息的獲取等等。不過對於紅包之類網頁版微信不支持的功能,

前端特效-Javascript實現購物頁面圖片放大效果

position pre children mes ges 冒泡 cnblogs absolute 取值 實現效果 實現代碼: <!DOCTYPE html> <html> <head> <title>購物圖片放大&