隨著互聯網技術的飛速發展,業務的開展方式更加靈活,應用系統更加復雜,也因此面臨著更多的安全性挑戰。安全測試是在應用系統投產發布之前,驗證應用系統的安全性并識別潛在安全缺陷的過程,目的是防范安全風險,滿足保密性、完整性、可用性等要求。

日常測試過程中經常遇到開發同事來詢問一些常見的配置型漏洞應該如何去修復,為了幫助開發同事快速識別并解決問題,通過總結項目的安全測試工作經驗,筆者匯總、分析了應用系統的一些常見配置型漏洞并給出相應的修復建議,在這里給大家進行簡單的分享。
一、Cookie缺少HttpOnly屬性
漏洞描述
Cookie中的HttpOnly屬性值規定了Cookie是否可以通過客戶端腳本進行訪問,能起到保護Cookie安全的作用,如果在Cookie中沒有將HttpOnly屬性設置為true,那么攻擊者就可以通過程序(JS腳本、Applet等)竊取用戶Cookie信息,增加攻擊者的跨站腳本攻擊威脅。竊取的Cookie中可能包含標識用戶的敏感信息,如ASP.NET會話標識等,攻擊者借助竊取的Cookie達到偽裝用戶身份或獲取敏感信息的目的,進行跨站腳本攻擊等。

修復建議
向所有會話Cookie中添加"HttpOnly"屬性。
1)JAVA語言示例:
HttpServletResponse response2 = (HttpServletResponse)response;
response2.setHeader( "Set-Cookie", "name=value; HttpOnly");
2)C#語言示例:
HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);
3)VB.NET語言示例:
Dim myCookie As HttpCookie = new HttpCookie("myCookie")
myCookie.HttpOnly = True
Response.AppendCookie(myCookie)
二、加密會話(SSL)Cookie缺少secure屬性
漏洞描述
對于敏感業務,如登錄、轉賬、支付等,需要使用HTTPS來保證傳輸安全性,如果會話Cookie缺少secure屬性,Web應用程序通過SSL向服務器端發送不安全的Cookie,可能會導致發送到服務器的Cookie被非HTTPS頁面獲取,造成用戶Cookie信息的泄露。如果啟用了secure屬性,瀏覽器將僅在HTTPS請求中向服務端發送cookie內容。

修復建議
向所有敏感的Cookie添加"secure"屬性。
1)服務器配置為HTTPS SSL方式;
2)Servlet 3.0環境下對web.xml文件進行如下配置:
<session-config>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>
3)ASP.NET中對Web.config進行如下配置:
<httpCookies requireSSL="true" />
php.ini中進行如下配置:
session.cookie_secure = True
或者
void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure= false [, bool $HttpOnly= false ]]]] )
或者
bool setcookie ( string $name [, string $value? [, int $expire= 0 [, string $path [, string $domain [, bool $secure= false [, bool $HttpOnly= false ]]]]]] )
在weblogic中進行如下配置:
<wls:session-descriptor>
<wls:cookie-secure>true</wls:cookie-secure>
<wls:cookie-http-only>true</wls:cookie-http-only>
</wls:session-descriptor>
三、缺少"Content-Security-Policy"頭
漏洞描述
因Web應用程序編程或配置不安全,導致HTTP響應缺少"Content-Security-Policy"頭,可能產生跨站腳本攻擊等隱患,可能會收集有關Web應用程序的敏感信息,如用戶名、密碼、卡號或敏感文件位置等。

修復建議
將服務器配置為使用安全策略的"Content-Security-Policy"頭。
在web.config 配置文件中添加如下HTTP響應頭:
<system.webServer>
<httpProtocol>?
<customHeaders>
<add name="Content-Security-Policy" value="default-src 'self';"/>
</customHeaders>
</httpProtocol>
</system.webServer>
使用meta標簽:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'"/>
四、缺少"X-Content-Type-Options"頭
漏洞描述
因Web應用程序編程或配置不安全,導致缺少"Content-Security-Policy"頭,可能產生偷渡式下載攻擊等隱患。

修復建議
將服務器配置為使用值為"nosniff"的"X-Content-Type-Options"頭。
在web.config 配置文件中添加如下響應頭:
<add name="X-Content-Type-Options" value="nosniff"/>
使用meta標簽
<meta http-equiv="X-Content-Type-Options" content="nosniff" />
五、缺少"X-XSS-Protection"頭
漏洞描述
因Web應用程序編程或配置不安全,導致缺少"Content-Security-Policy"頭,可能產生跨站腳本攻擊等隱患。

修復建議
將服務器配置為使用值為"1"(已啟用)的"X-XSS-Protection"頭。
1)在web.config 配置文件中添加如下響應頭:
<add name="X-XSS-Protection" value="1;mode=block"/>
使用meta標簽
<meta http-equiv="X-XSS-Protection" content="1;mode=block" />
六、缺少"HTTP Strict-Transport-Security"頭
漏洞描述
因Web應用程序編程或配置不安全,導致缺少 HTTP Strict-Transport-Security 頭。為了用戶體驗,有些網站允許使用HTTPS和HTTP訪問,當用戶使用HTTP訪問時,網站會返回給用戶一個302重定向到HTTPS地址,后續訪問都使用HTTPS協議傳輸,但這個302重定向地址可能會被劫持篡改,被改成一個惡意的或者釣魚HTTPS站點,導致敏感信息如用戶名、密碼、卡號或敏感文件位置泄露等風險。

