安全性保護數據以防止不合法用戶故意形成的破壞;
完整性保護數據以防止合法用戶無心中形成的破壞;
安全性測試(security testing)是有關驗證應用程序的安全服務和識別潛在注意:
安全性測試並不最終證實應用程序是安全的,而是用於驗證所設立策略的有效性,這些對策是基於威脅分析階段所作的假設而選擇的。
一個完整的WEB安全性測試能夠從部署與基礎結構、輸入驗證、身份驗證、受權、配置管理、敏感數據、會話管理、加密。參數操做、異常管理、審覈和日誌記錄等幾個方面入手。
1.安全體系測試
1)部署與基礎結構
網絡是否提供了安全的通訊
部署拓撲結構是否包括內部的防火牆
部署拓撲結構中是否包括遠程應用程序服務器
基礎結構安全性需求的限制是什麼
目標環境支持怎樣的信任級別
2)輸入驗證
l如何驗證輸入
A.是否清楚入口點
B.是否清楚信任邊界
C.是否驗證Web頁輸入
D.是否對傳遞到組件或Web服務的參數進行驗證
E.是否驗證從數據庫中檢索的數據
F.是否將方法集中起來
G.是否依賴客戶端的驗證
H.應用程序是否易受SQL注入攻擊
I.應用程序是否易受XSS攻擊
l如何處理輸入
3)身份驗證
是否區分公共訪問和受限訪問
是否明確服務賬戶要求
如何驗證調用者身份
如何驗證數據庫的身份
是否強制試用賬戶管理措施
4)受權
如何向最終用戶受權
如何在數據庫中受權應用程序
如何將訪問限定於系統級資源
5)配置管理
是否支持遠程管理
是否保證配置存儲的安全
是否隔離管理員特權
6)敏感數據
是否存儲機密信息
如何存儲敏感數據
是否在網絡中傳遞敏感數據
是否記錄敏感數據
7)會話管理
如何交換會話標識符
是否限制會話生存期
如何確保會話存儲狀態的安全
8)加密
爲什麼使用特定的算法
如何確保加密密鑰的安全性
9)參數操做
是否驗證全部的輸入參數
是否在參數過程當中傳遞敏感數據
是否爲了安全問題而使用HTTP頭數據
10)異常管理
是否使用結構化的異常處理
是否向客戶端公開了太多的信息
11)審覈和日誌記錄
是否明確了要審覈的活動
是否考慮如何流動原始調用這身份
2.應用及傳輸安全
WEB應用系統的安全性從使用角度能夠分爲應用級的安全與傳輸級的安全,安全性測試也能夠從這兩方面入手。
應用級的安全測試的主要目的是查找Web系統自身程序設計中存在的安全隱患,主要測試區域以下。
註冊與登錄:如今的Web應用系統基本採用先註冊,後登陸的方式。
A.必須測試有效和無效的用戶名和密碼
B.要注意是否存在大小寫敏感,
C.能夠嘗試多少次的限制
D.是否能夠不登陸而直接瀏覽某個頁面等。
在線超時:Web應用系統是否有超時的限制,也就是說,用戶登錄必定時間內(例如15分鐘)沒有點擊任何頁面,是否須要從新登錄才能正常使用。
操做留痕:爲了保證Web應用系統的安全性,日誌文件是相當重要的。須要測試相關信息是否寫進入了日誌文件,是否可追蹤。
備份與恢復:爲了防範系統的意外崩潰形成的數據丟失,備份與恢復手段是一個Web系統的必備功能。備份與恢復根據Web系統對安全性的要求能夠採用多種手段,如數據庫增量備份、數據庫徹底備份、系統徹底備份等。出於更高的安全性要求,某些實時系統常常會採用雙機熱備或多級熱備。除了對於這些備份與恢復方式進行驗證測試之外,還要評估這種備份與恢復方式是否知足Web系統的安全性需求。
傳輸級的安全測試是考慮到Web系統的傳輸的特殊性,重點測試數據經客戶端傳送到服務器端可能存在的安全漏洞,以及服務器防範非法訪問的能力。通常測試項目包括如下幾個方面。
HTTPS和SSL測試:默認的狀況下,安全HTTP(Soure HTTP)經過安全套接字SSL(Source Socket Layer)協議在端口443上使用普通的HTTP。HTTPS使用的公共密鑰的加密長度決定的HTTPS的安全級別,但從某種意義上來講,安全性的保證是以損失性能爲代價的。除了還要測試加密是否正確,檢查信息的完整性和確認HTTPS的安全級別外,還要注意在此安全級別下,其性能是否達到要求。
服務器端的腳本漏洞檢查:存在於服務器端的腳本經常構成安全漏洞,這些漏洞又每每被黑客利用。因此,還要測試沒有通過受權,就不能在服務器端放置和編輯腳本的問題。
防火牆測試:防火牆是一種主要用於防禦非法訪問的路由器,在Web系統中是很經常使用的一種安全系統。防火牆測試是一個很大很專業的課題。這裏所涉及的只是對防火牆功能、設置進行測試,以判斷本Web系統的安全需求。
另推薦安全性測試工具:
Watchfire AppScan:商業網頁漏洞掃描器(此工具好像被IBM收購了,因此推薦在第一位)
AppScan按照應用程序開發生命週期進行安全測試,早在開發階段就進行單元測試和安全保證。Appscan可以掃描多種常見漏洞,例如跨網站腳本、HTTP應答切開、參數篡改、隱藏值篡改、後門/調試選項和緩衝區溢出等等。
Acunetix Web Vulnerability Scanner:商業漏洞掃描器
Acunetix WVS自動檢查您的網頁程序漏洞,例如SQL注入、跨網站腳本和驗證頁面弱密碼破解。Acunetix WVS有着很是友好的用戶界面,還能夠生成個性化的網站安全評估報告。
黑盒主要測試點
用戶管理模塊,權限管理模塊,加密系統,認證系統等
工具使用
Appscan(首要)、Acunetix Web Vulnerability Scanner(備用)、HttpAnalyzerFull、TamperIESetup
木桶原理
安全性最低的模塊將成爲瓶頸,需總體提升
(一)可手工執行或工具執行
輸入的數據沒有進行有效的控制和驗證
用戶名和密碼
直接輸入須要權限的網頁地址能夠訪問
上傳文件沒有限制(這次不須要)
不安全的存儲
操做時間的失效性
1.1)輸入的數據沒有進行有效的控制和驗證
數據類型(字符串,整型,實數,等)
容許的字符集
最小和最大的長度
是否容許空輸入
參數是不是必須的
重複是否容許
數值範圍
特定的值(枚舉型)
特定的模式(正則表達式)(注:建議儘可能採用白名單)
1.22)用戶名和密碼-2
檢測接口程序鏈接登陸時,是否須要輸入相應的用戶
是否設置密碼最小長度(密碼強度)
用戶名和密碼中是否能夠有空格或回車?
是否容許密碼和用戶名一致
防惡意註冊:能否用自動填表工具自動註冊用戶? (傲遊等)
遺忘密碼處理
有完好省的超級用戶?(admin等,關鍵字需屏蔽)
有無超級密碼?
是否有校驗碼?
密碼錯誤次數有無限制?
大小寫敏感?
口令不容許以明碼顯示在輸出設備上
強制修改的時間間隔限制(初始默認密碼)
口令的惟一性限制(看需求是否須要)
口令過時失效後,是否能夠不登錄而直接瀏覽某個頁面
哪些頁面或者文件須要登陸後才能訪問/下載
cookie中或隱藏變量中是否含有用戶名、密碼、userid等關鍵信息
1.3)直接輸入須要權限的網頁地址能夠訪問
避免研發只是簡單的在客戶端不顯示權限高的功能項
舉例Bug:
沒有登陸或註銷登陸後,直接輸入登陸後才能查看的頁面的網址(含跳轉頁面),能直接打開頁面;
註銷後,點瀏覽器上的後退,能夠進行操做。
正常登陸後,直接輸入本身沒有權限查看的頁面的網址,能夠打開頁面。
經過Http抓包的方式獲取Http請求信息包經改裝後從新發送
從權限低的頁面能夠退回到高的頁面(如發送消息後,瀏覽器後退到信息填寫頁面,這就是錯誤的)
1.4)上傳文件沒有限制(這次不須要)
傳文件還要有大小的限制。
上傳木馬病毒等(每每與權限一塊兒驗證)
上傳文件最好要有格式的限制;
1.5)不安全的存儲
在頁面輸入密碼,頁面應顯示 「*****」;
數據庫中存的密碼應通過加密;
地址欄中不能夠看到剛纔填寫的密碼;
右鍵查看源文件不能看見剛纔輸入的密碼;
賬號列表:系統不該該容許用戶瀏覽到網站全部的賬號,若是必需要一個用戶列表,推薦使用某種形式的假名(屏幕名)來指向實際的賬號
1.6)操做時間的失效性
檢測系統是否支持操做失效時間的配置,同時達到所配置的時間內沒有對界面進行任何操做時,檢測系統是否會將用戶自動失效,須要從新登陸系統。
支持操做失效時間的配置。
支持當用戶在所配置的時間內沒有對界面進行任何操做則該應用自動失效。
如,用戶登錄後在必定時間內(例如15 分鐘)沒有點擊任何頁面,是否須要從新登錄才能正常使用。
(二)藉助工具或瞭解後手工來進行測試
不能把數據驗證寄但願於客戶端的驗證
不安全的對象引用,防止XSS攻擊
注入式漏洞(SQL注入)
傳輸中與存儲時的密碼沒有加密 ,不安全的通訊
目錄遍歷
2.1)不能把數據驗證寄但願於客戶端的驗證
避免繞過客戶端限制(如長度、特殊字符或腳本等),因此在服務器端驗證與限制
客戶端是不安全,重要的運算和算法不要在客戶端運行。
Session與cookie
例:保存網頁並對網頁進行修改,使其繞過客戶端的驗證。
(如只能選擇的下拉框,對輸入數據有特殊要求的文本框)
還能夠查看cookie中記錄,僞造請求
測試中,可以使用TamperIESetup來繞過客戶端輸入框的限制
2.21)不安全的對象引用,防止XSS等攻擊
阻止帶有語法含義的輸入內容,防止Cross Site Scripting (XSS) Flaws 跨站點腳本攻擊(XSS)
防止Cross-site request forgery(CSRF)跨站請求僞造
xss解釋:不可信的內容被引入到動態頁面中,沒有識別這種狀況並採起保護措施。攻擊者可在網上提交能夠完成攻擊的腳本,普通用戶點擊了網頁上這些攻擊者提交的腳本,那麼就會在用戶客戶機上執行,完成從截獲賬戶、更改用戶設置、竊取和篡改 cookie 到虛假廣告在內的種種攻擊行爲
測試方法:在輸入框中輸入下列字符,可直接輸入腳原本看
HTML標籤:<…>…</…>
轉義字符:&(&);<(<);>(>); (空格) ;
腳本語言:<script>alert(document.cookie);</script>
特殊字符:‘ ’ <>/
最小和最大的長度
是否容許空輸入
對Grid、Label、Tree view類的輸入框未做驗證,輸入的內容會按照html語法解析出來,要控制腳本注入的語法要素。好比:javascript離不開:「<」、「>」、「(」、「)」、「;」. 在輸入或輸出時對其進行字符過濾或轉義處理
2.23)注入式漏洞(SQL注入)
對數據庫等進行注入攻擊。
例:一個驗證用戶登錄的頁面,
若是使用的sql語句爲:
Select * from table A
where username=’’ + username+’’ and pass word …..
則在Sql語句後面 輸入 ‘ or 1=1 ―― 就能夠不輸入任何password進行攻擊
SELECT count(*)
FROM users
WHERE username='a' or 'a'='a'
AND
password='a' or 'a'='a'
(資料太多,不顯示了此處,藉助工具Appscan等吧)
2.24)傳輸中與存儲時的密碼沒有加密
利用ssl來進行加密,在位於HTTP層和TCP層之間,創建用戶與服務器之間的加密通訊
進入一個SSL站點後,能夠看到瀏覽器出現警告信息,而後地址欄的http變成https (特色肯定)
證書認證
————————————————————————
檢查數據庫中的用戶密碼、管理者密碼等字段是不是以加密方式保存。
存儲數據庫單獨隔離,有備份的數據庫,權限惟一
2.25)目錄遍歷
舉例:
http://love.ah163.net/Personal_Spaces_List.php?dir=MyFolder
那如今把這個URL改裝一下:
http://love.ah163.net/Personal_S ... /local/apache/conf/
/usr/local/apache/conf/裏的全部文件都出來了
簡要的解決方案:
1、限制Web應用在服務器上的運行 ,格設定WEB服務器的目錄訪問權限
2、進行嚴格的輸入驗證,控制用戶輸入非法路徑,如在每一個目錄訪問時有index.htm
(三)研發或使用工具才能進行
認證和會話數據不能做爲GET的一部分來發送
隱藏域與CGI參數
不恰當的異常處理
不安全的配置管理
緩衝區溢出
拒絕服務
日誌完整性、可審計性與可恢復性
3.1)Get or post
認證和會話數據不該該做爲GET的一部分來發送,應該使用POST
例:對Grid、Label、Tree view類的輸入框未做驗證,輸入的內容會按照html語法解析出來
可以使用TamperIESetup或ScannerHttpAnalyzerFull來判斷
3.2)隱藏域與CGI參數
Bug舉例:
分析:隱藏域中泄露了重要的信息,有時還能夠暴露程序原代碼。
直接修改CGI參數,就能繞過客戶端的驗證了。
如:<input type="hidden" name="h" value="http://XXX/checkout.php">
只要改變value的值就可能會把程序的原代碼顯示出來。
如大小寫,編碼解碼,附加特殊字符或精心構造的特殊請求等均可能致使CGI源代碼泄露
可以使用appscan或sss等來檢測,檢查特殊字符集
3.3)不恰當的異常處理
分析:程序在拋出異常的時候給出了比較詳細的內部錯誤信息,暴露了不該該顯示的執行細節,網站存在潛在漏洞,有可能會被攻擊者分析出網絡環境的結構或配置
一般爲其餘攻擊手段的輔助定位方式
舉例:如www.c**w.com ,搜索爲空時,,數據庫顯示出具體錯誤位置,可進行sql注入攻擊或關鍵字猜想攻擊
3.4)不安全的配置管理
分析:Config中的連接字符串以及用戶信息,郵件,數據存儲信息都須要加以保護
配置全部的安全機制,
關掉全部不使用的服務,
設置角色權限賬號,
使用日誌和警報。
手段:用戶使用緩衝區溢出來破壞web應用程序的棧,經過發送特別編寫的代碼到web程序中,攻擊者可讓web應用程序來執行任意代碼
例:數據庫的賬號是否是默認爲「sa」,密碼(還有端口號)是否是直接寫在配置文件裏而沒有進行加密。
3.5)緩衝區溢出
WEB服務器沒有對用戶提交的超長請求沒有進行合適的處理,這種請求可能包括超長URL,超長HTTP Header域,或者是其它超長的數據
使用相似於「strcpy(),strcat()」不進行有效位檢查的函數,惡意用戶編寫一小段程序來進一步打開安全缺口,而後將該代碼放在緩衝區有效載荷末尾,這樣,當發生緩衝區溢出時,返回指針指向惡意代碼
用戶使用緩衝區溢出來破壞web應用程序的棧,經過發送特別編寫的代碼到web程序中,攻擊者可讓web應用程序來執行任意代碼。
如apach緩衝區溢出等錯誤,第三方軟件也需檢測
3.6)拒絕服務
手段:超長URL,特殊目錄,超長HTTP Header域,畸形HTTP Header域或者是DOS設備文件
分析:攻擊者能夠從一個主機產生足夠多的流量來耗盡狠多應用程序,最終使程序陷入癱瘓。須要作負載均衡來對付。
詳細如:死亡之ping、淚滴(Teardorop)、 UDP洪水(UDP Flood)、 SYN洪水(SYN Flood)、 Land攻擊、Smurf攻擊、Fraggle攻擊、 畸形消息攻擊
3.7)日誌完整性。可審計性與可恢復性
服務器端日誌:檢測系統運行時是否會記錄完整的日誌。
如進行詳單查詢,檢測系統是否會記錄相應的操做員、操做時間、系統狀態、操做事項、IP地址等
檢測對系統關鍵數據進行增長、修改和刪除時,系統是否會記錄相應的修改時間、操做人員和修改前的數據記錄。
工具篇
Watchfire Appscan——全面自動測試工具
Acunetix Web Vulnerability ——全面自動測試工具
ScannerHttpAnalyzerFull——加載網頁時可判斷
TamperIESetup——提交表單時改造數據
注:上述工具最好安裝在虛擬機中,不影響實際機環境
Appscan、 Web Vulnerability 需安裝.net framework,可能與sniffer衝突
ScannerHttpAnalyzerFul與TamperIESetup會影響實際機瀏覽器平時的功能測試