第8章 像心臟流血一般的漏洞
第8章 像心臟流血一般的漏洞
陳青峰和趙長安在咖啡館說完了正事之後,陳青峰便轉身離開了。
一路上,他乘坐地鐵回到了家裡,剛一回到家,一種難以形容的難受的感覺就突然襲來。以至於陳青峰一時不慎跌倒在地。
於是他艱難的在地板上挪動著。
直到慢慢的挪進了卧室,然後他連忙打開抽屜,拿出了幾片從帝都回來時醫生開給他的鎮痛葯。
隨後直接乾咽了下去。
一直過了好一會兒,陳青峰才終於緩過勁兒來。
沒事,他餓著肚子慢慢的走到了廚房,給自己煮了一碗清湯掛麵。
因為身體極度難受,他吃不下任何的東西。
只有不用咀嚼的挂面,他還勉強吃得下。
就這樣,他煮好了面之後端著鍋來到了自己熟悉的書房。
隨後打開電腦,做起了每天都要做的事情,那就是閱讀代碼。
作為一名程序員,陳青峰一直喜歡閱讀那些知名的開源代碼。
而最近這些日子,他一直在研究openSSL。
因為這個項目是全球最知名的加密協議。而且同時它也是一個開源項目。
SSL本來是一個連接協議,但後來使用的人多了,於是便有人想到了加密的手段來阻止黑客進行破壞。
於是openSSL這個項目便誕生了。
現在陳青峰要做的是黑客類型的外掛,如果能夠了解一些openSSL的原理。那對於他的外掛事業會很有幫助,最起碼他能夠知道哪些程序員犯了致命的錯誤,而自己該如何下手?
陳青峰一邊吃著挂面,一邊在自己的項目工程文件里閱讀著代碼。
調試代碼是一件繁瑣的事情,但這也是程序員和程序員之間的對話。
你可以通過學習別人的程序來提高自己。
並且這個過程只有懂技術的人才會樂在其中。
除此之外,陳青峰還發現了另外一個好處,那就是在調試代碼享受樂趣的時候,身體和大腦會暫時忘記關於自己體內癌症的事情。
這對於減緩因為疾病帶來的不適有很好的幫助。
「心跳檢測!」
這是一個用來做時間同步的功能,雖然很重要,但很多程序之間都有心跳檢測,因此這段代碼讀起來大同小異。
陳青峰慢慢的在代碼中間打著節點,他自己構建了一個可以測試open SSL的小型測試程序。
通過斷點,可以看清楚到底內存中存儲了什麼東西?
陳青峰先是按常規的策略,將心跳包發送了過去。
很快他的斷點就收到了回應!
這一切都在他的意料之中,不過就在這時,他的手不小心碰到了筷子,筷子在鍵盤上碰了一下,陳青峰手忙腳亂,一下子又碰到了滑鼠點了一下編譯按鈕,看著漫長的編譯程序,他不由的感到一陣頭疼。
還好,編譯器只是編譯他修改部分的代碼。
可就在這時,斷點又一次被觸發了。
陳青峰驚訝的看著這一切。
然後他又回過頭來,看著代碼里被自己修改的部分。
原本應該發送的一段內容,已經超出了64KB應有的範圍,剛才陳青峰不小心在後面多加了一個0。
按理說,這段非法報文發送出去之後,斷點是不會被觸發的。
可現在它居然被觸發了?
這到底是怎麼回事?
陳青峰覺得有點奇怪,程序不應該走到這裡。
於是他重新試驗了一下,又多加了幾個斷點。
於是程序便開始一步一步的被陳青峰跟隨著。 當陳青峰看到一處if判斷的時候,他突然發現,這段程序的指針竟然違反常規的跳到了if為真的代碼段!
陳青峰驚訝的看著上下這一段程序代碼。
他睜大眼睛重複了一遍又一遍。
最終他不由的深吸了一口氣。
然後他覺得自己發現了一個難以形容的重大事實。
Open SSL的程序員居然犯錯誤了?
一段非法訪問的報文居然被認為是正確的。
這也就意味著,自己獲取了伺服器內部一段不知區域的內存儲的消息。
越界訪問?
知名的開源加密項目居然會出問題?
全世界那麼多程序員,無數雙眼睛都盯著的基礎程序,居然被自己親手調出了bug。
這意味著什麼?
陳青峰還是有點不敢相信,因為按照常理來說,這根本是不可能的事情。
可是眼下卻明明白白的發生了。
於是陳青峰耐著性子,悄悄的打開了某大廠的頁面。
OpenSSL協議,現在最常用的,就是這些大廠,尤其是在電商領域更是常見。
現在陳青峰要試驗一下。
於是他端起來喝了一口已經涼掉的麵湯。然後活動了一下手指,在鍵盤上迅速的敲擊了起來。
他偽造了一段和剛才類似的超出限制的非法報文。
然後懷著顫抖的心情發送給了電商網站的伺服器。
緊接著,他就在程序里等待著對方的回應。
幾乎不到一秒的時間,他就收到了一段信息。
陳青峰打開一看,臉上頓時露出了一種欣喜之後釋然的笑容。
他沒有錯, Open SSL的程序員的確犯了一個致命的錯誤。
它通過超長的報文拿到了伺服器內返回的64KB的數據。
而這段數據里甚至還包含著一個陌生人的用戶名和密碼。
一個用來心跳檢測的模塊,居然讓程序泄露出了內存里的信息。
而重要的數據,被一點一點的從漏洞里滲透出來。彷彿在心臟的主動脈上漏出了一個滲血的出血口,一點一點的流著血。
而陳青峰可以確定,掌握了這個漏洞,起碼在這一夜間,全世界所有採用openSSL協議加密的網站,都會在他的面前門洞大開。
這意味著什麼?
這意味著上帝突然在剛才那一刻,為他打開了一扇財富的大門。
但是他不確定這個漏洞什麼時候會被程序員發現。
不過如果他早動手的話,起碼有一點是肯定的,他的治療費用應該不用發愁了!
陳青峰難以抑制的從桌子前站了起來。
他走到了自家的書櫃前,把上面一瓶五糧液直接拿下來。
隨後擰開之後,大口的灌進了自己的胃裡。
不過平日里不怎麼喝酒的陳青峰很快就咳嗽了起來。
然而此刻他卻遇到了人生中最開心的時刻。
他從來都沒有感覺到像今天這樣有成就感。
原來全世界最優秀的程序員,全世界最嚴謹的開源項目也有犯錯誤的時候。