Tomcat服务安全加固和优化_tomcat加固使用安全的http请求(3)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

                         <error-code>401</error-code>              
                         <location>/401.htm</location>          
                 </error-page>          
                 <error-page>    
                         <error-code>404</error-code>        
                         <location>/404.htm</location>          
                 </error-page>  
                 <error-page>    
                         <error-code>500</error-code>  
                         <location>/500.htm</location>      
                  </error-page>

**6. 禁止列出目录**  
 防止直接访问目录时由于找不到默认页面,而列出目录下的文件的情况。


在 web.xml 文件中,将listings改成false。


**7. 删除文档和示例程序**  
 删除 webapps 目录下的 docs、examples、manager、ROOT、host-manager 文件夹。


## 加固二


## Apache Tomcat文件包含漏洞紧急修复


## Tomcat 漏洞介绍


tomcat有漏洞, 需要升级到9.0.31


https://cert.360.cn/warning/detail?id=849be16c6d2dd909ff56eee7e26aeefe


2020年02月20日, 360CERT 监测发现 国家信息安全漏洞共享平台(CNVD) 收录了 CNVD-2020-10487 Apache Tomcat文件包含漏洞


Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。


CNVD-2020-10487是文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等。


## 修复建议


更新到如下Tomcat 版本  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020040722435815.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)  
 Apache Tomcat 6 已经停止维护,请升级到最新受支持的 Tomcat 版本以免遭受漏洞影响。


请广大用户时刻关注 Apache Tomcat® - Welcome! 获取最新的 Tomcat Release版本,以及 apache/tomcat: Apache Tomcat 获取最新的 git 版本。


360安全大脑-Quake网络空间测绘系统通过对全网资产测绘,发现 Apache Tomcat 在国内存在大范围的使用情况。具体分布如下图所示。  
 Apache Tomcat 6 已经停止维护,请升级到最新受支持的 Tomcat 版本以免遭受漏洞影响。


请广大用户时刻关注 Apache Tomcat® - Welcome! 获取最新的 Tomcat Release版本,以及 apache/tomcat: Apache Tomcat 获取最新的 git 版本。


360安全大脑-Quake网络空间测绘系统通过对全网资产测绘,发现 Apache Tomcat 在国内存在大范围的使用情况。具体分布如下图所示。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020040722442074.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)


## 升级方案


## 1. 继承springboot为parent的


**pom添加properties**



<tomcat.version>9.0.31</tomcat.version>


验证: 启动后日志为:



2020-02-21 11:46:34.797 INFO 22968 —[ restartedMain]org.apache.catalina.core.StandardEngine : Starting Servlet engine: [ApacheTomcat/9.0.31]


## 2. dependency bom引入的


通常我们不会直接继承 spring-boot-starter-parent, 而是通过如下方式引入bom



org.springframework.boot
spring-boot-dependencies
${springboot.version}

pom
import


**直接声明tomcat依赖:**



org.apache.tomcat tomcat-annotations-api ${tomcat.version} org.apache.tomcat tomcat-jdbc ${tomcat.version} org.apache.tomcat tomcat-jsp-api ${tomcat.version} org.apache.tomcat.embed tomcat-embed-core ${tomcat.version} org.apache.tomcat.embed tomcat-embed-el ${tomcat.version} org.apache.tomcat.embed tomcat-embed-jasper ${tomcat.version} org.apache.tomcat.embed tomcat-embed-websocket ${tomcat.version}

## 不更新版本的情况下,使用下面的操作


**如未使用 Tomcat AJP 协议:**


如未使用 Tomcat AJP 协议,可以直接将 Tomcat 升级到 9.0.31、8.5.51 或 7.0.100 版本进行漏洞修复。


如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭 AJPConnector,或将其监听地址改为仅监听本机 localhost。


**具体操作:**



