剛入職就寫了個bug,把幾萬用戶搞藍屏了···

這幾天看到公司有校招的同窗不斷入職,擡頭一看又是7月9號了呀。面試

昨天7月9號,不算實習,正式工做滿7年了,7年光陰,彈指一揮間。編程

七年前的昨天,簽定勞動合同加入個人第一家公司:百度。安全

說來也挺奇怪,我原本校招投遞的崗位是C/C++開發崗,結果因爲面試過程當中,面試官看我在內核技術、逆向分析技術和底層系統編程上上有一些經驗,因而把我分到了內核攻防組,作驅動開發。markdown

那時候咱們團隊分了兩個方向:函數

一、漏洞安全攻防優化

2014年,正是微軟宣佈中止對Windows XP技術支持的時候,爲了守護國內數量衆多的XP用戶(說是守護,其實就是搶佔市場),各個安全廠商都開始推出XP安全防護產品,其中比較出名的就是360的XP盾甲。加密

國內的信安評測機構CNCERT搞了一個XP安全挑戰賽,隔幾個月就來一次PK,在不一樣的XP電腦上分別裝上各家的安全產品,而後使用一些漏洞EXP進行攻擊,看看誰守得住。主要的幾個玩家就是360、騰訊電腦管家、金山毒霸、北信源,還有就是百度。spa

我們團隊中的漏洞安全攻防組就是負責這個方向,把XP上能使用的漏洞基本上全都擼了一遍,而後把更高系統Win七、Win8上的一些安全機制(好比DEP、ASLR等等)經過內核驅動的方式移植到XP上去,以加強XP的安全能力,抵禦安全攻擊,贏得比賽。指針

我記得360的XP盾甲作了一個功能,Windows XP啓動時,伴隨啓動進度條的出現,會出現經典的LOGO,360把這個logo改了,竟然改爲了360的logo,當時年輕的我被震的一愣一愣的,竟然還有這種騷操做。調試

不過很快,身邊的同事就拿到ntldr進行了逆向分析,找到了360這一招的原理,咱們也照貓畫虎,把這個LOGO換成了我們百度的,不過沒有推到產品上,估計會被噴的,只當是技術研究罷了。

團隊中的成員好多都是從360挖過來的大牛,那段時間,跟着這些大佬們學到了許多東西,我在二進制漏洞方面入門差很少就是那個時候。

二、競品攻防對抗

我主要的精力是放在這一塊的。若是說前面第一個方向是和漏洞攻擊作對抗,那這個方向就是和競爭對手打交道,這一部分更加有意思。

競品對抗分爲三塊,安裝、啓動與優化、反卸載。

安裝,就是競爭對手會想進一切技術手段對咱們的產品進行圍追堵截,若是你的電腦上安裝了競品,可能你下載了一個百度殺毒的安裝包,安裝莫名報錯,各類依賴缺失,甚至連安裝包都下載不成功,各類狀況都有。

實際上,是競爭對手的產品在背後做祟,當它識別到百度的產品在安裝時,會各類使絆子,一開始經過文件MD5來識別,咱們官方發佈的每個安裝包的MD5都會第一時間被競爭對手拉入黑名單,一遇到直接就被幹。

後來咱們改了策略,安裝包下載自動隨機生成,每一次下載的MD5都不同,這樣才勉強逃過絞殺,不過對手也不是吃素的,後面又改爲文件特徵識別,好比文件內部含有「baidu」等字符串,就列入黑名單,那段時間,百度網盤和百度音樂等幾款客戶端軟件還所以被殃及過。沒辦法,咱們只好再次抹掉這些特徵,或者進行加密,不讓它們明文出現。

再後來,對手改爲了經過文件圖標來識別對手,提取PE文件的圖標識別是否是咱們,總之,在這個過程拉鋸了不少回,很是有意思,各類損招都有。

啓動與優化,這是更有意思的部分。躲過了安裝這纔是闖過了第一關,接下來的日子,每一天都充滿了危機。

可能某一天,用戶什麼也沒作,咱們的產品就起不來了,這叫開機啓動使絆子,讓咱們起不來。

還可能競品可能彈個窗告訴你:內存吃緊,趕忙優化。而後你一點加速球,對手就把咱們的進程幹掉了,甚至把咱們直接都卸載了,文件、進程、註冊表啥也沒了,消失的悄無聲息。

