Web應用安全保障“六要素”
Web應用程序比客戶端應用程序更難保證安全性,因為它不像web服務器有四五個主要供應商的web服務器,它有大量的web應用程序和自定義腳本數量,而且每個都可能包含潛在的漏洞。對于開發人員來說,確保應用程序安全的最佳方法是使用建議的安全措施和可以掃描代碼的軟件,并提醒用戶潛在的安全問題。管理員需要定期掃描其Web站點中的漏洞。
應用程序的安全性主要是由應用程序的開發者控制的。管理員可以緊固一些應用程序的安全性,但是如果應用程序本身不安全,便不可能確保其安全。
編寫安全的應用程序是困難的,因為應用程序的各個方面,如圖形用戶界面,網絡連接,操作系統交互,和敏感數據的管理,需要大量的安全知識以確保其安全。大多數程序員不具備這方面的知識或不考慮用應用程序安全的重要性來衡量額外工作。
但從管理者的角度來看,有一些安全問題要謹記在心:
◆運行權限權限
◆應用程序管理
◆應用程序更新
◆與操作系統集成的安全性
◆遠程管理安全
◆會話安全
要素一:運行權限管理
管理員應該盡可能設置應用程序的低權限性。這樣做可以防止多種電腦威脅:
◆如果應用程序被攻擊者利用,他們將擁有應用程序的特權。如果該權限是足夠低的,攻擊者將不能進一步的攻擊。
◆低權限保護計算機免受嵌入式木馬(在應用程序中),因為處理木馬時擁有較少的權限。
◆當應用程序具有較低的權限,用戶將無法保存敏感據區域的數據(如操作系統領域),甚至不能進入核心資源。
在開發應用程序時,為了節省開發時間,程序員往往做出臆斷。其中的一些假設,需要管理權限才能訪問。這雖然削減了編程時間,但它降低了管理員保護系統安全的能力。當普通用戶被授予管理權限,可以刪除或訪問周圍的配置,威脅安全。
當安裝程序時,因為安裝程序可能需要訪問敏感的操作系統目錄,它通常需要有更高的權限,甚至管理權限。最好是先在一個相似配置的測試計算機上安裝應用程序。這樣,安裝在正式計算機之前,你可以看到是否有問題。如果應用程序并無明顯原因需要管理員權限,或者你不信任該應用程序,可以在沙盒中運行它。沙盒是一個安全應用程序,它可以攔截正在運行的應用程序的系統調用,確保應用程序將只能訪問管理員允許的資源。沙盒可以限制訪問注冊表,操作系統數據的目錄和網絡。將應用程序與敏感OS區域以及其它用戶定義的敏感數據域隔離開來。#p#
要素二:應用程序管理
大多數應用程序提供了一些接口進行管理(主要用于應用程序配置),且每次施用方法會產生須解決的安全風險,如這些:
◆INI/ conf文件
◆GUI
◆基于Web的控制
管理的一個應用程序的最基本的方法是通過基于文本的文件來控制它。為了保護這樣的應用程序,管理員需要限制訪問權限。如果文件存儲在本地,可以通過內置的OS權限管理系統;如果文件存儲在其他地方,可以通過使用身份驗證登錄到遠程存儲位置(確保認證方法受保護)。
大多數應用程序有一個圖形用戶界面用于管理它們。除了在提供GUI級別的安全性,管理員應該對圖形用戶界面和應用程序之間的通信提供安全保障。
當GUI和應用程序的物理位置在同一臺計算機時,管理員應該給GUI盡可能少的權限(如有必要,應用程序可以具有較高的權限)。#p#
要素三:應用程序更新
使用最新的安全補丁使應用程序保持更新是你可以采取的最重要的安全措施之一。本節討論一些輕松地更新應用程序的機制:
◆手動更新
◆自動更新
◆半自動更新
◆物理更新
手動更新
手動更新需要管理員手工下載一個文件(或使用所提供的媒體,如CD)和相關的系統上安裝更新。這個選項是最不可取的,因為它迫使管理者花額外的時間來修補一個工作系統。手動更新是非常常見的開源項目(比如Apache)。
自動更新
當應用程序使用自動更新,它會定期在網站上進行檢測,如果存在的話,它會下載并在系統上安裝它。用這種方法有兩個問題:
帶寬使用:考慮上千臺計算機組織運行相同的每天自動更新的防病毒軟件。每一天,同一個相同更新的副本被下載到成千上萬運行此程序的計算機。
安裝有問題的補丁:有時補丁(廠商通過發布更新軟件修復安全問題和漏洞)會導致弊大于利,因為補丁急于解決關鍵問題。開發商不能預見所有可能的環境,補丁可以停止應用程序或導致程序紊亂。這就是為什么測試是必要的。
半自動更新
有些應用程序允許管理員決定何時下載更新。更新下載之后,應用程序將更新的下載的分配到所有連接的客戶端。
物理更新
使用實際收到的更新來更新系統。一個有目的的攻擊者可以通過偽造一個看起來就像原版的但包含了木馬或其他惡意軟件的更新,創建一個“假的”補丁。為了反抗此類攻擊,管理員可以在廠商的網站檢查更新的大小和CRC32簽名,并與實際副本相比較。#p#
要素四:與操作系統安全集成
當一個應用程序集成了操作系統的安全性,它可以使用的操作系統的安全信息,甚至在需要的時候修改操作系統。這有時是一個應用程序的需求,或是它可能會提供一個可選功能。操作系統安全集成允許應用程序無論是在實時操作系統的進口或訪問用戶及其權限的列表。想象一下,一個組織有幾千名員工的需要訪問中央企業資源規劃(ERP )應用程序。管理員可以手動輸入上千個用戶進入ERP的管理控制臺,以及他們的權限,但這種方法耗時且需要雙重管理。如果組織有一個以上的中央系統,需要用戶手動錄入,這種情況會更糟。
安全信息人工錄入
一個應用程序可以允許管理員導入所有的用戶信息,并用它來管理應用程序認證。雖然這種方法可能會加快應用部署,之后還會有雙重管理。例如,當一個雇員離開了組織,管理員既要從組織用戶列表中刪除用戶,也要從應用程序列表中刪除。
另一個需要考慮的問題是應用程序如何存儲用戶信息。它受保護的嗎?加密?明文存儲?如果你不信任你的應用程序的數據存儲安全,可以加密整個硬盤。
安全信息的自動集成
安全信息的自動集成允許應用程序實時查詢操作系統的用戶憑證。這樣,無論是最初的部署時間和雙重管理問題都解決了。不過,在這種情況下有兩個問題:
如果OS的用戶數據庫被刪除或丟失,應用程序不能訪問。
應用程序和操作系統之間的網絡連接的用戶數據庫必須被保護以防止攻擊者竊聽或使用假的服務器獲得信息用戶的憑據。
使用操作系統的安全授權
應用程序可以使用操作系統安全授權。在這種情況下,應用程序設置一個特殊的目錄或資源(如共享內存,一個信道或命名管道)只能由用戶誰擁有某些特權訪問和操作系統的保護,訪問該目錄或資源。
保持操作系統安全集成可選而不是必要
有時有必要部署一個小型應用程序,該應用程序將使用只有一個或兩個操作系統的安全選項。如果應用程序迫使我們使用與操作系統安全集成的選項而不顧具體的應用場景的話,那么它結果只會降低安全(如果它使用一個不安全的方法)以及降低部署速度(因為我們只有一個或兩個用戶)。此外,管理員可能不愿使應用程序能夠修改用戶目錄(和潛在的損害)。#p#
要素五:遠程管理安全
今天的大多數應用程序提供遠程管理作為其功能的一部分, 關鍵它是安全的。如果攻擊者設法滲透到管理設施,其他安全措施可以被破壞或繞過。各種原因證實需要遠程管理:
◆轉移服務器:管理員需要一個接口來管理所有的轉移Web服務器(那些屬于組織系統的電腦,實際位于ISP)。
◆外包服務:管理安全產品需要一些組織不具備的知識,所以他們經常將他們的整個安全管理外包給專門從事該領域的公司。為了節約成本,該公司需要通過互聯網來管理所有的安全產品。
◆物理距離:管理員可能需要管理組織中大量的計算機。有些組織跨越幾棟建筑(或城市)進入計算機 ,是一個繁瑣而耗時的任務。此外,物理訪問可以被限制為實際的數據中心。
使用Web界面進行遠程管理
使用Web界面來遠程管理應用程序或計算機有許多的優點,但它也有成本,以及一些優缺點。以下為遠程Web管理的一些優點:
◆快速的開發時間:在開發,調試和部署方面,開發一個web界面比開發一個GUI客戶端快。
◆操作系統支持:可以通過瀏覽器從所有主要的操作系統訪問Web接口(除非開發人員使用的特定操作系統解決方案,如ActiveX ,這只能在Windows上運行)。
◆可訪問性:一個Web界面可以從Internet上的任何位置進行訪問。即使管理員不在辦公室也可以進行管理。
◆用戶的學習曲線:管理員知道如何使用瀏覽器,因此管理員學習曲線會更短。
◆雖然遠程Web管理有一些缺點,但對于大多數管理員他們都微不足道。但還是應當注意:
◆可訪問性:因為Web管理可以從任何地方訪問,因此黑客想要攻擊也是可以的。
◆瀏覽器控制:由于瀏覽器控制接口,攻擊者不需要設計特殊的產品來控制GUI (可能很難逾越的) 。
◆支持:基于Web的應用程序通常更易于支持和維護。
驗證基于Web的遠程管理
當連接到遠程web管理界面,第一關要明確的是認證過程。如果驗證較弱,攻擊者可以繞過它控制應用程序或計算機。
HTTP身份驗證方法
深入研究遠程管理的問題,通過現有可用來驗證HTTP連接目前的方法是非常重要的:
◆基本身份驗證:當一個頁面需要基本身份驗證,它回復到瀏覽器的錯誤代碼為401 (未授權) ,并指定基本身份驗證是必需的。瀏覽器使用BASE64的編碼用戶名和密碼編碼,并將其發送回服務器。如果登錄成功,服務器返回代碼200 ,這意味著一切順利 。如果登錄失敗,則回復和以前相同的401錯誤代碼。
◆簡要身份驗證:簡要身份驗證通過由Web服務器提供的一個挑戰,用MD5分解用戶名和密碼。
◆安全套接層(SSL ): SSL可以被配置為要求提供客戶端證書(可選),當他們有一個已知的證書的時候驗證用戶身份。
◆加密的基本身份驗證:基本身份驗證可以與常規的SSL(安全套接層)結合起來使用。由此對包括BASE64編碼(這是一種非常薄弱的編碼,很容易被解碼因此不是加密)的用戶名及密碼在內的整個會話進行加密。
◆驗證碼:這是一個比較流行的方法用來驗證人的另一端是一個人類。它通過展示一個被扭曲的人體圖像的字母和數字,要求用戶正確輸入以達到驗證目的。
保護網絡層面的遠程管理
安全登錄到網絡管理的服務器的最佳解決方案是要么使用常規SSL或者是加密的基本身份驗證,其中常規SSL可以檢查客戶端證書(SSL同時還可以針對第三方證書權威機構來驗證這個服務器是否就是你想要連接的那一個)。另一個選擇是使用安全的自定義登陸(需要與服務器腳本一起實施),但這可能包含網絡攻擊。
自定義遠程管理
網管會用GUI(圖形用戶界面)或者應用程序控制臺來對一些程序進程遠程控制,這種類型的程序包括SQL(數據庫)服務器、交換服務器、防火墻和入侵檢測系統(IDS)等等。一個應用也可能用探頭控制客戶端,一個IDS就可以做到。專有網絡連接有一些安全問題需要解決(網絡連接就是其中一個)。與網絡遠程管理一樣,自定義遠程管理也是既有優點也有缺點。
自定義遠程管理的優點:
◆復雜的圖形:有時控制臺需要呈現的復雜圖形在普通的網絡管理界面中無法顯示
◆身份驗證和加密:應用程序可以使用一個更強大驗證方法或更強的加密方法來確保會話的安全(比如使用SSL不支持的更大的密鑰長度)
◆可用性:這種應用只能被專門的GUI來控制,攻擊者必須要將這種專門的GUI安裝在自己的電腦上(而進入和安裝這種GUI都不一定能實現)
◆雖然自定義的遠程管理也有一些缺點,但他們對大多數管理員來說通常不是特別重要。然而,它們也值得注意:
◆特定的操作系統:一些供應商要求用特定的OS來運行控制GUI,如果這種特定的OS沒有被安裝,管理者必須要自己安裝(如果操作系統不是免費,管理者還需要花費額外的成本)。
◆不可用性:只有裝有GUI的電腦才可以管理該應用,如果管理員不在辦公室,那么很有可能沒有辦法在其他電腦上管理該應用。
要素六:會話安全
客戶端(GUI或者控制臺)與應用程序之間的會話安全十分重要,否則,攻擊者可能能夠獲取信息,竊取憑據,甚至進行重放攻擊。如果會話被稱為是不安全的,管理員可以很容易地通過VPN或安全隧道(SSH)將其傳遞到安全位置。
有些應用程序使用操作系統的網絡服務,如遠程過程調用(RPC)或分布式組件對象模型(DCOM),它允許管理員添加數據的完整性,加密和身份驗證。如果你不信任的操作系統安全的措施,你可以通過VPN連接來打通網絡連接的通道。
總的來說,就像Web應用程序的連接,如果是應用程序不支持的選項,我們不能強迫其安全通信。解決的辦法是要么使用VPN或者通過一個安全會話(SSH)打通數據會話的通道。