JRASP 部署容易、接入便捷和安全插件面向开源社区等特点,得到越来越多的企业用户青睐,本文以 Undertow安全插件的视角来介绍下如何定制属于自己的插件。
undertow简介
Undertow 是红帽公司开发的一款基于 NIO 的高性能 Web 嵌入式服务器。
特点 :
轻量级:它是一个 Web 服务器,但不像传统的 Web 服务器有容器概念,它由两个核心 Jar 包组成,加载一个 Web 应用可以小于 10MB 内存
Servlet3.1 支持:它提供了对 Servlet3.1 的支持
WebSocket 支持:对 Web Socket 完全支持,用以满足 Web 应用巨大数量的客户端
嵌套性:它不需要容器,只需通过 API 即可快速搭建 Web 服务器。
springboot 默认内嵌的web容器是tomcat,可以替换为undertow
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
http request 类
rasp检测到敏感行为时,可以获取关联到该请求的报文详情(http、socket、rpc等),hook 这些类是实现关联的基础。对于 undertow选择下面的4个类hook。
01
http info
<1> io.undertow.servlet.handlers.ServletInitialHandler#
handleFirstRequest
HttpServerExchange exchange 对象可以获取http请求的相关信息如cookie、header等
02
获取请求参数
<2>io.undertow.server.HttpServerExchange#getQueryParameters
03
截取http body
<3> io.undertow.servlet.spec.ServletInputStreamImpl#read
04
清除线程变量
<4> io.undertow.servlet.handlers.ServletInitialHandler
#dispatchRequest
保存请求信息使用的是threadlocal,因为线程池的重用,在使用完成之后必须清除。
打包插件
打包好的jar包上传到对象存储服务中(或者可以提供下载的服务上,并获取下载链接)
并且计算jar包的hash (linux 平台使用 md5sum 命令、macos 使用md5命令,都是可以的,并且计算结果是一致的)。配置hash的原因是防止插件被篡改而加载后门等,保障插件的安全性。
如果插件有配置参数,也可以加上。
新建配置与配置下发
新增配置,将其勾选上,然后下发到指定机器上(无需重启java进程即可生效)
配置下发:
测试插件是否生效
请求关联信息上报正常
关于jrasp
如需获取更多信息,请访问我们的官网(http://jrasp.com)
使用请联系微信:sear2022