应用实时防护(RASP)是一种现代的应用安全技术,它的原理是在应用程序运行时动态分析和监视应用程序的行为,以侦测和防止潜在的应用安全漏洞和攻击。RASP 技术通常被集成到应用程序代码中或应用程序服务器中,以实现实时的安全保护。以下是 RASP 技术的一般原理:
应用程序内嵌:RASP 技术通常以库或模块的形式嵌入到应用程序中,可以在应用程序的运行时启用和运行。这允许 RASP 技术深入了解应用程序的内部结构和行为。
实时监视:RASP 技术实时监视应用程序的执行。它跟踪应用程序的输入、输出、内部函数调用和数据流动等活动。
上下文感知:RASP 技术了解应用程序的上下文,包括用户、数据、环境和网络连接等。这有助于它更好地评估应用程序行为的合法性。
行为分析:RASP 技术对应用程序的行为进行分析,以检测不寻常的活动和潜在的攻击模式。它使用基于规则和机器学习等技术来进行分析。
攻击检测:RASP 技术识别和检测各种应用安全威胁,如 SQL 注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等。
实时响应:当 RASP 技术检测到潜在的威胁时,它可以采取多种行动,包括拒绝请求、阻止攻击、记录事件、生成警报或采取其他安全响应措施。
自我保护:RASP 技术还可以自我保护,意味着它会尽力保护自身免受恶意攻击或尝试绕过它的行为。
安全策略配置:RASP 技术通常允许管理员配置安全策略,以适应不同的应用程序需求和威胁模式。这包括定义哪些行为是允许的,哪些是禁止的,以及如何响应各种威胁。
总的来说,RASP 技术通过深入了解应用程序的内部运行时行为,实时监视和分析应用程序活动,以检测和防止潜在的应用安全漏洞和攻击。这有助于应用程序更好地自我保护并提供实时的安全防护。但需要注意,RASP 技术通常不是独立的安全解决方案,而应与其他安全控制(如WAF、IDS/IPS等)一起使用,以建立更全面的安全防御体系。
实验环境
Ubuntu 16.04
tomcat 7
以java为例的,WAVSEP的漏洞靶场
1
| https://github.com/sectooladdict/wavsep/releases/tag/wavsep-v1.5-war
|
首先安装Tomcat环境、mysql
1
| apt install tomcat7 tomcat7-admin mysql-server
|
mysql可能需要修改root密码
1 2 3
| mysql -u root use mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
|
编辑tomcat配置文件
1 2
| root@ubuntu2004:/etc/tomcat7# vim tomcat-users.xml root@ubuntu2004:/etc/tomcat7# service tomcat9 restart
|
添加内容:
1 2
| <role rolename="manager-gui"/> <user username="tomcat" password="XXXX" roles="manager-gui"/>
|
创建数据库目录y
1 2
| mkdir /var/lib/tomcat7/db chown -R tomcat7:tomcat7 /var/lib/tomcat7/db
|
登录后台,上传war包部署
1
| http://192.168.X.X:8080/manager/html
|
初始化
1
| http://localhost:8080/wavsep/wavsep-install/install.jsp
|
先看看最新版的能不能行
下载 rasp-java.tar.gz 或者 rasp-java.zip 并解压缩。之后进入到解压后的目录中执行RaspInstall.jar
1 2 3 4 5
| wget https://github.com/baidu/openrasp/releases/download/v1.3.7/rasp-java.zip unzip rasp-java.zip cd rasp-2022-01-28/ # /usr/share/tomcat7是tomcat根目录,可以通过whereis tomcat7查看,一般是含有bin目录的 java -jar RaspInstall.jar -install /usr/share/tomcat7
|
下面就是安装成功了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| root@ubuntu:~/rasp-2022-01-28# java -jar RaspInstall.jar -install /usr/share/tomcat7 OpenRASP Installer for Java app servers - Copyright 2017-2021 Baidu Inc. For more details visit: https://rasp.baidu.com/doc/install/software.html
Detected JDK version: 1.8.0_292 Detected application server type: Tomcat Duplicating "rasp" directory - /usr/share/tomcat7/rasp Make "rasp" directory writable
Generating "openrasp.yml" - /usr/share/tomcat7/rasp/conf/openrasp.yml - Create /usr/share/tomcat7/rasp/conf/openrasp.yml Updating startup script - /usr/share/tomcat7/bin/catalina.sh
Installation completed without errors. Please restart application server to take effect.
|
之后重启tomcat
下面目录是官方的插件,用的nodejs写的
1 2
| root@ubuntu:/usr/share/tomcat7/rasp/plugins# ls official.js
|
下面链接是官方规则可以检测的漏洞类型,但有些是仅IAST商业版支持
https://rasp.baidu.com/doc/usage/web.html
不过默认没有开启阻断,需要编辑official.js开启,之后重启tomcat7
1 2
| // 若 all_log 开启,表示为观察模式,会将所有的 block 都改为 log all_log: true,
|
访问以下sql注入
1
| http://192.168.XXX.XXX:8080/wavsep/active/SQL-Injection/SInjection-Detection-Evaluation-GET-500Error/Case01-InjectionInLogin-String-LoginBypass-WithErrors.jsp?username=textvalue%27%20or%207=7--%20&password=textvalue2
|
就会跳转到百度的页面
官方有文档
https://rasp.baidu.com/doc/dev/example.html
就是下nodejs
1 2
| apt-get install -y nodejs npm npm install -g openrasp
|
一个最小的SQL检测插件如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const plugin_version = '2018-1000-1000' const plugin_name = 'test-plugin'
'use strict' var plugin = new RASP(plugin_name)
const clean = { action: 'ignore', message: 'Looks fine to me', confidence: 0 }
// BEGIN ALGORITHM CONFIG //
var algorithmConfig = {}
// END ALGORITHM CONFIG //
plugin.register('sql', function (params, context) { plugin.log('SQL query: ' + params.query) return clean })
plugin.log('plugin-demo: plugin loaded')
|
主要就是调用 plugin.register 注册了SQL查询的检测函数,并将SQL语句打印到插件日志。
1 2
| params 为检查点提供的参数,如SQL语句、要读取的文件等等 context 为请求信息,如请求参数,服务器信息等等
|
检测函数return clean,其实就是放行,clean的action是ignore
而除了注册sql之外,还可以注册检测什么,可以看下面的链接
https://rasp.baidu.com/doc/dev/data.html
下面我随便列出一点
读取目录: directory
请求参数:request
删除文件:deleteFile
文件包含操作:include
文件上传:fileUpload
命令执行:command
代码执行(目前支持 eval/function 两种函数):eval
响应检查:response
写好之后可以用上面装好的rasp库进行测试,可以参考这里:https://rasp.baidu.com/doc/dev/test/main.html
测试用例以 JSON 格式保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [{ "id": "ssrf_userinput_intranet", "name": "ssrf", "action": "block", "params": { "hostname": "172.16.177.120", "ip": ["172.16.177.120"], "url": "http://172.16.177.120/hello.action?redirect=123" }, "context": { "parameter": { "url": ["http://172.16.177.120/hello.action?redirect=123"] } }, "description": "SSRF userinput match test" }]
|
其中,action 表示期望的结果,是拦截、日志还是放行;id 是测试用例编号。其他字段主要是对请求上下文的模拟。
运行单元测试,需要两个关键参数
- 测试用例目录,-d指定目录
- 检测插件路径,-p指定插件文件
1
| rasp check -d ./unitCases -p myplugin.js
|
实例:
tests文件夹放的是sql.json,来源:https://raw.githubusercontent.com/baidu/openrasp/191aa2e5ed8b80f9a3580d3c64dccb0e425ef373/agent/java/engine/src/test/resources/pluginUnitTest/unitCases/sql.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| # root@ubuntu:~# cat sql.js const plugin_version = '2018-1000-1000' const plugin_name = 'test-plugin'
'use strict' var plugin = new RASP(plugin_name)
const clean = { action: 'log', message: 'Looks fine to me', confidence: 0 }
const attack = { action: 'block', message: 'sql注入攻击,阻断', confidence: 0 } // BEGIN ALGORITHM CONFIG //
var algorithmConfig = {}
// END ALGORITHM CONFIG //
plugin.register('sql', function (params, context) { if(/(union.*select|sleep)/i.test(params.query)) return attack })
plugin.log('plugin-demo: plugin loaded') root@ubuntu:~# rasp check -d ./tests/ -p ./sql.js
OpenRASP plugin devtool - https://rasp.baidu.com [test-plugin] plugin-demo: plugin loaded
✓ sql.json Simple userinput match test: 3ms ✓ sql.json SQL injection with hex values: 1ms ✓ sql.json SQL injection with datetime methods: 0ms
3 passing (11ms)
|
默认的规则好像检测不到Get参数的反射型xss,我写两个简单的,不过就检测一个script,大家可以完善,不过调试的时候,好像querystring是有url编码的,这个需要注意,不然<script
是检测不到的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| const plugin_version = '2023-1015-1520' const plugin_name = 'xss-plugin'
'use strict' var plugin = new RASP(plugin_name)
var xssRegex = /script/i
const clean = { action: 'log', message: '无风险', confidence: 0 }
const attack = { action: 'block', message: '有攻击,阻断', confidence: 95 } // BEGIN ALGORITHM CONFIG //
var algorithmConfig = {}
// END ALGORITHM CONFIG //
plugin.register('request', function (params, context) { var querystring = context.querystring var message = ""; plugin.log(querystring) if (xssRegex.test(querystring)){ message = "XSS攻击:" + querystring return attack }
if (! message.length) { return clean; } }) plugin.log('xss-plugin plugin loaded')
|
《基于开源软件打造企业安全》
假如你看不到评论,可能是你访问Disqus被墙了,请使用代理访问
文章来源: https://www.giantbranch.cn/2023/10/11/%E5%BA%94%E7%94%A8%E5%AE%9E%E6%97%B6%E9%98%B2%E6%8A%A4%EF%BC%88RASP%EF%BC%89/
如有侵权请联系:admin#unsafe.sh