修復建議
通過向 web 應用程序響應添加"Strict-Transport-Security"響應頭來實施 HTTP 嚴格傳輸安全策略,或實施具有足夠長"max-age"的 HTTP Strict-Transport-Security 策略,強制客戶端(如瀏覽器)使用HTTPS與服務器創建連接。
七、容易出現點擊劫持(Clickjacking)
漏洞描述
頁面未能設置適當的X-Frame-Options或Content-Security-Policy HTTP頭,則攻擊者控制的頁面可能將其加載到iframe中,導致點擊劫持攻擊,此類攻擊屬于一種視覺欺騙手段,主要實現方式有兩種:一是攻擊者將一個透明的iframe覆蓋在一個網頁上,誘使用戶在該頁面上進行操作,那么用戶就在不知情的情況下點擊透明的iframe頁面;二是攻擊者使用一張圖片覆蓋在網頁,遮擋網頁原有位置的含義。

修復建議
應用程序應該返回名稱為X-Frame-Options、值DENY以完全防止成幀的響應頭,或者返回值SAMEORIGIN以允許僅通過與響應本身相同的來源上的頁進行成幀,或者通過ALLOW-FROM origin設置白名單來限制允許加載的頁面地址。
1)修改中間件配置:
a)IIS:
web.config 配置文件中添加如下響應頭:
<add name="X-Frame-Options" value="SAMEORIGIN"/>
b)Apache:
Header always append X-Frame-Options SAMEORIGIN
c)Nginx:
add_header X-Frame-Options SAMEORIGIN;
使用meta標簽
<meta http-equiv="X-Frame-Options" content="SAMEORIGIN" />
八、啟用了不安全的HTTP方法
漏洞描述
Web服務器或應用服務器以不安全的方式進行配置,導致啟用了WebDAV和不安全的HTTP方法,不安全的HTTP方法一般包括:TRACE、PUT、DELETE、COPY等,可能會造成攻擊者在Web服務器上上傳、修改或刪除Web頁面、腳本和文件的隱患。

修復建議
禁用WebDAV。禁止不需要的HTTP方法(建議只使用GET和POST方法)。
1)Apache:
使用Apache的重寫規則來禁用Options方法和Trace方法。在Apache配置文件httpd-conf中【vhosts-conf】添加以下代碼:
#單獨禁用Trace方法:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
單獨禁用Options方法:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(OPTIONS)
RewriteRule .* - [F]
同時禁用Trace方法和Options方法:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
RewriteRule .* - [F]<VirtualHost *:80>
DocumentRoot "D:wwwroot"
ServerName www.abc.com
ServerAlias abc.com
<Directory "D:wwwroot">
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
RewriteRule .* - [F]
</Directory></VirtualHost>
2)Nginx:
在server段里加入下面代碼:
if ($request_method !~* GET|POST) {
return 403;
}
重啟Nginx,就可以屏蔽GET、POST之外的HTTP方法。
3)Tomcat:
修改web.xml配置文件。
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>
4)IIS:
a)禁用WebDAV功能;
b)在web.config的【configuration】下添加如下代碼:
<system.webServer> <security> <requestFiltering>
<verbs allowUnlisted="false">
<add verb="GET" allowed="true"/>
<add verb="POST" allowed="true"/>
</verbs>
</requestFiltering> </security></system.webServer>
九、"X-Powered-By"字段泄露服務器信息
漏洞描述
因Web服務器、應用服務器配置不安全,導致響應報文的響應頭中"X-Powered-By"字段泄露服務器信息,攻擊者可以通過獲取服務器版本信息,收集相關漏洞,進行特定的攻擊。

修復建議
隱藏響應頭中"X-Powered-By"字段。
1)IIS:
修改web.config配置文件。
<configuration>
<location>
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
</configuration>
2)Nginx:
需要加上proxy_hide_header。
location / {
proxy_hide_header X-Powered-By;
}
3)WAS:
修改websphere相應配置,將com.ibm.ws.webcontainer.disabledxPoweredBy配置更改為true。
十、"Server"字段泄露服務器信息
漏洞描述
因Web服務器、應用服務器配置不安全,導致響應報文的響應頭中"Server"字段泄露服務器信息,攻擊者可以通過獲取服務器版本信息,收集相關漏洞,進行特定的攻擊。

修復建議
隱藏HTTP響應頭中"Server"字段,在web.config添加以下配置:
<system.webServer>
<modules>
<add name="CustomHeaderModule" type="StrongNamespace.HttpModules.CustomHeaderModule" />
以上就是筆者在實際項目測試過程中經常遇見的十類常見應用配置型漏洞描述及針對常見中間件的修復建議,希望能夠幫助開發同事快速理解各類漏洞并找到對應的修復方式!