- 黑客攻防從入門到精通(Web技術(shù)實戰(zhàn)篇)
- 明月工作室 王棟
- 10569字
- 2020-05-22 18:52:15
1.2 Web應(yīng)用程序中存在的風(fēng)險及預(yù)防
由于網(wǎng)絡(luò)技術(shù)日趨成熟,黑客們也將注意力從以往對網(wǎng)絡(luò)服務(wù)器的攻擊逐步轉(zhuǎn)移到了對Web應(yīng)用的攻擊上。根據(jù)Gartner的最新調(diào)查,信息安全攻擊有75%都是發(fā)生在Web應(yīng)用而非網(wǎng)絡(luò)層面上。同時,數(shù)據(jù)也顯示,2/3的Web站點都相當(dāng)脆弱,易受攻擊。然而現(xiàn)實是,絕大多數(shù)企業(yè)將大量的投資花費在網(wǎng)絡(luò)和服務(wù)器的安全上,沒有從真正意義上保證Web應(yīng)用本身的安全,給黑客以可乘之機。
Web應(yīng)用程序安全無疑是當(dāng)務(wù)之急,也是值得關(guān)注的話題。對相關(guān)各方而言,這一問題都至關(guān)重要。這里的相關(guān)各方包括互聯(lián)網(wǎng)業(yè)務(wù)收入日益增長的公司、向Web應(yīng)用程序托付敏感信息的用戶,以及通過竊取支付信息或入侵銀行賬戶偷竊巨額資金的犯罪分子。可靠的信譽也非常重要,沒人愿意與不安全的Web站點進行交易,也沒有組織愿意披露有關(guān)其安全方面的漏洞或違規(guī)行為的詳細(xì)情況。因此,獲取當(dāng)前Web應(yīng)用程序安全狀況的可靠信息不可小視。
1.2.1 Web應(yīng)用程序的安全套接層(SSL)應(yīng)用
與任何新興技術(shù)一樣,Web應(yīng)用程序也會帶來一系列新的安全方面的漏洞。這些常見的缺陷也在“與時俱進”,一些開發(fā)人員在開發(fā)現(xiàn)有應(yīng)用程序時未曾考慮到的攻擊方式都相繼出現(xiàn)了。由于安全意識的加強,一些問題已經(jīng)得到解決。新技術(shù)的開發(fā)也會引入新的漏洞。Web瀏覽器軟件的改進基本上消除了某些缺陷。
對Web應(yīng)用程序而言,安全確實是個“問題”。查詢一個典型的應(yīng)用程序的幫助頁面,其中的內(nèi)容會向你保證該應(yīng)用程序確實是安全的。大多數(shù)Web應(yīng)用程序都聲稱其安全可靠,因為它們使用SSL(Secure Socket Layer, SSL安全套接層)。
它使用128位安全套接層技術(shù)設(shè)計,是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。SSL在傳輸層對網(wǎng)絡(luò)連接進行加密,可防止未授權(quán)用戶查看您的任何信息。它提供以下服務(wù)。
(1)認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機和服務(wù)器。
(2)加密數(shù)據(jù)以防止數(shù)據(jù)中途被竊取。
(3)維護數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過程中不被改變。
您可以放心使用本站點,我們絕對保障您的數(shù)據(jù)安全。Web應(yīng)用程序常常要求用戶核實站點證書,并想方設(shè)法讓用戶相信其所采用的先進加密協(xié)議無懈可擊,從而說服用戶放心地向其提供個人信息。
TCP/IP協(xié)議棧中的安全機制如圖1-2所示。

圖1-2 TCP/IP協(xié)議棧中的安全機制
此外,各種組織還聲稱他們遵循支付卡行業(yè)(PCI)標(biāo)準(zhǔn),以消除用戶對安全問題的擔(dān)憂。
我們極其注重安全,每天掃描Web站點,以確保始終遵循PCI標(biāo)準(zhǔn),并免受黑客攻擊。下面的標(biāo)志上顯示了最近掃描日期,請放心訪問該Web站點。
實際上,大多數(shù)Web應(yīng)用程序并不安全,雖然SSL已得到廣泛使用,且會定期進行PCI掃描。常見的Web應(yīng)用程序漏洞類型有以下幾種。
(1)跨站點腳本(94%)。攻擊者可利用該漏洞攻擊應(yīng)用程序的其他用戶、訪問其信息、代表他們執(zhí)行未授權(quán)操作,或者向其發(fā)動其他攻擊。
(2)跨站點請求偽造(92%)。利用這種漏洞,攻擊者可以誘使用戶在無意中使用自己的用戶權(quán)限對應(yīng)用程序執(zhí)行操作。惡意Web站點可以利用該漏洞,通過受害用戶與應(yīng)用程序進行交互,執(zhí)行用戶并不打算執(zhí)行的操作。
(3)信息泄露(78%)。這一問題包括應(yīng)用程序泄露敏感信息,攻擊者利用這些敏感信息通過有缺陷的錯誤處理或其他行為攻擊應(yīng)用程序。
(4)不完善的訪問控制措施(71%)。這一問題涉及的情況包括應(yīng)用程序無法為數(shù)據(jù)和功能提供全面保護,攻擊者可以查看其他用戶保存在服務(wù)器中的敏感信息,或者執(zhí)行特權(quán)操作。(5)不完善的身份驗證措施(62%)。這類漏洞包括應(yīng)用程序登錄機制中的各種缺陷,可能會使攻擊者破解保密性不強的密碼、發(fā)動蠻力攻擊或完全避開登錄。
(6)SQL注入(32%)。攻擊者可通過這一漏洞提交專門設(shè)計的輸入,干擾應(yīng)用程序與后端數(shù)據(jù)庫的交互活動。攻擊者能夠從應(yīng)用程序中提取任何數(shù)據(jù)、破壞其邏輯結(jié)構(gòu),或者在數(shù)據(jù)庫服務(wù)器上執(zhí)行命令。
OWASP(開放式Web應(yīng)用程序安全項目組織)列出的Web應(yīng)用程序漏洞排名如圖1-3所示。

