和黑客斗爭(zhēng)的 6 天!
互聯(lián)網(wǎng)公司工作,很難避免不和黑客們打交道,我呆過(guò)的兩家互聯(lián)網(wǎng)公司,幾乎每月每天每分鐘都有黑客在公司網(wǎng)站上掃描。
有的是尋找 Sql 注入的缺口,有的是尋找線上服務(wù)器可能存在的漏洞,大部分都是各個(gè)黑客檢測(cè)工具來(lái)掃描,當(dāng)然更高級(jí)一點(diǎn)的入侵需要很多人工協(xié)助。
一般情況下,網(wǎng)站被黑客入侵都是因?yàn)殚_(kāi)發(fā)人員平時(shí)沒(méi)有安全意識(shí)導(dǎo)致的,厲害的黑客往往會(huì)對(duì)平臺(tái)的業(yè)務(wù)和內(nèi)部流程非常熟悉,很多漏洞是從邏輯上分析出來(lái)的。
當(dāng)然了,所有的黑客攻擊行為都是有目的,99% 都是因?yàn)槠渲须[藏著暴利。比如2015-2017年,很多互聯(lián)網(wǎng)金融公司遭遇黑客敲詐,最后都是打錢(qián)了事。
今天給大家分享的是,去年一家公司發(fā)生的事情。
1.一個(gè)客戶反饋操作很慢引發(fā)的事件
第 1 天
2018年的某一天,客服接到個(gè)別用戶反饋,公司某款 App 操作時(shí)某個(gè)界面響應(yīng)很慢,客服將此問(wèn)題反饋給了公司的相關(guān)技術(shù)人員。
技術(shù)人員接到這個(gè)反饋之后,在生產(chǎn)環(huán)境多次測(cè)試并沒(méi)有復(fù)現(xiàn)這個(gè)問(wèn)題,于是給客戶反饋有可能是網(wǎng)絡(luò)的問(wèn)題,可以換個(gè)網(wǎng)絡(luò)再試試。
第 2 天
客服接到更多用戶反饋,手機(jī)操作某個(gè)功能時(shí)很慢,最長(zhǎng)時(shí)間要等待超過(guò) 1 分鐘??头謱⑾嚓P(guān)信息反饋到技術(shù),并且將問(wèn)題級(jí)別提高了一級(jí)。
技術(shù)這邊將問(wèn)題上升到技術(shù)經(jīng)理,開(kāi)始排查問(wèn)題原因,技術(shù)經(jīng)理通過(guò)大量測(cè)試發(fā)現(xiàn),這個(gè)緩慢現(xiàn)象在測(cè)試 10 次會(huì)復(fù)現(xiàn) 1 次。
看來(lái)又是一個(gè)偶現(xiàn)的問(wèn)題,偶現(xiàn)的 Bug 是最難處理的,技術(shù)經(jīng)理帶著研發(fā)人員在服務(wù)器調(diào)了一下前端業(yè)務(wù)日志,分析之后也沒(méi)有找到具體的原因。
第 3 天
公司有一個(gè)核心代理商將此問(wèn)題反饋到技術(shù)老總,老總安排技術(shù)總監(jiān)來(lái)關(guān)注此問(wèn)題。技術(shù)總監(jiān)要求把訪問(wèn)路徑的關(guān)鍵節(jié)點(diǎn)都打上日志,看看具體是哪部分操作慢了。
經(jīng)過(guò)技術(shù)經(jīng)理的排查,是在 App 操作某一個(gè)功能的時(shí)候出現(xiàn)偶發(fā)性的慢,但是這塊的操作也有緩存作為支撐,緩存的使用率并不是很高。
既然問(wèn)題是偶發(fā)并且后面的緩存使用率并不高,那么應(yīng)該不是程序哪塊出現(xiàn) Bug 了,應(yīng)該是其它方面的問(wèn)題,遂要求排查是否是服務(wù)器問(wèn)題。
先給大家畫(huà)一下一張圖,方便大家了解一下技術(shù)背景。
前端用戶使用手機(jī)操作某一個(gè)功能時(shí),請(qǐng)求經(jīng)過(guò)防火墻路由器分發(fā)到最前端的 Nginx,Nginx 又通過(guò)均衡負(fù)載分發(fā)到后面的五臺(tái)業(yè)務(wù)服務(wù)器。
業(yè)務(wù)操作的時(shí)候需要調(diào)用一組數(shù)據(jù),這些數(shù)據(jù)會(huì)根據(jù)業(yè)務(wù)規(guī)則緩存到背后的緩存服務(wù)器集群中,用來(lái)緩解后端數(shù)據(jù)庫(kù)的壓力。
第 4 天
經(jīng)過(guò)和運(yùn)維人員配合調(diào)查發(fā)現(xiàn),在分發(fā)的這 5 臺(tái)業(yè)務(wù)服務(wù)器中,其中有 1 臺(tái)服務(wù)器的壓力比較大,凡是請(qǐng)求分發(fā)到這臺(tái)服務(wù)器的時(shí)候就會(huì)出現(xiàn)慢的情況。
因?yàn)榫€上的服務(wù)器已經(jīng)用了很多年,懷疑是不是服務(wù)器配置老化導(dǎo)致的問(wèn)題,隨后將壓力比較大的服務(wù)器進(jìn)行下線,無(wú)縫切換到新的服務(wù)器上。
過(guò)了半個(gè)小時(shí)后繼續(xù)觀察,又發(fā)現(xiàn)另外的一臺(tái)服務(wù)器也出現(xiàn)負(fù)載壓力大的問(wèn)題。后面變了很多方案,比如減少到 3 臺(tái)服務(wù)器來(lái)支撐,或者增加到 9 臺(tái)服務(wù)器來(lái)支撐。
總是切換半個(gè)小時(shí)到兩個(gè)小時(shí)的時(shí)候,其中的 1-2 臺(tái)服務(wù)器的壓力會(huì)突然上來(lái),一直保持比較高的訪問(wèn)量,經(jīng)過(guò)這些測(cè)試排除是服務(wù)器的問(wèn)題。
緊接著排除 Nginx 是不是分發(fā)的策略有問(wèn)題,導(dǎo)致某個(gè)服務(wù)器分發(fā)的請(qǐng)求過(guò)多,試著變了幾次 Nginx 的分發(fā)策略后,還是會(huì)復(fù)現(xiàn)出問(wèn)題,排除 Ngingx 分發(fā)異常。
第 5 天
技術(shù)人員繼續(xù)跟蹤,負(fù)載壓力比較高的服務(wù)器線程 Down 出來(lái)和正常的服務(wù)器對(duì)比,發(fā)現(xiàn)在負(fù)載壓力比較大的服務(wù)器上某個(gè)線程的調(diào)用數(shù)量異常的高。
再繼續(xù)跟蹤這個(gè)線程,原來(lái)是某一個(gè)忘記密碼的功能被頻繁的調(diào)用,忘記密碼應(yīng)該是一個(gè)普通的接口,為什么會(huì)被這樣高頻率的調(diào)用呢?
然后再繼續(xù)跟蹤是哪些 IP 在頻繁的調(diào)用這些接口,不跟蹤不知道,一跟蹤嚇一跳,把調(diào)用最頻繁的 Top 100 IP 列出來(lái)查了一下,發(fā)現(xiàn)都是國(guó)外的 IP。
什么 巴黎、孟買(mǎi)、菲律賓、泰國(guó),幾乎所有的外國(guó)的IP都有,但是作為一家國(guó)內(nèi)的第三方支付公司,怎么可能會(huì)出現(xiàn)國(guó)外的 IP 呢?
大家都知道在手機(jī)上填忘記密碼的時(shí)候,絕大部分平臺(tái)都是使用手機(jī)號(hào)作為其中的一個(gè)條件,如果你沒(méi)有在這家平臺(tái)注冊(cè),那么就會(huì)反饋手機(jī)號(hào)不存在。
這是一個(gè)非常常見(jiàn)的功能,但是對(duì)于黑客來(lái)講,這個(gè)功能夠暴利了。
很多同行業(yè)的競(jìng)爭(zhēng)者需要挖角其它公司客戶,但是怎么知道這些平臺(tái)的客戶有哪些?
直接通過(guò)這個(gè)接口,暴力破解就可以了。
是不是很黃很暴力!
因?yàn)楣咎幚淼臉I(yè)務(wù)都是國(guó)內(nèi)業(yè)務(wù),所以只要直接在 Nginx 寫(xiě)腳本,把所有來(lái)自國(guó)外的IP 都給屏蔽,可以暫時(shí)解決被國(guó)外 IP 攻擊的問(wèn)題。上線后果然消停了,服務(wù)器也不過(guò)載了,App 訪問(wèn)也正常了。
第 6 天
可能黑客過(guò)了一晚上也反應(yīng)過(guò)來(lái)了,又開(kāi)始使用國(guó)內(nèi)的服務(wù)器代理 IP 高頻調(diào)用此接口,既然黑客使用了國(guó)內(nèi)的 IP 地址,肯定不能把國(guó)內(nèi) IP 都封了吧。
不過(guò)在 Nginx 之后還有一個(gè)前置服務(wù)器,在前置服務(wù)器中加一個(gè)非常簡(jiǎn)單的過(guò)濾器:設(shè)置一個(gè) IP 地址在某個(gè)時(shí)間段內(nèi)(可配置)只能訪問(wèn)此接口 5 次,即可解決此問(wèn)題。
然后再以用戶為維度加限制,一個(gè)用戶在某個(gè)時(shí)間段內(nèi)(可配置)只能訪問(wèn)此接口 5 次。
上面這些手段都上完之后,一切都安靜了,再也沒(méi)有出現(xiàn)過(guò)服務(wù)過(guò)載或者用戶反饋操作反應(yīng)慢的問(wèn)題了。
但是如果黑客有足夠多的國(guó)內(nèi) IP 呢,為了防止出現(xiàn)這樣的問(wèn)題,我們?cè)俳又鴮?duì)產(chǎn)品進(jìn)行升級(jí),來(lái)防止黑客的這種可能性。
我們都知道現(xiàn)在很多 APP 頁(yè)面,為了方便用戶操作在忘記密碼的時(shí)候沒(méi)有圖形驗(yàn)證碼,或者有圖形驗(yàn)證碼卻比較簡(jiǎn)單可以機(jī)器破解。
所以需要升級(jí)新一代的智能驗(yàn)證措施,現(xiàn)在很多創(chuàng)業(yè)公司都可以提供這種服務(wù),這樣就從各個(gè)維度防止了黑客通過(guò)暴力手段獲取客戶信息。
2.總結(jié)
其實(shí)據(jù)我所知,很多互聯(lián)網(wǎng)公司到現(xiàn)在仍然存在這種漏洞,很容易讓黑客通過(guò)暴力破解就拿到用戶注冊(cè)的手機(jī)號(hào),只要拿到了用戶的手機(jī)號(hào)后面就可以采用各種營(yíng)銷策略。
這是目前很多公司,采用的一種競(jìng)爭(zhēng)手段。
有的時(shí)候,產(chǎn)品的易用性和安全性其實(shí)是有沖突的,產(chǎn)品在設(shè)計(jì)的時(shí)候,其實(shí)就應(yīng)該和技術(shù)多考慮風(fēng)控的相關(guān)設(shè)計(jì),不然在產(chǎn)品運(yùn)營(yíng)的后期容易出現(xiàn)問(wèn)題。
一個(gè)大型互聯(lián)網(wǎng)公司中風(fēng)險(xiǎn)點(diǎn)非常多,服務(wù)器風(fēng)險(xiǎn)點(diǎn)、業(yè)務(wù)風(fēng)險(xiǎn)點(diǎn)都需要做提前考慮,同時(shí)公司必須配備相應(yīng)的安全人員,對(duì)公司網(wǎng)站做常規(guī)安全巡檢。
監(jiān)控公司所有的訪問(wèn)接口頻次,定期把公司里面所有的 IP 訪問(wèn)情況做成圖表進(jìn)行分析,看哪些是正常的請(qǐng)求,哪些是異常的訪問(wèn)。
定期排查統(tǒng)計(jì)分析訪問(wèn)的所有請(qǐng)求,可以提前發(fā)現(xiàn)很多問(wèn)題。
開(kāi)發(fā)人員和黑客斗爭(zhēng)其實(shí)是一個(gè)長(zhǎng)期的工作,任何一個(gè)訪問(wèn)量比較大的公司都會(huì)遇到類似的問(wèn)題,遇到問(wèn)題不要驚慌,仔細(xì)排查每一個(gè)細(xì)節(jié),最終肯定會(huì)找到問(wèn)題的答案。
在我的職場(chǎng)經(jīng)歷中,和黑客有過(guò)非常多交手的經(jīng)歷,現(xiàn)在回過(guò)頭來(lái)看,這些經(jīng)歷才是我提升最快的最好養(yǎng)分。
解決問(wèn)題是程序員成長(zhǎng)的第一動(dòng)力,解決大問(wèn)題是成為大牛的關(guān)鍵。程序員的一生,也就是不斷解決問(wèn)題的一生。
這樣看來(lái),我們要感謝職場(chǎng)上遇到的那些困難!
所有能爬過(guò)去的問(wèn)題都成為了經(jīng)歷和談資,只有那些越不過(guò)的 BUG 才能稱之為問(wèn)題。
















 
 
 

 
 
 
 