前情提要
前段時(shí)間,我在一個(gè)非公開(kāi)的 Bug 賞金項(xiàng)目里發(fā)現(xiàn)了一個(gè)嚴(yán)重的漏洞,這個(gè)漏洞可以允許遠(yuǎn)程執(zhí)行代碼。在我提交漏洞報(bào)告的幾個(gè)小時(shí)后,我收到了第一封郵件回復(fù),他們說(shuō)會(huì)盡快確認(rèn)漏洞然后再和我聯(lián)系。到目前為止一切都是正常的。
但是第二封郵件的回復(fù)揭開(kāi)了整個(gè)驚心動(dòng)魄的故事,就像多米諾骨牌效應(yīng)一樣把更多的問(wèn)題暴露了出來(lái)。
關(guān)于這個(gè)事故,社區(qū)反應(yīng)是這樣的:
https://twitter.com/secalert/status/1339640670210945030
線上會(huì)談前的郵件往來(lái)
我找出了這個(gè)遠(yuǎn)程代碼執(zhí)行的漏洞,并且在報(bào)告里用 5 個(gè)命令來(lái)演示 POC(Proof Of Concept)。因?yàn)槲也幌朐?POC 里造成任何破壞,所以我決定用下面這幾個(gè)命令:
第 1 封郵件回復(fù)說(shuō)他們會(huì)認(rèn)真排查報(bào)告里說(shuō)到的問(wèn)題。
但是第 2 封郵件的回復(fù)是這樣的
親愛(ài)的 Dave,
感謝你的報(bào)告和 POC。因?yàn)槲覀儸F(xiàn)在人手不足,所以只能讓我們的初級(jí)工程師來(lái)驗(yàn)證你提到的遠(yuǎn)程代碼執(zhí)行漏洞。但是他在驗(yàn)證的過(guò)程中嘗試用命令 rm -rf * 來(lái)看 web 的用戶是否能造成破壞。不幸的是,因?yàn)檫@個(gè)命令他把所有東西都刪了。我們會(huì)嘗試盡快恢復(fù)數(shù)據(jù)來(lái)繼續(xù)漏洞修復(fù),當(dāng)我們的問(wèn)題解決的時(shí)候我們會(huì)再讓你幫忙驗(yàn)證漏洞修復(fù)的情況。
我回復(fù)他們我隨時(shí)可以來(lái)幫助他們解決問(wèn)題。
接著他們第 3 封郵件的回復(fù)是這樣的:
親愛(ài)的 Dave,
跟你同步一下進(jìn)度。我們已經(jīng)導(dǎo)入了備份。但是不幸的是,我們發(fā)現(xiàn)本來(lái)預(yù)計(jì)的是通過(guò) cronjob 每 3 天備份一次,但是無(wú)意中配置成了每3個(gè)月備份一次,這導(dǎo)致我們沒(méi)有辦法恢復(fù)這幾個(gè)星期的數(shù)據(jù)了。我們現(xiàn)在已經(jīng)修復(fù)了這個(gè)問(wèn)題,未來(lái)也會(huì)更加注重在多個(gè)工程師之間做結(jié)對(duì)編程和代碼審查。
最后第 4 封郵件的回復(fù)是這樣的:
親愛(ài)的 Dave,
感謝你耐心等候。我們已經(jīng)優(yōu)化了備份的流程,也盡可能地導(dǎo)入最新的備份。同時(shí)我們開(kāi)發(fā)部門(mén)的同事也修復(fù)了你報(bào)告里提到的漏洞,現(xiàn)在已經(jīng)熱更放了出去。你現(xiàn)在可以再幫忙驗(yàn)證一下這個(gè)漏洞是否真的被修復(fù)了嗎?
確認(rèn)漏洞修復(fù)并且提出線上會(huì)談
我確認(rèn)了他們的漏洞已經(jīng)修復(fù)了,接著向他們提出要不要進(jìn)行一次線上會(huì)談來(lái)聊聊這個(gè)案例,因?yàn)檫@種事情很容易發(fā)生在初學(xué)者身上,一起聊一聊的話可以分享這些踩過(guò)的坑,來(lái)防止其他人再犯同樣的錯(cuò)誤。讓我很驚喜的是他們答應(yīng)了。事實(shí)證明,無(wú)論是他們還是他們的公司都不是徒有虛名。
當(dāng)事人愿意出來(lái)解釋前因后果
首先,我要借這個(gè)機(jī)會(huì)來(lái)感謝兩位當(dāng)事人工程師愿意來(lái)和我線上會(huì)談,并同意讓我引用之前溝通的內(nèi)容,這樣可以讓其他人更清楚的了解整件事的前因后果。
因?yàn)閾?dān)心網(wǎng)絡(luò)暴力和一些不好的評(píng)論,當(dāng)事人要求匿名。
當(dāng)然,我尊重他們的要求。下面我會(huì)用“工程師老甲”和“初級(jí)工程師張三”來(lái)指代他們。
線上會(huì)談經(jīng)過(guò)
@Dave
感謝來(lái)到這次線上會(huì)談,再次感謝你們的勇氣和無(wú)私。如果可以的話我會(huì) @ 特定的人來(lái)向他提問(wèn),他可以通過(guò)評(píng)論來(lái)回復(fù),如果有什么問(wèn)題你不想回答的話,我們就直接跳過(guò)。
@Dave 問(wèn) “初級(jí)工程師張三”:
首先得問(wèn)一下你現(xiàn)在還好嗎,希望你從那件事情發(fā)生后到現(xiàn)在已經(jīng)平靜下來(lái)了。你可以從你的角度簡(jiǎn)要描述一下當(dāng)時(shí)發(fā)生了什么嗎?
@張三:
好的。
首先我得強(qiáng)調(diào)一下,我已經(jīng)吸取了深刻的教訓(xùn)。我當(dāng)時(shí)看到你提交的遠(yuǎn)程代碼執(zhí)行的漏洞很驚訝,因?yàn)槲艺J(rèn)為我們現(xiàn)在用的框架或者防火墻應(yīng)該可以識(shí)別并阻止它。
8 月份的時(shí)候,我完成了我作為應(yīng)用部署 IT 專業(yè)人員的培訓(xùn),接著從 11 月份才開(kāi)始在公司里從事安全相關(guān)的事情。因?yàn)楫?dāng)時(shí)別人問(wèn)我有沒(méi)有興趣去管理一下 bug 賞金計(jì)劃,我就答應(yīng)了。因?yàn)樾鹿谝咔榈谋l(fā)和隨之而來(lái)的節(jié)假日,我們公司人手不足,就有同事問(wèn)我能不能幫忙回復(fù)一下 bug 賞金計(jì)劃的郵件,如果我懂郵件里的 bug 的話,看看能不能驗(yàn)證一下那些 bug。因?yàn)槲液芟霂蜕厦λ跃秃苡淇斓卮饝?yīng)了,而且也因?yàn)榈玫絼e人的賞識(shí)感到很高興。
當(dāng)我在你的郵件里讀到“遠(yuǎn)程代碼執(zhí)行”的時(shí)候,我以為那只是能執(zhí)行一下計(jì)算器或者留一張黑客組織圖片的這種小把戲。我根本沒(méi)有意識(shí)到它可以對(duì)操作系統(tǒng)造成任何實(shí)質(zhì)性的破壞。然后我 Google 了一下來(lái)看看這個(gè)漏洞是不是像你描述的那樣嚴(yán)重。接著我從 Google 出來(lái)的頁(yè)面里復(fù)制了幾條可能會(huì)造成破壞的命令去執(zhí)行,因?yàn)槲矣X(jué)得我們的框架或者防火墻會(huì)去阻止它的。最后我發(fā)現(xiàn)了 rm -rf *這條命令,當(dāng)我意識(shí)到壞事了的時(shí)候,一切都晚了,我嚇壞了。幾分鐘后,我鼓起勇氣跟同事說(shuō)了剛剛發(fā)生的事情,問(wèn)他能不能幫我一起處理一下。我真的很抱歉,我已經(jīng)從中吸取了教訓(xùn),以后我會(huì)在我操作之前多問(wèn)問(wèn)同事。這也是我為什么準(zhǔn)備來(lái)做這次會(huì)談,我希望其他的初級(jí)工程師也可以從我的事故中學(xué)到教訓(xùn),不要再犯同樣的錯(cuò)誤。
@Dave:
非常感謝張三真誠(chéng)地跟我們分享他的事故。
@Dave 問(wèn) “工程師老甲”:
老甲,你可以從你的角度來(lái)聊聊事情的經(jīng)過(guò)以及你的第一反應(yīng)是什么嗎?
@老甲:
好的。
我們不該在這件事上把他單獨(dú)推出來(lái)。實(shí)話實(shí)說(shuō),當(dāng)我問(wèn)他能不能幫忙管理一下 bug 賞金計(jì)劃的時(shí)候,他立馬就答應(yīng)了。但老實(shí)說(shuō),我們每個(gè)人在年輕的時(shí)候接受一份任務(wù)的時(shí)候都是很開(kāi)心的。所以我想保護(hù)他,我至少要承擔(dān) 50% 的責(zé)任。
回到那個(gè)問(wèn)題:當(dāng)他跑來(lái)跟我說(shuō)那個(gè)遠(yuǎn)程代碼執(zhí)行的漏洞的時(shí)候,我們立即明確了這是一個(gè)安全事故并且要重視起來(lái)。接著我排查了一下我們的系統(tǒng),發(fā)現(xiàn)我們的 web 應(yīng)用已經(jīng)不工作了。然后我 ssh 到我們的服務(wù)器,發(fā)現(xiàn)整個(gè)應(yīng)用的目錄都空了,數(shù)據(jù)全被刪除了。因?yàn)槲覀円呀?jīng)很久沒(méi)有給這個(gè)系統(tǒng)導(dǎo)入備份了,所以我們這次導(dǎo)入要花很長(zhǎng)時(shí)間。然后我讓同事去看看備份,我來(lái)回復(fù)你郵件,告訴你我們對(duì)你提的漏洞很重視,已經(jīng)著手在處理了。
我同事驚訝地發(fā)現(xiàn)備份是幾周前的。我們接著一起看了一下系統(tǒng)和備份,一開(kāi)始感覺(jué)是驚訝,接著是絕望。然后我們又看了 cronjob 的配置,發(fā)現(xiàn)是配錯(cuò)了,本來(lái)應(yīng)該是每 3 天跑一次,結(jié)果配置成了每3個(gè)月跑一次。震驚!最后我們丟了幾個(gè)星期的數(shù)據(jù)。不幸中的萬(wàn)幸是,這是我們不太重要的業(yè)務(wù)。我們?cè)谀翘鞂W(xué)到了很多,我們已經(jīng)在內(nèi)部討論如何避免這種過(guò)失不再發(fā)生。
我們是一個(gè)有超過(guò) 400 名員工的公司,所以想把我們的業(yè)務(wù)拿去測(cè)試它的安全性。我們?cè)?a href="http://www.brongaenegriffin.com/article/bbs/" target="_blank">論壇里聽(tīng)說(shuō)了 bug 賞金計(jì)劃,當(dāng)時(shí)覺(jué)得這個(gè)計(jì)劃比我們自己組建一支安全隊(duì)伍要更好,所以就參與了這個(gè)計(jì)劃。但是現(xiàn)在我們覺(jué)得,自己不組建一支安全隊(duì)伍可能還是不行,至少得有人熟悉這方面的問(wèn)題。因?yàn)樯厦娴哪莻€(gè)事故,我們會(huì)在內(nèi)部再討論一下這個(gè)問(wèn)題。
不掩飾這個(gè)故障對(duì)我來(lái)說(shuō)很重要,這也是為什么我們可以和你開(kāi)誠(chéng)布公地討論這個(gè)問(wèn)題。
另外,我們的開(kāi)發(fā)團(tuán)隊(duì)也確認(rèn)并修復(fù)了這個(gè) bug,我們網(wǎng)站現(xiàn)在更加安全了。我要感謝你促成了這次訪談,我相信其他人會(huì)從我們的事故中學(xué)到一些東西。
@Dave
我從心底里感謝你們兩位開(kāi)誠(chéng)布公地和我討論這個(gè)問(wèn)題。如果有什么可以幫你的,請(qǐng)隨時(shí)給我發(fā)郵件。希望你和你的家人快樂(lè)。
最后感想
我曾幻想著那個(gè)故障沒(méi)有發(fā)生。但是,我們都是普通人,因?yàn)槲覀兿霂蜕厦?,所以難免會(huì)犯重大的錯(cuò)。我們每個(gè)人都曾在某個(gè)節(jié)點(diǎn)犯了這樣那樣地錯(cuò)。只要我們從中學(xué)到了東西,我們就會(huì)一直變得更好。
希望這兩位工程師的分享,可以幫助其他人預(yù)防此類錯(cuò)誤。
責(zé)任編輯:xj
原文標(biāo)題:我在服務(wù)器上執(zhí)行了 rm -rf *
文章出處:【微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9795瀏覽量
88005 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70761 -
BUG
+關(guān)注
關(guān)注
0文章
156瀏覽量
16028
原文標(biāo)題:我在服務(wù)器上執(zhí)行了 rm -rf *
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
服務(wù)器數(shù)據(jù)恢復(fù)—Linux系統(tǒng)服務(wù)器崩潰的數(shù)據(jù)恢復(fù)案例


依托raksmart服務(wù)器在多種系統(tǒng)上本地部署deepseek注意事項(xiàng)
服務(wù)器數(shù)據(jù)恢復(fù)—Zfs文件系統(tǒng)服務(wù)器數(shù)據(jù)恢復(fù)案例
如何在Linux系統(tǒng)上設(shè)置站群服務(wù)器IP地址
如何在Windows上設(shè)置SFTP服務(wù)器
美國(guó)多IP服務(wù)器和美國(guó)多服務(wù)器有什么區(qū)別
功能服務(wù)器與機(jī)架式的區(qū)別
獨(dú)立服務(wù)器與云服務(wù)器的區(qū)別
服務(wù)器數(shù)據(jù)恢復(fù)—Linux網(wǎng)站服務(wù)器硬盤(pán)出現(xiàn)壞扇區(qū)的數(shù)據(jù)恢復(fù)案例
云服務(wù)器連接不上是什么原因引起的?
在Linux服務(wù)器上使用IAR Build Tools實(shí)現(xiàn)DevOps和CI/CD

評(píng)論