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