圖1-3 OWASP(開放式Web應(yīng)用程序安全項目組織)列出的Web應(yīng)用程序漏洞排名
SSL是一種出色的技術(shù),可為用戶瀏覽器和Web服務(wù)器間傳輸?shù)臄?shù)據(jù)提供機密性與完整性保護功能。它有助于防止信息泄露,并可保證用戶處理的Web服務(wù)器的安全性。但SSL并不能抵御直接針對某個應(yīng)用程序的服務(wù)器或客戶端組件的攻擊,而許多成功的攻擊都恰恰屬于這種類型。
從SSL協(xié)議所提供的服務(wù)及其工作流程可以看出,SSL協(xié)議運行的基礎(chǔ)是商家對消費者信息保密的承諾,這就有利于商家而不利于消費者。在電子商務(wù)初級階段,由于運作電子商務(wù)的企業(yè)大都是信譽較高的大公司,因此這問題還沒有充分暴露出來。但隨著電子商務(wù)的發(fā)展,各中小型公司也參與進來,這樣在電子支付過程中的單一認(rèn)證問題就越來越突出。雖然在SSL 3.0中通過數(shù)字簽名和數(shù)字證書可實現(xiàn)瀏覽器和Web服務(wù)器雙方的身份驗證,但是SSL協(xié)議仍存在一些問題,如只能提供交易中客戶與服務(wù)器間的雙方認(rèn)證,在涉及多方的電子交易中,SSL協(xié)議并不能協(xié)調(diào)各方間的安全傳輸和信任關(guān)系。在這種情況下,Visa和MasterCard兩大信用卡組織制定了SET協(xié)議,為網(wǎng)上信用卡支付提供了全球性的標(biāo)準(zhǔn)。特別需要指出的是,SSL并不能阻止上述任何漏洞或許多其他使應(yīng)用程序受到威脅的漏洞。無論是否使用SSL,大多數(shù)Web應(yīng)用程序仍然存在安全漏洞。
1.2.2 Web應(yīng)用程序安全的核心問題
Web應(yīng)用程序為結(jié)構(gòu)設(shè)計人員和開發(fā)人員提出了一系列復(fù)雜的安全問題。最安全、最有能力抵御攻擊的Web應(yīng)用程序是那些應(yīng)用安全思想構(gòu)建的應(yīng)用程序。與多數(shù)分布式應(yīng)用程序一樣,為確保安全,Web應(yīng)用程序必須解決一個根本的問題。由于應(yīng)用程序無法控制客戶端,用戶幾乎可向服務(wù)器端應(yīng)用程序提交任意輸入。應(yīng)用程序必須假設(shè)所有輸入的信息都是惡意的輸入,并必須采取措施確保攻擊者無法使用專門設(shè)計的輸入破壞應(yīng)用程序,干擾其邏輯結(jié)構(gòu)與行為,并最終達(dá)到非法訪問其數(shù)據(jù)和功能的目的。這個核心問題表現(xiàn)在以下幾個方面。
(1)用戶并不限于僅使用一種Web瀏覽器訪問應(yīng)用程序。大量各種各樣的工具可以協(xié)助攻擊Web應(yīng)用程序,這些工具既可整合在瀏覽器中,也可獨立于瀏覽器運作。這些工具能夠提出普通瀏覽器無法提交的請求,并能夠迅速生成大量的請求,查找和利用安全問題達(dá)到自己的目的。
(2)用戶可干預(yù)客戶端與服務(wù)器間傳送的所有數(shù)據(jù),包括請求參數(shù)、Cookies和HTTP信息頭。可輕易避開客戶端執(zhí)行的任何安全控件,如輸入確認(rèn)驗證。
(3)絕大多數(shù)針對Web應(yīng)用程序的攻擊都涉及向服務(wù)器提交輸入,旨在引起一些應(yīng)用程序設(shè)計者無法預(yù)料或不希望出現(xiàn)的事件。以下舉例說明為實現(xiàn)這種目的而提交的專門設(shè)計的輸入。
① 用戶可按任何順序發(fā)送請求,并可在應(yīng)用程序要求之外的不同階段不止一次提交或根本不提交參數(shù)。用戶的操作可能與開發(fā)人員對用戶和應(yīng)用程序交互方式做出的任何假設(shè)完全不同。
② 改變由后端數(shù)據(jù)庫處理的某個輸入,從而注入一個惡意數(shù)據(jù)庫查詢以訪問敏感數(shù)據(jù)。
③ 利用應(yīng)用程序處理過程中的邏輯錯誤刪除某些正常提交的參數(shù)。
④ 更改以隱藏的HTML表單字段提交的產(chǎn)品價格,以更低廉的價格欺詐性地購買該產(chǎn)品。
⑤ 修改在HTTP Cookies中傳送的會話令牌,劫持另一個驗證用戶的會話。
輸入驗證是一個很復(fù)雜的問題,并且是應(yīng)用程序開發(fā)人員需要解決的首要問題。然而,正確的輸入驗證是防御目前應(yīng)用程序攻擊的最有效方法之一。正確的輸入驗證是防止XSS、SQL注入、緩沖區(qū)溢出和其他輸入攻擊的有效對策。
輸入驗證非常復(fù)雜,因為對于應(yīng)用程序之間甚至應(yīng)用程序內(nèi)部的輸入,其有效構(gòu)成沒有一個統(tǒng)一的答案。同樣,對于惡意的輸入也沒有一個統(tǒng)一的定義。更困難的是,應(yīng)用程序?qū)θ绾翁幚泶溯斎雽绊憫?yīng)用的風(fēng)險。例如,您是否存儲用于其他應(yīng)用程序的數(shù)據(jù),或者應(yīng)用程序是否接受來自其他應(yīng)用程序所創(chuàng)建的數(shù)據(jù)源的輸入?
以下做法可以增強Web應(yīng)用程序的輸入驗證。
(1)假定所有輸入都是惡意的。
開始輸入驗證時,首先假定所有輸入都是惡意的,除非有證據(jù)表明它們并無惡意。無論輸入是來自服務(wù)、共享文件、用戶還是數(shù)據(jù)庫,只要其來源不在可信任的范圍之內(nèi),就應(yīng)對輸入進行驗證。例如,如果調(diào)用返回字符串的外部Web服務(wù),如何知道該服務(wù)不會執(zhí)行惡意命令呢?另外,如果幾個應(yīng)用程序?qū)懭胪粋€共享數(shù)據(jù)庫,您在讀取數(shù)據(jù)時,如何知道該數(shù)據(jù)是否安全呢?
(2)集中式驗證方法。
將輸入驗證策略作為應(yīng)用程序設(shè)計的核心元素。考慮集中式驗證方法,如通過使用共享庫中的公共驗證和篩選代碼。這可確保驗證規(guī)則應(yīng)用的一致性。此外,還能減少開發(fā)的工作量,且有助于以后的維護工作。
許多情況下,不同的字段要求不同的驗證方法,如要求使用專門開發(fā)的常規(guī)表達(dá)式。但是,通常可以得到驗證常用字段(如電子郵件地址、標(biāo)題、名稱、包括郵政編碼在內(nèi)的通信地址,等等)的常規(guī)方法。
輸入驗證的集中式方法如圖1-4所示。

