天天看點

Tomcat 被爆漏洞,部署在阿裡雲上的應用該怎麼辦?

最近很多同學都聽說了 Tomcat 的關于 AJP 的漏洞,國家資訊安全漏洞共享平台(CNVD) 也對此進行披露,同時該漏洞綜合評級被評為“高危”,這篇文章主要用來描述,如果确認您部署在阿裡雲上的應用受到了影響,該如何處理。 漏洞編号:CNVD-2020-10487/CVE-2020-1938

第一種方式:直接更新 Tomcat 版本

根據官方描述,最好的方式是将 Tomcat 更新到最新版本:Tomcat7 升至 7.0.100、Tomcat8 升至 8.5.51、Tomcat 9 升至 9.0.31。

這種方式最為徹底,但是缺點也很顯而易見:由于這種做法屬于更換底層的基礎設施,如果您是生産應用,建議将風險控制在可控範圍之内再進行。

第二種方式:修改配置

由于此漏洞隻會對于 AJP 協定的 Connector 有影響,預設情況下 AJP 協定是打開的,但是 AJP 必須結合 httpd 一起工作才能起作用,如果您的應用中沒有使用到 httpd,是可以關閉的,關閉的方式為:

  1. 打開配置檔案 conf/server.xml:

    vim ${CATALINA_HOME}/conf/server.xml

  2. 找到

    <Connector port="8009" protocol="AJP/1.3"

    後,登出配置檔案中的相關配置,儲存退出。
  3. 重新開機應用

如果您的應用中确實使用到了 AJP 協定的話,建議您在 Connector 的配置中,加入 secret 和 secretRequired 配置項,與此同時,需要配合修改前面的 httpd 的配置;具體操作方式可搜尋 httpd 和 Tomcat AJP 的配置進行修改。

這種方式,不需要更新 Tomcat 版本,但需要對我們的 Tomcat 和 httpd (如果使用到了)的配置都進行修改;同時,如果叢集很大的話,修改系統級别的配置會帶來不确定的風險,建議結合一些運維工具批量進行。

第三種方式,關閉不必要的端口暴露

如果不幸端口确實打開了,而又不便去修改機器上的配置時;我們可以通過使用阿裡雲安全組政策,添加禁用ECS 上 對 8009(預設) 的端口通路的規則,或隻對部分授信的 IP 放行來達到目的。

這種方式可以快速的封堵此漏洞,且不需要動機器上的配置,隻需要對 ECS 有權限的運維同學就能完成操作,避免了不必要的業務回歸。但是 ECS 安全組規則具有很高的維護成本,久而久之如果管理不好的話,可能會帶來額外的排查診斷的的成本。

部署在阿裡雲 EDAS/SAE 上的應用如何操作

漏洞出來之後,EDAS/SAE 團隊第一時間審查了我們所提供的 Tomcat 版本,包括 EDAS/SAE Container 和社群版本的 Apache Tomcat,針對 ECS 叢集和 Kubernetes 叢集我們得出的結論和建議是:

  1. 如果您使用的是 FatJar 的方式部署的話,将不會收到任何影響。
  2. 如果您使用的是 War 包部署的話,請參見一下表格:
應用類型 ECS 叢集 Kubernetes 叢集沒有綁定8009端口暴露 Kubernetes 叢集已有綁定8009端口暴露
EDAS/SAE Container(HSF) 應用 不受影響
Spring Cloud 應用 需重新部署應用
Dubbo 應用
鏡像部署 N/A 在鏡像中按第一或第二種方式修複後,重做鏡像部署應用