呂方興
(菏澤學院計算機與信息工程系 山東 菏澤 274015)
由于Skype采用了一套加密的私有協(xié)議,到目前為止,還沒有研究機構或個人能夠完全理解其運行的全部細節(jié)??梢哉fSkype是目前眾多的P2P軟件中,對安全考慮得最全面的系統(tǒng)之一。雖然也有一些Skype的漏洞被公布,但是總體而言,攻擊者還無法針對Skype軟件進行有效的攻擊,甚至連運行商也無法非常準確地識別出Internet網(wǎng)絡中的Skype流量。如果Skype真的能夠被證明是安全的,這無疑將為P2P網(wǎng)絡安全技術的發(fā)展帶來一片新天地。
Skype的安全從以下幾個方面分析是復雜的:①Skype通話的安全取決于多個因素,包括了運行Skype的計算機的安全,以及通過Skype語音流的網(wǎng)絡的安全;②因為Skype協(xié)議是專有的和秘密的,所以可以獲取的唯一信息來源只有該公司對其的安全陳述以及對該軟件的反匯編技術;③因為Skype采用了P2P架構,Skype通話的安全可能被網(wǎng)絡中的第三方所影響;④因為Skype程序在運行時能夠不斷地更新自己,Skype系統(tǒng)的安全可能在未收到任何提示的情況下動態(tài)更新。
安全不是一個可以被獨立加以分析的抽象標準。所以,評估Skype的安全必須從考慮特定的安全威脅入手,然后確定Skype的設計和操作是否能避免這些安全威脅。
針對Skype安全問題主要來自于對Skype客戶端的威脅。
為了截取文件,攻擊者需要有訪問進行文件傳輸?shù)囊环交螂p方主機的權限。因為文件傳輸采用了鏈路加密的技術,所以即使在線截獲了文件傳輸?shù)臄?shù)據(jù)包,也不一定能夠破譯。盡管如此,攻擊者仍然可以竊取最終存儲在本地硬盤的傳輸文件。
為了截取即時消息,攻擊者同樣需要有訪問進行文件傳輸?shù)囊环交螂p方主機的權限,或者其他能夠獲取Skype應用程序客戶端界面的方式,因為如果能夠遠程查看和控制Skype應用程序客戶端界面,在某種意義上說就相當于劫持了即時消息。和文件傳輸一樣,即時消息在傳輸?shù)臅r候不大可能被劫持。但是如果即時消息被顯示在桌面或存儲在歷史即時消息存放目錄,那么攻擊者就可以實現(xiàn)即時消息的劫持了。安裝在靶機的抓取屏幕和鍵盤記錄軟件可以被用來完成這一功能,從而使得Skype的即時消息功能的安全性能大打折扣。
竊聽語音比劫持文件和即時消息更為復雜。語音的實時加密技術往往使得攻擊者無功而返。但是,通過分析,Skype系統(tǒng)可能對加密密鑰做3種處理:①它可能在語音信道中傳輸加密密鑰;②它可能采用其他的密鑰來加密這個密鑰,然后傳輸;③它可能存儲這一密鑰到用戶的硬盤空間中?;谝陨戏治?,攻擊者或許可以通過一些反向工程技術獲悉Skype軟件采用的加密算法、整個加密流程乃至加密密鑰,然后在這個基礎上對劫持的加密語音信息進行攻擊。
為了防止惡意攻擊者采用反向工程的方法對軟件進行破解,Skype采用了許多反跟蹤技術,所以當使用編譯器進行跟蹤時,程序總會拋出一系列異常。如果要對其進行反向工程的研究,必須首先研究Skype采用了哪些反跟蹤技術,找出有效的解決辦法,才能深入到對該軟件內(nèi)部的語音流加密機制的處理分析。Skype可能采取的反跟蹤技術主要有以下幾種。
當解密者利用各種跟蹤調試軟件對加密系統(tǒng)分析執(zhí)行時,勢必會造成許多與正常執(zhí)行加密系統(tǒng)不一致的地方,如運行環(huán)境、中斷入口和時間差異等。這種方法是在反跟蹤技術中對不一致的地方采取一定的措施,可以起到保護加密系統(tǒng)的目的。
Skype中就采用了檢測跟蹤法,在程序啟動時,多次對程序的運行環(huán)境進行判斷,如果計算機中安裝了類似SoftICE一類的反編譯軟件,則Skype就不會運行。
Debug的T和G命令分別要運行系統(tǒng)的單步中斷和斷點中斷服務程序,在系統(tǒng)向量表中這兩個中斷的中斷向量分別為1和3,中斷服務程序的入口地址分別存放在0000∶0004和0000∶000C起始的4Byte中。因此,當這些單元的內(nèi)容被修改后,T和G命令將無法正常執(zhí)行。
在對Skype的反匯編中,可以在程序中下斷點進行調試,但是程序拋出異常后,查看其異常鏈時,發(fā)現(xiàn)無法下斷點,所以不排除程序中部分使用抑制跟蹤中斷。
為了防止加密程序被反匯編,加密程序最好以分塊的密文形式裝入內(nèi)存,在執(zhí)行時由上一塊加密程序對其進行譯碼,而且在某一塊執(zhí)行結束后必須立即對它進行清除,這樣在任何時刻內(nèi)不可能從內(nèi)存中得到完整的解密程序代碼。這種方法除了能防止反匯編外還可以使解密者無法設置斷點,從而從一個側面來防止動態(tài)跟蹤。
Skype中使用了該方法。在對其跟蹤中發(fā)現(xiàn),程序初始時,首先要對其中部分代碼進行解密替換工作。要想下斷點,必須首先搞清楚程序對代碼替換的起始位置,否則只能單步調試。除此之外,還有一段隱代碼,即把一段代碼隱藏到了數(shù)據(jù)段中,如果使用靜態(tài)反匯編就很難發(fā)現(xiàn)。而這段代碼又是非常重要的一部分,它對后面的執(zhí)行產(chǎn)生了較大影響。
程序的自生成是指在程序的運行過程中,利用上面的程序來生成將要執(zhí)行的指令代碼,并在程序中設置各種反跟蹤措施的技術。這樣可以使得反匯編的指令并非是將要執(zhí)行的指令代碼,同時還可以隱蔽關鍵指令代碼,但由于實現(xiàn)代價較高,一般只對某些關鍵指令適用。
這種方法在Skype中也被使用。在跟蹤中能看到,在運行過程中,前一段指令執(zhí)行后,會自動更改替換后續(xù)的指令。但這種行為是否是因為程序發(fā)現(xiàn)被跟蹤而導致的,目前尚不清楚。
為了迷惑和拖垮解密者,可以在加密系統(tǒng)中多設置專門針對解密者的“陷阱”,這樣可以消耗解密者的時間和精力,消磨解密者的斗志和毅力。
設置大循環(huán):在加密程序中設置多重循環(huán),并使上一層循環(huán)啟動下一層循環(huán),下一層循環(huán)啟動下下一層循環(huán),如此循環(huán),而且還可以頻繁地調用子程序,還要保證不能有一層循環(huán)被遺漏不執(zhí)行。
廢指令法:在加密程序中設置適當?shù)臒o用程序段,而且在這其中設置如大循環(huán)等程序,這種方法在反跟蹤技術中被稱為廢指令法。要實現(xiàn)廢指令法有三點要保證:①廢指令要精心組織安排,不要讓解密者識破機關,這是廢指令法的基本點,因為它的目的是誘導解密者去研究破解自身,并在破解過程中拖垮解密者,所以廢指令法本身的偽裝十分重要;②廢指令應大量選用用戶生疏的指令或DOS內(nèi)部功能的調用,以最大程度地消耗解密者的精力和破譯時間;③要確保廢指令段不能被逾越,這是廢指令法要注意的重要問題,因為它如果能被輕易逾越,那么就說明加密系統(tǒng)所采取的廢指令法是失敗的反跟蹤技術。
在對Skype的跟蹤中,發(fā)現(xiàn)程序總是拋出異常中止運行,但對SEH鏈下斷點卻無法攔截,這樣就很有可能是程序進行了一些異常處理。
除此之外,還有很多程序反跟蹤技術,如設置堆棧指針法、對程序段校驗法、指令流隊列發(fā)、封鎖鍵盤輸入以及設置顯示器的顯示性能等。這些技術在分析的過程中暫時未發(fā)現(xiàn),但是不排除Skype采用的可能性。
雖然在理論上,采用反向工程的思路具有較大的可行性,但是由于Skype在反跟蹤方面做了較多有效的處理,使得對其進行反向工程的工作量比較大,需要花費較多的時間與精力。
[1]屈丹.VoIP 語音處理與識別[M].國防工業(yè)出版社,2010,05.
[2]李祥軍,周智,魏冰.黑客大曝光:VoIP 安全機密與解決方案[M].電子工業(yè)出版社,2010,10.
[3]張春紅.P2P 技術全面解析[M].人民郵電出版社,2010,05.
[4]張文,趙子銘.P2P網(wǎng)絡技術原理與C++開發(fā)案例[M].人民郵電出版社,2008,08.