昨天,一位開(kāi)發(fā)人員在 Hacker News 上分享了他最近的經(jīng)歷:因?yàn)楹闷?,他查看了朋友公司的網(wǎng)頁(yè)源碼,發(fā)現(xiàn)了對(duì)方公司的代碼中有一個(gè)非常低級(jí)的失誤。事關(guān)安全,于是他馬上報(bào)告給了他的主管和自己公司。但不幸的是,不久后他就被公司以此安全事件為由解雇了。被解雇之后,還收到了法院的傳票,需要自己再去打一場(chǎng)官司。他對(duì)此表示不理解,認(rèn)為自己“沒(méi)有做違法的事情”,但作為一個(gè)教訓(xùn),還是以匿名的方式把這個(gè)故事分享給了大家…
然而實(shí)際上事情并沒(méi)有他想象中的那么簡(jiǎn)單。
事情經(jīng)過(guò):來(lái)自當(dāng)事人的自述
查看源碼,報(bào)告漏洞
前段時(shí)間,我在一家銀行從事軟件工程方面的工作。雖然跟信息安全無(wú)關(guān),但我了解一些業(yè)務(wù)內(nèi)情,而且自己也一直對(duì)這方面很有興趣。在工作中,我發(fā)現(xiàn)某家公司打算發(fā)行信用卡,而這項(xiàng)業(yè)務(wù)的上線會(huì)讓對(duì)方成為我們銀行的直接競(jìng)爭(zhēng)對(duì)手。我當(dāng)然對(duì)他們的業(yè)務(wù)計(jì)劃抱有好奇,而且我正好有幾位相熟的朋友在那邊工作。
在看到他們?cè)谏a(chǎn)應(yīng)用上發(fā)布的一些發(fā)卡內(nèi)容后,我把這些內(nèi)容下載下來(lái),并打算解析一下功能背后的相關(guān)資產(chǎn)(其實(shí)非常簡(jiǎn)單,解壓.ipa 文件再查找圖像 / 文本就行)。出乎意料,我發(fā)現(xiàn)其中包含大量 server mocks,可能是某個(gè)調(diào)試 build 的遺留產(chǎn)物。為了弄清應(yīng)用是如何使用這些資源的,我設(shè)置了 Charles Proxy 并嘗試用手機(jī)訪問(wèn)。老實(shí)講,我也就是隨手一試,畢竟現(xiàn)在還有人不用 SSL Pinning 嗎?(畢竟對(duì)方已經(jīng)發(fā)行并接受信用卡支付了,或多或少得有一點(diǎn)安全意識(shí)才對(duì))但事實(shí)證明,他們沒(méi)用任何 SSL Pinning,我可以用自己找到的這些 mocks 進(jìn)一步解析這款應(yīng)用。
我用個(gè)人賬戶登錄了這款應(yīng)用,查看請(qǐng)求以了解需要將哪些端點(diǎn)映射到哪些本地 mocks——照理說(shuō),我應(yīng)該會(huì)遇到未授權(quán)端點(diǎn)和 HTTP 403 報(bào)錯(cuò),對(duì)吧?其中有一個(gè)端點(diǎn)會(huì)為信用卡模塊返回 true/false 信息,我把它映射到了某個(gè)始終返回 true 的本地文件。
于是乎,我很快就找到了對(duì)方信用卡的開(kāi)卡指引部分,并好奇能不能進(jìn)一步找出信用卡功能主頁(yè)。之后,我注意到.ipd 上很多 mocks 使用的端點(diǎn)都跟我之前映射的端點(diǎn)完全相同,所以我很快就找到了信用卡功能主頁(yè)。在這里,我又發(fā)現(xiàn)了更不同尋常的東西……這是個(gè)我在任何 mocks 中都沒(méi)見(jiàn)過(guò)的名稱。通過(guò) Charles 檢查一番后,我意識(shí)到它來(lái)自某個(gè)我沒(méi)有映射過(guò)的 API……
我使用 mock 指定了一條卡 ID……而應(yīng)用隨后會(huì)要求獲取這條數(shù)字 ID。因?yàn)槲沂且詿o(wú)卡用戶的身份登錄的,所以應(yīng)該被拒絕訪問(wèn)才對(duì)。但是……卡 ID 就在這里,明文顯示。
憑借自己從事信用卡項(xiàng)目的經(jīng)驗(yàn),我初步判斷對(duì)方是在運(yùn)行某種生產(chǎn)環(huán)境下的測(cè)試流程,因?yàn)槲夷玫降氖莻€(gè)只有員工(對(duì)方公司有個(gè)小小的專項(xiàng)團(tuán)隊(duì))才能訪問(wèn)的試水程序。“沒(méi)準(zhǔn)順著這條線摸下去,還能找到靜態(tài)文件?!痹诤闷嫘牡尿?qū)使下,我決定請(qǐng)求變更 ID,這次又獲得了另一個(gè)卡號(hào)和名稱。隨著摸索,我逐漸意識(shí)到這些都是真實(shí)存在的卡號(hào),會(huì)以明文形式提供給登錄用戶。這也太離譜了……錯(cuò)誤太多,我根本無(wú)法想象自己公司會(huì)出現(xiàn)這樣的低級(jí)失誤。但對(duì)方還真的就拿出了這樣一份開(kāi)發(fā)成果。
到這里,我認(rèn)定肯定得把安全問(wèn)題上報(bào)給對(duì)方。他們可能沒(méi)意識(shí)到把這些有問(wèn)題的東西部署到生產(chǎn)環(huán)境中會(huì)有怎樣的風(fēng)險(xiǎn)。但經(jīng)過(guò)一番思考,我決定先跟當(dāng)時(shí)的雇主打個(gè)招呼。這絕對(duì)不是想炫耀,我是擔(dān)心如果這家競(jìng)爭(zhēng)對(duì)手碰巧設(shè)有 bug 賞金計(jì)劃,那以我的身份從那邊領(lǐng)獎(jiǎng)金好像有點(diǎn)奇怪。
另外,我們公司也許能跟對(duì)方的負(fù)責(zé)部門(mén)直接溝通,畢竟我不知道具體該跟對(duì)方的哪位負(fù)責(zé)人聯(lián)系。所以第二天,我就把這事告訴了我的經(jīng)理,她又把情況上報(bào)給 CISO。之后的幾天,她一直在跟進(jìn),并表示肯定會(huì)披露這個(gè)發(fā)現(xiàn)。期間也有部分信息安全部門(mén)的同事參與進(jìn)來(lái),警告說(shuō)公開(kāi)披露也有風(fēng)險(xiǎn),畢竟很多公司對(duì)這種事其實(shí)不大能接受……
麻煩來(lái)了:不僅被解雇還要打官司
之后這件事就沒(méi)什么動(dòng)靜了……我開(kāi)始懷疑這項(xiàng)發(fā)現(xiàn)到底重不重要——問(wèn)題本身確實(shí)嚴(yán)重,但對(duì)方公司可能已經(jīng)知曉問(wèn)題的存在、并決定冒險(xiǎn)先把其他功能做完。
幾個(gè)月后,我的經(jīng)理在一天下班時(shí)打電話給我,讓我臨時(shí)參加個(gè)會(huì)。走進(jìn)會(huì)議室,我發(fā)現(xiàn)人力專員、公司高管還有我的經(jīng)理都在。會(huì)議結(jié)果就是我被解雇了,因?yàn)閷?duì)方宣稱我訪問(wèn)了他們的某些內(nèi)部 API。沒(méi)錯(cuò),我是訪問(wèn)過(guò)一個(gè),而且就是我披露的這個(gè)。這事我的經(jīng)理知道,我們銀行的另外三位高管也都清楚。聽(tīng)過(guò)我的爭(zhēng)辯,現(xiàn)場(chǎng)領(lǐng)導(dǎo)們傳達(dá)了對(duì)方公司的意見(jiàn),宣稱我在上報(bào)情況后又多次訪問(wèn)了這些內(nèi)部 API(可我沒(méi)有)。
老實(shí)說(shuō),對(duì)方這么干似乎是想把我的行為描述成某種商業(yè)間諜活動(dòng)。我們銀行把我開(kāi)除掉,則是為了證明并不存在什么商業(yè)間諜活動(dòng)。但我純粹是出于個(gè)人好奇心,哪有那么復(fù)雜……
幾周之后,一位警官登門(mén)、送來(lái)了法院的傳票。他們沒(méi)說(shuō)是因?yàn)槭裁词?,但結(jié)合前段時(shí)間的狀況,這肯定跟我發(fā)現(xiàn)的安全問(wèn)題有關(guān)。在跟一位熟悉技術(shù)的獨(dú)立律師交流之后,我意識(shí)到院方是把這次事件認(rèn)定成了疑似信用卡欺詐:原告方宣稱我用幾十張信用卡進(jìn)行了多次交易。這讓我瞬間理解了自己為什么會(huì)被解雇。這項(xiàng)指控非常嚴(yán)厲,沒(méi)有哪家銀行愿意雇用被指控欺詐的員工。
我絕對(duì)沒(méi)用這些卡號(hào)進(jìn)行過(guò)任何交易,沒(méi)有向外公開(kāi)過(guò)獲取卡號(hào)的具體方法,也從用這些數(shù)據(jù)牟取任何利益。而對(duì)方的指控明顯站不住腳,所謂“曾在幾十張卡上進(jìn)行過(guò)交易”在他們的日志系統(tǒng)中根本查詢不到。所以剛拿到傳票時(shí),我還擔(dān)心了一陣,怕的是對(duì)方告我未經(jīng)授權(quán)訪問(wèn)……雖然不是故意的,但這事我確實(shí)干了。
好在對(duì)方選擇的罪名是信用卡欺詐,雖然聽(tīng)起來(lái)更恐怖,但我有信心駁回這種莫須有的指控。
事情基本就是這樣。我的生活還在繼續(xù)、也找到了另外一份工作,目前這場(chǎng)鬧劇已經(jīng)有專門(mén)的律師幫助我處理。塵埃落定,我覺(jué)得不妨以匿名的方式把這個(gè)故事分享給大家。老實(shí)說(shuō),從局外人的視角來(lái)看,這還真是平凡人生中的一場(chǎng)大風(fēng)波。
安全專家評(píng)論:請(qǐng)收好自己的好奇心
這個(gè)匿名帖子發(fā)出后,網(wǎng)友們進(jìn)行了激烈的探討,短時(shí)間內(nèi)在 Hacker News 上蓋了幾百層樓。
博主的帖子表明他自己并沒(méi)有意識(shí)到這其中有犯罪的行為,只是覺(jué)得對(duì)方弄錯(cuò)了,自己雖然探查過(guò)對(duì)方的 API,但絕沒(méi)有用這些卡號(hào)進(jìn)行過(guò)交易,不存在欺詐的行為。
有網(wǎng)友認(rèn)為,解雇是不合理的,是博主公司在推卸責(zé)任。也有網(wǎng)友認(rèn)為,現(xiàn)代軟件非常糟糕,特別是自從向現(xiàn)代技術(shù)進(jìn)行轉(zhuǎn)變之后,這些企業(yè)中有越來(lái)越多的 API 是用 js 編寫(xiě)的(不是歧視這種語(yǔ)言),無(wú)論這些 API 是否是對(duì)外的。因此,在探索合作伙伴 / 客戶的(internal)API 時(shí),意外發(fā)現(xiàn)非常具有損壞性的錯(cuò)誤和漏洞是正常的。公司和公司、公司和雇員之間,缺乏誠(chéng)實(shí)的溝通、缺乏信任、缺乏合作以使事情變得更好。
這時(shí)候,有一位網(wǎng)名為“tptacek”的安全專家跳了出來(lái)。
tptacek 是一位安全研究員和軟件開(kāi)發(fā)人員,在安全領(lǐng)域有近三十年的從業(yè)經(jīng)驗(yàn),是多個(gè)安全會(huì)議的審稿人,也是安全公司 Matasano Security ( 曾是美國(guó)最大的軟件安全公司)三位創(chuàng)始人之一。
他指正道:“作者干的事情絕對(duì)不是完全合法。有些人可能覺(jué)得我這是在搞‘受害者有罪論’,我只想從自己的立場(chǎng)做個(gè)簡(jiǎn)單判斷。無(wú)罪的觀點(diǎn)會(huì)誤導(dǎo)他人。除了 CFAA(Computer Fraud and Abuse Act)以外,任何外部測(cè)試都不屬于‘合理測(cè)試’。作者的問(wèn)題在于,他未經(jīng)許可就在別人的網(wǎng)站上尋找漏洞。你沒(méi)有權(quán)利這么干。雖然有些企業(yè)會(huì)覺(jué)得無(wú)所謂,但大多數(shù)企業(yè)肯定無(wú)法容忍這種行為。而法律其實(shí)是支持無(wú)法容忍這一邊的。雖然作者大概率會(huì)被宣判無(wú)罪,但律師費(fèi)恐怕也足夠喝一壺的了?!?/p>
這種情況時(shí)有發(fā)生,即使是擁有明確的 Bug 賞金計(jì)劃,有時(shí)候還是會(huì)讓技術(shù)人員身陷風(fēng)險(xiǎn)。這類計(jì)劃一般都設(shè)有邊界,即只允許一定范圍內(nèi)的測(cè)試,而很多人就犯在對(duì)邊界沒(méi)有產(chǎn)生足夠的警覺(jué)性。在沒(méi)有事先得到授權(quán)的情況下違反這些潛規(guī)則很容易讓人陷入法律糾紛,這也就是作者遇到的情況。
“所以希望你能學(xué)個(gè)乖,下次再遇到彈出明文信用卡號(hào)的時(shí)候記得停下,別再繼續(xù)深入。收起你那該死的好奇心,用腦子想一想別人的底線在哪里。”
事情越討論就越明朗,博主的行為不僅僅是“查看源碼”,還拆開(kāi)了競(jìng)爭(zhēng)對(duì)手的應(yīng)用程序并圍繞私有 API 進(jìn)行逆向工程。這就埋下了一個(gè)責(zé)任上的“地雷”,這種情況他需要立即請(qǐng)教相關(guān)律師。另外博主在向公司反饋時(shí),也不曾留下任何書(shū)面記錄…
并不是說(shuō)對(duì)法律的無(wú)知是一個(gè)借口,但是不在信息安全領(lǐng)域的軟件開(kāi)發(fā)人員也需要知道一些限制。公共信息安全研究是必要的,但漏洞本身也是“燙手的山芋”。一方面,漏洞處理機(jī)制離不開(kāi)漏洞發(fā)現(xiàn)者的配合,但另一方面,安全漏洞的發(fā)掘與報(bào)送都存在較高的法律風(fēng)險(xiǎn),要注意不能觸及法律的“紅線”。國(guó)內(nèi)常常也有開(kāi)發(fā)者因?yàn)榉梢庾R(shí)淡薄而做出不當(dāng)行為:
2019 年 7 月,某政府網(wǎng)站管理員報(bào)警稱信箱模塊有網(wǎng)民多次發(fā)送非正常留言,疑遭黑客攻擊。警方調(diào)查后發(fā)現(xiàn),犯罪嫌疑人利用休息時(shí)間,在未授權(quán)的情況下,對(duì)網(wǎng)站進(jìn)行滲透測(cè)試,他的目的為了找出網(wǎng)站漏洞并生成漏洞報(bào)告,“為家鄉(xiāng)做點(diǎn)貢獻(xiàn)”。
2019 年 5 月,揭陽(yáng)網(wǎng)警工作發(fā)現(xiàn)違法嫌疑人蘇某有涉嫌非法侵入計(jì)算機(jī)系統(tǒng)的行為。經(jīng)深入調(diào)查發(fā)現(xiàn),違法嫌疑人蘇某利用“御 X”軟件等對(duì)南方網(wǎng)等網(wǎng)站進(jìn)行漏洞掃描,后用弱口令測(cè)試北京中醫(yī)院網(wǎng)站的后臺(tái)并成功登錄,在未經(jīng)授權(quán)的情況下擅自修改管理員賬號(hào)密碼,同時(shí)將該網(wǎng)站的漏洞提交給“漏洞盒子”網(wǎng)站。據(jù)其本人交代,其違法行為只是為了獲取相應(yīng)積分,“有利于其以后找工作”。
此類事件層出不窮,也說(shuō)明了就算不在安全信息領(lǐng)域工作,大家也有必要去了解一些基本法律,包括《網(wǎng)絡(luò)安全法》、《網(wǎng)絡(luò)產(chǎn)品安全漏洞管理規(guī)定》,等等,知道“界限”在哪里,從而避免因?yàn)椴恢ㄊ胤ㄗ屪约合萑脒`法甚至犯罪的窘境。
參考鏈接:
https://news.ycombinator.com/item?id=30706014&p=1
https://www.secrss.com/articles/13122
http://gd.sina.cn/news/2019-11-12/detail-iihnzhfy8578952.d.html
《計(jì)算機(jī)信息系統(tǒng)安全保護(hù)條例》:
http://www.gov.cn/flfg/2005-08/06/content_20928.htm《網(wǎng)絡(luò)安全法》:
http://www.cac.gov.cn/2016-11/07/c_1119867116.htm《網(wǎng)絡(luò)產(chǎn)品安全漏洞管理規(guī)定》:
http://www.gov.cn/zhengce/zhengceku/2021-07/14/content_5624965.htm《研究人員指南:安全研究的一些法律風(fēng)險(xiǎn)》:
https://clinic.cyber.harvard.edu/files/2020/10/Security_Researchers_Guide-2.pdf以上就是【看了3遍都不相信!速看(在某些情況下,徹底擊敗與自己類似的競(jìng)爭(zhēng)對(duì)手英文)當(dāng)強(qiáng)大的競(jìng)爭(zhēng)對(duì)手采用無(wú)差異-發(fā)現(xiàn)競(jìng)爭(zhēng)對(duì)手代碼中的低級(jí)失誤后,我被公司解雇并送上了法庭】的全部?jī)?nèi)容。
評(píng)論