服务器安全基线检查

在应用服务器启动时,进行安全配置规范检查。如果 security.enforce_policy 设置为 true,发现不安全配置时,将抛出 com.baidu.openrasp.exception.SecurityException 异常并拒绝应用服务启动

报警只会打印一次,具体格式参考 安全配置检查报警日志 相关文档

支持的服务器

tomcat

策略说明

在 tomcat 服务器下,检查是否在 JSESSIONID 是否开启 httpOnly 开关

开启后,将对XSS攻击有一定的防范能力,可避免一些问题

修复方法

若是 tomcat 7 以下版本,打开 CATALINA_HOME/conf/context.xml,将 useHttpOnly 改为 true,重启应用服务器即可

3002 - 进程启动账号检查

支持的服务器

tomcat, jetty, jboss, resin, springboot 等所有的 java 服务器

策略说明

检查应用服务器的启动账号,当以如下账号启动则认为不符合安全规范:

  • Linux 系统的 root 账号
  • Windows 系统的 Administrator 或者 system 账号

当应用服务器存在安全漏洞,以高权限账号启动会带来更大的安全风险,e.g 上传 webshell 即可获取最高权限、利用 struts 漏洞直接获取 root 权限

修复方法

使用低权限用户启动应用服务器

3003 - 后台弱口令检查

支持的服务器

tomcat

策略说明

在 tomcat 下,检查 $CATALINA_HOME/conf/tomcat-users.xml 下面配置的用户,如果具有 admin,manager,admin-gui,manager-gui 权限之一,即认为是管理员。然后针对所有管理员用户,检查密码的健壮性。

目前策略非常简单,当用户名和密码均是以下内容之一,才认为是弱口令

  1. both
  2. tomcat
  3. admin
  4. 123456

修复方法

使用高强度密码,e.g 使用10位以上的密码,并包含数字、字母、特殊符号

3004 - 不安全的默认应用检查

支持的服务器

tomcat

策略说明

在 tomcat 下,检查 ROOT、manager、host-manager、docs 四个 webapps 是否删除

默认应用或多或少会泄露敏感信息,或者造成管理后台对外暴露的风险

修复方法

全部删除

3005 - Directory Listing 检查

支持的服务器

tomcat

策略说明

在 tomcat 下检测 $CATALINA_HOME/conf/web.xml 是否为全局开启了 default servlet 的 Directory Listing功能

开启 Directory Listing 功能,会泄露项目的目录结构,并泄露服务器的版本信息,危险配置如下:

  1. <servlet>
  2. <servlet-name>default</servlet-name>
  3. <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
  4. <init-param>
  5. <param-name>debug</param-name>
  6. <param-value>0</param-value>
  7. </init-param>
  8. <init-param>
  9. <!-- 如下就开启了 default sevelet 的 Directory Listing 功能-->
  10. <param-name>listings</param-name>
  11. <param-value>true</param-value>
  12. </init-param>
  13. <load-on-startup>1</load-on-startup>
  14. </servlet>

修复方法

打开 $CATALINA_HOME/conf/web.xml 把如上 xml 配置中的名字为 listing 的 init-param 删除,或者把 param-value 改为 false 即可

3006 - 数据库连接账号审计

支持的服务器

所有使用 JDBC 的服务器、PHP 服务器

策略说明

检查是否使用 root (mysql)sa (mssql)sys (oracle) 等高权限账号连接数据库

当存在SQL注入漏洞,使用高权限账号连接数据库会带来更大风险,泄露更多的数据;当服务器被黑客入侵,使用高权限账号,还可能同时导致数据库服务器沦陷

如果 security.enforce_policy 选项设置为 true,那么无论数据库连接成功与否,我们都会拦截并产生报警;如果设置为 false(默认值),则只有成功的连接才会报警,且对于每个JDBC URL,相同的报警每天只会打印一次

修复方法

创建新账号,授予最小的权限;不同的服务器集群使用不同的数据库账号连接

3007 - JBoss HTMLAdaptor 认证检查

支持的服务器

JBoss 4-6

策略说明

检查 /jmx-console/HTMLAdaptor 是否开启认证

修复方法

  1. 编辑 $JBOSS_HOME/server/default/deploy/jmx-console.war/WEB-INF/web.xml,开启 security-constraint 相关配置
  2. 编辑 $JBOSS_HOME/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml,开启 security-domain 相关配置

3009 - Web 根目录下存在敏感文件

支持的服务器

PHP

策略说明

定期扫描 webroot,检查是否存在后缀为 sql、tar、rar、... 的文件

修复方法

  1. 删除这些文件
  2. 从 nginx、apache 层面过滤掉这些扩展名,防止被外界下载

4001 - allow_url_include 配置审计

支持的服务器

PHP 服务器

策略说明

检查 allow_url_include 是否开启。开启后,将允许包含远程文件,e.g

  1. include("http://xxxxx")

当应用存在文件包含、任意文件读取等漏洞,开启这个配置会让应用更加容易被入侵。

修复方法

修改 ini 配置,将 allow_url_include 设置为 Off

4002 - expose_php 配置审计

支持的服务器

PHP 服务器

策略说明

检查 expose_php 是否开启。若开启,在请求响应里可看到PHP的完整版本号,e.g

  1. X-Powered-By: PHP/5.1.2-1

修复方法

修改 ini 配置,将 expose_php 设置为 Off

4003 - display_errors 配置审计

支持的服务器

PHP 服务器

策略说明

检查 display_errors 是否开启。当这个选项被开启,用户可在前端看到PHP程序内部的错误消息,e.g

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\post\includes\pm_send.php on line 12

当应用存在漏洞,结合这些错误消息,攻击者可以获取应用运行的路径、进行SQL报错注入攻击等等

修复方法

修改 ini 配置,将 display_errors 设置为 Off

4004 - yaml.decode_php 配置审计

支持的服务器

PHP 服务器

策略说明

检查 yaml.decode_php 是否开启。当这个选项被开启,在加载 yaml 文件的时候,将允许反序列化PHP对象,可能执行任意代码。另外,如果没有安装 yaml 扩展,即使配置了 yaml.decode_php=On 也不会报警。

修复方法

修改 ini 配置,将 yaml.decode_php 设置为 Off