Web安全測(cè)試常見(jiàn)測(cè)試方法及修改建議

Web安全測(cè)試常見(jiàn)測(cè)試方法

auto_693.jpg

1.XSS(CrossSite Script)跨站腳本攻擊

XSS(CrossSite Script)跨站腳本攻擊。它指的是惡意攻擊者往Web 頁(yè)面里插入惡意html代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web 里面的html 代碼會(huì)被執(zhí)行,從而達(dá)到惡意用戶的特殊目的。

信息系統(tǒng)安全測(cè)試方法: 

在數(shù)據(jù)輸入界面,添加記錄輸入:,添加成功如果彈出對(duì)話框,表明此處存在一個(gè)XSS 漏洞。

或把url請(qǐng)求中參數(shù)改為,如果頁(yè)面彈出對(duì)話框,表明此處存在一個(gè)XSS 漏洞

修改建議:

過(guò)濾掉用戶輸入中的危險(xiǎn)字符。對(duì)輸入數(shù)據(jù)進(jìn)行客戶端和程序級(jí)的校驗(yàn)(如通過(guò)正則表達(dá)式等)。

Eg:對(duì)用戶輸入的地方和變量有沒(méi)有做長(zhǎng)度和對(duì)”<”,”>”,”;”,”’”等字符是否做過(guò)濾

2.CSRF與跨站腳本(XSS)

CSRF與跨站腳本(XSS),是指請(qǐng)求迫使某個(gè)登錄的瀏覽器向易受攻擊的Web應(yīng)用發(fā)送一個(gè)請(qǐng)求,然后以受害者的名義,為入侵者的利益進(jìn)行所選擇的行動(dòng)。

信息系統(tǒng)安全測(cè)試方法:

同個(gè)瀏覽器打開(kāi)兩個(gè)頁(yè)面,一個(gè)頁(yè)面權(quán)限失效后,另一個(gè)頁(yè)面是否可操作成功

使用工具發(fā)送請(qǐng)求,在http請(qǐng)求頭中不加入referer字段,檢返回消息的應(yīng)答,應(yīng)該重新定位到錯(cuò)誤界面或者登陸界面。

修改建議:

在不同的會(huì)話中兩次發(fā)送同一請(qǐng)求并且收到相同的響應(yīng)。這顯示沒(méi)有任何參數(shù)是動(dòng)態(tài)的(會(huì)話標(biāo)識(shí)僅在cookie 中發(fā)送),因此應(yīng)用程序易受到此問(wèn)題攻擊。因此解決的方法為

1.Cookie Hashing(所有表單都包含同一個(gè)偽隨機(jī)值):

2. 驗(yàn)證碼

3.One‐Time Tokens(不同的表單包含一個(gè)不同的偽隨機(jī)值)客戶端保護(hù)措施:應(yīng)用防止CSRF攻擊的工具或插件。

3.注入測(cè)試

SQL注入是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。

安全測(cè)試方法:

在需要進(jìn)行查詢的頁(yè)面,輸入正確查詢條件 and 1=1等簡(jiǎn)單sql語(yǔ)句,查看應(yīng)答結(jié)果,如與輸入正確查詢條件返回結(jié)果一致,表明應(yīng)用程序?qū)τ脩糨斎胛催M(jìn)行過(guò)濾,可以初步判斷此處存在SQL注入漏洞

修改建議:

對(duì)用戶的輸入進(jìn)行校驗(yàn),可以通過(guò)正則表達(dá)式,或限制長(zhǎng)度;對(duì)以下關(guān)鍵字進(jìn)行轉(zhuǎn)換等。

||alert|and|exec|execute|insert|select|delete|update|count|drop|chr|mid|master|truncate|declare|sitename|netuser|xp_cmdshell|or|+|,|like'|and|exec|execute|insert|create|drop|table|from|grant|group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|chr|mid|master|truncate|declare|or|--|+|,|like|//

不要使用動(dòng)態(tài)拼裝sql,可以使用參數(shù)化的sql或者直接使用存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)查詢存取;

不要使用管理員權(quán)限的數(shù)據(jù)庫(kù)連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫(kù)連接;

應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯(cuò)誤信息對(duì)原始錯(cuò)誤信息進(jìn)行包裝。

auto_703.jpg

4.登錄認(rèn)證測(cè)試

