上接第一篇 《OpenRASP 初探(一)之项目介绍》,本篇主要介绍openrasp项目在 java 项目中如何部署(主要以springboot和tomcat为例)。希望能帮助朋友们在部署过程中提供一些参考,少走些弯路。

一、软件兼容性(openrasp 目前支持 java 和 php)

管理后台:操作系统兼容 Linux (CentOS 6+ / Ubuntu 14.04 + / 其他不要太老的系统)和 Mac OS X
JAVA agent :
-操作系统:MacOS 10.10+、Windows x64、Linux(RHEL/CentOS 6.X ~ 7.X/Ubuntu 14+/Debian 6+/其他 glibc >= 2.12 的发行版)
-web服务器(支持 docker 部署):Tomcat 5 ~ 9、Jetty 7 ~ 9、JBoss 4 ~ 8、Wildfly 8 ~ 16、Resin 3 ~ 4、SpringBoot 1 ~ 2 (内置 tomcat/jetty/undertow)、WebSphere 7.X  及以上版本、WebLogic 10.3.6 / 12.2
-JDK 版本:Oracle JDK 6~11、OpenJDK 6~11
-数据库 :MySQL 、SQLServer 、SQLite 、Oracle 、PostgreSQL 、DB2

二、安装管理后台

1)测试操作系统选择了 centos 6

2)安装管理后台需要先安装 2 个数据库,ElasticSearch 和 MongoDB 。前者用来存储报警和统计信息,后者用来存储应用、账号密码等信息。

目前对数据库的要求是,

MongoDB 版本大于等于 3.6
ElasticSearch 版本大于等于 5.6,小于 7.0

ElasticSearch 安装,我们测试中选取6.8.3版本。ES 是开源软件,但部分插件使用如 xpack 需要申请免费 license。

license 申请:https://register.elastic.co/marvel_register

ElasticSearch 依赖 JDK 环境,6.8.3 es 需要安装 JDK 8 以上版本。

备注:es 以 root 启动会报错,需新建 ES 组合账户,并将 ES 的文件目录的权限赋给 ES 组

chown -R es:es elasticsearch 目录,因为测试,ES 默认安装在本地使用默认 9200 端口

Mango 安装,选择了 4.0.14 版本。创建数据目录,启动 mongo ./mongod -dbpath /data/db/

本地搭建的测试环境,默认配置并选择默认端口 27017(后续如正式搭建需根据具体选择使用的数据服务实例进行配置)

3)DB 服务安装完成后,下载后台程序 tar包 https://packages.baidu.com/app/openrasp/release/1.2.3/ ,我们这里选择1.2.3版本,具体部署可根据需要选择最新版本。

解压后,启动后台服务。./rasp-cloud -d

4)安装完成可访问 web 管理后台。
在这里插入图片描述

三、测试用例部署(客户端部署)

springboot 集成

因公司的 java 项目大部分采用 springboot 部署方式,本次测试 openrasp 客户端 (agent) 也采用这种应用部署方式。

1)配置本地的 java IDE 环境

测试中下载使用了 eclipse IDE 环境,本地 maven 采用了 3.6.3 版本,在 eclipse 的 marketplace 中下载 springboot (STS 插件)版本 4.5.0
在这里插入图片描述创建一个 springboot web 项目,运行出现 springboot logo,本地环境配置完成
在这里插入图片描述2)下载 openrasp 官方提供的测试用例

https://github.com/baidu-security/openrasp-testcases/

测试用例提供 JSP 和 servlet 两种形式。(因为之前看安装文档中有 springboot 集成 JSP 的内容,以为只有 JSP 的测试用例)

  • 新建一个 springboot web 项目,将相应 JSP 放置在 /src/main/webapp 目录下

  • 修改 main class 中的 @Requestmap 将 http 请求映射到 index.jsp

@RequestMapping("/bbc")
    public String index(Model m){
        m.addAttribute("now",DateFormat.getDateTimeInstance().format(new Date()));
        return "index";  //视图重定向index.jsp
    }
  • 在 /src/main/resource 目录下新建 application.properties 文件(目录没有需新建),编辑如下内容
spring.mvc.view.prefix=/WEB-INF/jsp/ 
spring.mvc.view.suffix=.jsp

该配置文件定义 view 重定向的资源位置和查找的文件后缀。

  • 配置 POM 文件,添加需要的依赖组件,以下组件为 springboot 支持 JSP 必须添加(Jsp 本身就是一个 servlet,运行于服务器端,所以添加以下这部分依赖和支持)
