古時的風箏第  83  篇原創文章 

作者 | 風箏

公衆號:古時的風箏(ID:gushidefengzheng)

轉載請聯繫授權,掃碼文末二維碼加微信

前兩天的中午像往常一樣熱,太陽不知疲倦的在天空燃燒,熱跑了雲彩和鳥兒,馬上就要點燃空氣和我的腦神經。爲我和電腦降溫的,是我簡陋的書桌上的小電扇,沒有它的話,鍵盤太熱,我可能就要寫不下去代碼了。

簡陋的書桌

正在此時,旁邊的手機嗡嗡的震了兩聲,對於手機從來不敢開鈴聲的人來說,這個震動的聲音實在太熟悉了,不用說,應該是廣告短信,或者有人加我微信好友了。因爲短信我基本上從來不看,微信消息不會有提示,只有加好友纔有,由於最近有不少朋友看到我寫的文章,所以每天加我好友的還是不少的,我都是找空閒時間統一處理。所以,我還是繼續寫我的代碼,沒有理會。

過了兩分鐘左右,嗡嗡~~又震了兩聲,不慌,繼續寫代碼。然後嗡嗡 ~~ 又震了兩聲,接着又震了兩聲,我心想,難道又是哪個大號轉了我文章了(心裏略帶幾分得意),淡定,繼續寫代碼。

這時候已經持續了 6、7次,我剛要拿手機看一下,突然有事兒,趕緊開門出去了,過了20分鐘回來之後,發現手機還在震。我趕緊拿起來一看,未讀短信數量變多了(這是寫文章的時候截的圖,真實數量比這個還要多一點,被我點了)。

我去怎麼這麼多短信了,我記得很清楚,本來才 820 多條(是在要對有強迫症的朋友表示歉意,這圖可能讓你們看上去很不爽),原諒我不怎麼看短信,一直堆積了 800 多條。怎麼半個小時的時間多了好幾十條,我打開一看,都是某不知名公司的登錄驗證碼消息,就像下面這樣。

【XX科技】您正在短信登錄,驗證碼689287,請在15分鐘內提交驗證碼,切勿將驗證碼泄露於他人。

瞬間讓我想到一個詞: 短信轟炸機 。what,有人轟炸我,我得罪什麼人了嗎,於是大腦飛速運轉。

難道是前幾天問我問題我沒及時回答,然後罵我,被我刪掉的那個兄弟吧?

難道是最近那個毫不客氣、素不相識,上來就讓我幫他抓數據,我讓他滾的那個總監吧?

又或者是多次舉報我文章非原創的某大佬吧?

值得嗎,不至於嗎,這麼勞神傷財費力的,不至於吧。就在我思考的時間內,手機平靜了,不響了,事實證明我可能想多了,可能就是某短信轟炸機轟炸的時候定位錯了目標,然後及時發現了,或者其他什麼原因。

熟悉的場景

這個場景勾起了我的某些回憶,與此同時,我對 XX科技 表示深切的同情。幾年前,我所在的創業公司就被短信轟炸機利用,一晚上,短信平臺上的 2 萬塊錢化爲烏有。

短信轟炸機

手機短信轟炸機是批量、循環給手機無限發送各種網站的註冊驗證碼短信的方法。一般一分鐘可以收到超過一百條短信,可用於測試手機的短信接收速度。可以是在電腦運行或是手機運行。

比如有人想整你,花點錢買個短信轟炸或者電話轟炸(學名呼死你)的服務,你的手機瞬間變成一個高頻振動器或者循環鈴聲播放器,輕則讓你手機發燙,重則直接沒電關機。

現在的短信平臺很多,比如騰訊、阿里、華爲什麼的一大堆,而且都有防盜刷等功能,當時,不知道老闆從哪個渠道找到的一個短信平臺,具體名字已經不記得了,畢竟已經好幾年了。當時,那個平臺好像是充 2 萬,送 5000,所以老闆直接充了兩萬,按照幾分錢一條短信計算,以當時公司業務體量來看,用到公司倒閉可能都用不完。