(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

<Connector port="8009"protocol=“AJP/1.3” redirectPort=“8443” />
(2)将此行注释掉(也可删掉该行):

(3)保存后需重新启动,规则方可生效。


## tomcat防护


## 1.禁止自动部署


配置自动部署,容易被部署恶意或未经测试的应用程序,应将其禁用



修改Tomcat 根目录下的配置文件conf/server.xml,将host节点的autoDeploy属性设置为“false”,如果host的deployOnStartup属性(如没有deployOnStartup配置可以忽略)为“true”,则也将其更改为“false”


## 2.tomcat目录权限检测


在运行Tomcat服务时,避免使用root用户运行,tomcat目录(catalina.home、 catalina.base目录)所有者应改为非root的运行用户



使用chown -R <Tomcat启动用户所属组>:<Tomcat启动用户> <Tomcat目录>修改tomcat目录文件所有者,如chown -R tomcat:tomcat /usr/local/tomcat


## 3.Tomcat进程运行权限检测


在运行Internet服务时,最好尽可能避免使用root用户运行,降低攻击者拿到服务器控制权限的机会。



创建低权限的账号运行Tomcat


## 4.禁止显示异常调试信息


当请求处理期间发生运行时错误时,ApacheTomcat将向请求者显示调试信息。建议不要向请求者提供此类调试信息



在Tomcat根目录下的conf/web.xml文件里面的web-app添加子节点:java.lang.Throwable/error.jsp,在webapps目录下创建error.jsp,定义自定义错误信息


## 5.开启日志记录


Tomcat需要保存输出日志,以便于排除错误和发生安全事件时,进行分析和定位



1、修改Tomcat根目录下的conf/server.xml文件。
2、取消Host节点下Valve节点的注释(如没有则添加)。

3、重新启动Tomcat


## 6.禁止Tomcat显示目录文件列表


Tomcat允许显示目录文件列表会引发目录遍历漏洞



修改Tomcat 跟目录下的配置文件conf/web.xml,将listings的值设置为false。 listings false


## 7.删除项目无关文件和目录


Tomcat安装提供了示例应用程序、文档和其他可能不用于生产程序及目录,存在极大安全风险,建议移除



请删除Tomcat示例程序和目录、管理控制台等,即从Tomcat根目录的webapps目录,移出或删除docs、examples、host-manager、manager目录。


## 8.避免为tomcat配置manager-gui弱口令


tomcat-manger是Tomcat提供的web应用热部署功能,该功能具有较高权限,会直接控制Tomcat应用,应尽量避免使用此功能。如有特殊需求,请务必确保为该功能配置了强口令



编辑Tomcat根目录下的配置文件conf/tomcat-user.xml,修改user节点的password属性值为复杂密码, 密码应符合复杂性要求:

1、长度8位以上
2、包含以下四类字符中的三类字符:
英文大写字母(A 到 Z)
英文小写字母(a 到 z)
10 个基本数字(0 到 9)
非字母字符(例如 !、$、#、%、@、^、&)
3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等


## 9.限制服务器平台信息泄漏


限制服务器平台信息泄漏会使攻击者更难确定哪些漏洞会影响服务器平台。



1、进入Tomcat安装主目录的lib目录下,比如 cd /usr/local/tomcat7/lib
2、执行:jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties,修改文件ServerInfo.properties中的server.info和server.number的值,如分别改为:Apache/11.0.92、11.0.92.0
3、执行:jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties
4、重启Tomcat服务


### Tomcat使用总结


屏蔽版本  
 关闭`shutdown`端口  
 禁用管理界面  
 自定义错误页面  
 AJP协议  
 修改Cookies安全性  
 Tomcat安全规范  
 Tomcat性能优化  
 Linux 修改catalina.sh 文件  
 windows修改`cataliba.bat`文件  
 其它内容  
 tomcat项目的部署方式  
 第一种:项目直接放入 webapps 目录中  
 第二种:修改 conf/server.xml 文件  
 第三种 在`conf\Catalina\localhost`下新增`wwwroot.xml`  
 相同IP不同端口部署


## 1、屏蔽版本


在tomcat的安装目录下的lib目录中找到catalina.jar文件,通过压缩软件打开,找到catalina.jar\org\apache\catalina\util\ServerInfo.properties文件修改里面的内容



server.info=Apache Tomcat/8.5.38
server.number=8.5.38.0
server.built=Feb 5 2019 11:42:42 UTC
server.info=Apache Tomcat
server.number=0.0.0.0
server.built=Feb 5 2009 11:42:42 UTC


## 2、关闭`shutdown`端口


Tomcat的配置文件server.xml中有这么一行:


通过telnet连接到8005端口发送SHUTDOWN指令关闭tomcat服务器。


我们可以修改指令,将SHUTDOWN换成一个不容易猜测到的字符串,或者把port的值直接改成-1


## 3、禁用管理界面


* Server Status
* Manager App
* Host Manager  
 在开发环境下我们可以在conf目录下修改tomcat-users.xml文件




生成环境下修改webapps目录下的ROOT文件夹,将它重命名或者制空


## 4、自定义错误页面


修改在conf目录下面的web.xml的文件,在文件内追加:



404 /404.jsp

## 5、AJP协议


定义:WEB服务器通过TCP连接和SERVLET容器连接。为了减少进程生成socket的花费,WEB服务器和SERVLET容器之间尝试保持持久性的TCP连接,对多个请求/回复循环重用一个连接。一旦连接分配给一个特定的请求,在请求处理循环结束之前不会在分配。换句话说,在连接上,请求不是多元的。这个是连接两端的编码变得容易,虽然这导致在一时刻会有很多连接。


作用:通过AJP协议来通过Apache进行访问的代理。




所以当我们不需要用Apache做访问代理的话,最好在server.xml文件中将上面那句话给注释掉(减少性能开销)。


如果不想注释掉也至少改成下面这个样子:




禁止将8009端口暴露在外面,造成安全隐患。


## 6、修改Cookies安全性


设置成httpOnly=true,修改默认cookie名称


修改conf目录下的context.xml文件




## 7、Tomcat安全规范


* 版本安全

 升级到最新稳定版,出于稳定性考虑,不建议进行跨版本升级。
* 服务降权

 不使用root用户启动tomcat,使用普通用户启动
* 端口保护
* 更改tomcat管理端口8005,此端口有权限关闭tomcat服务,但要求端口配置在8000~8999之间,并更改SHUTDOWN执行的命令
* 若tomcat都是放在内网的,则针对tomcat服务的监听地址都是内网地址
* 修改默认的AJP端口,但要求端口配置在8000~8999之间
* 禁用管理端
* 删除默认CATALINA\_HOME/webapps下载默认的所有目录和文件
* 将tomcat应用根目录配置为tomcat安装目录以外的目录
* 隐藏tomcat的版本信息

 针对该信息的显示是由一个jar包控制的,

 该jar包存放在$CATALINA\_HOME/lib目录下,名称为 catalina.jar,

 通过 jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org ,

 修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo  
 字段来实现来更改我们tomcat的版本信息
* 关闭war自动部署

 默认Tomcat 是开启了对war包的热部署的。为了防止被植入木马等恶意程序,因此我们要关闭自动部署。




* 屏蔽目录文件自动列出

 编辑conf/web.xml文件



default org.apache.catalina.servlets.DefaultServlet debug 0 listings false //这里false为不列出,true为充许列出 1

* 多虚拟主机

 强烈建议不要使用 Tomcat 的虚拟主机,推荐每个站点使用一个实例。即,可以启动多个 Tomcat,而不是启动一个 Tomcat  
 里面包含多个虚拟主机。 因为  
 Tomcat是多线程,共享内存,任何一个虚拟主机中的应用崩溃,都会影响到所有应用程序。虽然采用多实例的方式会产生过多的开销,但至少保障了应用程序的隔离和安全
* 脚本权限回收

 控制CATALINAHOME/bin目录下的start.sh、catalina.sh、shutdown.sh的可执行权限



chmod −R 744 CATALINA_HOME/bin/*


* 分离 Tomcat 和项目的用户

 为了防止 Tomcat 被植入 web shell 程序后,可以修改项目文件。因此我们要将 Tomcat  
 和项目的属主做分离,这样子,即便被搞,他也无法创建和编辑项目文件。
* server head重写

 server=“Microsoft-IIS/6.5”




* 通过配置,限定访问的IP来源




* 访问日志格式规范

 开启tomcat默认访问日志中Referer和User-Agent记录




## 8、Tomcat性能优化


* 禁用AJP协议
* 将BIO通讯模式修改为NIO通讯模式




## 9、Tomcat性能优化


禁用AJP协议


将BIO通讯模式修改为NIO通讯模式




**其它配置项:**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200617170457880.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)


* 启用外部连接池,来满足高并发已经复用的请求  
 executor=“tomcatThreadPool”





* 优化连接器




* 在tomcat中设置JVM参数


修改bin/catalina.bat文件设置参数(注释后第一行),增加



set JAVA_OPTS=-Dfile.encoding=UTF-8
  -server
  -Xms1024m
  -Xmx2048m
  -XX:NewSize=512m
  -XX:MaxNewSize=1024m
  -XX:PermSize=256m
  -XX:MaxPerPermSize=356m
  -XX:NewRatio=2
  -XX:MaxTenuringThreshold=50
  -XX:+DisableExplicitGC


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200617170619378.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)


## 10、Linux 修改catalina.sh 文件


修改 /usr/program/tomcat7/bin/catalina.sh 文件,把下面信息添加到文件第一行。


* 如果服务器只运行一个 Tomcat
* 机子内存如果是 4G:



CATALINA_OPTS=“-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC”


机子内存如果是 8G:



CATALINA_OPTS=“-Dfile.encoding=UTF-8 -server -Xms4096m -Xmx4096m -Xmn2048m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC”


* 机子内存如果是 16G:


CATALINA\_OPTS="-Dfile.encoding=UTF-8 -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"


* 机子内存如果是 32G:



CATALINA_OPTS=“-Dfile.encoding=UTF-8 -server -Xms16384m -Xmx16384m -Xmn8192m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC”


* 如果是 8G 开发机



-Xms2048m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=512m


如果是 16G 开发机



-Xms4096m -Xmx4096m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=256m -XX:MaxPermSize=512m



> 
> -Dfile.encoding:默认文件编码  
>  -server:表示这是应用于服务器的配置,JVM 内部会有特殊处理的  
>  -Xmx1024m:设置JVM最大可用内存为1024MB  
>  -Xms1024m:设置JVM最小内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。  
>  -Xmn1024m:设置JVM新生代大小(JDK1.4之后版本)。一般-Xmn的大小是-Xms的1/2左右,不要设置的过大或过小,过大导致老年代变小,频繁Full GC,过小导致minor GC频繁。如果不设置-Xmn,可以采用-XX:NewRatio=2来设置,也是一样的效果  
>  -XX:NewSize:设置新生代大小  
>  -XX:MaxNewSize:设置最大的新生代大小  
>  -XX:PermSize:设置永久代大小  
>  -XX:MaxPermSize:设置最大永久代大小  
>  -XX:NewRatio=4:设置年轻代(包括 Eden 和两个 Survivor 区)与终身代的比值(除去永久代)。设置为 4,则年轻代与终身代所占比值为 1:4,年轻代占整个堆栈的 1/5  
>  -XX:MaxTenuringThreshold=10:设置垃圾最大年龄,默认为:15。如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在 Survivor 区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。需要注意的是,设置了 -XX:MaxTenuringThreshold,并不代表着,对象一定在年轻代存活15次才被晋升进入老年代,它只是一个最大值,事实上,存在一个动态计算机制,计算每次晋入老年代的阈值,取阈值和MaxTenuringThreshold中较小的一个为准。  
>  -XX:+DisableExplicitGC:这个将会忽略手动调用 GC 的代码使得 System.gc() 的调用就会变成一个空调用,完全不会触发任何 GC
> 
> 
> 


## 11、Tomcat项目的部署方式


第一种:项目直接放入 webapps 目录中


第二种:修改 conf/server.xml 文件


打开tomcat下conf/server.xml,在标签之间输入项目配置信息  
 



<?xml version="1.0" encoding="UTF-8"?>
<GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
        type="org.apache.catalina.UserDatabase"
        description="User database that can be updated and saved"
        factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
        pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>

<Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443"
        URIEncoding="UTF-8"
        useBodyEncodingForURI="true"
        server="Microsoft-IIS/6.5" />

    <Engine name="Catalina" defaultHost="localhost">
        <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
        </Realm>
        <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

            <Context path="/wwwroot" docBase="F:/wwwroot" reloadable="true" />

            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost\_access\_log" suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>
    </Engine>
</Service>

**第三种 在`conf\Catalina\localhost`下新增`wwwroot.xml`**


里面的内容就一句话:




## 相同IP不同端口部署


在server.xml中多追加一个service



<Engine name="web" defaultHost="localhost">
    <Host name="localhost" appBase="webapp1">
        <Context docBase="F:/wwwroot" path="" reloadable="true" />
    </Host>
</Engine>

## 12、Apache Tomcat 漏洞之 CNVD-2020-10487


**漏洞修复方案**  
 \*\*1.版本升级,\*\*截至2020-2-24,官方公布的已修复该漏洞版本包括:


Apache Tomcat 7.0.100  
 Apache Tomcat 8.5.51  
 Apache Tomcat 9.0.31


![img](https://img-blog.csdnimg.cn/img_convert/6742a669aab9d690c914bd4b7153def5.png)
![img](https://img-blog.csdnimg.cn/img_convert/c975ae832c27eb3a6c7452768380d0ca.png)
![img](https://img-blog.csdnimg.cn/img_convert/dd035b4cd38d2f19bf48971231b9bd64.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

"700" acceptCount="100"             connectionTimeout="2000" redirectPort="8445" URIEncoding="UTF-8"/>

    <Engine name="web" defaultHost="localhost">
        <Host name="localhost" appBase="webapp1">
            <Context docBase="F:/wwwroot" path="" reloadable="true" />
        </Host>
    </Engine>
</Service>

12、Apache Tomcat 漏洞之 CNVD-2020-10487

漏洞修复方案
**1.版本升级,**截至2020-2-24,官方公布的已修复该漏洞版本包括:

Apache Tomcat 7.0.100
Apache Tomcat 8.5.51
Apache Tomcat 9.0.31

[外链图片转存中…(img-OkT5ARDi-1715880645912)]
[外链图片转存中…(img-FZJAWtFf-1715880645912)]
[外链图片转存中…(img-ZZ2wXqhB-1715880645913)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值