摘要:網(wǎng)絡(luò)的安全的攻防,從網(wǎng)絡(luò)誕生以來,就是此消彼長,相輔共存。該文中針對網(wǎng)絡(luò)應(yīng)用層的Web用戶常見的攻擊與防守方式做了理論的分析以及詳細(xì)的陳述。
關(guān)鍵詞:Web;網(wǎng)頁掛馬
中圖分類號:TP393文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2010)03-578-02
就Web應(yīng)用來說,掛馬是常見的攻擊方式,而且網(wǎng)頁掛馬已經(jīng)稱為網(wǎng)絡(luò)最大的危害。目前主流的掛馬方式應(yīng)該是iframe掛馬,腳本掛馬以及css掛馬了。
我們這里先分析iframe掛馬,也就是最早出現(xiàn)的框架掛馬了。其原理就是在一個安全的網(wǎng)頁中做一個地址指向,指向一個不安全的網(wǎng)頁。iframe是一個非常普通的HTML語言標(biāo)記,可以在網(wǎng)頁中作出類似電視中的畫中畫的效果。但是iframe的這個功能也被攻擊者巧妙的利用了,他們在一些正常的網(wǎng)頁中設(shè)置一些高度或?qū)挾葹?的隱藏框架,這就會導(dǎo)致用戶在打開正常的頁面是也訪問了含有漏洞溢出的頁面,雖然用戶看不到這個頁面,但這個頁面卻被執(zhí)行了。
下面我們針對這種掛馬流程做一個具體的描述:
第一,這里我們先要準(zhǔn)備一款木馬軟件,現(xiàn)在用的較多有pcshare了,當(dāng)我們準(zhǔn)備好軟件后可以將軟件傳到我們自己的主機(jī)服務(wù)器并記下可以通過Web訪問的有效地址路徑。
其次,我們需要編寫一個網(wǎng)頁木馬。這個網(wǎng)頁木馬被執(zhí)行后就會下載在第一步準(zhǔn)備的木馬軟件。現(xiàn)在有專業(yè)的木馬網(wǎng)頁生成器,基本上對電腦稍微熟悉點(diǎn)的人都可以制作。當(dāng)網(wǎng)頁木馬準(zhǔn)備好之后也傳到自己的服務(wù)器上并記錄下路徑地址。這里需要明確的是,網(wǎng)頁木馬實(shí)際上一個html網(wǎng)頁而已,但它與其它網(wǎng)頁不通的是該網(wǎng)頁是經(jīng)過精心制作的,當(dāng)用戶訪問該網(wǎng)頁時就會中木馬,。這些網(wǎng)頁的精心制作主要體現(xiàn)在它恰如其分的利用了瀏覽器漏洞,讓瀏覽器在后臺自動下載指定位置的木馬并安裝或直接運(yùn)行。這些過程都在后臺運(yùn)行,用戶很難察覺的到。這里也有一個問題需要明確一下,實(shí)際上考慮到安全問題,瀏覽器是禁止自動下載程序的,不要說是運(yùn)行程序了,但是,瀏覽器總是存在一些已知或未知的漏洞,網(wǎng)頁木馬就是利用這些漏洞來獲得下載程序或運(yùn)行程序的權(quán)限的[2]。
最后一步,也就是在正常的頁面掛上前面準(zhǔn)備好的木馬了。就是利用iframe指向你的網(wǎng)頁木馬的地址。這樣當(dāng)用戶在訪問正常頁面時,網(wǎng)頁木馬也會得到執(zhí)行。
因?yàn)閕frame是正常的html標(biāo)簽,所以殺毒軟件很難判斷這樣的頁面是否有病毒,目前來說,只能寄希望于殺毒軟件阻止利用iframe標(biāo)記內(nèi)嵌的溢出病毒網(wǎng)頁。當(dāng)然這種掛馬方式也不是完全沒有辦法,我們可以仔細(xì)分析一下這種方式的流程,也還是可以找出一點(diǎn)解決方式,雖然不是萬能,但總不至于讓那些掛馬者為所欲為吧。
其實(shí),iframe所嵌入的網(wǎng)頁木馬本身沒有危害,真正危害大的是這個網(wǎng)頁所下載的可執(zhí)行程序。那如果能阻止這種下載,這種危害也就是消除了。那么怎么阻止呢?這里有一種方式,就是在ie5以及以后的版本中有個expression功能,利用這個功能,我們可以在expression中執(zhí)行javascript腳本。其實(shí)這個功能就是一種吧css屬性和javascript腳本關(guān)聯(lián)起來的技術(shù),這里的css屬性不僅僅是元素固有的屬性,也可以是自定義屬性。也就是說在這里css屬性后面可以是一段javascript表達(dá)式,而屬性值則等于javascript表達(dá)式執(zhí)行的結(jié)果[3]。
那么我現(xiàn)在怎么利用expression功能來切斷網(wǎng)頁木馬自動下載可執(zhí)行程序呢?按照css的語法規(guī)則,代碼樣式為iframe{v:expression(js表達(dá)式)}。這個樣式是針對所有頁面的iframe定義了一個樣式。那么javascript的表達(dá)式怎么寫呢?就要看我們的目的,我們的目的是阻止下載,如果我們將iframe的地址變成空白,也就是about:blank,再將iframe對象從文檔對象模型中移除,這樣就能切斷所有的iframe里的請求了,明白的這一點(diǎn),剩下的javascript代碼就很簡單,我們這里就用outerHTML這個屬性吧,代碼為:this。src='about:blank',this。outerHtml=''。
這種方式把頁面所有的iframe都給禁掉了,那如果自己頁面有iframe怎么辦?給自己的iframe一個id,針對這個id定義一個css吧。當(dāng)然,這種解決方式也沒法最終解決問題,掛馬的方式很多,如果掛馬者采用其它的掛馬方式,這種解決方式也就是只能望洋興嘆了,
另一種使用較多的掛馬方式,就是使用javascript掛馬,這種掛馬比框架掛馬使用的多,也更難防范。因?yàn)樗碾[蔽性較iframe高,更難發(fā)現(xiàn)。而且javascript掛馬時可以將腳本直接寫在被掛的頁面中,也可以通過注入網(wǎng)頁,讓網(wǎng)站遠(yuǎn)程調(diào)取異地的js腳本。iframe掛馬方式在頁面很顯眼,技術(shù)人員在網(wǎng)頁中尋找iframe跟大家在人群中尋找姚明差不多,基本上一眼就能辨別的出來,但由于javascript的靈活性非常大,這讓它擁有了一張隨時可以變換的面孔,很容易蒙混過關(guān),導(dǎo)致木馬久殺不絕。下面我們來分析一下這種掛馬方式。
這種掛馬方式跟上面框架的掛馬方式不同的就是第三步了。
在javascript代碼中有一個window。open功能,這個在初期時用的比較多,但這種代碼往往很長,很容易被發(fā)現(xiàn),而且有個問題是,當(dāng)把window。open里面的width參數(shù)設(shè)置為0時,在有的瀏覽器版本中就會出現(xiàn)網(wǎng)頁木馬代碼不運(yùn)行的情況。所以效果不是很好。現(xiàn)在用的比較多的方式是,先將腳本代碼保存為一個獨(dú)立的js文件,并上傳到一個自己的服務(wù)器中,然后一句
這種掛馬的防范原理框架的防范原理差不多,也可以針對script這個標(biāo)簽來定義一個類似的樣式。但如果想研究一下人家的javascirpt木馬腳本就看不到了。想看的話,只能采取其它的方式。
CSS掛馬方式起步較晚,但興起很快.CSS掛馬很快興起是有原因,首先,它更具有隱蔽性了,第二個原因,也是有點(diǎn)無可奈何吧,因?yàn)獒槍η皟煞N掛馬的防范方式已經(jīng)很成熟,掛上馬的難度增加了,在來說,在簡單的html網(wǎng)頁中,可以利用的手段也非常的有限,即使采取了偽裝,也很容易被識破。這第三個原因,現(xiàn)在的網(wǎng)頁對CSS的運(yùn)用比歷史上任何時候都多,甚至一些交互式的網(wǎng)站會允許用戶使用css層疊樣式表來對網(wǎng)站的網(wǎng)頁進(jìn)行自由的修改。這些原因最終促使了css掛馬的流行。
CSS掛馬方式較多,但主流的方式是通過有漏洞的博客或者SNS社交網(wǎng)站系統(tǒng),將惡意的CSS代碼寫入支持CSS功能的個性化頁面中。下面就分析一下典型的CSS掛馬方式。
看下面這段代碼:
Body{Background-image:url('javascript:document。write('path'));}
\"background-image\"在css中功能是定義頁面背景圖片,而這段代碼可以通過\"background-image\"配合javascript代碼讓網(wǎng)頁悄悄地在用戶的電腦中運(yùn)行。但這段代碼有個問題,就是在運(yùn)行時會出現(xiàn)空白的頁面,影響網(wǎng)頁訪問者正常的訪問,因此比較容易發(fā)現(xiàn),所以這段代碼可以做如下的改進(jìn)。
background-image: url(window。pen(\"http://path\",\"\", Height=1, Width=1, top=1000, toolbar=no,menubar=no, scrollbars=no,resizable=no,location=no,status=no\"))
這種方式可以設(shè)置成在隱藏頁面,讓木馬在后臺運(yùn)行,但當(dāng)這種狀態(tài)下,很多瀏覽器并不會運(yùn)行頁面。這里注意的是,網(wǎng)頁木馬并沒有真正的隱身,因?yàn)楫?dāng)高或?qū)挒?時,很多瀏覽器不會執(zhí)行了。所以這里只是將這個頁面打開很小,然后出屏幕之外,如果不留意,也不會發(fā)現(xiàn)。
針對css掛馬的解決方式,如果可能,可以用css過濾,但這種解決方式也會將自己的css給過濾了。目前首推的主流方式還是用阻斷的方式,代碼為body{v:expression(js表達(dá)式)},js代碼的目前也是阻止本網(wǎng)站之外的代碼,也可以將指向修改為本地404錯誤頁面的地址。這樣,外部的代碼就不會被下載。但這種防范方式有個天生的弱點(diǎn),就是只能針對具體的標(biāo)簽防范,而一個頁面中一般是不止一個標(biāo)簽的。還有一個就是黑客也可以用!import定義一個樣式,使定義的樣子有絕對的優(yōu)先權(quán)。但!import功能只能在ie7和firefox中被識別,在ie6以及以下的版本中就不行了。
針對web應(yīng)用的常見掛馬已經(jīng)描述的差不多了。但即使對攻防都很了解,也沒有一勞永逸的安全,新的漏洞總是在你不經(jīng)意的時候出現(xiàn),而防范也只能見招拆招了。
總之,網(wǎng)絡(luò)的攻防從開始的那一刻起便不再有結(jié)束,而只會隨著網(wǎng)絡(luò)的發(fā)展此消彼長。雖然絕對安全的網(wǎng)絡(luò)環(huán)境只會是鏡花水月般的理想,但我們還是有理由相信,只要我們努力,我們還是會跟這個理想越來越近。
參考文獻(xiàn):
[1] 林東和.防范木馬入侵不求人[M].北京:人民郵電出版社,2002.
[4] 程秉輝.防黑緝毒擒木馬之絕命追殺[M].北京:科學(xué)出版社,2006.
[3] 張友生.計算機(jī)病毒與木馬程序剖析[M].北京:北京科海電子出版社,2003