看書過程中一些摘抄和不理解之處的記錄。
1、瀏覽器安全
惡意網址攔截:常見的惡意網址分為兩類:一類是掛馬網站,這些網站通常包含有惡意的腳本如JavaScript或Flash,通過利用瀏覽器的漏洞(包括一些插件、空控件漏洞)執行shellcode,在用戶電腦中植入木馬;另一類是釣魚網站,通過模仿知名網站的相似頁面來欺騙用戶。
2、跨站腳本攻擊(XSS)
1)跨站腳本攻擊:英文全稱是Cross Site Script,本來縮寫是CSS,但是為了和層疊樣式表(Cascading Style Sheet,CSS)有所區別,所以在安全領域叫做“XSS”。
2)XSS根據效果的不同可以分為以下幾類:
??? 第一種類型:反射型XSS。反射型XSS只是簡單地把用戶輸入的數據“反射”給瀏覽器。也就是說,黑客往往需要誘使用戶“點擊”一個惡意鏈接,才能攻擊成功。
??? 第二種類型:存儲型XSS。存儲型XSS會把用戶輸入的數據“存儲”在服務器端。這種XSS具有很強的穩定性。比較常見的一個場景就是,黑客寫下一篇包含有惡意JavaScript代碼的博客文章,文章發表后,所有訪問該博客文章的用戶,都會在他們的瀏覽器中執行這段惡意的JavaScript代碼。黑客把惡意的腳本保存到服務器端,所以這種XSS攻擊就叫做“存儲型XSS”。
? ? 第三種類型:DOM Based XSS。實際上,這種類型的XSS并非按照“數據是否保存在服務器端”來劃分,DOM Based XSS從效果上來說也算是反射型XSS。單獨劃分出來,是因為DOM Based XSS的形成原因比較特別。發現它的安全專家專門提出了這種類型的XSS。出于歷史原因,也就把它單獨作為一個分類了。通過修改頁面的DOM節點性成果的XSS,稱為DOM Based XSS。
3)初探XSS Payload
一個最常見的XSS Payload,就是通過讀取瀏覽器的Cookie對象,從而發起“Cookie劫持”攻擊。Cookie中一般加密保存了當前用戶的登錄憑證。Cookie如果丟失,往往意味著用戶的登錄憑證丟失。換句話說,攻擊者可以不通過密碼,而直接登錄進用戶的賬戶。
4)強大的XSS Payload
XSS攻擊后,攻擊者除了可以實施“Cookie劫持”外,還能夠通過模擬GET、POST請求操作用戶的瀏覽器。這在某些隔離壞境中會非常有用,比如“Cookie劫持”失效時,或者目標用戶的網絡不能訪問互聯網的情況。
同時,大部分攻擊者是不知道用戶的“Old Password”的。為了竊取密碼,攻擊者可以將XSS與“釣魚”相結合。實現思路很簡單,利用JavaScript在當前頁面上“畫出”一個偽造的登錄框,當用戶在登錄框中輸入用戶名與密碼后,其密碼將被發送至黑客的服務器上。
在很多時候,攻擊者為了獲取更大的利益,往往需要準確地收集用戶的個人信息。比如,如果知道用戶使用的瀏覽器、操作系統,攻擊者就有可能實施一次精準的瀏覽器內存攻擊,最終給用戶電腦植入一個木馬。XSS能夠幫助攻擊者快速達到收集信息的目的。最直接的是通過XSS讀取瀏覽器的UserAgent對象,但是由于瀏覽器的UserAgent是可以偽造的,所以還可以通過分辨不同瀏覽器之間的差異準確地判斷出瀏覽器版本。
知道了用戶使用的瀏覽器、操作系統后,進一步可以識別用戶安裝的軟件。在IE中,可以通過判斷ActiveX控件的classid是否存在,來推測用戶是否安裝了該軟件(這種方法很早就被用于“掛馬攻擊”)。瀏覽器的擴展和插件也能被XSS Payload掃描出來。
另外一個有趣的XSS Payload:通過CSS,來發現一個用戶曾經訪問過的網站。但是Firefox在2010年3月底決定修補這個問題。
一般來說,XSS 攻擊需要借助第三方軟件來完成。比如,客戶端安裝了Java環境,那么XSS就可以通過調用Java Applet的接口獲取客戶端的本地IP地址。
5)變廢為寶:Mission Impossible
從XSS漏洞利用的角度來看,存儲型XSS對攻擊者的用處比反射型XSS要大。因為存儲型XSS在用戶訪問正常URL時會自動觸發;而反射型XSS會修改一個正常的URL,一般要求攻擊者將XSS URL發送給用戶點擊,無形中提高了攻擊的門檻。而有的XSS漏洞,則被認為只能夠攻擊自己,屬于“雞肋”漏洞。但隨著時間的推移,數個曾經被認為是無法利用的XSS漏洞,都被人找到了利用方法。
6)流行的瀏覽器都內置了一些對抗XSS的措施,比如Firefox的CSP、Noscript擴展,IE8內置的XSS Filter等。
7)區分安全的“富文本”和有攻擊性的XSS
3、跨站點請求偽造(CSRF)
1)瀏覽器的Cookie策略
瀏覽器所持有的Cookie分為兩種:一種是“Session Cookie”,又稱“臨時Cookie”;另一種是“Third-party Cookie”,也稱為“本地Cookie”。兩者的區別在于,Third-party Cookie是服務器在Set-Cookie時指定了Expire時間,只有到了Expire時間后Cookie才會失效,所以這種Cookie會保存在本地;而Session Cookie則沒有指定Expire時間,所以瀏覽器關閉后,Session Cookie就失效了。在瀏覽網站的過程中,若是一個網站設置了Session Cookie,那么在瀏覽器進程的生命周期內,即使瀏覽器打開了Tab頁,Session Cookie也都是有效的。Session Cookie保存在瀏覽器進程的內存空間中;而Third-party Cookie則保存在本地。如果瀏覽器從一個域的頁面中,要加載另一個域的資源,由于安全原因,某些瀏覽器會阻止Third-party Cookie的發送。
4、HTML5安全
過去在瀏覽器里能夠存儲信息的方法有以下幾種:Cookie、Flash Shared Object、IE UserData。
其中,Cookie主要用于保存登錄憑證和少量信息,其最大長度的限制決定了不可能在Cookie中存儲太多信息。而Flash Shared Object和IE UserData則是Adobe與微軟自己的功能,并未成為一個通用化的標準。因此W3C委員會希望能在客戶端有一個較為強大和方便的本地存儲功能,這就是Web Storage。
5、注入攻擊
注入攻擊是Web安全領域中一種最為常見的攻擊方式。XSS本質上也是一種針對HTML的注入攻擊。
1)SQL注入
盲注:所謂“盲注”,就是在服務器沒有錯誤回顯時完成的注入攻擊。服務器沒有錯誤回顯,對于攻擊者來說缺少了非常重要的“調試信息”,所以攻擊者必須找到一個方法來驗證注入的SQL語句是否得到執行。
6、文件上傳漏洞
在大多數情況下,文件上傳漏洞一般都是指“上傳Web腳本能夠被服務器解析”的問題,也就是通常所說的webshell的問題。要完成這個攻擊,要滿足如下幾個條件:首先,上傳的文件能夠被Web容器解釋執行。所以文件上傳后所在的目錄是要Web容器所覆蓋到的路徑。其次,用戶能夠從Web上訪問這個文件。如果文件上傳了,但用戶無法通過Web訪問,或者無法使得Web容器解釋這個腳本,那么也不能稱之為漏洞。最后,用戶上傳的文件若被安全檢查、格式化、圖片壓縮等功能改變了內容,則也可能導致攻擊不成功。
7、應用層拒絕服務攻擊
應用層DDOS:CC攻擊,“CC攻擊”的前身是一個叫fatboy的攻擊程序,當時黑客為了挑戰綠盟的一款反DDOS設備開發了它。綠盟是中國著名的安全公司之一,它有一款叫“黑洞”的反DDOS設備,能夠有效地清洗SYN Flood等有害流量。而黑客則挑釁式地將fatboy所實現的攻擊方式命名為:Challenge Collapasar(簡稱CC),意指在黑洞的防御下,仍然能有效完成拒絕服務攻擊。
防御應用層DDOS:
在一般情況下,服務器端應用可以通過判斷HTTP頭中的User-Agent字段來識別客戶端。但從安全性來看這種方法并不可靠,因為HTTP頭中的User-Agent是可以被客戶端篡改的,所以不能信任。
一種比較可靠的方法是讓客戶端解析一段JavaScript,并給出正確的運行結果。因為大部分的自動化腳本都是直接構造HTTP包完成的,并非在一個瀏覽器環境中發出的請求。但有的自動化腳本是內嵌在瀏覽器中的“內掛”,就無法檢測出來了。
除了人機識別外,還可以在Web Server這一層做些防御,其好處是請求尚未到達后端的應用程序里,因此可以起到一個保護的作用。
資源耗盡攻擊:凡是資源有“限制”的地方,都可能發生資源濫用,從而導致拒絕服務,也就是一種“資源耗盡攻擊”。出于可用性和物理條件的限制,內存、進程數、存儲空間等資源都不可能無限制地增長,因此如果未對不可信任的資源使用者進行配額的限制,就有可能造成拒絕服務。內存泄漏是程序員經常需要解決的一種bug,而在安全領域中,內存泄漏則被認為是一種能夠造成拒絕服務攻擊的方式。
Server Limit DOS ? ? ?? Web Server 對HTTP包頭都有長度限制,以Apache舉例,默認是8192字節。也就是說,Apache所能接受的最大HTTP包頭大小為8192字節(這里指的是Request Header,如果是Request Body,則默認的大小限制是2GB)。如果客戶端發送的HTTP包頭超過這個大小,服務器就會返回一個4xx錯誤。加入攻擊者通過XSS攻擊,惡意地往客戶端寫入了一個超長的Cookie,則該客戶端在清空Cookie之前,將無法再訪問該Cookie所在域的任何頁面。這是因為Cookie也是放在HTTP包頭里發送的,而Web Server默認會認為這是一個超長的非正常請求,從而導致“客戶端”的拒絕服務。