圖1-4 輸入驗證的集中式方法
(3)不要依賴于客戶端驗證。
應(yīng)使用服務(wù)器端代碼執(zhí)行其自身的驗證。如果攻擊者繞過客戶端或關(guān)閉客戶端腳本例程(如通過禁用Java Script腳本),后果如何?使用客戶端驗證可以減少客戶端到服務(wù)器端的往返次數(shù),但不要依賴這種方法進行安全驗證。這是一個深入徹底的防御示例。
(4)注意標(biāo)準(zhǔn)化問題。
數(shù)據(jù)的標(biāo)準(zhǔn)形式是最標(biāo)準(zhǔn)、最簡單的形式。標(biāo)準(zhǔn)化是指將數(shù)據(jù)轉(zhuǎn)化為標(biāo)準(zhǔn)形式的過程。文件路徑和URL尤其傾向于標(biāo)準(zhǔn)化問題,許多廣為人知的漏洞利用都直接源自標(biāo)準(zhǔn)化缺陷。例如,請考慮以下字符串,它以標(biāo)準(zhǔn)形式表示了文件及其路徑。
c:\temp\somefi le.dat
以下字符串也可以代表同一個文件。
somefi le.dat c:\temp\subdir\..\somefi le.dat c:\temp\somefi le.dat ..\somefi le.dat c%3A%5Ctemp%5Csubdir%5C%2E%2E%5Csomefi le.dat
最后一個示例使用十六進制指定字符:
%3A代表冒號;
%5C代表反斜杠符號;
%2E代表點號。
通常,應(yīng)設(shè)法避免讓應(yīng)用程序接受用戶輸入的文件名,以防止標(biāo)準(zhǔn)化問題,可以考慮其他設(shè)計方法。例如,讓應(yīng)用程序為用戶確定文件名。如果確實需要用戶輸入文件名,在做出安全決策(如授予或拒絕對特定文件的訪問權(quán)限)之前,應(yīng)確保這些文件名具有嚴(yán)格定義的形式。
(5)限制、拒絕和凈化輸入。
輸入驗證的首選方法是從開始就限制允許輸入的內(nèi)容。按照已知的有效類型、模式和范圍驗證數(shù)據(jù)要比通過查找已知有害字符的數(shù)據(jù)驗證方法容易。設(shè)計應(yīng)用程序時,應(yīng)了解應(yīng)用程序需要輸入什么內(nèi)容。與潛在的惡意輸入相比,有效數(shù)據(jù)的范圍通常是更為有限的集合。然而,為了使防御更為徹底,您可能還希望拒絕已知的有害輸入,然后凈化輸入,如圖1-5所示。

