服务器安全基线检查
在应用服务器启动时,进行安全配置规范检查。如果 security.enforce_policy 设置为 true
,发现不安全配置时,将抛出 com.baidu.openrasp.exception.SecurityException
异常并拒绝应用服务启动
报警只会打印一次,具体格式参考 安全配置检查报警日志 相关文档
- 3001 - 关键 cookie 是否开启 httpOnly
- 3002 - 进程启动账号检查
- 3003 - 后台弱口令检查
- 3004 - 不安全的默认应用检查
- 3005 - Directory Listing 检查
- 3006 - 数据库连接账号审计
- 3007 - JBoss HTMLAdaptor 认证检查
- 3009 - Web 根目录下存在敏感文件
- 4001 - allow_url_include 配置审计
- 4002 - expose_php 配置审计
- 4003 - display_errors 配置审计
- 4004 - yaml.decode_php 配置审计
3001 - 关键 cookie 是否开启 httpOnly
支持的服务器
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
权限之一,即认为是管理员。然后针对所有管理员用户,检查密码的健壮性。
目前策略非常简单,当用户名和密码均是以下内容之一,才认为是弱口令
both
tomcat
admin
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 功能,会泄露项目的目录结构,并泄露服务器的版本信息,危险配置如下:
<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>
<!-- 如下就开启了 default sevelet 的 Directory Listing 功能-->
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</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
是否开启认证
修复方法
- 编辑
$JBOSS_HOME/server/default/deploy/jmx-console.war/WEB-INF/web.xml
,开启security-constraint
相关配置 - 编辑
$JBOSS_HOME/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml
,开启security-domain
相关配置
3009 - Web 根目录下存在敏感文件
支持的服务器
PHP
策略说明
定期扫描 webroot,检查是否存在后缀为 sql、tar、rar、...
的文件
修复方法
- 删除这些文件
- 从 nginx、apache 层面过滤掉这些扩展名,防止被外界下载
4001 - allow_url_include 配置审计
支持的服务器
PHP 服务器
策略说明
检查 allow_url_include
是否开启。开启后,将允许包含远程文件,e.g
include("http://xxxxx")
当应用存在文件包含、任意文件读取等漏洞,开启这个配置会让应用更加容易被入侵。
修复方法
修改 ini 配置,将 allow_url_include
设置为 Off
4002 - expose_php 配置审计
支持的服务器
PHP 服务器
策略说明
检查 expose_php
是否开启。若开启,在请求响应里可看到PHP的完整版本号,e.g
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