公司短信平臺上的2萬塊錢,瞬間就被黑光了...
前兩天的中午像往常一樣熱,太陽不知疲倦的在天空燃燒,熱跑了云彩和鳥兒,馬上就要點燃空氣和我的腦神經(jīng)。
圖片來自 Pexels
為我和電腦降溫的,是我簡陋的書桌上的小電扇,沒有它的話,鍵盤太熱,我可能就要寫不下去代碼了。
正在此時,旁邊的手機嗡嗡的震了兩聲,對于手機從來不敢開鈴聲的人來說,這個震動的聲音實在太熟悉了,不用說,應該是廣告短信,或者有人加我微信好友了。
因為短信我基本上不看,微信消息不會有提示,只有加好友才有,由于最近有不少朋友看到我寫的文章,所以每天加我好友的還是不少的,我都是找空閑時間統(tǒng)一處理。所以,我還是繼續(xù)寫我的代碼,并沒有理會。
過了兩分鐘左右,嗡嗡~~震了兩聲,不慌,繼續(xù)寫代碼。然后嗡嗡~~又震了兩聲,接著又震了兩聲,我心想,難道又是哪個大號轉了我文章了(心里略帶幾分得意),淡定,繼續(xù)寫代碼。
這時候已經(jīng)持續(xù)了 6、7次,我剛要拿手機看一下,突然有事兒,趕緊開門出去了,過了 20 分鐘回來之后,發(fā)現(xiàn)手機還在震。
我趕緊拿起來一看,未讀短信數(shù)量變多了(這是寫文章的時候截的圖,真實數(shù)量比這個還要多一點,被我點了)。
我去,怎么這么多短信了,我記得很清楚,本來才 820 多條(是在要對有強迫癥的朋友表示歉意,這圖可能讓你們看上去很不爽),原諒我不怎么看短信,一直堆積了 800 多條。
怎么半個小時的時間多了好幾十條,我打開一看,都是某不知名公司的登錄驗證碼消息,就像下面這樣:
【XX 科技】您正在短信登錄,驗證碼 689287,請在 15 分鐘內提交驗證碼,切勿將驗證碼泄露于他人。
瞬間讓我想到一個詞:短信轟炸機。What,有人轟炸我,我得罪什么人了嗎,于是大腦飛速運轉。
難道是前幾天問我問題我沒及時回答,然后罵我,被我刪掉的那個兄弟吧?
難道是最近那個毫不客氣、素不相識,上來就讓我?guī)退?shù)據(jù),我讓他滾的那個總監(jiān)吧?又或者是多次舉報我文章非原創(chuàng)的某大佬吧?
值得嗎,不至于嗎,這么勞神傷財費力的,不至于吧。就在我思考的時間內,手機平靜了,不響了,事實證明我可能想多了,可能就是某短信轟炸機轟炸的時候定位錯了目標,然后及時發(fā)現(xiàn)了,或者其他什么原因。
熟悉的場景
這個場景勾起了我的某些回憶,與此同時,我對 XX 科技表示深切的同情。幾年前,我所在的創(chuàng)業(yè)公司就被短信轟炸機利用,一晚上,短信平臺上的 2 萬塊錢化為烏有。
短信轟炸機:
手機短信轟炸機是批量、循環(huán)給手機無限發(fā)送各種網(wǎng)站的注冊驗證碼短信的方法。一般一分鐘可以收到超過一百條短信,可用于測試手機的短信接收速度??梢允窃陔娔X運行或是手機運行。
比如有人想整你,花點錢買個短信轟炸或者電話轟炸(學名呼死你)的服務,你的手機瞬間變成一個高頻振動器或者循環(huán)鈴聲播放器,輕則讓你手機發(fā)燙,重則直接沒電關機。
現(xiàn)在的短信平臺很多,比如騰訊、阿里、華為什么的一大堆,而且都有防盜刷等功能,當時,不知道老板從哪個渠道找到的一個短信平臺,具體名字已經(jīng)不記得了,畢竟已經(jīng)好幾年了。
當時,那個平臺好像是充 2 萬,送 5000,所以老板直接充了兩萬,按照幾分錢一條短信計算,以當時公司業(yè)務體量來看,用到公司倒閉可能都用不完。
那時候,經(jīng)過幾個月的艱苦奮戰(zhàn),開發(fā)的產(chǎn)品順利上線,但是沒有推廣,正在進行最后的線上測試,只是公司內部人測試,還有認識的一些朋友用用,順道幫忙測試一下,眼看著就要開始大范圍推廣了。
某晚夜黑風高,老板突然打電話過來,說他收到了短信平臺費用預警通知,顯示余額所剩不多,讓我趕緊登錄看一下是什么情況。
當我進入頁面的那一刻,我驚呆了,已用 4 萬多條,剩余幾千條了。
趕緊給客服打電話詢問情況,其實到這一刻的時候,我們還沒意識到是系統(tǒng)安全漏洞被利用了,客服解釋說這個賬號確實是一直在發(fā)短信,短信內容是驗證碼相關的,并且現(xiàn)在還在持續(xù)發(fā),詢問是否要先把服務停掉。
什么?還在持續(xù)的發(fā)?那趕緊先停了再說,于是讓客服操作先把服務停了。
當時我也是初入互聯(lián)網(wǎng),并不知江湖如此險惡,團隊也是草臺班子,也都沒想到會出現(xiàn)這種問題。
當我冷靜下來開始思考并且到搜索引擎搜索相關問題的時候,我找到了短信轟炸機的這個概念。
短信轟炸機最喜歡利用具有安全漏洞的開放平臺的短信發(fā)送接口了,比如注冊、登錄接口。
而我們的網(wǎng)站確實由于沒做驗證碼發(fā)送的防護措施,導致漏洞產(chǎn)生,從而被利用了,說到底,還是當時能力不到位。
到現(xiàn)在為止我也不知道當時我們這個還沒推廣的小產(chǎn)品是怎么被盯上,然后被利用的。
有說可能是短信平臺方有內鬼,把客戶信息賣給第三方平臺,或者就是自產(chǎn)自銷,短信快點兒用完,就可以趕緊續(xù)費了呀。
還有說是短信轟炸平臺會黑掉這些正常的短信平臺,然后找到使用方,進而利用。
還有說,他們就是全網(wǎng)掃這種 Register、Login 等類似的 URL,掃通了就收集起來,進一步處理,并發(fā)現(xiàn)其中可以被利用的。
但具體是哪種,我也不知道,反正就是你不做好防護,就得被利用。
事故現(xiàn)場和防護處理
這其實就是安全漏洞了,只不過比較低級,低級到什么程度了呢?就是你在注冊頁面輸入手機號之后,點擊「發(fā)送驗證碼」按鈕,只會判斷手機號是否合法和是否已經(jīng)注冊,否則就直接發(fā)驗證碼,這叫無知無畏。
這就相當于是開門迎客的狀態(tài),不需要權限,沒有調用頻次限制,也沒有什么 Token 之類的做校驗。
當時停掉短信服務之后,我馬上去看了后臺日志,發(fā)現(xiàn)有很多不同的 IP 在不斷的發(fā)來請求,喪心病狂的是,雖然短信服務已經(jīng)停了,但是請求還在不斷涌來。
看來這就是一套完整的自動化流程,用 IP 池動態(tài)代理,模擬發(fā)送請求,我們的短信接口只不過就是其中一個微不足道的免費資源而已。
停掉服務
當時已經(jīng)很晚了,快要凌晨了,但是大腦被刺激的很是清醒。首先想的就是別管怎么樣,先讓服務正??捎冒伞?/p>
但是請求還在一直過來,于是,我先把 Nginx 服務關閉了,既然你這么智能,接口你訪問不到,是不是就會停了。
停了 5 分鐘之后,我剛一重啟,馬上日志又被填滿,事實證明不是它不智能,是我弱智了。它才不管你,它就是一臺沒有感情的自動請求機器。
更換接口地址
行吧,我認慫可以吧,服務我又不能停,你這臺沒有感情的機器我也控制不了,那我先改了接口地址。
于是我把注冊、登錄的接口地址先給換了,這樣一來,總能把短信服務先剝離開,先減輕點服務器壓力吧。但還是不敢把短信服務打開,萬一它又發(fā)現(xiàn)我們的新接口了呢。
這時已經(jīng)很晚了,還好產(chǎn)品還沒有推廣,沒什么人用,就先睡了,等著第二天處理。
加圖形驗證碼
第二天早早去公司,第一件事兒,就是看看那臺沒感情的機器是不是放過我們了,結果一看日志,心突然有點兒涼,我休息了一晚,它卻沒休息。
有同事說,要不換 IP 吧?大哥,人家請求的是域名,倒是可以換個二級域名,之前是 api.xxxx.com 作為后端服務 domain 的,于是有同事開始鼓搗換二級域名。
我這邊開始加其他規(guī)則,首先想到的就是加驗證,在發(fā)送驗證碼之前加個圖形驗證,當時找到了「極驗」提供的行為驗證的方式。
就是大家經(jīng)??吹降南旅孢@種方式,在發(fā)送驗證碼之前先讓用戶完成行為校驗,基本上可以把機器人阻擋在外,而且集成很簡單。
但是,咨詢了一下費用,當時就被勸退了,當時是年費 5 萬,不知道現(xiàn)在多少錢了。
圖形驗證碼也不錯,關鍵是不用花錢啊,于是找了開源代碼,做了圖形驗證碼。當時為了更加安全,讓機器更難破解,當時做了 6 位字母、數(shù)字組合,并且干擾因素加的很足。
事實證明不僅能放防機器,還能防人,很多同事做測試的時候表示經(jīng)常很難辨認出來。于是改成了 4 位,并且降低了干擾因素。
有了這次教訓,當我看到 12306 一步步升級驗證碼難度的時候,我能體會到 12306 的無奈和內心的彷徨。
限制訪問頻次
加了圖形驗證碼是第一步,還不行,萬一被繞過了,畢竟自動識別驗證碼也只是增加了門檻,如果真有人想搞你,還是攔不住的。
限制單個手機號的驗證碼請求頻次,5 分鐘內只允許發(fā)送三次,一小時內超過 9 次就限制 24 小時不允許發(fā)送。
除了限制手機號的頻次外,還限制單個 IP 的請求頻次,規(guī)則是一樣的。
設置黑名單
但是對方使用的是動態(tài) IP 池,可能不會 5 分鐘內連續(xù)請求。通過日志分析,發(fā)現(xiàn)這段時間內共有幾百個 IP在發(fā)請求過來,于是把這段時間內單 IP 請求超過 10 次的全部加入黑名單。
并且 4 小時單 IP 請求超過 8 次的都加入黑名單。當然這些規(guī)則都是通過觀察日志得到了,當然最終的科學依據(jù)是「拍腦袋」。
之后有請求過來,先看 IP 是否在黑名單中,如果在,就直接拒絕。
其他方式
除了以上措施外,還有其他的一些防護方式。
比如在用戶進入前端頁面(登錄或注冊頁)的時候生成一個或者請求一個 Token,然后請求的時候對 Token 做校驗,你可以寫一些比較復雜的算法邏輯在里面。
當然這也只是增加了門檻而已,如果被掌握了流程,還是一樣會被利用。
舊的域名接口也一直保留著,倒要看看它會請求多久,過了差不多 8、9 天吧,請求才消失。
最后
安全問題也是互聯(lián)網(wǎng)開發(fā)中很重要的方面,但是經(jīng)常被開發(fā)人員忽視。細思極恐,如果是在產(chǎn)品剛推廣的時候出現(xiàn)問題,那對用戶的傷害真的是極大的。
有一些初創(chuàng)公司就是因為某些安全漏洞,直接導致公司關門大吉。大廠更是面臨風險,很多實力雄厚的羊毛黨就是利用漏洞來薅羊毛的,比如前段時間某大商城由于優(yōu)惠券漏洞被薅了幾千萬。
只要有利可圖,就有被利用的風險,安全問題,還需謹慎對待。
作者:風箏
編輯:陶家龍
出處:轉載自微信公眾號古時的風箏(ID:gushidefengzheng)