那時候,經過幾個月的艱苦奮戰,開發的產品順利上線,但是沒有推廣,正在進行最後的線上測試,只是公司內部人測試,還有認識的一些朋友用用,順道幫忙測試一下,眼看着就要開始大範圍推廣了。

某晚夜黑風高,老闆突然打電話過來,說他收到了短信平臺費用預警通知,顯示餘額所剩不多,讓我趕緊登錄看一下是什麼情況。當我進入頁面的那一刻,我驚呆了,已用 4 萬多條,剩餘幾千條了。趕緊給客服打電話詢問情況,其實到這一刻的時候,我們還沒意識到是系統安全漏洞被利用了,客服解釋說這個賬號確實是一直在發短信,短信內容是驗證碼相關的,並且現在還在持續發,詢問是否要先把服務停掉。

什麼,還在持續的發,那趕緊先停了再說,於是讓客服操作先把服務停了。

當時我也是初入互聯網,並不知江湖如此險惡,團隊也是草臺班子,也都沒想到會出現這種問題。當我冷靜下來開始思考並且到搜索引擎搜索相關問題的時候,我找到了短信轟炸機的這個概念,短信轟炸機最喜歡利用具有安全漏洞的開放平臺的短信發送接口了,比如註冊、登錄接口,而我們的網站確實由於沒做驗證碼發送的防護措施,導致漏洞產生,從而被利用了,說到底,還是當時能力不到位。

到現在爲止我也不知道當時我們這個還沒推廣的小產品是怎麼被盯上,然後被利用的。有說可能是短信平臺方有內鬼,把客戶信息賣給第三方平臺,或者就是自產自銷,短信快點兒用完,就可以趕緊續費了呀。

還有說是短信轟炸平臺會黑掉這些正常的短信平臺,然後找到使用方,進而利用。

還有說,他們就是全網掃這種 register、login 等類似的 url,掃通了就收集起來,進一步處理,並發現其中可以被利用的。

但具體是哪種,我也不知道,反正就是你不做好防護,就得被利用。

事故現場和防護處理

這其實就是安全漏洞了,只不過比較低級,低級到什麼程度了呢?就是你在註冊頁面輸入手機號之後,點擊「發送驗證碼」按鈕,只會判斷手機號是否合法和是否已經註冊,否則就直接發驗證碼,這叫無知無畏。這就相當於是開門迎客的狀態,不需要權限,沒有調用頻次限制,也沒有什麼 token 之類的做校驗。

當時停掉短信服務之後,我馬上去看了後臺日誌,發現有很多不同的 IP 在不斷的發來請求,喪心病狂的是,雖然短信服務已經停了,但是請求還在不斷湧來。看來這就是一套完整的自動化流程,用 IP 池動態代理,模擬發送請求,我們的短信接口只不過就是其中一個微不足道的免費資源而已。

停掉服務

當時已經很晚了,快要凌晨了,但是大腦被刺激的很是清醒。首先想的就是別管怎麼樣,先讓服務正常可用吧。但是請求還在一直過來,於是,我先把 Nginx 服務關閉了,既然你這麼智能,接口你訪問不到,是不是就會停了。停了 5 分鐘之後,我剛一重啓,馬上日誌又被填滿,事實證明不是它不智能,是我弱智了。它纔不管你,它就是一臺沒有感情的自動請求機器。

更換接口地址

行吧,我認慫可以吧,服務我又不能停,你這臺沒有感情的機器我也控制不了,那我先改了接口地址。於是我把註冊、登錄的接口地址先給換了,這樣一來,總能把短信服務先剝離開,先減輕點服務器壓力吧。但還是不敢把短信服務打開,萬一它又發現我們的新接口了呢。

這時已經很晚了,還好產品還沒有推廣,沒什麼人用,就先睡了,等着第二天處理。

加圖形驗證碼