<!-- servlet依赖 -->
  <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>   
  </dependency>
  <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
  </dependency>
  <!-- tomcat的支持-->
  <dependency>
         <groupId>org.apache.tomcat.embed</groupId>
         <artifactId>tomcat-embed-jasper</artifactId>
  </dependency>
  • 坑点 1:
    另外这里面还需要引用 插件,否则使用 maven 打包时不会把资源文件(JSP)打包进 jar 包。这个点测试了好久,Run as「java application」起来 springboot 服务后,web 访问 JSP 没有问题,maven 打 jar 包后运行访问 jsp 就报 404。
<resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/**</include>          
             </includes>
        </resource>
        <resource>
            <directory>src/main/webapp/</directory>
             <!--注意此次必须要放在此目录下才能被访问到 -->
             <targetPath>META-INF/resources</targetPath>
             <includes>
                <include>**/**</include>
             </includes>
        </resource>
    </resources>
  • 坑点 2:
    按照网上资料,添加 插件后,起了 jar 包访问还是无法访问。又继续查资料,发现有人说是 maven 打包的 bug,只有 spring-boot-maven-plugin 指定为 1.4.2 版本是可以的。于是在 POM 里面指定 spring-boot-maven-plugin 版本为 1.4.2。(此处编辑器一般会提示和继承的父依赖有冲突,只要不是 error 不用管就行)
<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
       <version>1.4.2.RELEASE</version>
   </dependency>
  • 一切修改完后,run as mvn install 打包成 jar 包,在目标目录会生成 jar 文件。
    在这里插入图片描述
  • 将 jar 文件上传至测试服务器,java -jar xxxx.jar 运行 jar 包,我们看到 jar 包启动成功
    在这里插入图片描述
  • 访问 index.jsp 的 url,可以看到测试用例的首页,测试用例部署成功。
    在这里插入图片描述

Tomcat 集成

因为官方提供的测试用例部分基于 servlet(ognl RCE、SQl 注入等),所以测试中选择将 serlvet 的测试用例集成到 Tomcat 运行。

部署过程:

  1. 在测试节点,安装 Tomcat,并启动 Tomcat 服务。
  2. 下载 servlet 测试用例,https://github.com/baidu-security/openrasp-testcases/
    在这里插入图片描述
  3. 将整个目录的文件夹导入 Eclipse 创建一个 maven 项目
  4. 通过mvn 打包生成 war 包,具体步骤可参照打 springboot 的 jar 包过程。
  5. 打包成功后,将 war 包拷贝到 tomcat 安装目录下的 /Tomcat/webapps 目录下
    在这里插入图片描述
  6. 重启 Tomcat服务,如无报错,访问 http://ip:port/vulns-servlet/index.jsp 即可访问到我们的测试用例。
  7. tomcat 的 openrasp 客户端安装参见第四部分客户端安装。

四、Openrasp 客户端安装

Springboot 的客户端安装

1)下载最新的 java 客户端程序( rasp-java.tar.gz 或 rasp-java.zip 压缩包)到部署测试用例的服务器并解压。

https://packages.baidu.com/app/openrasp/release/latest/

2)登录openrasp管理后台,点击添加主机,查看记录参数信息(安装客户端agent使用)
在这里插入图片描述3)在 rasp-java.tar.gz 解压的目录下,执行客户端 agent 安装命令( /home/springboot/ 是测试用例 jar 文件的存放目录)。

java -jar RaspInstall.jar -nodetect -install /home/springboot/ -backendurl http://ip:8086/ -appsecret rAxxxxxxDTAFJdmZN -appid 508c86xxxxxx62fb1cd9fe

在这里插入图片描述查看之前打包好测试用例 jar 包的存放目录 /home/springboot/ 下面多了个 /rasp 目录 里面有 rasp.jar 文件说明客户端安装成功。

4)带着 openrasp agent 启动应用实例

java -javaagent:/home/springboot/rasp/rasp.jar -jar test-0.0.1-SNAPSHOT.jar

看到应用运行起来。
在这里插入图片描述5)访问管理后台,查看主机管理,有新的管理主机注册上来。
在这里插入图片描述6)访问测试用例的网站实例,可以正常访问。
7)尝试访问测试用例,可以触发攻击行为并记录日志。
在这里插入图片描述到此,Openrasp 测试环境已全部搭建完成。

Logo

更多推荐