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