圖1-5 輸入驗證策略:限制、拒絕和凈化輸入
要創(chuàng)建有效的輸入驗證策略,需了解以下方法及其折中方案。
① 限制輸入。限制輸入與允許輸入有益數(shù)據(jù)類似。這是首選的輸入驗證方法。其思想是定義一個篩選器,根據(jù)類型、長度、格式和范圍來篩選輸入的數(shù)據(jù)。定義應(yīng)用程序字段可以接受的數(shù)據(jù)輸入,并強制應(yīng)用該定義。拒絕一切有害數(shù)據(jù)。限制輸入可能包括在服務(wù)器上設(shè)置字符集,以便在本地建立輸入的規(guī)范格式。
② 驗證數(shù)據(jù)的類型、長度、格式和范圍。在適當(dāng)?shù)牡胤綄斎霐?shù)據(jù)使用強類型檢查,例如,在用于操作和處理輸入數(shù)據(jù)的類中,以及在數(shù)據(jù)訪問例程中。例如,可以使用參數(shù)化的存儲過程來訪問數(shù)據(jù),以便利用輸入字段的強類型檢查所帶來的好處。
應(yīng)該檢查字符串字段的長度,在許多情況下,還應(yīng)檢查字符串的格式是否正確。例如,郵政編碼和身份證號碼等都具有明確定義的格式,可以使用常規(guī)表達(dá)式進行驗證。嚴(yán)格的檢查不僅是很好的編程習(xí)慣,還能讓攻擊者更難利用用戶的代碼。攻擊者可能會通過類型檢查,但長度檢查會加大攻擊者實施其所喜歡的攻擊方式的難度。
③ 拒絕已知的有害輸入。雖然不能完全依賴于這種方法,但還是應(yīng)該拒絕“有害”數(shù)據(jù)。此方法通常不會像使用上述的“允許”方法那樣有效,但二者結(jié)合使用可以收到最佳效果。要拒絕有害數(shù)據(jù),需假定應(yīng)用程序知道惡意輸入的所有變體。請記住,字符有多種表達(dá)方式。這是“允許”方法成為首選方法的另一個原因。
雖然在應(yīng)用程序已經(jīng)部署、不能再做重大更改時,“拒絕”方法非常有用,但它不如“允許”方法那樣可靠,因為有害數(shù)據(jù)(如可用于識別常見攻擊的樣式)不是保持不變的。有效數(shù)據(jù)的形式是保持不變的,但有害數(shù)據(jù)的范圍是時常變化的。
④ 凈化輸入。凈化是為了使有潛在危害的數(shù)據(jù)變得安全。如果所允許的輸入范圍不能保證輸入數(shù)據(jù)的安全性,那么凈化輸入是非常有用的。凈化包括從刪除用戶輸入字符串后面的空格到去除值(以便按照文字格式處理該數(shù)據(jù))等一切行為。
在Web應(yīng)用程序中,另一個常見的凈化輸入示例是使用URL編碼或HTML編碼來包裝數(shù)據(jù),并將其作為文本而不是可執(zhí)行腳本來處理。HtmlEncode方法去除HTML字符,而UrlEncode方法對URL進行編碼,使其成為有效的URI請求。
在實踐中,以下是使用上述方法處理常見輸入字段的幾個示例。
(1)姓氏字段。這是一個很好的應(yīng)用限制輸入的示例。在這種情況下,可以接受的字符串范圍為ASCII A-Z和a-z,以及連字符和波浪線(在SQL中,波浪線沒有意義),以便處理類似O'Dell之類的姓氏。還應(yīng)限制輸入內(nèi)容的最大長度。
(2)數(shù)量字段。這是應(yīng)用輸入限制的另一個例子。在此示例中,可以使用簡單的類型和范圍限制。例如,輸入數(shù)據(jù)應(yīng)該是介于0~1000之間的正整數(shù)。
(3)自定義文本字段。示例包括留言板上的備注字段。在這種情況下,您可能被允許輸入字母和空格,以及省略符號、逗號和連字符等常用字符。允許輸入的字符集只包括符號、括號和大括號。
有些應(yīng)用程序可能允許用戶使用一組有限的腳本字符修飾文本,如粗體“<b>”、斜體“<b>”,甚至包含指向他們所喜愛的URL的連接。處理URL時,驗證時應(yīng)先對所輸入的值進行編碼,以便將其作為URL處理。
(4)不驗證用戶輸入的現(xiàn)有Web應(yīng)用程序。在理想方案中,應(yīng)用程序?qū)z查每個字段和入口點的輸入內(nèi)容是否可以接受。然而,如果現(xiàn)有Web應(yīng)用程序不驗證用戶輸入,則需要一種權(quán)宜方法來降低風(fēng)險,直到改進應(yīng)用程序的輸入驗證策略。以下兩種方法都不能確保輸入數(shù)據(jù)的安全處理,因為這要依賴于輸入的來源,以及應(yīng)用程序使用輸入數(shù)據(jù)的方式,目前,它們作為快速的補救措施,能在短期內(nèi)提高應(yīng)用程序的安全性。
① 向客戶端寫回數(shù)據(jù)時,對用戶輸入的數(shù)據(jù)進行HTML編碼和URL編碼。在這種情況下,假設(shè)所有輸入均未作為HTML處理,并且向客戶端寫回的所有輸出都包含在受保護的表單中。這是凈化操作在起作用。
② 拒絕惡意腳本字符。這是一個拒絕已知有害輸入的示例。在這種情況下,將使用可配置的惡意字符集來拒絕輸入。如上所述,這種方法存在的問題是,有害數(shù)據(jù)是與上下文相關(guān)的。
毋庸置疑,SSL無法阻止攻擊者向服務(wù)器提交專門設(shè)計的輸入。應(yīng)用程序使用SSL僅僅表示網(wǎng)絡(luò)上的其他用戶無法查看或修改攻擊者傳送的數(shù)據(jù)。因為攻擊者控制著SSL通道的終端,能夠通過這條通道向服務(wù)器傳送任何內(nèi)容。如果前面提到的任何攻擊成功實現(xiàn),那么不論其在FAQ中聲稱其如何安全,該應(yīng)用程序都很容易受到攻擊。
1.2.3 Web應(yīng)用程序中存在的安全風(fēng)險
任何情況下,如果一個應(yīng)用程序必須接受并處理可能是惡意的未經(jīng)驗證的數(shù)據(jù),就會產(chǎn)生Web應(yīng)用程序面臨的核心安全問題。但是,對Web應(yīng)用程序而言,幾種因素的結(jié)合使問題更加嚴(yán)重,這也解釋了當(dāng)今互聯(lián)網(wǎng)上許多Web應(yīng)用程序無法很好地解決這一問題的原因。
1.不成熟的安全意識
近年來,人們對Web應(yīng)用程序安全問題的意識有所增強,但與網(wǎng)絡(luò)和操作系統(tǒng)這些發(fā)展更加完善的領(lǐng)域相比,人們對Web應(yīng)用程序安全問題的意識還遠(yuǎn)不夠成熟。雖然大多數(shù)IT安全人員掌握了相當(dāng)多的網(wǎng)絡(luò)安全與主機強化基礎(chǔ)知識,但他們對與Web應(yīng)用程序安全有關(guān)的許多核心概念仍然不甚了解,甚至存有誤解。當(dāng)前,在其工作中,Web應(yīng)用程序開發(fā)人員往往需要整合數(shù)十甚至數(shù)百個第三方數(shù)據(jù)包,導(dǎo)致他們無法集中精力研究基礎(chǔ)技術(shù)。即使是經(jīng)驗豐富的Web應(yīng)用程序開發(fā)人員,也經(jīng)常會對所用的編程框架的安全性做出錯誤假設(shè),或遇到一些對他們而言完全陌生的基本缺陷類型。
2.獨立開發(fā)
大多數(shù)Web應(yīng)用程序都由企業(yè)自己的員工或合作公司獨立開發(fā),即使應(yīng)用程序采用第三方組件,通常也是使用新代碼將第三方組件進行自定義或拼湊在一起。在這種情況下,每個應(yīng)用程序都各不相同,并且可能包含其獨有的缺陷。這種情形與組織購買業(yè)內(nèi)一流產(chǎn)品并按照行業(yè)標(biāo)準(zhǔn)指南安裝的典型基礎(chǔ)架構(gòu)部署形成鮮明對照。
3.欺騙性的簡化
使用今天的Web應(yīng)用程序和開發(fā)工具,一個程序員新手也能在短期內(nèi)從頭開始創(chuàng)建一個強大的應(yīng)用程序。但是,在編寫功能性代碼與編寫安全代碼之間存在巨大的差異。許多Web應(yīng)用程序由善意的個人創(chuàng)建,他們只是缺乏發(fā)現(xiàn)安全問題的知識與經(jīng)驗。
近年來出現(xiàn)了一種顯著趨勢,即使用提供現(xiàn)成代碼組件的應(yīng)用程序框架來處理各種常見的功能,這些功能包括身份驗證、頁面模板、公告牌及與常用后端基礎(chǔ)架構(gòu)組件的集成,等等。Liferay和Appfuse就屬于這種類型的框架。使用這些產(chǎn)品可以快速、方便地創(chuàng)建可運行的應(yīng)用程序,而無須了解這些應(yīng)用程序的運行機制或它們包含的潛在風(fēng)險。這也意味著許多公司會使用相同的框架。因此,即使僅僅出現(xiàn)一個漏洞,該漏洞也將會影響許多無關(guān)的應(yīng)用程序。
4.迅速發(fā)展的威脅形勢
Web應(yīng)用程序攻擊與防御研究發(fā)展相對不成熟,是一個正蓬勃發(fā)展的領(lǐng)域,其中新概念與威脅出現(xiàn)的速度比傳統(tǒng)的技術(shù)要快得多。在客戶端方面尤其如此,針對特定攻擊的公認(rèn)防御機制往往會在一些研究中失去作用,這些研究最終成就了新的攻擊技巧。在項目開始之初就完全了解了當(dāng)前威脅的開發(fā)團隊,很可能到應(yīng)用程序開發(fā)完成并部署后會面臨許多未知的威脅。
5.資源與時間限制
由于獨立、一次性開發(fā)的影響,許多Web應(yīng)用程序開發(fā)項目會受到嚴(yán)格的時間與資源限制。通常,設(shè)計或開發(fā)團隊不可能雇用專職的安全專家,而且由于項目進程的拖延,往往要等到項目周期的最后階段才由專家進行安全測試。為了兼顧各種要素,按期開發(fā)出穩(wěn)定而實用的應(yīng)用程序的要求往往使開發(fā)團隊忽視不明顯的安全問題。小型組織一般不愿多花時間評估一個新的應(yīng)用程序。快速滲透測試通常只能發(fā)現(xiàn)明顯的安全漏洞,而往往會遺漏比較細(xì)微、需要時間和耐心來發(fā)現(xiàn)的漏洞。
6.技術(shù)上強其所難
Web應(yīng)用程序使用的許多核心技術(shù)出現(xiàn)于萬維網(wǎng)早期階段,那時的狀況與目前十分不同。從那以后,其功能已遠(yuǎn)遠(yuǎn)超越最初的設(shè)想,如在許多基于AJAX的應(yīng)用程序中使用Java Script進行數(shù)據(jù)傳輸。隨著對Web應(yīng)用程序功能要求的變化,用于實現(xiàn)這種功能的技術(shù)已遠(yuǎn)遠(yuǎn)落后于其發(fā)展要求,而開發(fā)人員還是沿用原有的技術(shù)來滿足新的需求。因此,這種做法造成的安全漏洞與無法預(yù)料的負(fù)面影響也就不足為奇了。
7.對功能的需求不斷增強
在設(shè)計應(yīng)用程序時,開發(fā)人員主要考慮的是功能和可用性。曾經(jīng)靜態(tài)的用戶資源現(xiàn)在包含社交網(wǎng)絡(luò)功能,允許用戶上傳照片,對頁面進行“維基”風(fēng)格的編輯。以前,應(yīng)用程序設(shè)計人員可以僅僅通過用戶名和密碼來創(chuàng)建登錄功能,而現(xiàn)今的站點則包含密碼恢復(fù)、用戶名恢復(fù)、密碼提示,以及在將來訪問時記住用戶名和密碼的選項。無疑,這類站點聲稱能夠提供各種安全功能,但實際上,這些功能不過是增大了該站點的受攻擊面而已。
8.Web應(yīng)用程序體系結(jié)構(gòu)設(shè)計不當(dāng)
Web應(yīng)用程序向設(shè)計人員和開發(fā)人員提出了許多挑戰(zhàn)。HTTP是無國界的,這意味著跟蹤每位用戶的會話狀態(tài)將成為應(yīng)用程序的責(zé)任。作為先導(dǎo)者,應(yīng)用程序必須能夠通過某種形式的身份驗證來識別用戶。由于所有后續(xù)授權(quán)決策都要基于用戶的標(biāo)識,因此,身份驗證過程必須是安全的,同樣必須很好地保護用于跟蹤已驗證用戶的會話處理機制。設(shè)計安全的身份驗證和會話管理機制僅僅是Web應(yīng)用程序設(shè)計人員和開發(fā)人員所面臨的眾多問題中的兩個方面。由于輸入和輸出數(shù)據(jù)要在公共網(wǎng)絡(luò)上進行傳輸,因此還會存在其他挑戰(zhàn)。防止參數(shù)操作和敏感數(shù)據(jù)泄漏是另一些重要問題。
表1-1顯示了由于設(shè)計不當(dāng)導(dǎo)致的Web應(yīng)用程序漏洞及潛在問題。
表1-1 由于設(shè)計不當(dāng)導(dǎo)致的Web應(yīng)用程序漏洞及潛在問題

