- 黑客攻防技術寶典:Web實戰篇(第2版)
- (英)Dafydd Stuttard Marcus Pinto
- 6360字
- 2020-05-06 16:49:28
1.2 Web應用程序安全
與任何新興技術一樣,Web應用程序也會帶來一系列新的安全方面的漏洞。這些常見的缺陷也在“與時俱進”,一些開發人員在開發現有應用程序時未曾考慮到的攻擊方式都相繼出現了。由于安全意識的加強,一些問題已經得到解決。新技術的開發也會引入新的漏洞。Web瀏覽器軟件的改進基本上消除了某些缺陷。
針對Web應用程序的最嚴重攻擊,是那些能夠披露敏感數據或獲取對運行應用程序的后端系統的無限訪問權限的攻擊。這類倍受矚目的攻擊經常發生,但對許多組織而言,任何導致系統中斷的攻擊都屬于重大事件。通過實施應用程序級拒絕服務攻擊,可以達到與針對基礎架構的傳統資源耗竭攻擊相同的目的。但是,實施這些攻擊通常需要更精細的操作,并主要針對特定的目標。例如,可以利用這些攻擊破壞特定用戶或服務,從而在金融貿易、賭博、在線招投標和訂票等領域贏得競爭優勢。
在整個發展過程中,不時有報道知名Web應用程序被攻破的消息。情況似乎并未好轉,也沒有跡象表明這些安全問題已經得到解決。可以說,如今的Web應用程序安全領域是攻擊者與計算機資源和數據防御者之間最重要的戰場,在可預見的將來,這種情況可能仍將持續。
1.2.1 “本站點是安全的”
人們普遍認識到,對Web應用程序而言,安全確實是個“問題”。查詢一個典型的應用程序的FAQ頁面,其中的內容會向你保證該應用程序確實是安全的。
大多數Web應用程序都聲稱其安全可靠,因為它們使用SSL,例如:
本站點絕對安全。它使用128位安全套接層(Secure Socket Layer, SSL)技術設計,可防止未授權用戶查看您的任何信息。您可以放心使用本站點,我們絕對保障您的數據安全。
Web應用程序常常要求用戶核實站點證書,并想方設法讓用戶相信其所采用的先進加密協議無懈可擊,從而說服用戶放心地向其提供個人信息。
此外,各種組織還聲稱他們遵循支付卡行業(PCI)標準,以消除用戶對安全問題的擔憂。例如:
我們極其注重安全,每天掃描Web站點,以確保始終遵循PCI標準,并免受黑客攻擊。下面的標志上顯示了最近掃描日期,請放心訪問該Web站點。
實際上,大多數Web應用程序并不安全,雖然SSL已得到廣泛使用,且會定期進行PCI掃描。最近幾年,我們測試過數百個Web應用程序。圖1-3說明了在2007年和2011年間測試的應用程序受一些常見類型的漏洞影響的比例。下面簡要說明這些漏洞。