4.1暴力破解

暴力破解是目前最直接有效的攻擊方式,特別對(duì)于金融業(yè)務(wù)來(lái)說(shuō),很多情況下口令都為6位純數(shù)字,很容易被攻擊。本測(cè)試項(xiàng)在于檢查認(rèn)證系統(tǒng)對(duì)暴力破解的防護(hù)性。

安全測(cè)試方法:

啟動(dòng)抓包工具,同時(shí)打開(kāi)瀏覽器輸入用戶登錄頁(yè)面,輸入用戶名、密碼以及驗(yàn)證碼,進(jìn)行登錄,如果在抓包中存在明文的用戶名和密碼,說(shuō)明存在弱點(diǎn)。

修改建議:

將請(qǐng)求方式從HTTP方式修改為HTTPS方式或者對(duì)輸入的用戶名和密碼進(jìn)行加密,在服務(wù)端對(duì)密碼進(jìn)行驗(yàn)證

4.2代碼注釋

開(kāi)發(fā)版本的Web程序所帶有的注釋在發(fā)布版本中沒(méi)有被去掉,而導(dǎo)致一些敏感信息的泄漏。我們要查看客戶端能看到的頁(yè)面源代碼并發(fā)現(xiàn)此類安全隱患。

安全測(cè)試方法:

打開(kāi)登陸頁(yè)面(或者待測(cè)試頁(yè)面),點(diǎn)擊瀏覽器郵件,查看源代碼,檢查源代碼注釋部分是否有敏感信息泄露,敏感信息包括以下內(nèi)容:字段文字描述、內(nèi)網(wǎng) IP 地址、SQL 語(yǔ)句以及物理路徑等等。

修改建議:

請(qǐng)勿在HTML  注釋中遺留任何重要信息(如文件名或文件路徑)。

從生產(chǎn)站點(diǎn)注釋中除去以前(或未來(lái))站點(diǎn)鏈接的跟蹤信息。

避免在HTML  注釋中放置敏感信息。

確保HTML  注釋不包括源代碼片段。

4.3 用戶名破解

為了進(jìn)行暴力破解,攻擊者需要知道已存在的用戶名,再對(duì)該用戶名進(jìn)行攻擊。

安全測(cè)試方法:

在登錄界面輸入不存在的用戶名和任意的口令,如果提示用戶名不存在,則說(shuō)明存在漏洞;使用正確的用戶名和錯(cuò)誤的口令進(jìn)行登錄,如果提示口令或密碼錯(cuò)誤,則說(shuō)明存在漏洞。

修改建議:

服務(wù)器對(duì)所有的登陸錯(cuò)誤原因進(jìn)行統(tǒng)一的應(yīng)答,不會(huì)提示準(zhǔn)確的錯(cuò)誤提示信息。

4.4驗(yàn)證碼暴力破解

在缺少鎖定策略和驗(yàn)證碼設(shè)計(jì)有問(wèn)題的情況下,攻擊者可以通過(guò)枚舉的方式來(lái)進(jìn)行暴力猜解。

安全測(cè)試方法:

在登錄頁(yè)面,輸入正確的用戶名、錯(cuò)誤的口令以及正確的驗(yàn)證碼,提交表單,重復(fù)10

次,如果系統(tǒng)沒(méi)有返回類似賬號(hào)鎖定的信息,則說(shuō)明存在漏洞。

修改建議:

在用戶進(jìn)行錯(cuò)誤登錄次數(shù)達(dá)到系統(tǒng)配置后,需要對(duì)該賬號(hào)或者該IP進(jìn)行臨時(shí)鎖定,到達(dá)解鎖條件后再進(jìn)行解鎖。

4.5驗(yàn)證碼自動(dòng)化登陸

查看是否有驗(yàn)證碼機(jī)制,以及驗(yàn)證碼機(jī)制是否完善,避免使用自動(dòng)化工具重復(fù)登錄和進(jìn)行業(yè)務(wù)操作。

安全測(cè)試方法:

打開(kāi)登陸頁(yè)面查看是否存在驗(yàn)證碼,如果不存在說(shuō)明存在漏洞。

輸入正確的用戶名和口令以及錯(cuò)誤的驗(yàn)證碼,如果只是提示驗(yàn)證碼錯(cuò)誤,則說(shuō)明存在漏洞。

