
作者 | 苗超
責(zé)編 | Elle
安全是系統(tǒng)架構(gòu)中最重要的關(guān)注點(diǎn)之一,通常情況下,所說(shuō)的安全涵蓋網(wǎng)絡(luò)安全、數(shù)據(jù)安全、操作系統(tǒng)安全、服務(wù)器安全以及應(yīng)用系統(tǒng)安全等諸多方面。Tomcat 是一個(gè)免費(fèi)的開放源代碼 的Web應(yīng)用服務(wù)器,技術(shù)先進(jìn)、性能穩(wěn)定。由于它優(yōu)秀的穩(wěn)定性以及豐富的文檔資料,廣泛的使用人群,從而在開源領(lǐng)域受到廣泛的青睞,因此,Tomcat安全也越來(lái)越受到重視。
Tomcat作為一款應(yīng)用服務(wù)器,默認(rèn)情況下可以滿足多數(shù)場(chǎng)景的安全需求,但是在安全要求較高的情況下,仍需要從多個(gè)方面進(jìn)行配置,已防止Tomcat管理后臺(tái)被攻擊等風(fēng)險(xiǎn)。Tomcat安全主要從以下2個(gè)方面介紹。
配置安全
默認(rèn)情況下其存在一定的安全隱患,可被惡意攻擊,所以在生產(chǎn)環(huán)境中需要對(duì)Tomcat進(jìn)行安全配置,下面將介紹影響Tomcat配置安全的4個(gè)選項(xiàng)。
1. 移除不使用的內(nèi)置應(yīng)用
Tomcat環(huán)境部署完畢后,要?jiǎng)h除根目錄下的一些默認(rèn)文件夾:CATALINA_HOME/webApps文件夾下的內(nèi)置應(yīng)用,這些應(yīng)用可能會(huì)導(dǎo)致安全風(fēng)險(xiǎn),因此移除不使用的應(yīng)用。對(duì)于docs(Tomcat本地說(shuō)明文檔)、examples(Tomcat相關(guān)的demo示例)、ROOT(Tomcat默認(rèn)頁(yè)),可以將其直接移除。host-manager和manager用于管理及監(jiān)控tomcat容器,如果已經(jīng)使用第三方工具來(lái)管理tomcat,不需要manager管理登錄,這兩個(gè)應(yīng)用也可以直接移除,如圖2所示。

圖 2.Tomcat內(nèi)置應(yīng)用
2. 降權(quán)啟動(dòng)tomcat
tomcat 啟動(dòng)用戶權(quán)限必須為非root,避免一旦tomcat服務(wù)被入侵,獲取root權(quán)限,因?yàn)樵趌inux操作系統(tǒng)中,root用戶的權(quán)限是最高的,可以執(zhí)行普通用戶無(wú)法執(zhí)行的操作。應(yīng)單獨(dú)為Tomcat服務(wù)器創(chuàng)建一個(gè)用戶,并且授予運(yùn)行應(yīng)用服務(wù)器所需的最小系統(tǒng)權(quán)限。
3. 刪除不使用的組件
Tomcat是開源軟件,那么server.xml中的默認(rèn)配置對(duì)所有人都是可見的,它的運(yùn)行機(jī)制也是眾所周知的,因此使用默認(rèn)配置也會(huì)增加服務(wù)器受攻擊的風(fēng)險(xiǎn)。所以在部署生產(chǎn)環(huán)境前,移除不必要的組件,默認(rèn)情況下,server.xml配置了一個(gè)HTTP連接器(8080)和一個(gè)AJP連接器(8009),實(shí)際上絕大多數(shù)情況下,只需要一個(gè)連接器。如果Tomcat不存在前置的web服務(wù)器,此時(shí)可以保留HTTP而刪除AJP連接器。
4. 禁用自動(dòng)部署
在默認(rèn)情況下,Tomcat是自動(dòng)部署的,只要是在webapps目錄下的war包均會(huì)在Tomcat啟動(dòng)時(shí)自動(dòng)部署,包括被植入的惡意web應(yīng)用。要避免惡意的web應(yīng)用自動(dòng)啟動(dòng),可以考慮從兩個(gè)方面解決:一是修改web應(yīng)用部署目錄為其他路徑,這樣攻擊者很難找到正確的部署目錄并部署web應(yīng)用;二是禁用自動(dòng)部署,將server.xml配置文件中Host元素的autoDeploy和deployOnStartup屬性設(shè)置為false,此時(shí)只有通過(guò)context標(biāo)簽部署web應(yīng)用,配置方法如圖3所示。