圖1-3 我們最近測試的應用程序中出現的一些常見Web應用程序漏洞(基于100多個樣本)
? 不完善的身份驗證措施(62%)。這類漏洞包括應用程序登錄機制中的各種缺陷,可能會使攻擊者破解保密性不強的密碼、發動蠻力攻擊或完全避開登錄。
? 不完善的訪問控制措施(71%)。這一問題涉及的情況包括:應用程序無法為數據和功能提供全面保護,攻擊者可以查看其他用戶保存在服務器中的敏感信息,或者執行特權操作。
? SQL注入(32%)。攻擊者可通過這一漏洞提交專門設計的輸入,干擾應用程序與后端數據庫的交互活動。攻擊者能夠從應用程序中提取任何數據、破壞其邏輯結構,或者在數據庫服務器上執行命令。
? 跨站點腳本(94%)。攻擊者可利用該漏洞攻擊應用程序的其他用戶、訪問其信息、代表他們執行未授權操作,或者向其發動其他攻擊。
? 信息泄露(78%)。這一問題包括應用程序泄露敏感信息,攻擊者利用這些敏感信息通過有缺陷的錯誤處理或其他行為攻擊應用程序。
? 跨站點請求偽造(92%)。利用這種漏洞,攻擊者可以誘使用戶在無意中使用自己的用戶權限對應用程序執行操作。惡意Web站點可以利用該漏洞,通過受害用戶與應用程序進行交互,執行用戶并不打算執行的操作。
SSL是一種出色的技術,可為用戶瀏覽器和Web服務器間傳輸的數據提供機密性與完整性保護功能。它有助于防止信息泄露,并可保證用戶處理的Web服務器的安全性。但SSL并不能抵御直接針對某個應用程序的服務器或客戶端組件的攻擊,而許多成功的攻擊都恰恰屬于這種類型。特別需要指出的是,SSL并不能阻止上述任何漏洞或許多其他使應用程序受到威脅的漏洞。無論是否使用SSL,大多數Web應用程序仍然存在安全漏洞。
1.2.2 核心安全問題:用戶可提交任意輸入
與多數分布式應用程序一樣,為確保安全,Web應用程序必須解決一個根本的問題。由于應用程序無法控制客戶端,用戶幾乎可向服務器端應用程序提交任意輸入。應用程序必須假設所有輸入的信息都是惡意的輸入,并必須采取措施確保攻擊者無法使用專門設計的輸入破壞應用程序,干擾其邏輯結構與行為,并最終達到非法訪問其數據和功能的目的。
這個核心問題表現在許多方面。
? 用戶可干預客戶端與服務器間傳送的所有數據,包括請求參數、cookie和HTTP信息頭。可輕易避開客戶端執行的任何安全控件,如輸入確認驗證。
? 用戶可按任何順序發送請求,并可在應用程序要求之外的不同階段不止一次提交或根本不提交參數。用戶的操作可能與開發人員對用戶和應用程序交互方式做出的任何假設完全不同。
? 用戶并不限于僅使用一種Web瀏覽器訪問應用程序。大量各種各樣的工具可以協助攻擊Web應用程序,這些工具既可整合在瀏覽器中,也可獨立于瀏覽器運作。這些工具能夠提出普通瀏覽器無法提交的請求,并能夠迅速生成大量的請求,查找和利用安全問題達到自己的目的。
絕大多數針對Web應用程序的攻擊都涉及向服務器提交輸入,旨在引起一些應用程序設計者無法預料或不希望出現的事件。以下舉例說明為實現這種目的而提交的專門設計的輸入。
? 更改以隱藏的HTML表單字段提交的產品價格,以更低廉的價格欺詐性地購買該產品。
? 修改在HTTP cookie中傳送的會話令牌,劫持另一個驗證用戶的會話。
? 利用應用程序處理過程中的邏輯錯誤刪除某些正常提交的參數。
? 改變由后端數據庫處理的某個輸入,從而注入一個惡意數據庫查詢以訪問敏感數據。
勿庸置疑,SSL無法阻止攻擊者向服務器提交專門設計的輸入。應用程序使用SSL僅僅表示網絡上的其他用戶無法查看或修改攻擊者傳送的數據。因為攻擊者控制著SSL通道的終端,能夠通過這條通道向服務器傳送任何內容。如果前面提到的任何攻擊成功實現,那么不論其在FAQ中聲稱其如何安全,該應用程序都很容易受到攻擊。
1.2.3 關鍵問題因素
任何情況下,如果一個應用程序必須接受并處理可能為惡意的未經驗證的數據,就會產生Web應用程序面臨的核心安全問題。但是,對Web應用程序而言,幾種因素的結合使問題更加嚴重,這也解釋了當今因特網上許多Web應用程序無法很好地解決這一問題的原因。
1.不成熟的安全意識
近年來,人們對Web應用程序安全問題的意識有所增強,但與網絡和操作系統這些發展更加完善的領域相比,人們對Web應用程序安全問題的意識還遠不夠成熟。雖然大多數IT安全人員掌握了相當多的網絡安全與主機強化基礎知識,但他們對與Web應用程序安全有關的許多核心概念仍然不甚了解,甚至存有誤解。當前,在其工作中,Web應用程序開發人員往往需要整合數十、甚至數百個第三方數據包,導致他們無法集中精力研究基礎技術。即使是經驗豐富的Web應用程序開發人員,也經常會對所用的編程框架的安全性做出錯誤假設,或遇到一些對他們而言完全陌生的基本缺陷類型。
2.獨立開發
大多數Web應用程序都由企業自己的員工或合作公司獨立開發。即使應用程序采用第三方組件,通常也是使用新代碼將第三方組件進行自定義或拼湊在一起。在這種情況下,每個應用程序都各不相同,并且可能包含其獨有的缺陷。這種情形與組織購買業內一流產品并按照行業標準指南安裝的典型基礎架構部署形成鮮明對照。
3.欺騙性的簡化
使用今天的Web應用程序和開發工具,一個程序員新手也可能在短期內從頭開始創建一個強大的應用程序。但是,在編寫功能性代碼與編寫安全代碼之間存在巨大的差異。許多Web應用程序由善意的個人創建,他們只是缺乏發現安全問題的知識與經驗。
近年來出現了一種顯著趨勢,即使用提供現成代碼組件的應用程序框架來處理各種常見的功能,這些功能包括身份驗證、頁面模板、公告牌以及與常用后端基礎架構組件的集成,等等。Liferay和Appfuse就屬于這種類型的框架。使用這些產品可以快速方便地創建可運行的應用程序,而無須了解這些應用程序的運行機制或它們包含的潛在風險。這也意味著許多公司會使用相同的框架。因此,即使僅僅出現一個漏洞,該漏洞也將會影響許多無關的應用程序。
4.迅速發展的威脅形勢
Web應用程序攻擊與防御研究發展相對不成熟,是一個正蓬勃發展的領域,其中新概念與威脅出現的速度比傳統的技術要快得多。在客戶端方面尤其如此,針對特定攻擊的公認防御機制往往會在一些研究中失去作用,這些研究最終成就了新的攻擊技巧。在項目開始之初就完全了解了當前威脅的開發團隊,很可能到應用程序開發完成并部署后會面臨許多未知的威脅。
5.資源與時間限制
由于獨立、一次性開發的影響,許多Web應用程序開發項目會受到嚴格的時間與資源限制。通常,設計或開發團隊不可能雇用專職的安全專家,而且由于項目進程的拖延,往往要等到項目周期的最后階段才由專家進行安全測試。為了兼顧各種要素,按期開發出穩定而實用的應用程序的要求往往使開發團隊忽視不明顯的安全問題。小型組織一般不愿多花時日評估一個新的應用程序。快速滲透測試通常只能發現明顯的安全漏洞,而往往會遺漏比較細微、需要時間和耐心來發現的漏洞。
6.技術上強其所難
Web應用程序使用的許多核心技術出現于萬維網早期階段,那時的狀況與目前十分不同。從那以后,其功能已遠遠超越最初的設想,例如,在許多基于AJAX的應用程序中使用JavaScript進行數據傳輸。隨著對Web應用程序功能要求的變化,用于實現這種功能的技術已遠遠落后于其發展要求,而開發人員還是沿用原有的技術來滿足新的需求。因此,這種做法造成的安全漏洞與無法預料的負面影響也就不足為奇了。
7.對功能的需求不斷增強
在設計應用程序時,開發人員主要考慮是的功能和可用性。曾經靜態的用戶資源現在包含社交網絡功能,允許用戶上傳照片,對頁面進行“維基”風格的編輯。以前,應用程序設計人員可以僅僅通過用戶名和密碼來創建登錄功能,而現今的站點則包含密碼恢復、用戶名恢復、密碼提示,以及在將來訪問時記住用戶名和密碼的選項。無疑,這類站點聲稱其能夠提供各種安全功能,但實際上,這些功能不過是增大了該站點的受攻擊面而已。
1.2.4 新的安全邊界
在Web應用程序出現之前,主要在網絡邊界上抵御外部攻擊。保護這個邊界需要對其提供的服務進行強化、打補丁,并在用戶訪問之間設置防火墻。
Web應用程序改變了這一切。用戶要訪問應用程序,邊界防火墻必須允許其通過HTTP/HTTPS連接內部服務器;應用程序要實現其功能,必須允許其連接服務器以支持后端系統,如數據庫、大型主機以及金融與后勤系統。這些系統通常處于組織運營的核心部分,并由幾層網絡級防御保護。
如果Web應用程序存在漏洞,那么公共因特網上的攻擊者只需從Web瀏覽器提交專門設計的數據就可攻破組織的核心后端系統。這些數據會像傳送至Web應用程序的正常、良性數據流一樣,穿透組織的所有網絡防御。
Web應用程序的廣泛應用使得典型組織的安全邊界發生了變化。部分安全邊界仍舊關注防火墻與防御主機,但大部分安全邊界更加關注組織所使用的Web應用程序。Web應用程序接收用戶輸入的方式多種多樣,將這些數據傳送至敏感后端系統的方式也多種多樣,這些都是一系列攻擊的潛在關口,因此必須在應用程序內部執行防御措施,以阻擋這些攻擊。即使某個Web應用程序中的某一行代碼存在缺陷,也會使組織的內部系統易于遭受攻擊。此外,隨著“聚合”應用程序、第三方小部件及其他跨域集成技術的出現,服務器端安全邊界常常會跨越組織本身的邊界。而且,各種組織還盲目地信任外部應用程序和服務。前述有關該新的安全邊界內漏洞發生幾率的統計數據值得每一個組織思考。
注解 對一個針對組織的攻擊者而言,獲得網絡訪問權或在服務器上執行任意命令可能并不是他們真正想要實現的目標。大多數或者基本上所有攻擊者的真實意圖是執行一些應用程序級行為,如偷竊個人信息、轉賬或購買價格低廉的產品。而應用程序層面上存在的安全問題對實現這些目標有很大幫助。
例如,一名攻擊者希望“闖入”銀行系統,從用戶的賬戶中竊取資金。在銀行使用Web應用程序之前,攻擊者可能需要發現公共服務中存在的漏洞,并利用其進入銀行的DMZ,穿透限制訪問其內部系統的防火墻,在網絡上搜索確定大型計算機,破譯用于訪問它的秘密協議,然后推測某些證書以進行登錄。但是,如果銀行使用易受攻擊的Web應用程序,那么攻擊者可能只需修改隱藏的HTML表單字段中的一個賬號,就可以達到這一目的。
Web應用程序安全邊界發生變化的另一原因,在于用戶本身在訪問一個易受攻擊的應用程序時面臨的威脅。惡意攻擊者可能會利用一個良性但易受攻擊的Web應用程序攻擊任何訪問它的用戶。如果用戶位于企業內部網絡,攻擊者可能會控制用戶的瀏覽器,并從用戶的可信位置向本地網絡發動攻擊。如果攻擊者心存惡意,他不需要用戶的任何合作,就可以代表用戶執行任何行為。隨著瀏覽器擴展技術的興起,各種插件不斷增多,客戶端受攻擊面的范圍也明顯變大。
網絡管理員清楚如何防止其用戶訪問惡意的Web站點,終端用戶也逐漸意識到這種威脅。但是,鑒于Web應用程序漏洞的本質,與一個全然惡意的Web站點相比,易受攻擊的應用程序至少給用戶及其組織帶來了一種威脅。因此,新的安全邊界要求所有應用程序的所有者承擔保護其用戶的責任,使他們免受通過應用程序傳送的攻擊。
此外,人們普遍采用電子郵件作為一種補充驗證機制,安全邊界在一定程度上向客戶端轉移。當前,大量應用程序都包含“忘記密碼”功能,攻擊者可以利用該功能向任何注冊地址發送賬戶恢復電子郵件,而無須任何其他用戶特定的信息。因此,如果攻擊者攻破了用戶的Web郵件賬戶,就可以輕松擴大攻擊范圍,并攻破受害用戶注冊的大多數Web應用程序賬戶。
1.2.5 Web應用程序安全的未來
雖然經過約10年的廣泛應用,但目前因特網上的Web應用程序仍然充滿漏洞。在了解Web應用程序面臨的安全威脅以及如何有效應對這些威脅方面,整個行業仍未形成成熟的意識。目前幾乎沒有跡象表明上述問題能夠在不遠的將來得到解決。
也就是說,Web應用程序的安全形勢并非靜止不變。盡管SQL注入等熟悉的傳統漏洞還在不斷出現,但已不是主要問題。而且,現有的漏洞也變得更難以發現和利用。幾年前只需使用瀏覽器就能夠輕易探測與利用的小漏洞,現在需要花費大量精力開發先進技術來發現。
Web應用程序安全的另一個突出趨勢為:攻擊目標已由傳統的服務器端應用程序轉向用戶應用程序。后一類攻擊仍然需要利用應用程序本身的缺陷,但這類攻擊一般要求與其他用戶進行某種形式的交互,以達到破壞用戶與易受攻擊的應用程序之間交易的目的。其他軟件安全領域也同樣存在這種趨勢。隨著安全威脅意識的增強,服務器端存在的缺陷首先應為人們所理解并得到解決,從而可以在進一步的研究過程中將注意力集中在客戶端。本書描述的全部攻擊類型中,那些針對其他用戶的攻擊是發展最快的攻擊類型,也是當前許多研究的焦點所在。
技術領域的各種最新趨勢在一定程度上改變了Web應用程序的安全狀態。一些極具誤導性的熱門詞匯使這些趨勢深入人心,下面是一些最熱門的詞匯。
? Web 2.0。這一術語指更大范圍地采用實現用戶生成內容和信息共享的功能,以及采用各種廣泛支持這一功能的技術,包括異步HTTP請求和跨域集成。
? 云計算。這一術語指更多地通過外部服務提供商來實施技術棧的各個部分,包括應用程序軟件、應用程序平臺、Web服務器軟件、數據庫和硬件。它也指在托管環境中大量采用虛擬化技術。
和技術領域的大多數變革一樣,這些趨勢也催生了一些新型攻擊,并導致現有攻擊產生變體。雖然這些趨勢受到人們的大肆追捧,但鑒于其導致的各種問題,它們并不像人們最初認為的那樣會帶來顛覆性的改變。我們將在本書的相應部分討論與這些及其他最新趨勢有關的安全問題。
盡管Web應用程序發生了所有這些改變,一些典型漏洞并未表現出任何減少的跡象。它們繼續出現,方式與Web技術發展初期大致相同。這些漏洞包括業務邏輯缺陷、未能正確應用訪問控制以及其他設計問題。即使在應用程序組件緊密集成及“一切皆服務”的時代,這些問題仍然會廣泛存在。