剛?cè)肼毦蛯懥藗€bug,把幾萬用戶搞藍(lán)屏了…
這幾天看到公司有校招的同學(xué)不斷入職,抬頭一看臺歷,不算實(shí)習(xí),正式工作滿7年了。7年光陰,彈指一揮間。
記得7年前,簽訂勞動合同加入我的第一家公司:百度。
說來也挺奇怪,我本來校招投遞的崗位是C/C 開發(fā)崗,結(jié)果由于面試過程中,面試官看我在內(nèi)核技術(shù)、逆向分析技術(shù)和底層系統(tǒng)編程上上有一些經(jīng)驗,于是把我分到了內(nèi)核攻防組,做驅(qū)動開發(fā)。
那時候,我們團(tuán)隊分了兩個方向:
1、漏洞安全攻防
2014年,正是微軟宣布停止對Windows XP技術(shù)支持的時候,為了守護(hù)國內(nèi)數(shù)量眾多的XP用戶(說是守護(hù),其實(shí)就是搶占市場),各個安全廠商都開始推出XP安全防御產(chǎn)品,其中比較出名的就是360的XP盾甲。
國內(nèi)的信安評測機(jī)構(gòu)CNCERT搞了一個XP安全挑戰(zhàn)賽,隔幾個月就來一次PK,在不同的XP電腦上分別裝上各家的安全產(chǎn)品,然后使用一些漏洞EXP進(jìn)行攻擊,看看誰守得住。主要的幾個玩家就是360、騰訊電腦管家、金山毒霸、北信源,還有就是百度。
咱們團(tuán)隊中的漏洞安全攻防組就是負(fù)責(zé)這個方向,把XP上能使用的漏洞基本上全都擼了一遍,然后把更高系統(tǒng)Win7、Win8上的一些安全機(jī)制(比如DEP、ASLR等等)通過內(nèi)核驅(qū)動的方式移植到XP上去,以增強(qiáng)XP的安全能力,抵御安全攻擊,贏得比賽。
我記得360的XP盾甲做了一個功能,Windows XP啟動時,伴隨啟動進(jìn)度條的出現(xiàn),會出現(xiàn)經(jīng)典的LOGO,360把這個logo改了,居然改成了360的logo,當(dāng)時年輕的我被震的一愣一愣的,居然還有這種騷操作。
不過很快,身邊的同事就拿到ntldr進(jìn)行了逆向分析,找到了360這一招的原理,我們也照貓畫虎,把這個LOGO換成了咱們百度的,不過沒有推到產(chǎn)品上,估計會被噴的,只當(dāng)是技術(shù)研究罷了。
團(tuán)隊中的成員好多都是從360挖過來的大牛,那段時間,跟著這些大佬們學(xué)到了許多東西,我在二進(jìn)制漏洞方面入門差不多就是那個時候。
2、競品攻防對抗
我主要的精力是放在這一塊的。如果說前面第一個方向是和漏洞攻擊做對抗,那這個方向就是和競爭對手打交道,這一部分更加有意思。
競品對抗分為三塊,安裝、啟動與優(yōu)化、反卸載。
安裝,就是競爭對手會想進(jìn)一切技術(shù)手段對我們的產(chǎn)品進(jìn)行圍追堵截,如果你的電腦上安裝了競品,可能你下載了一個百度殺毒的安裝包,安裝莫名報錯,各種依賴缺失,甚至連安裝包都下載不成功,各種情況都有。
實(shí)際上,是競爭對手的產(chǎn)品在背后作祟,當(dāng)它識別到百度的產(chǎn)品在安裝時,會各種使絆子,一開始通過文件MD5來識別,我們官方發(fā)布的每一個安裝包的MD5都會第一時間被競爭對手拉入黑名單,一遇到直接就被干。
后來我們改了策略,安裝包下載自動隨機(jī)生成,每一次下載的MD5都不一樣,這樣才勉強(qiáng)逃過絞殺,不過對手也不是吃素的,后面又改成文件特征識別,比如文件內(nèi)部含有“baidu”等字符串,就列入黑名單,那段時間,百度網(wǎng)盤和百度音樂等幾款客戶端軟件還因此被殃及過。沒辦法,我們只好再次抹掉這些特征,或者進(jìn)行加密,不讓它們明文出現(xiàn)。
再后來,對手改成了通過文件圖標(biāo)來識別對手,提取PE文件的圖標(biāo)識別是不是我們,總之,在這個過程拉鋸了很多回,非常有意思,各種損招都有。
啟動與優(yōu)化,這是更有意思的部分。躲過了安裝這才是闖過了第一關(guān),接下來的日子,每一天都充滿了危機(jī)。
可能某一天,用戶什么也沒做,我們的產(chǎn)品就起不來了,這叫開機(jī)啟動使絆子,讓我們起不來。
還可能競品可能彈個窗告訴你:內(nèi)存吃緊,趕緊優(yōu)化。然后你一點(diǎn)加速球,對手就把我們的進(jìn)程干掉了,甚至把我們直接都卸載了,文件、進(jìn)程、注冊表啥也沒了,消失的悄無聲息。
那我需要做的當(dāng)然就是對抗競品的這些騷操作,卸載必須由用戶手動通過控制面板或者我們自己的卸載軟件發(fā)起,需要識別競品的卸載行為,攔截刪文件、殺進(jìn)程、刪注冊表等一系列操作。
任何一個安全產(chǎn)品都有主動防御的功能,直接調(diào)用系統(tǒng)API進(jìn)行上面的操作肯定會被我們的主動防御攔截掉,對手也深知這一點(diǎn)。所以,想要干掉我們,對手得在內(nèi)核模式下,用驅(qū)動調(diào)一些比較底層的函數(shù)繞過我們的安全防御。
那我們要做的就是和它進(jìn)行對抗,直接的內(nèi)核硬碰硬不是好辦法,一不小心容易把電腦干藍(lán)屏,我們選擇了比較巧妙的一招:攔截通信。
對手要搞我們,他們處于Ring3模式下的應(yīng)用程序總得和他們的Ring0模式下的內(nèi)核驅(qū)動程序通信吧,就是DeviceIOControl,所以我們逆向了他們的通信協(xié)議,一旦發(fā)現(xiàn)要搞的目標(biāo)是我們,就把這條消息攔截掉,這樣他們的驅(qū)動收不到消息,也就不知道要搞我們了。
在這一部分,我們進(jìn)行了好幾個月的對抗,對手不斷變化通信協(xié)議,不斷變化通信的設(shè)備名稱,甚至加密傳輸,我們也就見招拆招,兵來將擋,水來土掩。
后來發(fā)現(xiàn)我們總是攔截他們的通信,他們決定不再通信了,先把這事情記錄起來,記錄到文件、注冊表等各種地方,等到關(guān)機(jī)的時候,我們的驅(qū)動程序已經(jīng)停掉了,他們再來干這事,或者放到開機(jī)的時候,他們的驅(qū)動比我們先加載,我們還沒起來就被干掉。
于是,戰(zhàn)場又轉(zhuǎn)移到了關(guān)機(jī)和開機(jī)時刻,驅(qū)動停止順序上,比誰后卸載,最后留下來的就有后發(fā)優(yōu)勢,可以進(jìn)行復(fù)活操作,兩邊互相搶,結(jié)果就是用戶的電腦可能關(guān)機(jī)關(guān)半天都關(guān)不了。除了關(guān)機(jī)順序,還會逆向分析它到底把信息記錄到了哪里,把這個信息刪掉,也能自保。
在這過程中,又對抗拉鋸了好幾個月,比較有意思的是,對手似乎和我們達(dá)成了某種"默契",專挑每周五下班的時候,更新他們新的策略,讓我們加班,真是太不講武德了。
隨著我們DAU的不斷增長,除了一味的防守,我們也開始嘗試給競品使使絆子,也讓他們嘗嘗這種滋味兒,正所謂以彼之道,稍加修改,還施彼身,其樂無窮,我們也來卸載他們,刪他們文件,殺他們進(jìn)程,刪他們注冊表。
剛剛?cè)肼毦蛥⑴c這種項目,著實(shí)對技術(shù)是有非常大的挑戰(zhàn),不管是逆向分析,加解密技術(shù),還是內(nèi)核攻防技術(shù),調(diào)試分析技術(shù),編程功底都是非常大的考驗,那段時間寫代碼非常謹(jǐn)慎,因為一個不小心,可能就會導(dǎo)致成千上萬的用戶電腦藍(lán)屏。沒錯,我就因為寫了一個bug,好像是一個指針釋放后未及時置空,導(dǎo)致上萬的用戶電腦藍(lán)屏了,把剛剛?cè)肼毑痪玫奈覈樀冒胨馈?/p>
故事的結(jié)尾,可能大家想不到,我們一直和競品A做對抗,和另一個競品B聯(lián)合對抗A,頗有種三國時代,聯(lián)吳抗曹的味道。但在臨近年關(guān)的時候,競品B突然在背后狠狠捅了我們一刀,全面卸載我們,一個周末,DAU掉了近千萬,年終目標(biāo)頃刻化為烏有。
那段日子,百度為了推廣他的安全產(chǎn)品,做了不少過分的事情,各種捆綁,全家桶,很多中高層領(lǐng)導(dǎo)為了KPI,寧愿犧牲口碑。因為和競品做對抗,導(dǎo)致產(chǎn)品怎么也卸載不掉,被用戶罵的很慘。據(jù)說競品B要搞我們的原因就是不小心推廣到了他們公司一個高管的電腦上,還死活卸載不掉,于是才有了后面的事情,當(dāng)然這只是道聽途說,不知真假。
后來,我也厭倦了這樣的產(chǎn)品和工作,如果是和病毒木馬做斗爭倒也罷了,拿用戶的電腦當(dāng)戰(zhàn)場互相拼殺,實(shí)在不是什么光彩的事情。
恰逢我也想謀求技術(shù)轉(zhuǎn)型,于是開始轉(zhuǎn)向新的方向,咱們下次再聊。
作者:軒轅之風(fēng)
來源:編程技術(shù)宇宙
版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。