中间件安全排查标准

136 阅读8分钟

中间件安全排查标准

一、Nginx

(1)目录索引是否禁止*

评估目的WEB 目录禁止目录列表显示。
安全建议禁止目录列表显示,保护网页目录和文件信息。
判定依据查看配置文件 nginx.conf 有无相关设置。

描述操作 :

修改nginx/conf/nginx.conf 文件中的location部分:autoindex 为off
    location /{
        #       root   html;
        #       index  index.html index.htm;        
        root /usr/local/src/static/img; #指定实际目录绝对路径;        
        autoindex on; # 目录浏览功能开关 

|

(2)隐藏版本信息*

评估目的防止Nginx版本泄露
安全建议禁止在所有自动产生的错误页面中显示版本号,防止泄露敏感信息。
判定依据在地址栏输入一个不存在的页面,验证是否已不显示版本号

描述操作:

  • 设置操作步骤
    • (1) 修改文件$NGINX_HOME/conf/nginx.conf在 http 模块下添加或则修改为 server_tokens off;
    • (2) 重新启动 Nginx 服务

(3)请求拦截配置*

评估目的防止Nginx请求拦截遗漏造成未授权访问
安全建议白名单配置访问或梳理系统访问url,全部加入黑名单访问
判定依据查看配置文件 nginx.conf 有无相关设置。

描述操作:

  • 设置操作步骤
server {

listen 80;

server_name www.example.com;

# 精确匹配根URL,转发到后端的index页面
location = / {
    proxy_pass http://backend_server/index;
}

# 处理静态文件请求,这是Nginx的强项

location ^~ /static/ {
    root /path/to/static/files;
}

# 正则匹配图片文件,转发到图片服务器

location ~* \.(gif|jpg|jpeg|png)$ {
    proxy_pass http://image_server;
}

# 通用匹配,转发到后端应用服务器

location / {
    proxy_pass http://backend_server;
}

}

(4)超时连接设置

评估目的设置连接超时自动断开,防范DDOS攻击
安全建议白名单配置访问或梳理系统访问url,全部加入黑名单访问
判定依据查看配置文件 nginx.conf 有无相关设置。

描述操作:

  • 设置操作步骤
    • (1)修改文件$NGINX_HOME/conf/nginx.conf 在 http 模块下添加或则修改为 keepalive_timeout 65; (数值根据需要调整) 
    • (2)重新启动 Nginx 服务

(5)禁用危险HTTP方法*

评估目的防止危险方法访问
安全建议拒绝除post/get/head方法外的其他方法请求
判定依据查看配置文件 nginx.conf 有无相关设置。

描述操作: -设置操作步骤

  • (1)修改配置文件
#vim /usr/local/nginx/conf/nginx.conf

#具体设置如下:

Server{
       ......
       if($request_method !~ ^(GET|HEAD|POST)$) {
         return404;
       }

        ......
}
  • (2)重新启动 nginx 服务

(6)隐藏X-Powered-By

评估目的防止暴露后端语言或框架
安全建议隐藏Nginx后端服务指定Header的状态
判定依据查看配置文件 nginx.conf 有无相关设置。

描述操作

设置操作步骤

  • (1)修改文件$NGINX_HOME/conf/nginx.conf 
    • 在 http 模块下配置proxy_hide_head项 或者添加或者修改为 proxy_hide_header X-Powered-By; proxy_hide_header Server; 
  • (2)重新启动 Nginx 服务。

二、APACHE

(1)目录索引是否禁止*

评估目的WEB 目录禁止目录列表显示。
安全建议禁止目录列表显示,保护网页目录和文件信息。
判定依据查看配置文件 httpd.conf 有无相关设置。

描述操作

将httpd.conf文件中Options Indexes MultiViews将“Indexes”
Options Indexes MultiViews  ← 找到这一行,将“Indexes”删除

    ↓

  Options MultiViews   ← 变为此状态(不在浏览器上显示树状目录结构)

AllowOverride None

Order allow,deny

Allow from all

</Directory>

(2)隐藏版本信息*

评估目的防止Tomcat版本泄露
安全建议禁止在所有自动产生的错误页面中显示版本号,防止泄露敏感信息。
判定依据在地址栏输入一个不存在的页面,验证是否已不显示版本号

描述操作

设置操作步骤

  • (1)在 conf/server.xml文件中的 节点下添加如下配置
<Valve className="org.apache.catalina.valves.ErrorReportValve
" showReport="false" showServerInfo="false" />

// showReport:默认true,是否显示异常信息
// showServerInfo:默认true,是否显示版本号
(2) 修改或隐藏响应头的 server 值

在 conf/server.xml 文件中的 <Connector> 节点新增 server属性

<Connector port="21058" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="21052"

               server="smartbi"/>

 // server 值可以为空或自定义字符串

(3)错误页面处理*

评估目的防止泄露敏感信息
安全建议Apache 访问错误页面重定向,防止泄露敏感信息
判定依据在地址栏输入一个不存在的页面,验证是否已指向错误页面

描述操作

设置操作步骤 

  • (1) 修改 httpd.conf 配置文件
    ErrorDocument 400 /custom400.html
    ErrorDocument 401 /custom401.html
    ErrorDocument 403 /custom403.html
    ErrorDocument 404 /custom404.html
    ErrorDocument 405 /custom405.html
    ErrorDocument 500 /custom500.html
    
  • (2)重新启动 Apache 服务

(4)CGI 程序控制

评估目的CGI 程序控制
安全建议如果服务器上不需要运行 CGI 程序,建议禁用 CGI
判定依据检查配置文件 httpd.conf

描述操作

设置操作步骤编辑 httpd.conf 配置文件,把 cgi-bin 目录的配置和模块注释掉:
```
#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Require all gra
#</Directory>
```

(5)禁用危险HTTP方法

评估目的用危险HTTP方法
安全建议只允许get 、post等程序常用方法
判定依据检查配置文件 httpd.conf

描述操作

设置操作步骤编辑 httpd.conf 配置文件,新增或修改如下配置:
```
    <Location /> 
    <LimitExcept GET POST CONNECT OPTIONS>
      Order Allow,Deny
      Deny from all
    </LimitExcept>
    </Location>
```

(6)关闭 TRACE方法

评估目的关闭 TRACE方法
安全建议关闭 TRACE,防止 TRACE 方法被访问者恶意利用
判定依据检查配置文件 httpd.conf

描述操作

设置操作步骤

  • (1)编辑 httpd.conf 配置文件,配置如下内容: TraceEnable Off 
  • (2)如果不存在则手动在文件末尾添加。>

(7)拒绝服务防御

评估目的拒绝服务防御
安全建议防范拒绝服务攻击
判定依据检查配置文件 httpd.conf

描述操作

设置操作步骤

  • (1) 编辑 httpd.conf 配置文件:
Timeout 10 #客户端与服务器端建立连接前的时间间隔
KeepAlive On
KeepAliveTimeout 15 #限制每个session的保持时间是15秒
AcceptFilter http data
AcceptFilter https data
  • (2)重新启动 Apache 服务。

(8) 请求拦截配置*

评估目的防止请求拦截遗漏造成未授权访问
安全建议白名单配置访问或梳理系统访问url,全部加入黑名单访问
判定依据查看配置文件httpd.conf有无相关设置。

描述操作 设置操作步骤 修改/conf目录下的 httpd.conf 文件

三、TOMCAT

(1)目录索引是否禁止*

评估目的WEB 目录禁止目录列表显示。
安全建议禁止目录列表显示,保护网页目录和文件信息。
判定依据查看配置文件 web.xml有无相关设置。

描述操作
修改conf/web.xml文件中listings项为false   

<servlet>

        <servlet-name>default</servlet-name>

        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

        <init-param>

            <param-name>debug</param-name>

            <param-value>0</param-value>

        </init-param>

        <init-param>

            <param-name>listings</param-name>

            <param-value>false</param-value> // 这里改为false

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

(2)隐藏版本信息*

评估目的防止Tomcat版本泄露
安全建议禁止在所有自动产生的错误页面中显示版本号,防止泄露敏感信息。
判定依据在地址栏输入一个不存在的页面,验证是否已不显示版本号

描述操作 设置操作步骤

  • 打开 Apache 配置文件httpd.conf,添加/修改下面的代码,保存后重启Apache服务
    • ServerTokens Prod
    • ServerSignature Off

 

(3)禁用危险http方法

评估目的防止危险方法访问
安全建议拒绝除post/get/head方法外的其他方法请求
判定依据查看配置文件web.xml 有无相关设置。

描述操作

  • (1)修改文件$TOMCAT_HOME/conf/web.xml,
    配置org.apache.catalina.servlets.DefaultServlet 的值,内容如 下:
    <init-param>
    <param-name>readonly</param-name>
    <param-value>false</param-value>
    </init-param>
    readonly 参数默认是 true,即允许 delete 和 put 操作,修改 为 false
  • (2)重新启动 Tomcat 服务。

(4)禁止显示异常调试信息

评估目的禁止显示异常调试信息
安全建议当请求处理期间发生运行时错误时,ApacheTomcat将向请求者显示调试信息,存在安全隐患
判定依据查看配置文件web.xml 有无相关设置。

描述操作

  • (1)修改文件$TOMCAT_HOME/conf/web.xml在web-app下添加子节点,配置
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>

在webapps目录下创建error.jsp,定义自定义错误信息

  • (2)重新启动 Tomcat 服务。

(5)Tomcat禁止自动部署

评估目的禁止自动部署程序
安全建议配置自动部署,容易被部署恶意或未经测试的应用程序,应将其禁用
判定依据查看配置文件web.xml 有无相关设置。

描述操作
修改Tomcat 根目录下的配置文件conf/server.xml,将host节点的autoDeploy属性设置为“false”,

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false">

如果host的deployOnStartup属性(如没有deployOnStartup配置可以忽略)为“true”,则也将其更改为“false”

(6)删除无关文件和目录*

评估目的删除无关文件和目录
安全建议Tomcat安装提供了示例应用程序、文档和其他可能不用于生产程序及目录,存在极大安全风险
判定依据确认已删除或移除看配置文件。

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

(7)运行进程权限检测

评估目的运行进程权限检测
安全建议在运行Internet服务时,最好尽可能避免使用root用户运行,降低攻击者拿到服务器控制权限的机会
判定依据ps -efgrep tomcat查看运行tomcat的用户

描述操作

新增tomcat用户

useradd tomcat

--将tomcat目录owner改为tomcat

chown -R tomcat:tomcat /opt/tomcat

-- 停止原来的tomcat服务

--切换到tomcat用户

su - tomcat

--重新启动tomcat

/opt/tomcat/bin/startup.sh 

(8)错误页面处理

评估目的错误页面处理
安全建议Tomcat 访问错误页面重定向,防止泄露敏感信息
判定依据在地址栏输入一个不存在的页面,验证是否已指向错误页面

描述操作

  • (1)查看 tomcat/conf/web.xml 文件,新增或修改如下配置:
<error-page>
<error-code>404</error-code>
<location>/错误页面</location>
</error-page>

......

<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error.jsp</location>
</error-page>
  • (2)重新启动 Tomcat 服务

(9) 请求拦截配置*

评估目的防止请求拦截遗漏造成未授权访问
安全建议白名单配置访问或梳理系统访问url,全部加入黑名单访问
判定依据查看配置文件web.xml有无相关设置。

描述操作 设置操作步骤
修改/conf目录下的 httpd.conf 文件

  • (1)使用 web.xml 配置 Servlet 映射(内部转发)
<!-- 定义Servlet -->

<servlet>
    <servlet-name>myForwardServlet</servlet-name>
    <servlet-class>com.example.ForwardServlet</servlet-class>
</servlet>

<!-- 映射URL模式 -->

<servlet-mapping>
    <servlet-name>myForwardServlet</servlet-name>
    <url-pattern>/old-path/*</url-pattern> <!-- 拦截所有以/old-path/开头的请求 -->
</servlet-mapping>
  • (2)配置 实现访问控制 适用场景:拦截 URL 并强制跳转到登录页或其他页面(基于安全约束)。
<web-app>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Protected Area</web-resource-name>
            <url-pattern>/admin/*</url-pattern> <!-- 拦截路径 -->
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.html</form-login-page> <!-- 跳转到登录页 -->
            <form-error-page>/error.html</form-error-page>
        </form-login-config>
    </login-config>
</web-app>

四、中间件日志*

(1)Apache HTTP 服务器的日志文件通常位于 /var/log/apache2/ 目录下。主要的日志文件包括:

access.log:记录所有访问请求。

error.log:记录所有错误信息。

(2)Nginx 的日志文件通常位于 /var/log/nginx/ 目录下。主要的日志文件包括:

access.log:记录所有访问请求。

error.log:记录所有错误信息。

(3)Tomcat的日志文件通常位于 /usr/local/tomcat/logs/目录下。

访问日志: /usr/local/tomcat/logs/access.log

错误日志: /usr/local/tomcat/logs/catalina.out

日志标准包括不限于:来源IP、时间、访问地址、访问方式、成功失败等,保存时间必须近6个月、返回结果