|
|
|
訪問控制、防火墻、入侵檢測系統,以及入侵防御系統組成了一個完整的應用程序安全防線,向應用程序提供了全方位的保護。但是,這些機制并不能百分之百地防御網絡應用程序攻擊。因為這些應用程序是基于網絡的,網絡用戶與應用程序進行的通訊支持直接的網絡攻擊,使得已建立的安全防線保護形同虛設。攻擊者意識到了這一點,因此直接的網絡應用程序攻擊是當前大多數網絡攻擊類型。
為了平衡這種狀況,應用程序開發人員必須有意識來建立防御攻擊的策略。他們必須要考慮一些構成一系列網絡攻擊方式的因素:
大多數的網絡應用程序開發人員都不是安全方面的專家,也不會意識到大多數存在的問題。
許多開發人員都不會意識到網絡應用程序開發中的最佳安全實踐方式。
功能通常最受人重視,而安全性問題都會在最后才會得到處理。
部署網絡應用程序的環境通常都會發生變化,包括應用程序代碼自身的更新,以及基礎設施的變化。有一些更改沒有受到安全領域專家的足夠重視。
如果每一個應用程序開發人員都考慮以下因素的話,那么他們可以寫出更好的代碼。
得到培訓。
查找建立的模式。
將測試集成到開發計劃之中。
及早報告漏洞的存在。
本文旨在幫助一些開發人員和部署人員,處理一些影響到 Web 2.0 應用程序的常見網絡應用程序安全問題。文中還提供了一些關于移動設備特定安全性問題的介紹。
常見的網絡漏洞
移動網絡應用程序所遇到的網絡安全性問題與桌面網絡應用程序所遇到的情形很類似。學習更多關于這些問題和反制措施的資源庫是 Top 10 Project on the Open Web Application Security Project(OWASP)網站(參見 參考資料)。
接下來的部分介紹了開發人員必須理解的頂級問題。
跨網站腳本
在這種一般的攻擊中,惡意代碼會植入到第三方的受信網站之中。如果 HTTP 請求可以將其注入到最終 HTML 頁面上的話,那么跨站點腳本漏洞就向這種攻擊開放了。
例如,一項服務會接受名為 image 的參數,來接受來自于文件系統的圖片,來執行一些處理:
http://somedomain/myImageProcessor?image=myimage.jpg
一個入侵者可以通過向 image 參數插入 JavaScript 代碼,來占用該應用程序。其意圖是耗盡錯誤處理系統的資源。如果一個包含惡意腳本的出錯信息會被生成的話,那么入侵者就可以利用這一點了:
http://somedomain/myImageProcessor?image=myimage.jpg
如果出錯信息返回圖片參數的內容,而不用篩選的話,那么代碼就會封閉到 作為搜索關鍵字輸入時的結果。腳本代碼會在搜索結果中顯示出來,代碼會得到執行,而警告窗口也會顯示出來。
圖 3. 輸入“JavaScript”作為 JavaScript 執行中的搜索詞語結果
反制措施
按照下面的方法來避免跨網站腳本(XSS):
不要向用戶顯示不受信任的輸入。
采取措施預處理輸入與輸出,以刪除惡意代碼,例如篩選或者 白板列表(定義什么是允許輸入的,什么是不允許輸入的)。
Encode 輸出以避免瀏覽器執行。
對于 Altoro Mutual 來說,一個簡單的修復操作將不會返回搜索結果。
為了進一步深入討論跨網站腳本以及預防措施,您可以閱讀 developerWorks® 文章“IBM Rational AppScan:跨站點腳本攻擊深入解析”,或者在 Open Web Application Security Project(OWASP)培訓頁面上了解到關于跨網站腳本的內容。(參見 參考資料 以得到資源的鏈接)。
SQL 注入
這種攻擊同樣關注于找到請求的缺點,然后向網絡呈現的輸入區域插入一個 SQL 條目。能夠插入查詢作為輸入區域一部分的入侵者可以輕松繞過一個網站的認證機制,并訪問數據庫。這種攻擊,與跨網站腳本一起已經泛濫了。
這種范例向您展示了怎樣使用 SQL 注入來耗盡一個結構糟糕的登錄應用程序:
一個網絡應用程序會催促您輸入一個用戶名和密碼來進行登錄,而 SQL 語句是按照下面的方式組織的:
String query = "SELECT * FROM users WHERE user ="username+" AND password ="passwd"";
變量 username 以及 password 沒有得到細致的處理,并分配給用戶在應用程序中輸入的值。這就使得一些惡意的用戶可以輸入 username 之類的值:
anything OR 1=1 --
密碼可以是任意值。在這種情況下,假設它是一個星號:*。
對于輸入來說,當代碼替換 username 以及 password 變量時,結構化的查詢是:
SELECT * FROM users WHERE username =anything OR 1=1 -- AND password =*
該語句解釋了密碼需求,并插入狀況 1=1,這條語句的值一直都是真的。就算沒有相關的權限,攻擊者也會被確認為一個有效的用戶。
這種攻擊在 Altoro Mutual 網絡應用程序進行了演示(參見圖 4)。切換至登錄頁面,并輸入 anything OR 1=1 -- 的用戶名以及任意的字符作為密碼,就可以作為管理員登錄了(圖 5)。該賬戶有控制其他用戶賬戶的權限。
圖 4. 嘗試用任意的一個用戶名以及一段 SQL 代碼作為密碼進行登錄
圖 5. 執行 SQL 注入攻擊之后攻擊者作為管理員登錄
就像跨網站腳本一樣,這種攻擊是糟糕的或者根本不存在的輸入檢驗和確認系統造成的結果。
反制措施
您可以執行以下操作以防御這種攻擊:
不信任來自用戶的所有輸入。
采取措施來檢驗用戶的輸入,例如篩選或者白板列表。
在 Altoro Mutual 案例中,一個可能的解決方案是篩選來自 Username 與 Password 區域的非字母數字字符。
如果您想要得到更多關于 SQL 注入以及可能反制措施的信息,您可以閱讀 OWASP 培訓頁面以了解 SQL 注入(參見 參考資料)。
信息泄露
一個有意志的攻擊者可以通過識別缺點來研究一項應用程序。例如,一個攻擊者可以按照不同的方式來獲取信息:
手動研究應用程序以做到隱藏的目錄
系統性地收集例外情況,以查看應用程序是否給出了詳細的例外情況
掃描 HTML 以得到揭示應用程序基礎及行為具體內容的注釋
系統性地輸入用戶名以找出已存在的賬戶
Altoro Mutual 應用程序會在系統之中泄露已存在的用戶名。例如,在圖 6 中,輸入一個不正確的用戶名和密碼會產生這種出錯信息:“登錄失敗:抱歉,在我們的系統中找不到該用戶名。請重新嘗試。”
圖 6. 應用程序清晰地聲明系統中沒有做到該用戶
接下來,入侵者會嘗試用戶名 jsmith,而 Altoro Mutual 網絡應用程序會收到以下的信息:“登錄失敗:您輸入的密碼無效,請確認后重新輸入密碼”。于是,入侵者從以上信息上了解到有一個用戶賬戶名為 jsmith。在此基礎之上,入侵者可以把注意力放到破解密碼上面,或者使用暴力破解方法來發現密碼。
圖 7. Altoro Mutual 應用程序泄漏了用戶名 jsmith 的存在
在這種情況之下,修復方法可以是產生一種通用的登錄信息,不會精確地指出什么地方沒有輸對,例如:“登錄失敗:用戶名或者密碼無效。請確認后重新輸入您的信息”。
反制措施
對于應用程序來說,信息泄漏需要受到人們的重視,開發人員的意識是最好的防御手段。記住這一點,開發人員可以考慮一些減輕問題的措施。
所有評論的清晰 HTML 代碼會揭示應用程序的實際情況。
不要在瀏覽器中顯示特定的例外。如果必須登錄,將它們存儲在服務器上,并顯示常見的錯誤。
不要揭示哪一部分的認證錯誤。
同樣,配置網絡服務器和應用程序服務器設置,以避免在網站和應用程序上任意的導航。
這種類型的信息泄漏不會再耗費您的精力了。查找特定應用程序和運行環境存在的其他泄漏問題。
您可以在 OWASP 培訓頁面上找到關于信息泄漏的更多信息。
參數干擾
這些類型的攻擊旨在控制傳遞給應用程序的參數。想象一下一段糟糕的應用程序讓客戶來設置要購買商品的價格。這一應用程序可以發送以下的請求:
http://somedomain/myStore?item=1234&price=$200
如果業務邏輯并不會在服務器端執行任何類型的雙重-檢查的話,那么入侵者可以更改價格,以更低的價格買到商品。在這種情況下,允許從客戶端更改價格顯然是一個 bug。
反制措施
為了解決這一特定示例中的問題,您可以更改代碼以從服務器的數據庫端獲得價格的信息,避免價格控制問題的產生。
避免這種類型攻擊的反制措施包括:參數確認,以及對應用程序邏輯進行仔細檢查。
如果您想要得到關于參數干擾和可能反制措施的更多信息,那么您可以在網絡參數干擾上閱讀 OWASP 培訓頁面(參見 參考資料)。
cookie 破壞
所謂的 cookie(緩存)就是服務器向客戶端發送的信息,作為關鍵字/值對存儲在一個文本文件或者內存之中。它的內容可以被創建該內容的網絡應用程序使用。在執行一次網絡應用程序之后編輯緩存的內容,緩存 破壞 攻擊就發生了。
反制措施
cookie 破壞的反制措施包括參數認證,以及應用程序代碼和邏輯的仔細檢查。
高級安全性機制也可以得到應用。
一種常見的方法是使用數字簽名,來確認文本文件存儲沒有受到篡改。
另一種反制措施是在傳遞期間將其加密,以保護緩存。
對于未確認的輸入問題,cookie 破壞將會在 OWASP 頁面上進行討論(參見 參考資料)。
將安全性集成到開發過程之中
安全成為網絡應用程序開發的一個重要組成部分,也是移動網絡應用程序的組成部分。許多公司機構非常注重軟件交付。但是,在交付階段修復一項缺陷的成本是非常高的。因此,將安全性評審和測試作為開發過程必要的一部分,是非常明智的。
在整個開發過程中,從設計到部署,集成式地考慮安全性問題是最有效的。
設計階段
在設計階段,需要識別什么信息需要保護,存在什么風險,是否可以采取什么反制措施。在早期階段所有可能的地方,將來自公司內部的安全專家加入到所有討論和決策過程當中。這降低了開發周期晚期階段才發現錯誤的可能性。晚期階段才發現問題會導致問題解決起來更加困難和代價高昂。在設計階段識別實踐性的場景以便測試。這有助于為開發周期的測試建立一個集成化的進程。部署過程中不斷增加的安全性測試(例如壓力測試)可以幫助一家公司優化需要的技術,以確保品質優良的應用程序的開發。
開發階段
培訓開發人員去熟悉一些常見的問題以及安全性代碼實踐。在代碼評審過程之中,處理安全性問題,包括機構的安全領域問題。實施安全測試,評審它們,并將它們加入到自動化測試套件內。開發團隊應該計劃一下處理代碼評審和測試期間找到的安全性問題。
部署階段
在預生產階段完全地測試完成后的應用程序。這階段的測試可能包含外部團隊或者自動化安全掃描工具執行的應用程序壓力測試。IT 治理實踐通常會指定最終批準的標準。
管理階段
部署之后,您可以使用掃描工具,壓力測試,以及審計日志,來階段性地監視應用程序及其環境,預防可能的攻擊和問題。建立一個清晰的進程,以安全性地修改應用環境,并給應用程序打補丁。
在開發階段實行安全測試的自動化
當您在建立一個最佳實踐時,開發周期內創建一個可重復和穩定的安全性進程的關鍵在于自動化。IBM Rational AppScan 產品提供的工具,可以掃描代碼,以幫助開發人員找到問題所在。在開發的后期可以重復使用自動化掃描工具,以監視部署的應用程序。在應用程序或者基礎設施更改時,這將使得部署的網絡應用程序得到較好的監視,并幫助您檢查不經意間引入的安全性問題。
Rational AppScan 家族的產品在開發與部署階段提供了這些活動的自動化功能。
開發階段
Rational AppScan Source Edition: 對于應用程序開發人員來說,該工具提供了代碼的白盒分析功能,這樣開發人員就可以在開發的早期階段就識別到存在的問題。它還向開發人員提供了關于可能找到問題及其補救措施的信息。
Rational AppScan Tester Edition: 對于質量保證(QA)團隊來說,該工具有助于實現安全測試的集成化和自動化。測試員可以將其添加到已存在的測試環境,以將安全性測試集成到功能性測試以及性能測試。
Rational AppScan Build Edition: 該版本支持在構建期間安全性問題掃描的集成。它與構建管理系統集成在一起,例如 Rational® Build Forge®,并且可以通過缺陷管理軟件來追蹤開發人員的報告,例如 Rational® Clear Quest®。
部署階段
Rational AppScan Standard Edition: 對于安全審計員來說,該版本執行部署應用程序的黑框檢查。審計員可以指定已存在應用程序的 URL(一般是在一個預生產系統上),而工具會掃描應用程序以檢查問題。接著會創建一個優先級問題的列表,以及關于每一個處理措施的詳細信息。開發與管理團隊定制報告的創建也是支持的。
Rational AppScan Enterprise Edition: 對于團隊來說這是一種基于網絡的多用戶工具,它們需要以一種集中的方式處理應用程序掃描問題。就像 Rational AppScan Standard Edition 一樣,它會掃描已存在的應用程序,并生成優先性列表和修復任務的報告。它有助于分配任務,以解決問題。
查看 參考資料 以得到關于 Rational AppScan 家族產品的更多信息,以及 IBM® Red guide® 關于 Rational AppScan 家族產品的指南的鏈接,幫助您實現開發過程的自動化和集成性安全。
從移動設備訪問網絡應用程序的獨特性挑戰
應用程序和設備的許多風險,增加了當前桌面應用程序的問題。識別和訪問控制的當前操作超出了本文的討論范圍,但是網絡應用程序治理涉及到的標準領域包括:
掃描應用程序上已存在的問題
訪問控制
用戶識別與認證
末端識別與管理
Malware
閱讀 參考資料 所列出的 IBM® Redbooks® 文章,以學習更多關于 IBM 家族產品的信息,以集成安全性 。同樣,您還可以從 IBM Web Application Security Solutions 網站上找到關于 IBM® Tivoli® 家族產品的更多信息。
移動設備由于其高度的定制性和移動性本質,呈現出較大的挑戰性。移動設備更容易丟失。智能手機滑出口袋或丟失在出租車和飛機上,現在成為越來越常見的情形。智能手機也容易成為盜賊的盜取目標。出于這些原因考慮,移動設備能夠訪問的網絡應用程序必須采用額外的安全性措施。
部署移動設備時公司治理處理的其他領域包括:
多因素認證:合并兩種認證方法,例如,如果有條件的話,可以使用密碼和指紋讀取設備。
設計精細的訪問控制機制:用戶應該被授予權限獲得需要的資源,去完成自己的工作,或者更多。所有的訪問控制機制都應該盡可能地完美。
限制訪問:支持從 Virtual Private Networks(VPN)的因特網上訪問內部網資源。
數據加密:對于敏感性數據,匹配設備功能與需求。
管理:如果能夠訪問敏感性信息的話,那么對于丟失或者被盜設備來說,建議使用設備的 安全抹除功能。
總結
桌面和移動設備的 Web 2.0 應用程序有一些共享的安全性問題,因此,也有相應的反制措施。開發人員必須對一些常見的問題有較好的認識,并學會在整個開發的生命周期內處理它們。開發和部署期間他們需要持續性的自動化搜索功能,來保證應用程序的安全性。移動設備由于其高度的定制性和移動性本質,呈現出獨特性的挑戰。在您部署移動性方案之前,您需要計劃一下如果設備被盜或者丟失的話,數據的安全性問題
|
|
發表留言請先登錄!
|