圖 3.禁用自動(dòng)部署
管理平臺(tái)安全
1. 管理平臺(tái)是什么?
Tomcat提供了基于Web方式的管理平臺(tái),管理平臺(tái)即是內(nèi)置的兩個(gè)獨(dú)立的web應(yīng)用,位于webapps目錄下的host-manager和manager。host-manager管理控制臺(tái)可以動(dòng)態(tài)地添加一個(gè)虛擬主機(jī)。此外還可以啟動(dòng)、停止、刪除虛擬主機(jī),在實(shí)際生產(chǎn)中很少使用host-manager管理平臺(tái)。manager管理平臺(tái)可以很方便的管理運(yùn)行在tomcat服務(wù)器上的Web應(yīng)用,如發(fā)布、啟動(dòng)、停止或刪除Web應(yīng)用,還可以實(shí)時(shí)管理HTTP會(huì)話以及查看服務(wù)器狀態(tài)信息等。
2. 管理平臺(tái)如何使用
在tomcat啟動(dòng)成功后,通過(guò)http://ip:port/manager/html訪問(wèn)manager 管理平臺(tái) ,因?yàn)槟J(rèn)添加了訪問(wèn)權(quán)限控制,第一次訪問(wèn)需要在 conf/ tomcat-users.xml 文件 中為當(dāng)前用戶添加角色,manager管理平臺(tái)共有4種角色,分別為:
• manager-gui:允許訪問(wèn)html頁(yè)面接口(即URL路徑為/manager/html/*);
• manager-:允許訪問(wèn)純文本接口(即URL路徑為/manager/text/*);
• manager-jmx:允許訪問(wèn)JMX代理接口(即URL路徑為/manager/jmxproxy/*);
• manager-status:允許訪問(wèn)Tomcat只讀狀態(tài)頁(yè)面(即URL路徑為/manager/status/*)。
其中manager-gui、manager-、manager-jmx三個(gè)角色均具備manager-status角色的權(quán)限,即這三種角色權(quán)限無(wú)需再額外添加manager-status權(quán)限。實(shí)際使用中只需配置manager-gui角色通過(guò)html頁(yè)面的形式訪問(wèn)管理平臺(tái)。
manager管理平臺(tái)有4種角色,host-manager管理平臺(tái)有2種角色,配置方式如圖4所示。

圖 4. 管理平臺(tái)角色配置
Web版管理控制臺(tái)可以發(fā)布、停止、重新加載指定的web應(yīng)用,如圖5所示。

圖 5. Web版管理控制臺(tái)
通過(guò)http://ip:port/manager/status ,查看Server-status服務(wù)器狀態(tài)頁(yè)面,如圖6所示。

圖 6. 服務(wù)器狀態(tài)頁(yè)面
Server-status包含以下幾部分信息:
|
服務(wù)器基本信息 |
服務(wù)器版本、JVM版本、操作系統(tǒng)、ip地址 |
|
系統(tǒng)信息 |
內(nèi)存使用情況 |
|
JVM信息 |
JVM分配及使用情況 |
|
連接器信息 |
連接器請(qǐng)求處理線程的使用情況 |
host-manager管理控制臺(tái)可以動(dòng)態(tài)地添加一個(gè)虛擬主機(jī)。此外還可以啟動(dòng)、停止、刪除虛擬主機(jī),如圖7所示。
通過(guò)http:// ip:port /host-manager/html 訪問(wèn)host-manager管理平臺(tái),因?yàn)槟J(rèn)添加了訪問(wèn)權(quán)限控制,第一次訪問(wèn)需要在conf/tomcat-users.xml文件中為當(dāng)前用戶添加角色,host-manager管理平臺(tái)共有2種角色,分別為admin-gui和admin-,配置方式如圖3所示。
• admin-gui:允許訪問(wèn)html頁(yè)面接口(即URL路徑為/manager/html/*)。
• admin-:允許訪問(wèn)純文本接口(即URL路徑為/manager/text/*)。

圖 7. host-manager管理平臺(tái)頁(yè)面
3. 管理平臺(tái)安全加固
管理平臺(tái)有發(fā)布管理應(yīng)用的權(quán)限,默認(rèn)情況下host-manager和manager應(yīng)用存在安全風(fēng)險(xiǎn),可能會(huì)產(chǎn)生嚴(yán)重的危害,所以針對(duì)Tomcat管理平臺(tái)需通過(guò)以下幾個(gè)方面進(jìn)行安全加固。
• 如使用內(nèi)置host-manager和manager管理應(yīng)用,需要增加IP訪問(wèn)限制,在應(yīng)
用下META-INF/context.xml文件中配置。修改allow屬性的正則表達(dá)式。8.5版本前需要手動(dòng)開啟,而8.5版本之后,則默認(rèn)開啟只有本機(jī)可以訪問(wèn)。比如只允許ip地址10.232.150.78和10.232.150.80訪問(wèn)manager管理應(yīng)用,將allow屬性值修改為10.232.150.78|10.232.150.80即可,如圖8所示。

圖8. IP訪問(wèn)限制配置方式
• 如需訪問(wèn)host-manager和manager應(yīng)用需要分配相關(guān)的角色權(quán)限。我們還應(yīng)
設(shè)置足夠健壯的密碼,建議加強(qiáng)口令強(qiáng)度,設(shè)置口令復(fù)雜度為8位以上,大小寫字母、數(shù)字、特殊符號(hào)的組合,并定期更換密碼,避免使用弱口令。
• 管理平臺(tái)添加用戶鎖定功能,在server.xml中配置了org.Apache.catalina.real
m.LockOutRealm,LockOutRealm 是一個(gè)Tomcat的Realm實(shí)現(xiàn),它擴(kuò)展了CombinedRealm,假如在某一段時(shí)間內(nèi)出現(xiàn)很多驗(yàn)證失敗,則它能夠提供鎖定用戶的功能,已避免攻擊者進(jìn)行密碼暴力破解。LockOutRealm 配置方式, server.xml文件Engine元素內(nèi)添加,如圖9所示

圖9. LockOutRealm 配置
|
failureCount |
用戶身份驗(yàn)證驗(yàn)證失敗的連續(xù)次數(shù)。默認(rèn)為5。 |
|
lockOutTime |
身份驗(yàn)證失敗后,用戶被鎖定的時(shí)間(以秒為單位)。默認(rèn)為300(5分鐘)。 |
LockOutRealm實(shí)現(xiàn)支持以下附加屬性:
4. 管理平臺(tái)入侵案例
今年我行某系統(tǒng)曾發(fā)現(xiàn)Tomcat管理平臺(tái)暴露互聯(lián)網(wǎng)及弱口令的高危漏洞。由于在互聯(lián)網(wǎng)可直接訪問(wèn)系統(tǒng)Tomcat管理平臺(tái),可使用弱用戶名密碼admin/xxxxx成功登錄。可對(duì)系統(tǒng)進(jìn)行管控,同時(shí)具有上傳惡意war包或者直接上傳webshell腳本導(dǎo)致服務(wù)器被入侵等風(fēng)險(xiǎn)。
Tomcat管理平臺(tái)有啟動(dòng)、停止、重新加載、監(jiān)控Web應(yīng)用等權(quán)限,所以管理后臺(tái)的安全問(wèn)題是Tomcat安全的重要部分,如果出現(xiàn)漏洞會(huì)對(duì)業(yè)務(wù)系統(tǒng)造成嚴(yán)重的危害,需要充分引起重視并進(jìn)行安全加固。管理平臺(tái)就是Tomcat服務(wù)器內(nèi)置的兩個(gè)web應(yīng)用,如果使用管理平臺(tái)需添加ip訪問(wèn)限制,Tomcat已提供此功能,需在白名單設(shè)置指定ip地址可以訪問(wèn)管理平臺(tái),另外還需設(shè)置健壯的登錄密碼來(lái)防止暴力破解。
安全措施不可忽視,繼比特幣勒索病毒風(fēng)波之后,petya病毒又席卷眾多國(guó)家計(jì)算機(jī)高防服務(wù)器,造成嚴(yán)重影響。Tomcat服務(wù)器同樣面臨著病毒、黑客、信息泄露等安全威脅。
總之,Tomcat與安全相關(guān)的配置,在實(shí)際開發(fā)過(guò)程中,需要結(jié)合應(yīng)用系統(tǒng)的業(yè)務(wù)場(chǎng)景綜合考慮,而非一味地堆積各種安全配置,否則不僅達(dá)不到預(yù)期效果,反而會(huì)影響系統(tǒng)的訪問(wèn)性能。此外,系統(tǒng)安全是一個(gè)非常復(fù)雜又非常重要的領(lǐng)域,包括網(wǎng)絡(luò)、應(yīng)用、數(shù)據(jù)、操作系統(tǒng)等諸多方面,本文只是介紹了與Tomcat相關(guān)的安全配置。
作者:苗超,中國(guó)農(nóng)業(yè)銀行研發(fā)中心系統(tǒng)支持部工程師