那我須要作的固然就是對抗競品的這些騷操做,卸載必須由用戶手動經過控制面板或者咱們本身的卸載軟件發起,須要識別競品的卸載行爲,攔截刪文件、殺進程、刪註冊表等一系列操做。

任何一個安全產品都有主動防護的功能,直接調用系統API進行上面的操做確定會被咱們的主動防護攔截掉,對手也深知這一點。因此,想要幹掉咱們,對手得在內核模式下,用驅動調一些比較底層的函數繞過咱們的安全防護。

那咱們要作的就是和它進行對抗,直接的內核硬碰硬不是好辦法,一不當心容易把電腦幹藍屏,咱們選擇了比較巧妙的一招:攔截通訊。

對手要搞咱們,他們處於Ring3模式下的應用程序總得和他們的Ring0模式下的內核驅動程序通訊吧,就是DeviceIOControl,因此咱們逆向了他們的通訊協議,一旦發現要搞的目標是咱們,就把這條消息攔截掉,這樣他們的驅動收不到消息,也就不知道要搞咱們了。

在這一部分,咱們進行了好幾個月的對抗,對手不斷變化通訊協議,不斷變化通訊的設備名稱,甚至加密傳輸,咱們也就見招拆招,兵來將擋,水來土掩。

後來發現咱們老是攔截他們的通訊,他們決定再也不通訊了,先把這事情記錄起來,記錄到文件、註冊表等各類地方,等到關機的時候,咱們的驅動程序已經停掉了,他們再來幹這事,或者放到開機的時候,他們的驅動比咱們先加載,咱們還沒起來就被幹掉。

因而戰場又轉移到了關機和開機時刻,驅動中止順序上,比誰後卸載,最後留下來的就有後發優點,能夠進行復活操做,兩邊互相搶,結果就是用戶的電腦可能關機關半天都關不了。除了關機順序,還會逆向分析它到底把信息記錄到了哪裏,把這個信息刪掉,也能自保。

在這過程當中,又對抗拉鋸了好幾個月,比較有意思的是,對手彷佛和咱們達成了某種"默契",專挑每週五下班的時候,更新他們新的策略,讓咱們加班,真是太不講武德了。

隨着咱們DAU的不斷增加,除了一味的防守,咱們也開始嘗試給競品使使絆子,也讓他們嚐嚐這種滋味兒,正所謂以彼之道,稍加修改,還施彼身,其樂無窮,咱們也來卸載他們,刪他們文件,殺他們進程,刪他們註冊表。

剛剛入職就參與這種項目,着實對技術是有很是大的挑戰,不論是逆向分析,加解密技術,仍是內核攻防技術,調試分析技術,編程功底都是很是大的考驗,那段時間寫代碼很是謹慎,由於一個不當心,可能就會致使成千上萬的用戶電腦藍屏。沒錯,我就由於寫了一個bug,好像是一個指針釋放後未及時置空,致使上萬的用戶電腦藍屏了,把剛剛入職不久的我嚇得半死。

故事的結尾,可能你們想不到,咱們一直和競品A作對抗,和另外一個競品B聯合對抗A,很有種三國時代,聯吳抗曹的味道。但在臨近年關的時候,競品B忽然在背後狠狠捅了咱們一刀,全面卸載咱們,一個週末,DAU掉了近千萬,年終目標頃刻化爲烏有。

那段日子,百度爲了推廣他的安全產品,作了很多過度的事情,各類捆綁,全家桶,不少中高層領導爲了KPI,寧願犧牲口碑。由於和競品作對抗,致使產品怎麼也卸載不掉,被用戶罵的很慘。聽說競品B要搞咱們的緣由就是不當心推廣到了他們公司一個高管的電腦上,還死活卸載不掉,因而纔有了後面的事情,固然這只是道聽途說,不知真假。

後來,我也厭倦了這樣的產品和工做,若是是和病毒木馬作鬥爭倒也罷了,拿用戶的電腦當戰場互相拼殺,實在不是什麼光彩的事情。

恰逢我也想謀求技術轉型,因而開始轉向新的方向,我們下次再聊。

相關文章
相關標籤/搜索