我是一個IE瀏覽器線程_風聞
观察者网用户_950488-2020-05-18 15:01
我叫小張,是一個瀏覽器公司的線程,我們公司的名字叫Internet Explorer,大家都簡稱我們叫IE,公司負責的業務是向人類提供網頁瀏覽服務。
可能你們也聽説了,自從那個Firefox公司和Chrome公司成立以來,搶走了我們不少市場份額。不過呢,瘦死的駱駝比馬大,我們憑藉和政府特殊的關係,還是能搞到不少業務單子的,再説了,我們是老字號瀏覽器,很多老的網站必須要咱們才能打開,所以日子是比以前是緊了一些,但還是能勉強維持下去。
網頁瀏覽這活其實不好乾,需要的人手很多,所以不像隔壁做文本編輯的notepad公司和做計算器服務的calc公司,咱們IE是個大集團,總公司負責整體業務協調安排,下面隨着業務的擴展動態的設立了一些子公司,總公司絕對控股。
一般來説,人類每打開一個網頁,咱就會新成立一個子公司單獨處理,當然有時候業務實在太多了,也會讓一些比較閒的子公司一併來處理多個業務,畢竟成立公司要耗資源,成本不低。如果人類打開進程管理器,就可以看到我們集團的組織架構了:
有次聽説隔壁的Firefox瀏覽器公司不像我們這樣搞,全部業務都在一個公司處理,不知道他們怎們協調的,管理起來不會混亂嗎,我挺好奇的。
我們每個負責處理業務的子公司裏面也是井井有條的,每個線程員工都分工明確,像老張負責網絡請求,小雪負責GUI的渲染,我呢是負責執行JavaScript的JS引擎線程,還有一些其他人,有時間再一一介紹。
“各單位注意:QQ郵箱有業務來了”,正在這時,集團總部廣播來了。
QQ郵箱有段時間沒來找我們了,終於想起我們了。
子公司老大從Kernel32辦事處的GetCommandLine窗口拿到了這次的業務單子:
http://www.9birds.com/loki/meinv.htm
老張很快通過網絡取到了這個meinv.htm文件,交給小雪妹子去開始渲染。
小雪才剛開始沒做幾步就交給了我,“有<script>標籤,該你表演了,張哥”。
輪到我了,摩拳擦掌,開始幹活。
我拿到一看,咦,這人類程序員寫的js代碼咋這麼奇怪,跟我之前看到的不太一樣。不管了,幹活不能挑三揀四,按他寫的執行就是了。
人類寫的JS代碼看起來很複雜,其實在我眼裏跟用C/C++寫的代碼一樣處理,都是函數調用,對象申請與釋放這些活而已。
就在我工作了沒多久,突然聽到公司廣播:“所有人停止手上的工作,361殺毒公司來人檢查了”。
廣播剛剛結束,戴着墨鏡的男子帶了幾個人闖了進來,“抱歉打擾各位工作,剛剛我們361殺毒公司檢測到有人往國家的數據倉庫——磁盤中寫入了一個木馬文件,調取監控記錄後發現是你們IE公司的人,我們需要來調查取證,請各位配合下工作”。
我們所有人都停下了手上的工作,等待被檢查,很快就到我的工位來了。
墨鏡男仔細翻看了我的工作棧台,隨後他的對講機裏響起了同伴的聲音:“周哥,我們在堆區發現了一些線索,您過來一下”。
墨鏡男原來叫周哥,聽完同伴的呼叫,他快速跑向了公司的堆區,幾分鐘後又來到我的工位。
“你叫什麼名字?”
“我叫小張”,我開始有點緊張了,難不成我工作出了什麼問題。
“這個木馬文件kernerl32.dll是你寫的吧”,墨鏡男質問到。
“是我寫的,可是,我不知道這是木馬,我只是按JS腳本在做事啊”,我都能聽到自己的心跳了,撲通撲通的。
“我剛才看了你的工作棧台,結合堆區的數據,我判定你們公司的代碼存在一個UAF漏洞”。
“什麼是UAF漏洞?”,公司老大走了上來問墨鏡男。
“UAF就是Use After Free,釋放後使用的意思,小張你看,這裏這個對象是你釋放的吧,但是釋放完後你有去把指針重置為NULL嗎?”
“額,沒有,代碼裏面沒有這條指令,所以我沒做這事”,我弱弱的回答。
“然後你又申請了一個和原來對象一樣大小的新對象,巧合的是,這個對象在堆區的位置用的就是剛才你釋放的那個對象原來的位置。”,墨鏡男繼續解釋説。
“然後呢?”,我還是不太明白問題出在哪裏。
“然後你又用指向原來對象的指針去調用它的函數,但是現在那個位置上已經不是原來對象,裏面的數據是新對象的,你想想要是這個新對象是有人精心構造的內容,你豈不是張冠李戴,掉入別人的陷阱了嗎!釋放後沒有重置指針,還去使用,這個就叫釋放後使用”。
“啊,原來是這樣,這也太壞了”,我恍然大悟,悶頭幹活,卻不知道早已中了圈套了。
“這不是第一次了,之前我們就捕獲了這個木馬,但一直不知道是怎麼進來的。後來對這個文件名字進行了特殊的監控,只要發現有人去數據倉庫創建這個名字的文件就會預警,等了幾天總算是給我揪到了,原來是通過你們IE進來的。好了,現在真相大白,我們得回去彙報了,至於你們,等着被升級修復吧”,説完墨鏡男一行匆匆離去。
我們幾個垂頭喪氣,不知所措。
“大家彆氣餒,這不算啥,咱們IE公司自從成立以來,已經面對過很多次漏洞了,以前的棧溢出漏洞最多,不過這個UAF我今天也是第一回遇到,好好幹自己的本職工作,集團很快就會發布更新修復這個問題的,你們不用太擔心了”,老大安慰我們。
果然,沒過幾天,集團發佈了更新,宣佈了對公司一些部門的代碼模塊進行了升級,修復了前幾天的問題。
沒過多久,Windows帝國宣佈改選,新一屆政府上台,改年號XP為Vista。新一屆政府對國家安全加強了重視,頒佈了一項名為《關於進一步加強Windows帝國安全性,實施Integrity Level——完整性級別的規定》的新法規,對所有公司的權限進行了進一步的劃分。
帝國所有的公司權限被劃分了四等,權限從高到低是:System、High、Medium、Low。集團總部公司是Medium,而我們負責實際瀏覽網頁業務的子公司都是最低等的Low。雖然説限制了我們公司的很多行為,很多事情都做不了,但是對帝國是一種保護,就算哪天我們又中了敵人的圈套,至少還有一道防線不讓我們做出太多危險的事情。
後來,人類把我們公司的這種做法取了一個名字:沙箱技術。
“你們那玩具一樣的玩意兒也好意思叫沙箱?笑死人了!”,隔壁Chrome公司的小趙發出了輕蔑的笑聲。
“怎麼就不能叫了,你算老幾”,我不甘示弱的回擊他。
“不跟你吵了,今天我很忙,改天給你看看什麼叫真正的沙箱”,説完就揚長而去了。
未完待續·······
彩蛋1
361殺毒公司的老周彙報完本次安全事件後回到實驗室,突然發現實驗室窗邊站着一個黑影。不待老周開口發問,那黑影先轉過身來:“老周,你以為這世界上只有你在守護安全嗎,你只是這更大宇宙中的一份子,我有一個計劃想跟你談談。”
彩蛋2
“大人,探測到Linux帝國開設了nginx公司,目標8080端口,請下令行動”
“很好,去吧,注意做好隱蔽工作,別暴露我們的座標”