楊勇,胡勇(四川大學電子信息學院,成都 610065)
基于跨站腳本的路由設備跨域攻擊模型
楊勇,胡勇
(四川大學電子信息學院,成都610065)
路由設備有連接局域網和廣域網實現不同網絡互相通信的作用,同樣也起到數據處理、網絡管理等安全作用。類似于廣泛重視和研究的Web服務器漏洞,路由設備如路由器、Wi-Fi等管理平臺也同樣存在漏洞,攻擊者可以通過跨站腳本攻擊繞過路由設備的網絡訪問管理,從而禁用或改變它的功能設置,使攻擊者獲得訪問權限并展開進一步的攻擊。因此,必須防止路由設備的跨站腳本攻擊,保證其安全。
跨域攻擊指的是利用網站存在的前端安全漏洞或跨域安全設置缺陷進行的Web攻擊。傳統的安全思維是按資產、功能優先保護核心業務等,非核心業務的安全等級一般沒有核心業務高,但跨域Web攻擊可以從一般域攻擊到核心域。
路由設備特別是路由器、Wi-Fi接入點存在的腳本漏洞威脅有下面幾種。
1.1跨站腳本攻擊(XSS)
跨站腳本攻擊[2-3],是Web前端的攻擊,當用戶瀏覽該網頁時,嵌入網頁的惡意代碼就會被執行,從而達到攻擊者攻擊的目的。XSS攻擊類型分為反射型和存儲型[1]。通過跨站腳本攻擊可以獲取操作權限、提權、針對性掛馬等。
1.2CSRF(Cross-Site Request Forgery)跨站請求偽造
CSRF與XSS攻擊方式差異很大。XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊不多,正因為如此,對其進行防范的資源也相當稀少,使其變得難以防范,所以被認為比XSS更具危險性。當前,CSRF的防范已被越來越多的網站所重視。
路由設備腳本攻擊需要考慮多方面的問題。首先從客戶瀏覽器的一般訪問過程開始研究,逐步完成各個環節的攻擊,最后實現跨域攻擊。路由設備本身并沒有過多的交互面板,也不需要使用外部數據庫、服務器,基本的數據參數只需要簡單地保存在路由設備的存儲器中,所以能完成路由設備腳本攻擊的方法集中在登錄界面的基礎認證方式上。本節通過還原客戶訪問網絡的一般過程,逐步實現腳本漏洞攻擊。
2.1跨站腳本攻擊的觸發條件研究
按照用戶的一般訪問網絡過程,具有一定安全意識的用戶在進行瀏覽器操作時,會選擇性訪問較為安全的網站,那如何在一個安全的網頁上放置攻擊者設計的腳本代碼,就是首先需要考慮的。跨站腳本攻擊就能達到這個目的,攻擊者往Web頁面里插入惡意腳本代碼,當用戶瀏覽該網頁時,嵌入該頁面的腳本代碼會被執行。這個過程的重點就是突破網站服務器的安全防御和繞過瀏覽器的安全策略。
對于家庭用戶,可在其訪問率較高的網站尋找存儲型跨站漏洞或者隱蔽性更好的DOM型腳本漏洞。對于特定用戶,例如會員、管理員、VIP等具有特殊權限,能夠控制網絡訪問、流量控制的用戶,可以進行更具有針對性的攻擊策略。會員有很多有意義的操作或者有我們需要的內部個人資料,所以我們可以通過XSS對已登錄訪問者進行有權限操作。筆者認為cookies的盜取應該算作這一項,因為其目的也是獲取用戶操作權限(盜口令包括在內),從而獲取用戶某些信息或者進行權限下的相關操作。此類攻擊的重點是上述所說的突破網站服務器的安全防御。
瀏覽器的安全策略同樣不能忽視,使用腳本攻擊技術就需要考慮如何跨域,受同源策略所限,不同域名是無法進行隨意訪問的。讓窗口或框架在不同域頁面之間跳轉,是件很尋常的事情,所以跳轉操作總是被允許的。只有試圖讀寫頁面內容時,才會受到限制。而對于跨子域的訪問限制并沒有如此嚴格,一類可行的技術是通過設置document.domain實現跨域,當兩個二級域名,URL協議,端口都相同的網頁,自身都通過JavaScript顯示地設置了相同的 document.domain值,并且此值至少等于自身的二級域名,它們之間才可以相互作用。也就是說,當網頁作者指定document.domain屬性為域名的后半部分時,讀寫許可將擴展至二級域名。例如:http://www.aaa.com下的某個頁面,將document.domain屬性設置成aaa.com,同時 http:// home.aaa.com下的某個頁面,也將document.domain屬性設置成 aaa.com,它們之間即可完成跨子域的訪問。因為,只有以 aaa.com結尾的站點上的文檔,才可能將其document.domain屬性設置為aaa.com,這樣就確保了同一個服務提供者的頁面,才能互相提供權限,從而完成交互操作。在開發人員方面這是很方便的跨域技術,但是在攻擊者眼中這簡直就是一個大后門,黑客只需要找到*.aaa.com下任意一個XSS漏洞,在任意一個子域名里的網頁都可以跨域攻擊a.aaa.com和b.aaa. com。
2.2基礎認證與權限認證繞過策略
有了上述的跨站條件,接下來需要考慮的就是繞過認證和在用戶正常訪問網頁時毫無征兆地觸發代碼,跨站訪問偽造(CSRF)技術就可以實現。路由器的默認網關(即路由器訪問地址)都是類似的URL設置,這給攻擊者創造了可實現跨站訪問偽造攻擊的條件。通過遍歷默認用戶名、口令實現登錄認證,前提是路由器的設置仍為默認用戶名和口令。
大量的測試研究表明,路由器之間底層的代碼差別很大,但整體的設計思路有很明顯的相似點,尤其需要著重說明的是權限認證,其共同點是都在請求操作時在請求頭(request header)[5]中添加cookie或者類cookie方式的header。經過一定數量的路由檢測,主要的權限認證繞過漏洞有:仿造cookie,類cookie權限認證shell,設備自身認證缺陷。
相當一部分路由器其cookie的設計比較巧妙,每次認證都會生成隨機數的cookie,并且使用session技術設置了存在時間。還有的設備并沒有直接使用cookie,而是使用了類似于 cookie認證的“authorization”,其原理大同小異,將其賦值部分通過一定格式的編碼后放在請求頭文件中。在偽造訪問時攻擊者只要加上這個cookie或者類似cookie的“authorization”便可以成功。
2.3訪問偽造技術研究
研究出基礎認證與權限認證的基本原理,就可以相對應地構造腳本代碼了,在IE瀏覽器以及現有的Chrome、Firefox等主流瀏覽器都可以使用設計較為簡單的腳本攻擊。現在的大部分家用路由器都提供了Web管理功能,就是將路由器的LAN口和計算機相接,在瀏覽器中輸入一個地址就會彈出一個對話框,提示用戶輸入用戶名和密碼。因此我們可以設想,如果提交數據的方式已知,可以構造一段腳本。
而在IE6.0或者Chrome、Firfox上存在一種比較特殊的URL訪問方法實現路由器認證:http://admin:admin@192.168.0.1,這種方法可以不需要手動輸入用戶名和密碼完成路由器的直接認證和跳轉。這樣攻擊者便可構造出可跨站的方法,簡單的方法有讓用戶單擊超鏈接、瀏覽器自動請求資源,如標簽:
這里使用更具有實用性的DOM技術實現起來更加方便。通過調用
function StartCSRF(){
for(var i=1;i<=3;i++){
var ifr=document.createElement("iframe");
ifr.setAttribute('name','csrf'+i);
ifr.setAttribute('id','csrf'+i);
if(i==1){
ifr.setAttribute('src','http://admin:admin@192.168.0.1'); }
ifr.setAttribute('width',0);
ifr.setAttribute('height',0);
document.body.appendChild(ifr);
}}
StartCSRF();
function CSRF1(){
var ifm1=document.getElementById("csrf2").contentWindow;
ifm1.document.write("