1.2.4 Web應(yīng)用程序安全的預(yù)防及發(fā)展趨勢
在Web應(yīng)用程序出現(xiàn)之前,主要在網(wǎng)絡(luò)邊界上抵御外部攻擊。保護這個邊界需要對其提供的服務(wù)進行強化、打補丁,并在用戶訪問之間設(shè)置防火墻。Web應(yīng)用程序改變了這一切。用戶要訪問應(yīng)用程序,邊界防火墻必須允許其通過HTTP/HTTPS連接內(nèi)部服務(wù)器;應(yīng)用程序要實現(xiàn)其功能,必須允許其連接服務(wù)器以支持后端系統(tǒng),如數(shù)據(jù)庫、大型主機及金融與后勤系統(tǒng),這些系統(tǒng)通常處于組織運營的核心部分,并由幾層網(wǎng)絡(luò)級防御保護。
如果Web應(yīng)用程序存在漏洞,那么公共互聯(lián)網(wǎng)上的攻擊者只需從Web瀏覽器提交專門設(shè)計的數(shù)據(jù)就可攻破組織的核心后端系統(tǒng)。這些數(shù)據(jù)會像傳送至Web應(yīng)用程序的正常、良性數(shù)據(jù)流一樣,穿透組織的所有網(wǎng)絡(luò)防御。
Web應(yīng)用程序的廣泛應(yīng)用使得典型組織的安全邊界發(fā)生了變化。部分安全邊界仍舊關(guān)注防火墻與防御主機,但大部分安全邊界更加關(guān)注組織所使用的Web應(yīng)用程序。Web應(yīng)用程序接收用戶輸入的方式多種多樣,將這些數(shù)據(jù)傳送至敏感后端系統(tǒng)的方式也多種多樣,這些都是一系列攻擊的潛在關(guān)口,因此必須在應(yīng)用程序內(nèi)部執(zhí)行防御措施,以阻擋這些攻擊。即使某個Web應(yīng)用程序中的某一行代碼存在缺陷,也會使組織的內(nèi)部系統(tǒng)易于遭受攻擊。此外,隨著“聚合”應(yīng)用程序、第三方小部件及其他跨域集成技術(shù)的出現(xiàn),服務(wù)器端安全邊界常常會跨越組織本身的邊界。而且,各種組織還盲目地信任外部應(yīng)用程序和服務(wù)。前述有關(guān)該新的安全邊界內(nèi)漏洞發(fā)生概率的統(tǒng)計數(shù)據(jù)值得每一個組織思考。
對一個針對組織的攻擊者而言,獲得網(wǎng)絡(luò)訪問權(quán)或在服務(wù)器上執(zhí)行任意命令可能并不是他們真正想要實現(xiàn)的目標(biāo)。大多數(shù)或者基本上所有攻擊者的真實意圖是執(zhí)行一些應(yīng)用程序級行為,如偷竊個人信息、轉(zhuǎn)賬或購買價格低廉的產(chǎn)品。而應(yīng)用程序?qū)用嫔洗嬖诘陌踩珕栴}對實現(xiàn)這些目標(biāo)有很大幫助。
Web應(yīng)用程序安全邊界發(fā)生變化的另一原因,在于用戶本身在訪問一個易受攻擊的應(yīng)用程序時面臨的威脅。惡意攻擊者可能會利用一個良性但易受攻擊的Web應(yīng)用程序攻擊任何訪問它的用戶。如果用戶位于企業(yè)內(nèi)部網(wǎng)絡(luò),攻擊者可能會控制用戶的瀏覽器,并從用戶的可信位置向本地網(wǎng)絡(luò)發(fā)動攻擊。如果攻擊者心存惡意,他不需要用戶的任何合作,就可以代表用戶執(zhí)行任何行為。隨著瀏覽器擴展技術(shù)的興起,各種插件不斷增多,客戶端受攻擊面的范圍也明顯變大。
網(wǎng)絡(luò)管理員清楚如何防止其用戶訪問惡意的Web站點,終端用戶也逐漸意識到這種威脅。但是,鑒于Web應(yīng)用程序漏洞的本質(zhì),與一個全然惡意的Web站點相比,易受攻擊的應(yīng)用程序至少給用戶及其組織帶來了一種威脅。因此,新的安全邊界要求所有應(yīng)用程序的所有者承擔(dān)保護其用戶的責(zé)任,使他們免受通過應(yīng)用程序傳送的攻擊。
此外,人們普遍采用電子郵件作為一種補充驗證機制,安全邊界在一定程度上向客戶端轉(zhuǎn)移。當(dāng)前,大量應(yīng)用程序都包含“忘記密碼”功能,攻擊者可以利用該功能向任何注冊地址發(fā)送賬戶恢復(fù)電子郵件,而無須任何其他用戶特定的信息。因此,如果攻擊者攻破了用戶的Web郵件賬戶,就可以輕松擴大攻擊范圍,并攻破受害用戶注冊的大多數(shù)Web應(yīng)用程序賬戶。
Web應(yīng)用程序安全的預(yù)防措施有以下幾種。
(1)確定安全Web應(yīng)用程序的重要體系結(jié)構(gòu)和設(shè)計問題。
(2)設(shè)計時考慮重要部署問題。
(3)制定能增強Web應(yīng)用程序輸入驗證的策略。
(4)設(shè)計安全的身份驗證和會話管理機制。
(5)選擇適當(dāng)?shù)氖跈?quán)模型。
(6)實現(xiàn)有效的賬戶管理方法,并保護用戶會話。
(7)對隱私、認(rèn)可、防止篡改和身份驗證信息進行加密。
(8)防止參數(shù)操作。
(9)設(shè)計審核和記錄策略。
Web應(yīng)用程序安全的發(fā)展趨勢:雖然經(jīng)過約10年的廣泛應(yīng)用,但目前互聯(lián)網(wǎng)上的Web應(yīng)用程序仍然充滿漏洞。在了解Web應(yīng)用程序面臨的安全威脅及如何有效應(yīng)對這些威脅方面,整個行業(yè)仍未形成成熟的意識。目前幾乎沒有跡象表明上述問題能夠在不遠(yuǎn)的將來得到解決。
也就是說,Web應(yīng)用程序的安全形勢并非靜止不變。盡管SQL注入等熟悉的傳統(tǒng)漏洞還在不斷出現(xiàn),但已不是主要問題。而且,現(xiàn)有的漏洞也變得更難以發(fā)現(xiàn)和利用。幾年前只需使用瀏覽器就能夠輕易探測與利用的小漏洞,現(xiàn)在需要花費大量精力開發(fā)先進技術(shù)來發(fā)現(xiàn)。
Web應(yīng)用程序安全的另一個突出趨勢:攻擊目標(biāo)已由傳統(tǒng)的服務(wù)器端應(yīng)用程序轉(zhuǎn)向用戶應(yīng)用程序。后一類攻擊仍然需要利用應(yīng)用程序本身的缺陷,但這類攻擊一般要求與其他用戶進行某種形式的交互,以達(dá)到破壞用戶與易受攻擊的應(yīng)用程序之間交易的目的。其他軟件安全領(lǐng)域也同樣存在這種趨勢。隨著安全威脅意識的增強,服務(wù)器端存在的缺陷首先應(yīng)為人們所理解并得到解決,從而可以在進一步的研究過程中將注意力集中在客戶端。
Web應(yīng)用程序安全預(yù)防方法中必須解決的其他重要問題如圖1-6所示。