第二天早早去公司,第一件事兒,就是看看那臺沒感情的機器是不是放過我們了,結果一看日誌,心突然有點兒涼,我休息了一晚,它卻沒休息。

有同事說,要不換 IP 吧?

大哥,人家請求的是域名,倒是可以換個二級域名,之前是 api.xxxx.com 作爲後端服務 domain 的,於是有同事開始鼓搗換二級域名。

我這邊開始加其他規則,首先想到的就是加驗證,在發送驗證碼之前加個圖形驗證,當時找到了「極驗」提供的行爲驗證的方式。就是大家經常看到的下面這種方式,在發送驗證碼之前先讓用戶完成行爲校驗,基本上可以把機器人阻擋在外,而且集成很簡單。

image-20200702095741892

但是,諮詢了一下費用,當時就被勸退了,當時是年費 5 萬,不知道現在多少錢了。

圖形驗證碼也不錯,關鍵是不用花錢啊,於是找了開源代碼,做了圖形驗證碼。當時爲了更加安全,讓機器更難破解,當時做了 6 位字母、數字組合,並且干擾因素加的很足。事實證明不僅能放防機器,還能防人,很多同事做測試的時候表示經常很難辨認出來。於是改成了 4 位,並且降低了干擾因素。

image-20200702100431130

有了這次教訓,當我看到 12306 一步步升級驗證碼難度的時候,我能體會到 12306 的無奈和內心的彷徨。

不就是這樣嗎

限制訪問頻次

加了圖形驗證碼是第一步,還不行,萬一被繞過了,畢竟自動識別驗證碼也只是增加了門檻,如果真有人想搞你,還是攔不住的。

限制單個手機號的驗證碼請求頻次,5分鐘內只允許發送三次,一小時內超過 9 次就限制24小時不允許發送。

除了限制手機號的頻次外,還限制單個 IP 的請求頻次,規則是一樣的。

設置黑名單

但是對方使用的是動態 IP 池,可能不會 5 分鐘內連續請求。通過日誌分析,發現這段時間內共有幾百個 IP在發請求過來,於是把這段時間內單 IP 請求超過 10 次的全部加入黑名單。

並且4小時單 IP 請求超過 8 次的都加入黑名單。當然這些規則都是通過觀察日誌得到了,當然最終的科學依據是「 拍腦袋 」。

之後有請求過來,先看 IP 是否在黑名單中,如果在,就直接拒絕。

其他方式

除了以上措施外,還有其他的一些防護方式。

比如在用戶進入前端頁面(登錄或註冊頁)的時候生成一個或者請求一個 Token,然後請求的時候對 Token 做校驗,你可以寫一些比較複雜的算法邏輯在裏面。當然這也只是增加了門檻而已,如果被掌握了流程,還是一樣會被利用。

舊的域名接口也一直保留着,倒要看看它會請求多久,過了差不多 8、9 天吧,請求才消失。

最後

安全問題也是互聯網開發中很重要的方面,但是經常被開發人員忽視。細思極恐,如果是在產品剛推廣的時候出現問題,那對用戶的傷害真的是極大的。

有一些初創公司就是因爲某些安全漏洞,直接導致公司關門大吉。大廠更是面臨風險,很多實力雄厚的羊毛黨就是利用漏洞來薅羊毛的,比如前段時間某大商城由於優惠券漏洞被薅了幾千萬。

只要有利可圖,就有被利用的風險,安全問題,還需謹慎對待。

還可以讀:

HashSet:實不相瞞,我就是個套殼 HashMap

程序員耳機裏聽的到底是什麼

跟我極速嚐鮮 Spring Boot 2.3

-----------------------------------------

公衆號:古時的風箏

一個兼具深度與廣度的 程序員鼓勵師 ,一個本打算寫詩卻寫起了代碼的田園碼農! 你可選擇現在就關注我,或者看看歷史文章再關注也不遲。

技術交流還可以加羣或者直接加我微信。

【如果可以,請三連】

相關文章