天天看點

公司短信平台上的2萬塊錢,瞬間就被黑光了

我是風筝,公衆号「古時的風筝」,一個兼具深度與廣度的程式員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!

文章會收錄在 JavaNewBee ,還要更多文章合集。

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

公司短信平台上的2萬塊錢,瞬間就被黑光了

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

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

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

公司短信平台上的2萬塊錢,瞬間就被黑光了

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

【XX科技】您正在短信登入,驗證碼689287,請在15分鐘内送出驗證碼,切勿将驗證碼洩露于他人。

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

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

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

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

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

熟悉的場景

這個場景勾起了我的某些回憶,與此同時,我對

XX科技

表示深切的同情。幾年前,我所在的創業公司就被短信轟炸機利用,一晚上,短信平台上的 2 萬塊錢化為烏有。

短信轟炸機

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

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

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

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

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

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

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

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

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

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

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

事故現場和防護處理

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

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

停掉服務

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

更換接口位址

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

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

加圖形驗證碼

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

有同僚說,要不換 IP 吧?

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

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

公司短信平台上的2萬塊錢,瞬間就被黑光了

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

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

公司短信平台上的2萬塊錢,瞬間就被黑光了

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

公司短信平台上的2萬塊錢,瞬間就被黑光了

限制通路頻次

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

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

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

設定黑名單

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

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

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

其他方式

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

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

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

最後

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

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

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

壯士且慢,先給點個贊吧,總是被白嫖,身體吃不消!

我是風筝,公衆号「古時的風筝」。一個兼具深度與廣度的程式員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!你可選擇現在就關注我,或者看看曆史文章再關注也不遲。
公司短信平台上的2萬塊錢,瞬間就被黑光了

人生沒有回頭路,珍惜當下。