圖1-6 Web應(yīng)用程序安全預(yù)防方法中必須解決的其他重要問題
技術(shù)領(lǐng)域的各種最新趨勢在一定程度上改變了Web應(yīng)用程序的安全狀態(tài)。一些極具誤導(dǎo)性的熱門詞匯使這些趨勢深入人心,下面是一些最熱門的詞匯。
(1)大數(shù)據(jù)。這一術(shù)語指無法在可承受的時間范圍內(nèi)用常規(guī)軟件工具進行捕捉、管理和處理的數(shù)據(jù)集合,是需要新處理模式才能具有更強的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量、高增長率和多樣化的信息資產(chǎn)。大數(shù)據(jù)技術(shù)的戰(zhàn)略意義不在于掌握龐大的數(shù)據(jù)信息,而在于對這些含有意義的數(shù)據(jù)進行專業(yè)化處理。換言之,如果把大數(shù)據(jù)比作一種產(chǎn)業(yè),那么這種產(chǎn)業(yè)實現(xiàn)盈利的關(guān)鍵,在于提高對數(shù)據(jù)的“加工能力”,通過“加工”實現(xiàn)數(shù)據(jù)的“增值”。
(2)云計算。這一術(shù)語指更多地通過外部服務(wù)提供商來實施技術(shù)棧的各個部分,包括應(yīng)用程序軟件、應(yīng)用程序平臺、Web服務(wù)器軟件、數(shù)據(jù)庫和硬件。它也指在托管環(huán)境中大量采用虛擬化技術(shù)。云計算是基于互聯(lián)網(wǎng)的相關(guān)服務(wù)的增加、使用和交付模式,通常涉及通過互聯(lián)網(wǎng)來提供動態(tài)易擴展且經(jīng)常是虛擬化的資源。云是網(wǎng)絡(luò)、互聯(lián)網(wǎng)的一種比喻說法。過去在圖中往往用云來表示電信網(wǎng),后來也用云來表示互聯(lián)網(wǎng)和底層基礎(chǔ)設(shè)施的抽象。因此,云計算甚至可以讓你體驗每秒10萬億次的運算能力,擁有這么強大的計算能力可以模擬核爆炸、預(yù)測氣候變化和市場發(fā)展趨勢。用戶通過計算機、筆記本電腦、手機等方式接入數(shù)據(jù)中心,按自己的需求進行運算。
(3)Web 6.0。這一術(shù)語指本質(zhì)上不是單純的互聯(lián)網(wǎng)技術(shù)或衍生思想,而是物聯(lián)網(wǎng)與互聯(lián)網(wǎng)的初步結(jié)合,一種全新模式,惠及廣大網(wǎng)民。這里不要將物聯(lián)網(wǎng)看成是互聯(lián)網(wǎng)的附庸,它是與互聯(lián)網(wǎng)等價的物理媒介,是即將改變世界的新的物理模式。在Web 6.0里每個人都有調(diào)動自己感官的無限權(quán)力,用自己的五官去重新發(fā)現(xiàn)世界,從而改變世界。
和技術(shù)領(lǐng)域的大多數(shù)變革一樣,這些趨勢也催生了一些新型攻擊,并導(dǎo)致現(xiàn)有攻擊產(chǎn)生變體。雖然這些趨勢受到人們的大肆追捧,但鑒于其導(dǎo)致的各種問題,它們并不像人們最初認(rèn)為的那樣會帶來顛覆性的改變。我們將在本書的相應(yīng)部分討論與這些及其他最新趨勢有關(guān)的安全問題。
盡管Web應(yīng)用程序發(fā)生了這些改變,一些典型漏洞并未表現(xiàn)出任何減少的跡象。它們繼續(xù)出現(xiàn),方式與Web技術(shù)發(fā)展初期大致相同。這些漏洞包括業(yè)務(wù)邏輯缺陷、未能正確應(yīng)用訪問控制及其他設(shè)計問題。即使在應(yīng)用程序組件緊密集成及“一切皆服務(wù)”的時代,這些問題仍然會廣泛存在。
- CTF實戰(zhàn):技術(shù)、解題與進階
- 計算機網(wǎng)絡(luò)安全技術(shù)(第6版·慕課版)
- Metasploit Penetration Testing Cookbook(Third Edition)
- 數(shù)據(jù)安全實踐指南
- Kali Linux Wireless Penetration Testing Cookbook
- Kali Linux Network Scanning Cookbook(Second Edition)
- Testing and Securing Android Studio Applications
- 從實踐中學(xué)習(xí)Kali Linux滲透測試
- 物聯(lián)網(wǎng)安全滲透測試技術(shù)
- 安全防御入門手冊
- 信息安全導(dǎo)論(第2版)
- 數(shù)據(jù)保護:工作負(fù)載的可恢復(fù)性
- Manga Studio 5 Beginner's Guide
- Kali Linux無線網(wǎng)絡(luò)滲透測試詳解
- ATT&CK與威脅獵殺實戰(zhàn)