一、事件描述
最新集团扫描出一堆安全漏洞,要求限期整改,现场环境实际用的时候Apache Tomcat/7.0.94,漏洞见下图:
附录:查找安全漏洞地址:
1)https://www.anquanke.com/vul/id/1147247
2)https://tomcat.apache.org/security.html
二、漏洞修复评估
1、漏洞修复补丁官网:
http://tomcat.apache.org/security-7.html
http://tomcat.apache.org/security-8.html
http://tomcat.apache.org/security-9.html
2、漏洞分析结果:
3、中危漏洞评估表:
注:Apache Tomcat httpoxy CVE-2016–5195):
ApacheApacheTomcat是美国阿帕奇(Apache)软件基金会下属的Jakarta项目的一款轻量级Web应用服务器,它主要用于开发和调试JSP程序,适用于中小型系统。ApacheTomcat8.5.4及之前的版本中存在安全漏洞,该漏洞源于程序没有解决RFC3875模式下的命名空间冲突。程序没有正确处理来自HTTP_PROXY环境变量中不可信客户端数据应用程序。远程攻击者借助HTTP请求中特制的Proxyheader消息利用该漏洞实施中间人攻击,指引服务器发送连接到任意主机。httpoxy是一类影响到运行在CGI或者类CGI环境中应用的漏洞,它由一个简单的”命名空间冲突”导致。
- RFC3875(CGI)标准,会把请求中的Header加上HTTP_前缀,注册为环境变量。
- 将请求中的HTTP Proxy的header传递给环境变量HTTP_PROXY
- HTTP_PROXY是一个很常用的环境变量,被用来配置对外代理(outgoing proxy),这将导致远程利用漏洞。如果正在运行PHP或者CGI,你应该限制Proxy的header。HTTP_PROXY可能会被用来制造”中间人攻击”。下面的一些web服务器、web框架和编程语言受到影响:
Golang (CVE-2016-5386)
PHP(CVE-2016-5385)
HHVM (CVE-2016-1000109)
Python (CVE-2016-1000110)
Apache Tomcat (CVE-2016-5388)
web服务器 – Apache(CVE-2016-5387)、Nginx、Varnish、Httpoxy
受到影响的发行版 – RHEL、CentOS等
处理方法参考:
1)https://legolasng.github.io/2016/07/17/http-proxy-cgi-vulnerability/#%E9%99%8D%E4%BD%8Ecgi%E5%BA%94%E7%94%A8%E7%9A%84httpoxy%E9%A3%8E%E9%99%A9
2)https://www.cnblogs.com/yuzly/p/11202398.html这里说的比较详细,可惜是windows的,大家可以参考;
三、漏洞修复处理
1.备份业务系统tomcat文件:
进入Tomcat安装目录,现场环境安装在home下,一般安装在/usr/local/下:
tar -czvf tomcat7.92.bak.tar.gz ./tomcat7.9/* --exclude ./tomcat7.9/logs/ -C /home/vcloud/
2、下载Tomcat 7.0.94:
地址:https://tomcat.apache.org/
找到对应版本,点击进入,找到镜像网站,进入下载:
镜像站地址:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.94/bin/
3、上传到系统中:
执行rz命令,选中你的tomcat所下载的版本包,上传
4、进入目录:将源业务系统tomcat7.9更名备份:
mv ./tomcat7.9 /tomcat7.9.old
5、将新版tomcat7.0.94解压
6.将解压后的apache-tomat7.0.94xxx更名为./tomcat7.9
7、进入./tomcat7.9,删除tomcat自带的示例和文档:
cd ./tomcat7.9/webapps
rm -rf host-manager
rm -rf examples
rm -rf manager/
rm -rf docs
8、将原 /tomcat7.9.old中的webapps下的文件全部拷贝到新的webapps下:
cp -p ./tomcat7.9.old/webapps/* ./tomcat7.9/webapps
9、将原 /tomcat7.9.old中的conf下的文件全部拷贝到新的conf下:
cp -p ./tomcat7.9.old/conf/* ./tomcat7.9/conf
10、进入新tomcat的bin目录下,执行启动脚本,启动tomcat;
11、输入业务URL验证,至少应该出现:
出现上图是因为我的业务在升级jdk8.0后导致业务异常。
**注:**因为这是升级版本,这里在原安装目录下替换tomcat并未全新安装,环境变量使用照旧(因路径未变),否则需要修改环境变量为你的实际变量路径;
12、如果你要再一台主机实现多tomcat实例,需要比纳基conf/server.xml文件,修改server的端口和connector的端口为不同,然后启动相应的tomcat实例即可。对应的nginx中upstream中添加相应的请求转发。
参考如下:
#编辑catalina.sh,追加以下文本行
sed -i -e '/#!\/bin\/sh/a\export CATALINA_HOME=\/usr\/local\/tomcat7' /usr/local/tomcat7/bin/catalina.sh
sed -i -e '/#!\/bin\/sh/a\export TOMCAT_HOME=\/usr\/local\/tomcat7' /usr/local/tomcat7/bin/catalina.sh
sed -i -e '/#!\/bin\/sh/a\JAVA_HOME=\/usr\/java\/jdk1.7.0_80' /usr/local/tomcat7/bin/catalina.sh
sed -i -e '/# OS specific support. $var _must_ be set to either true or false./a\JAVA_OPTS="-Xms1024m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=1024m"' /usr/local/tomcat7/bin/catalina.sh
sed -i -e 's/redirectPort=\"8443\"/redirectPort=\"8443\" URIEncoding=\"UTF-8\"/g' /usr/local/tomcat7/conf/server.xml
四、常用命令回顾
1、ps -ef|grep tomcat
#查看指定应用的进程
2、tail -100f catalina.out
#查看tomcat运行的日志
cat catalina-2015-09-20.log | grep '2015-09-20 18:50:15'
#查看固定时间日志
3、sh bin/startup.sh
#重启tomcat
4、sh bin/shutdown.sh
#关闭toomcat
5、ln -s /home/tomcat/ /usr/locale/tomcat
如果要在usr下安装建立软连接
6、解压命令如下:
tar –xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar –xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
tar -xzf apache-tomcat-7.0.79.tar.gz
7、修改iptables规则:
#开启端口(以443端口为例)
/sbin/iptables -I INPUT -p tcp --dport 443 -j ACCEPT 写入修改
/etc/init.d/iptables save 保存修改
service iptables restart 重启防火墙,修改生效
#关闭端口(以80端口为例)
/sbin/iptables -I INPUT -p tcp --dport 443 -j DROP 写入修改
/etc/init.d/iptables save 保存修改
service iptables restart 重启防火墙,修改生效
五、容器内tomcat版本升级
因某次容器涉及tomcat多项漏洞,现场版本:7.0.52(tomcat-catalina-7.0.52.jar),官网建议升级到 upgrade to 8.5.x 或最新版,下载地址:https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.98/bin/;注:Tomcat7 和 Tomcat8的工厂类名称发生了变化,升级到8.5后要对应修改下conf目录下context.xml文件factory改为:factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
,另相关经验表明:tomcat7中一些参数名在Tomcat8中也发生了变化,比如:maxActive需改写为maxTotal,maxWait需改写为maxWaitMillis等;Tomcat8里不再支持JapperListener类,请注释掉server.xml中的相关项;
1)升级前注意
Tomcat版本与JDK版本之间的兼容关系:http://tomcat.apache.org/whichversion.html
Tomcat7升级到8注意:https://tomcat.apache.org/migration-8.html
7升级到8后,会存在后端兼容性问题,Tomcat 8.0.x 依赖Java 7,更多配置不同参看:configuration file differences
#版本确认
cat /usr/share/maven-repo/org/apache/tomcat/tomcat-catalina/7.0.52/tomcat-catalina-7.0.52.pom |grep version|head -3
<?xml version='1.0' encoding='UTF-8'?>
<version>7.0.52</version>
……
#备份配置