選擇驗(yàn)證碼,點(diǎn)擊右鍵,驗(yàn)證碼是圖片形式且在一張圖片中,如果不是,則說(shuō)明存在漏洞。

觀察驗(yàn)證碼圖片中背景是否存在無(wú)規(guī)律的點(diǎn)或線條,如果背景為純色(例如只有白色)說(shuō)明存在漏洞。

修改建議:

將驗(yàn)證碼生成放在在一張進(jìn)行了混淆處理的圖片上。

4.6登陸口令漏洞

安全測(cè)試方法:

進(jìn)入系統(tǒng)的口令修改界面,查看是否必須輸入舊口令,如果不需要?jiǎng)t存在漏洞。

修改建議:

用戶修改密碼時(shí)必須提供舊密碼,且新密碼不能與舊密碼相同,密碼要有一定復(fù)雜度,參見(jiàn)口令規(guī)則建議。

4.7 默認(rèn)賬戶名稱設(shè)置

一般系統(tǒng)均設(shè)有默認(rèn)登錄用戶,以及超級(jí)管理員賬號(hào),如登錄賬號(hào)過(guò)于簡(jiǎn)單將易被破解,造成超級(jí)權(quán)限泄露。

修改建議:

上線系統(tǒng)清除超級(jí)管理員權(quán)限用戶,或增加超級(jí)管理員登錄名復(fù)雜度,不要設(shè)置成易猜測(cè)的admin、superadmin等名稱。

4.8 錯(cuò)誤的頁(yè)面信息

404、500等錯(cuò)誤或警告消息,可能會(huì)泄露敏感信息。

修改建議:

捕獲異常跳轉(zhuǎn)至統(tǒng)一錯(cuò)誤頁(yè)面,避免對(duì)外泄漏詳細(xì)錯(cuò)誤信息。

5.會(huì)話管理測(cè)試未更新

5.1會(huì)話標(biāo)識(shí)測(cè)試

查看登錄成功后會(huì)話標(biāo)識(shí)是否變更。如果未變更,那么攻擊者就可以通過(guò)一些手段(如構(gòu)造URL)為受害著確定一個(gè)會(huì)話標(biāo)識(shí),當(dāng)受害者登錄成功后,攻擊者也可以利用這個(gè)

會(huì)話標(biāo)識(shí)冒充受害者訪問(wèn)系統(tǒng)。

安全測(cè)試方法:

啟動(dòng)抓包工具或?yàn)g覽器自帶開(kāi)發(fā)者模式打開(kāi)登錄頁(yè)面,輸入正確的用戶名、口令以及驗(yàn)證碼,進(jìn)行登錄,登錄后,進(jìn)行任意一項(xiàng)業(yè)務(wù)操作。如果登錄的SessionId和進(jìn)行業(yè)務(wù)的SessionId沒(méi)有變化,則說(shuō)明存在漏洞。

修改建議:

對(duì)每次請(qǐng)求都從上次請(qǐng)求獲得令牌,服務(wù)端對(duì)每次交互都進(jìn)行驗(yàn)證

查看是否存在瀏覽器窗口閑置超時(shí)后需重新登錄的機(jī)制

5.2會(huì)話超時(shí)測(cè)試

安全測(cè)試方法:

打開(kāi)登錄界面,輸入正確的用戶名和口令,進(jìn)行登錄,進(jìn)行一項(xiàng)業(yè)務(wù)操作,將瀏覽器空閑超過(guò)30分鐘,在進(jìn)行其他業(yè)務(wù)操作,如果能夠進(jìn)行其他業(yè)務(wù)操作,則說(shuō)明存在漏洞。

修改建議:

需要在后臺(tái)進(jìn)行配置Session的超時(shí)時(shí)間。

5.3會(huì)話清除測(cè)試

用戶注銷后會(huì)話信息需要清除,否則會(huì)導(dǎo)致用戶在點(diǎn)擊注銷按鈕之后還能繼續(xù)訪問(wèn)注銷之前才能訪問(wèn)的頁(yè)面。

安全測(cè)試方法:

進(jìn)入登錄頁(yè)面,輸入正確的用戶名和密碼,登錄成功后,進(jìn)行一些業(yè)務(wù)操作,點(diǎn)擊注銷按鈕,在瀏覽器輸入地址,輸入上面進(jìn)行業(yè)務(wù)操作的地址,如果能夠正常返回業(yè)務(wù)頁(yè)面,則說(shuō)明存在漏洞。

