《Apache Tomcat 7.x安全加固指南》要點(diǎn):
本文介紹了Apache Tomcat 7.x安全加固指南,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
版本:1.00
日期:2014-1-11
分類(lèi):公開(kāi)
作者:Matthias Luft、Florian Grunow、Hendrik Schmidt
由于官方尚未發(fā)布Tomcat 7的強(qiáng)化指南,ERNW便總結(jié)了相關(guān)的設(shè)置,并制作出本文中列出的清單.盡管有大量的設(shè)置可以被應(yīng)用,但本文旨在提供一些加固辦法的基礎(chǔ).可能對(duì)操作系統(tǒng)功能造成嚴(yán)重影響的并且需要進(jìn)行進(jìn)一步大量測(cè)試的設(shè)置并未列在該清單中,或者被標(biāo)記為可選.
我們用“強(qiáng)制”或“可選”標(biāo)記了此清單中的每個(gè)保舉設(shè)置,用以清楚的表達(dá)從我們的角度來(lái)看哪個(gè)設(shè)置是必須的(強(qiáng)制)或者是應(yīng)該的(可選).“可選”也意味著我們保舉你應(yīng)用此設(shè)置,但這可能會(huì)影響系統(tǒng)的必需功能.
2.1 補(bǔ)丁與漏洞管理
強(qiáng)制:
必須及時(shí)安裝與平安相關(guān)的Tomcat更新:
? 必需在10天內(nèi)安裝高危或重要優(yōu)先級(jí)的更新和補(bǔ)丁.
? 必需在發(fā)布后30天內(nèi)安裝中等優(yōu)先級(jí)的更新和補(bǔ)丁.
? 必需在發(fā)布后90天內(nèi)安裝低優(yōu)先級(jí)更新.
有關(guān)補(bǔ)丁的可用性和嚴(yán)重性的信息,請(qǐng)參見(jiàn)http://tomcat.apache.org/lists.html#tomcat-announce.
更新可能會(huì)影響功效.關(guān)于核心/業(yè)務(wù)方面的Tomcat的更新可能帶來(lái)的副作用,請(qǐng)查看http://tomcat.apache.org/lists.html#tomcat-announce.
2.2 Tomcat服務(wù)的最小權(quán)限
強(qiáng)制:
在系統(tǒng)上以低權(quán)限運(yùn)行Tomcat應(yīng)用程序.創(chuàng)建一個(gè)專(zhuān)門(mén)的 Tomcat服務(wù)用戶(hù),該用戶(hù)只能擁有一組最小權(quán)限(例如不允許遠(yuǎn)程登錄).必需檢查以最小特權(quán)用戶(hù)身份使用操作系統(tǒng)資源庫(kù)安裝程序的行為,以確保Tomcat不以root /管理員身份運(yùn)行.必需在配置啟動(dòng)機(jī)制的操作系統(tǒng)層級(jí)上確保這一點(diǎn)(例如Microsoft Windows上的Windows服務(wù)或Unix上的rc腳本):
圖一:Windows服務(wù)配置
關(guān)于平安的服務(wù)配置,請(qǐng)參考ERNW Windows加固指南
圖二:FreeBSD rc劇本
具體配置與Unix系統(tǒng)和Tomcat版本有關(guān).例如FreeBSD上的Tomcat 7已經(jīng)不支持配置rc.conf中的用戶(hù)帳戶(hù),因此用戶(hù)名被硬編碼在啟動(dòng)腳本中—這是不保舉的.在FreeBSD上,web和應(yīng)用服務(wù)器應(yīng)該是以www用戶(hù)身份運(yùn)行,可參考http://www.freebsd.org/doc/en/books/porters-handbook/using-php.html#WEB-APPS.
以低權(quán)限用戶(hù)身份運(yùn)行Tomcat可能會(huì)影響Tomcat的某些功能.例如,特權(quán)端口不可被設(shè)置為監(jiān)聽(tīng)端口.為了辦理該問(wèn)題,可以在系統(tǒng)上使用本地HTTP代理(例如使用Apache的mod_jk模塊)或者定義包轉(zhuǎn)發(fā)規(guī)則,使得進(jìn)入流量被轉(zhuǎn)發(fā)到Tomcat監(jiān)聽(tīng)的非特權(quán)端口.
2.3 限制拜訪Tomcat文件夾
可選:
Tomcat文件夾只能由tomcat用戶(hù)本身拜訪,尤其是對(duì)于目錄${tomcat_home}/conf /和${tomcat_home}/webapps.
當(dāng)不必要通過(guò)應(yīng)用程序服務(wù)器自動(dòng)部署時(shí),標(biāo)準(zhǔn)配置就是將所有Tomcat文件的所有者設(shè)置為root,并且所屬群組設(shè)置為T(mén)omcat.然后用chmod 740僅允許root用戶(hù)編輯文件并允許Tomcat用戶(hù)讀取文件.例外是,臨時(shí)和工作目錄的所有者應(yīng)該是Tomcat用戶(hù)而不是root用戶(hù).
該設(shè)置會(huì)影響自動(dòng)部署.(參見(jiàn)第8.5小節(jié))
可選
Tomcat的主要管理界面被稱(chēng)為Manager應(yīng)用程序.盡管保護(hù)該應(yīng)用程序?qū)τ赥omcat服務(wù)器的平安至關(guān)重要,但是該應(yīng)用程序在許多環(huán)境中被發(fā)現(xiàn)是非常的暴露的(例如,沒(méi)有部署網(wǎng)絡(luò)級(jí)限制以及使用弱/默認(rèn)登錄信息).如果可能的話(huà),管理性質(zhì)的任務(wù)應(yīng)該是在操作系統(tǒng)級(jí)別執(zhí)行(例如使用RDP或SSH),并且避免使用Manager應(yīng)用程序(另見(jiàn)第8.3小節(jié)).如果無(wú)法做到,下面小節(jié)描述的設(shè)置(或許還要考慮跳板機(jī))應(yīng)該與平安認(rèn)證機(jī)制(另請(qǐng)參見(jiàn)第4小節(jié))和加密傳輸(參見(jiàn)第6.3小節(jié))結(jié)合使用.
3.1 網(wǎng)絡(luò)層限制
如果要使用Manager應(yīng)用程序,應(yīng)該只允許從授權(quán)的IP地址拜訪其管理界面.
這可以通過(guò)在CATALINA_HOME/webapps/manager/META-INF/context.xml文件中的做以下設(shè)置來(lái)實(shí)現(xiàn).以下設(shè)置只允許從本地主機(jī)和特定IP地址或IP地址段拜訪管理界面:
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|172\.16\.16\.\d{1,3}
"/>
也可使用主機(jī)名:
className="org.apache.catalina.valves.RemoteHostValve"
allow=".*\.admins\.domain\.com" />
allow和deny都支持正則表達(dá)式(使用java.util.regex)
3.2 最小原則授權(quán)
強(qiáng)制:
根據(jù)給定的任務(wù),只能賦予相應(yīng)角色的權(quán)限給用戶(hù).角色如下,而且要記得只賦予最小權(quán)限:
?
manager-gui:可以拜訪web界面
?
manager-status:只可以拜訪“Server Status”頁(yè)面
?
manager-script: 可以劇本文本界面和“Server Status”頁(yè)面
?
manager-jmx:可以拜訪JMX代理界面和“Server
Status”頁(yè)面
以下設(shè)置一般適用于基于Tomcat的身份驗(yàn)證.但是在大多數(shù)環(huán)境中,主要是針對(duì)Manager應(yīng)用法式,因此以它來(lái)做例子.如果部署的應(yīng)用法式使用基于Tomcat的認(rèn)證,那么該應(yīng)用法式也適用這些設(shè)置.
4.1 平安認(rèn)證
可選:
如果要使用Manager應(yīng)用法式,則還應(yīng)該附加額外的身份認(rèn)證機(jī)制.認(rèn)證機(jī)制優(yōu)先級(jí)如下:
1 LDAPS或客戶(hù)端證書(shū)
2 當(dāng)?shù)?基于消息摘要)
另外,認(rèn)證過(guò)程和與Manager應(yīng)用程序的通信必須使用SSL來(lái)掩護(hù)(見(jiàn)下文).
強(qiáng)制:
對(duì)于當(dāng)?shù)睾突谧C書(shū)的身份驗(yàn)證,必須部署賬戶(hù)鎖定機(jī)制(對(duì)于集中式認(rèn)證,目錄服務(wù)也要做相應(yīng)配置).為防止暴力破解,使用的認(rèn)證域必須放在做了如下配置的鎖定域中:
編纂CATALINA_HOME/conf/server.xml文件,并添加配置如下的鎖定域:
className="org.apache.catalina.realm.LockOutRealm"
failureCount="5"
lockOutTime="30">
AUTHENTICATION REALM -->
4.2 禁用域
強(qiáng)制:
有幾個(gè)域不適合用作生產(chǎn)用途,這些域必需被禁用.
打開(kāi)文件CATALINA_HOME/conf/server.xml,搜索MemoryRealm并禁用之.JDBCRealm也必需被禁用,改用DataSourceRealm.使用大規(guī)模安裝時(shí),請(qǐng)勿使用UserDatabaseRealm并也將其禁用.
5.1 會(huì)話(huà)超時(shí)
強(qiáng)制 :
所有的web應(yīng)用程序的會(huì)話(huà)超時(shí)必需設(shè)置為20分鐘.
可通過(guò)編纂CATALINA_HOME/conf/web.xml文件并做以下配置來(lái)實(shí)現(xiàn):
20
5.2 HttpOnly標(biāo)志
強(qiáng)制:
Tomcat 7對(duì)會(huì)話(huà)cookie自動(dòng)啟用HttpOnly
cookie標(biāo)志,查看配置以確保該選項(xiàng)為被禁用.
要啟用HttpOnly,必需在CATALINA_BASE/conf/context.xml中做如下設(shè)置,使之全局應(yīng)用于所有應(yīng)用程序:
useHttpOnly='true' .../>
在需要通過(guò)JavaScript拜訪會(huì)話(huà)cookie的情況下,使用HttpOnly可能會(huì)影響應(yīng)用程序功能.如果應(yīng)用程序需要通過(guò)JavaScript拜訪HttpOnly cookie,可以在METAINF/context.xml中一個(gè)單獨(dú)的Context中定義一個(gè)異常.
5.3 CSRF防護(hù)
強(qiáng)制:
為保護(hù)應(yīng)用程序,必須啟用Tomcat的跨站哀求偽造防護(hù).Tomcat 7提供了基本的CSRF防護(hù).可以在CATALINA_BASE/conf/web.xml中配置一個(gè)全局過(guò)濾器.該過(guò)濾器可以被每個(gè)使用WEB-INF/web.xml文件的應(yīng)用程序覆蓋.
必需做以下設(shè)置:
CSRFPreventionFilter
/*
有關(guān)詳細(xì)闡明和其他選項(xiàng),請(qǐng)參閱Tomcat手冊(cè):http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CSRF_Prevention_Filter.
使用CSRF防護(hù)可能會(huì)影響程序功能,必須要牢記這一點(diǎn),尤其是在應(yīng)用程序大量使用異步哀求的情況下.
6.1 限制監(jiān)聽(tīng)網(wǎng)絡(luò)接口
強(qiáng)制:
不要讓連接器(connector)監(jiān)聽(tīng)服務(wù)器上所有可用的網(wǎng)絡(luò)接口和IP地址,而要讓連接器監(jiān)聽(tīng)指定的網(wǎng)絡(luò)接口和IP地址.
編纂CATALINA_HOME/conf/server.xml,查看每個(gè)Connector并指定正確的IP地址:
address="LISTEN_IP_ADDRESS"…
這樣可以防止應(yīng)用程序不測(cè)地運(yùn)行在某個(gè)開(kāi)放的網(wǎng)絡(luò)接口上.
6.2 限制允許的網(wǎng)絡(luò)連接
強(qiáng)制:
只開(kāi)放必需要的Tomcat端口.默認(rèn)TCP端口是8080和8443.確保在Tomcat和可安裝在系統(tǒng)上的現(xiàn)有的包過(guò)濾器中正確配置這些端口.
打開(kāi)CATALINA_HOME/conf/server.xml文件,查看每個(gè)Connector的端口配置.移除不必要的端和Connector.
6.3 加密網(wǎng)絡(luò)連接
強(qiáng)制:
為了保護(hù)敏感的應(yīng)用程序(比如Manager應(yīng)用程序),必須使用并配置SSL(對(duì)于處理敏感數(shù)據(jù)或提供登錄功能的應(yīng)用程序也是必需的).第一步是創(chuàng)建可信的證書(shū),以避免證書(shū)警告,并向終端用戶(hù)提供一種驗(yàn)證可信連接的辦法.
第二步是創(chuàng)建一個(gè)證書(shū)密鑰庫(kù)(keystore),其中包含CA、服務(wù)器證書(shū)和相應(yīng)的私鑰.密鑰庫(kù)的密碼應(yīng)按照之前的“保障密碼平安”小節(jié)中建議來(lái)創(chuàng)建.
要啟用SSL支持,可以使用以下配置(實(shí)際配置取決于給定的平臺(tái)和要求),并且必需放在CATALINA_HOME/conf/server.xml中:
protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" scheme="https" secure="true"
SSLEnabled="true" sslProtocol="TLS"
keystoreFile="path to keystore file" keystorePass="keystore
password"/>
通過(guò)添加以下暗碼套件(cipher suite)至SSL Connector來(lái)指定可用的SSL加密方式:
ciphers="SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" …
為了使托管在Tomcat上的所有web應(yīng)用程序強(qiáng)制使用HTTPS,必須在每個(gè)CATALINA_HOME/webapps/$WEBAPP/WEB-INF/web.xml文件里每個(gè)security-constraint標(biāo)簽關(guān)閉(標(biāo)簽)之前包括以下內(nèi)容:
CONFIDENTIAL
7.1 Java SecurityManager
可選:
可用Java SecurityManager限制單個(gè)應(yīng)用程序的功能.$CATALINA_HOME/conf/catalina.policy文件包含了Java SecurityManager使用的平安策略的配置.一旦配置了catalina.policy文件,便可以使用SecurityManager和--security選項(xiàng)啟動(dòng)Tomcat.想了解全面的配置介紹,請(qǐng)參閱官方的Tomcat SecurityManager教程:http://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html
因?yàn)榛旧纤械臋?quán)限類(lèi)型(比如拜訪單個(gè)文件和目錄或Java包)都應(yīng)該根據(jù)每個(gè)應(yīng)用程序進(jìn)行單獨(dú)配置,所以這會(huì)大大增加操作成本.另外,限制過(guò)于嚴(yán)格的策略文件會(huì)影響應(yīng)用程序的功能.
7.2 拜訪Java包
可選:
Tomcat可限制對(duì)某些Java包的訪問(wèn).如果檢測(cè)到受限制的包被訪問(wèn),將拋出平安異常.
對(duì)Java包做拜訪限制,打開(kāi)$CATALINA_BASE/conf/catalina.properties文件并添加不允許拜訪的包至package.access列表.
分析Java import可以列出哪些應(yīng)用程序必要哪些包.在Unix系統(tǒng)上,可以使用以下例子來(lái)實(shí)現(xiàn):
grep –R import ${tomcat_home}/webapps/WEBAPP
8.1 確保默認(rèn)設(shè)置的平安
強(qiáng)制:
檢查幾個(gè)默認(rèn)值以防出現(xiàn)潛在的漏洞.參考第9小節(jié)列出的不能變動(dòng)的默認(rèn)配置.
8.2 確保關(guān)閉(shutdown)端口的平安
強(qiáng)制 :
如果必須要開(kāi)啟使用本地Tomcat系統(tǒng)上的網(wǎng)絡(luò)端口關(guān)閉Tomcat的功能,必須使用難以被猜解出的強(qiáng)暗碼.
編輯CATALINA_HOME/conf/server.xml文件并設(shè)置關(guān)閉暗碼:
shutdown="NonDeterministicWordSoShutdownPWisNotEasyToGuess">
如果不需要該功能,必需要將其停用,設(shè)置如下:
port="-1" shutdown="SHUTDOWN">
當(dāng)?shù)毓芾砟_本可將服務(wù)器關(guān)閉,即使在關(guān)閉端口被禁用的情況下.
8.3 移除默認(rèn)應(yīng)用法式
強(qiáng)制 :
Tomcat可能自帶一些默認(rèn)的web應(yīng)用程序.如果不是必定需要,必須將它們移除.
移除${tomcat_home}/webapps中所有的默認(rèn)的web應(yīng)用程序.必需要移除的應(yīng)用程序有:ROOT、Documentation、Examples、Host Manager和Manager.
Manager應(yīng)用程序提供管理性質(zhì)的功能,比如部署應(yīng)用程序和檢索日志信息.這些功能應(yīng)該使用本地服務(wù)器上的命令行來(lái)運(yùn)行.但是,如果這個(gè)應(yīng)用程序是絕對(duì)需要的,那它必須用SSL掩護(hù)起來(lái).
8.4 自定義差錯(cuò)頁(yè)面
可選 :
由于默認(rèn)的錯(cuò)誤頁(yè)面會(huì)泄露一些內(nèi)部信息(比如版本號(hào)和堆棧軌跡),所以應(yīng)該用包含一般錯(cuò)誤信息(比如處理您的哀求時(shí)出錯(cuò)了)的自定義錯(cuò)誤頁(yè)面取而代之.
每個(gè)web應(yīng)用程序的web.xml文件里應(yīng)包括以下配置,該文件位于CATALINA_HOME/webapps/$WEB_APP/WEB-INF:
500
/errorpages/error.html
java.lang.Throwable
/errorpages/error.html
此外,如果Manager應(yīng)用程序沒(méi)被移除,必需手動(dòng)將位于CATALINA_HOME/webapps/manager/WEB-INF/jsp/的錯(cuò)誤頁(yè)面里的“Tomcat 7“版本信息移除.
8.5 禁用自動(dòng)部署
強(qiáng)制:
Tomcat允許在Tomcat運(yùn)行時(shí)自動(dòng)部署應(yīng)用程序.這個(gè)功能必需被禁用,因?yàn)樗赡茉试S部署惡意或未經(jīng)測(cè)試的應(yīng)用程序.
自動(dòng)部署由autoDeploy和deployOnStartup屬性控制.如果兩者是false,只有在server.xml中定義的Context將被部署,并且任何更改都必要重啟Tomcat.要禁用自動(dòng)部署,請(qǐng)?jiān)?CATALINA_HOME/conf/server.xml文件中做以下配置:
autoDeploy=”false”
deployOnStartup=”false”
在托管環(huán)境中Web應(yīng)用法式可能不受信任,也可以設(shè)置deployXML屬性為false來(lái)忽略context.xml,以防給該web應(yīng)用法式提高權(quán)限.
以下列出了不能更改的默認(rèn)設(shè)置,默認(rèn)情況下這些設(shè)置被認(rèn)為是平安的:
server.xml中每個(gè)Connector的allowTrace的值要么為空或要么被設(shè)為false.
在所有的context.xml文件中,將privileged屬性設(shè)置為false,除非像Manager應(yīng)用程序那樣必要權(quán)限:
?
確保crossContext值為空或被設(shè)為false.crossContext值為true可能會(huì)導(dǎo)致允許惡意應(yīng)用程序向受限應(yīng)用程序發(fā)送哀求.
?
確保allowLinking值為空或被設(shè)為false.allowLinking值為true可能會(huì)導(dǎo)致目錄遍歷和源代碼泄露漏洞的發(fā)生.
?
制止對(duì)默認(rèn)的servlet的寫(xiě)入.
? 在web.xml文件中設(shè)置DefaultServlet的read-only為true.如果該值是false,將會(huì)允許客戶(hù)端刪除或修改服務(wù)器上的靜態(tài)資源并上傳新的資源.一般在沒(méi)有認(rèn)證的情況下不該該修改該值.
禁用顯示列表
? 設(shè)置DefaultServlet的listings為false.這不僅僅是因?yàn)樵试S顯示目錄列表被認(rèn)為是不平安的,而且還因?yàn)樯删哂袛?shù)千個(gè)文件的目錄列表會(huì)消耗大量的CPU資源,相當(dāng)于被DDoS攻擊.
當(dāng)RECYCLE_FACADES選項(xiàng)設(shè)置為true時(shí),Tomcat會(huì)回收哀求間會(huì)話(huà)外觀(session facade).這將導(dǎo)致哀求間的信息泄漏.默認(rèn)情況下,此參數(shù)未被設(shè)置.確保使用的啟動(dòng)腳本不包含以下內(nèi)容:
? -Dorg.apache.catalina.connector.RECYCLE_FACADES = false
允許在Tomcat上指定不同的路徑分隔符,可能會(huì)允許攻擊者拜訪應(yīng)用程序,該行為本該被代理程序(比如mod_proxy)阻止.默認(rèn)情況下,此參數(shù)未被設(shè)置.
? 確保正在使用的啟動(dòng)腳本不包括以下內(nèi)容:
? -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH = FALSE
? -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = FALSE
允許指定自定義header狀態(tài)消息,使攻擊者也能夠插入header.這可能會(huì)導(dǎo)致XSS漏洞的發(fā)生.默認(rèn)情況下,此參數(shù)未被設(shè)置.
? 確保使用的啟動(dòng)腳本不包括以下內(nèi)容:
? -Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER = false
? -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH
= FALSE
允許自定義header狀態(tài)消息,使攻擊者也能夠插header.這可能會(huì)導(dǎo)致XSS漏洞的發(fā)生.默認(rèn)情況下,此參數(shù)未被設(shè)置.
? 確保使用的啟動(dòng)腳本不包括以下內(nèi)容:
?
-Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER = false
本文由看雪翻譯小組 SpearMint 編譯,起源payatu@Rashid Feroze 轉(zhuǎn)載請(qǐng)注明來(lái)自看雪社區(qū)
歡迎參與《Apache Tomcat 7.x安全加固指南》討論,分享您的想法,維易PHP學(xué)院為您提供專(zhuān)業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/13478.html