修改建議:

在用戶注銷后,必須將用戶的Session信息以及緩存信息全部清空。

6.其他

6.1文件目錄測(cè)試

目錄列表能夠造成信息泄漏,而且對(duì)于攻擊者而言是非常容易進(jìn)行的。所以在測(cè)試過(guò)程中,要注意目錄列表漏洞。

安全測(cè)試方法:

通過(guò)瀏覽器訪問(wèn)web 服務(wù)器上的所有目錄,檢查是否返回目錄結(jié)構(gòu),如果顯示的是目錄結(jié)構(gòu),則可能存在安全問(wèn)題;

或使用DirBuster軟件進(jìn)行測(cè)試;

修改建議:

1.針對(duì)每個(gè)Directory 域都使用Allow 、Deny 等指令設(shè)置,嚴(yán)格設(shè)定WEB服務(wù)器的目錄訪問(wèn)權(quán)限;

2.刪除Options 指令下的Indexes 設(shè)置項(xiàng);

6.2文件上傳漏洞

文件上傳漏洞通常由于網(wǎng)頁(yè)代碼中的文件上傳路徑變量過(guò)濾不嚴(yán)造成的,如果文件上傳功能實(shí)現(xiàn)代碼沒(méi)有嚴(yán)格限制用戶上傳的文件后綴以及文件類型,攻擊者可通過(guò) Web 訪問(wèn)的目錄上傳任意文件,包括網(wǎng)站后門文件(webshell),進(jìn)而遠(yuǎn)程控制網(wǎng)站服務(wù)器。

修改建議:

嚴(yán)格限制和校驗(yàn)上傳的文件類型、大小等,禁止上傳惡意代碼的文件。同時(shí)限制相關(guān)目錄的執(zhí)行權(quán)限,防范webshell攻擊。

6.3http請(qǐng)求方法測(cè)試

有些Web服務(wù)器默認(rèn)情況下開(kāi)放了一些不必要的HTTP方法(如DELETE、PUT、TRACE、MOVE、COPY),這樣就增加了受攻擊面。

安全測(cè)試方法:

使用SoapUI等工具,發(fā)送除get、post以外的方法請(qǐng)求,如接收應(yīng)答為200ok,代表啟用了不必要的方法。

修改建議:

在tomcat  web.xml中增加如下內(nèi)容:

      /*
     PUT

     DELETE

     HEAD

     OPTIONS

     TRACE

    BASIC

6.4 服務(wù)器安全策略

1.服務(wù)器用戶權(quán)限

運(yùn)行Web服務(wù)器的操作系統(tǒng)賬號(hào)權(quán)限越高,那么Web遭到攻擊產(chǎn)生的危害就越大。部署到生產(chǎn)環(huán)境運(yùn)行時(shí)是不能用root等最高權(quán)限的,一切都給予以最小權(quán)限。

2.關(guān)閉無(wú)關(guān)端口

網(wǎng)絡(luò)上被攻陷的大多數(shù)主機(jī),是黑客用掃描工具大范圍進(jìn)行掃描而被瞄準(zhǔn)上的。所以,為了避免被掃描到,除了必要的端口,例如 Web、FTP、SSH 等,其他的都應(yīng)關(guān)閉。

如:關(guān)閉 icmp 端口,并設(shè)置規(guī)則,丟棄 icmp 包。這樣他人無(wú)法 Ping到服務(wù)器,服務(wù)器安全得到提升。

修改方法:丟棄 icmp 包可在 iptables 中, 加入一條語(yǔ)句:-A INPUT -p icmp -j DROP

3.更改默認(rèn)端口

如:默認(rèn)的 SSH 端口是 22。建議改成 10000 以上。這樣別人掃描到端口的機(jī)率也大大下降。

舉例修改方法:

# 編輯 /etc/ssh/ssh_configvi /etc/ssh/ssh_config# 在 Host * 下 ,加入新的 Port 值。

以 18439 為例(下同):Port 22 Port 18439

# 編輯 /etc/ssh/sshd_configvi /etc/ssh/sshd_config

#加入新的 Port 值Port 22Port 18439

# 保存后,重啟 SSH 服務(wù):service sshd restart

測(cè)試新端口連接正常后,刪除 Port 22 的配置。同時(shí)從 iptables 中, 刪除22端口,添加新配置的 18439,并重啟 iptables。

4.限制IP登錄

如能以固定 IP 方式連接服務(wù)器,那么,可以設(shè)置只允許某個(gè)特定的 IP 登錄服務(wù)器。 設(shè)置如下:

# 編輯 /etc/hosts.allowvi /etc/hosts.allow# 例如只允許 123.45.67.89 登錄sshd:123.45.67.89

5.使用證書(shū)登錄 SSH

相對(duì)于使用密碼登錄來(lái)說(shuō),使用證書(shū)更為安全,具體方法可參見(jiàn)網(wǎng)絡(luò)資料。

6.5 口令規(guī)則建議

規(guī)則1:口令長(zhǎng)度的取值范圍為:0‐  個(gè)字符;口令的最短長(zhǎng)度和最長(zhǎng)長(zhǎng)度可配置;口令的最短長(zhǎng)度建議默認(rèn)為6個(gè)字符。

規(guī)則2:口令中至少需要包括一個(gè)大寫字母(A‐Z)、一個(gè)小寫字母(a‐z)、一個(gè)數(shù)字字符(0‐9);口令是否包含特殊字符要求可以配置。

規(guī)則3:口令中允許同一字符連續(xù)出現(xiàn)的最大次數(shù)可配置,取值范圍:0‐9,當(dāng)取值為  0  時(shí),表示無(wú)限制,建議默認(rèn)為  3。

規(guī)則4:口令須設(shè)置有效期,最短有效期的取值范圍:0‐9999  分鐘,當(dāng)取值為0時(shí),表示不做限制,建議默認(rèn):5  分鐘;最長(zhǎng)有效期的取值范圍:0‐999 天,當(dāng)取值為  0  時(shí),表示口令永久有效,建議默認(rèn):90  天。

規(guī)則5:在口令到期前,當(dāng)用戶登錄時(shí)系統(tǒng)須進(jìn)行提示,提前提示的天數(shù)可配置,取值范圍:1‐99 天,建議默認(rèn):7  天。

規(guī)則6:口令到達(dá)最長(zhǎng)有效期后,用戶再次登錄成功但在進(jìn)入系統(tǒng)前,系統(tǒng)強(qiáng)制更改口令,直至更改成功。

規(guī)則7:口令歷史記錄數(shù)可配置,取值范圍為:0‐;建議默認(rèn):3個(gè)。 — 

規(guī)則8:管理員/操作員/最終用戶修改自己的口令時(shí),必須提供舊口令。

規(guī)則9:初始口令為系統(tǒng)提供的默認(rèn)口令、或者是由管理員設(shè)定時(shí),則在用戶/操作員使用初始口令成功登錄后,要強(qiáng)制用戶/操作員更改初始口令,直至更改成功。

規(guī)則10:口令不能以明文的形式在界面上顯示。

規(guī)則11:口令不能以明文的形式保存,須加密保存;口令與用戶名關(guān)聯(lián)加密,即加密前的數(shù)據(jù)不僅包括口令,還包括用戶名。

規(guī)則12:只有當(dāng)用戶通過(guò)認(rèn)證之后才可以修改口令。

規(guī)則13:修改口令的帳號(hào)只能從服務(wù)器端的會(huì)話信息中獲取,而不能由客戶端指定。

6.6  頁(yè)面輸入項(xiàng)校驗(yàn)建議

對(duì)輸入?yún)?shù)進(jìn)行處理,建議過(guò)濾出所有以下字符:

[1] |(豎線符號(hào))
[2] & (& 符號(hào))
[3];(分號(hào))
[4] $(美元符號(hào))
[5] %(百分比符號(hào))
[6] @(at 符號(hào))
[7] '(單引號(hào))
[8] "(引號(hào))
[9] '(反斜杠轉(zhuǎn)義單引號(hào))
[10] "(反斜杠轉(zhuǎn)義引號(hào))
[11] <>(尖括號(hào))
[12] ()(括號(hào))
[13] +(加號(hào))
[14] CR(回車符,ASCII 0x0d)
[15] LF(換行,ASCII 0x0a)
[16] ,(逗號(hào))
[17] (反斜杠)