单机版本
OpenRASP 支持单机模式运行,只不过大部分操作都需要登录服务器进行。
修改配置
请参考 其他配置 文档,手动编辑配置文件。部分配置需要重启服务生效。
查看日志
请参考 日志说明 文档,了解我们的日志格式和存储路径。也可以参考 SIEM系统集成 文档了解如何将日志发往SIEM平台。
设置白名单
编辑配置文件,
- PHP 版本一般为: /opt/rasp/conf/openrasp.yml
- Java 版本路径为: $APP_HOME/rasp/conf/openrasp.yml
假设我们白名单的需求是这样的:
- 针对所有URL,关闭 SSRF 检测点
- 针对 www.baidu.com,关闭所有检测点
- 针对 pma.baidu.com/phpmyadmin/,关闭 SQL 检测点
我们定位到 hook.white
(如果没有可以手动添加)并增加如下内容:
hook.white:
"*":
- "ssrf"
"www.baidu.com":
- "all"
"pma.baidu.com/phpmyadmin/":
- "sql"
具体检测点的名字(如 ssrf/sql)可以从 alarm.log 报警日志里获取,也可以从 参数说明 里查看:
{
...
"attack_type": "readFile",
...
}
其中 all
表示关闭所有检测点。
检测插件
注意: 对于单机版本,Java 版本默认监控了插件目录,当目录里有任何插件发生变化,将会立即重新加载所有插件;PHP 版本默认没有开启 fswatch,所以需要重启 httpd/php-fpm 生效。远程管理版本不受影响,支持插件热加载。
插件安装目录如下,其中 official.js
为官方插件:
- Java 版本是
<app_home>/rasp/plugins/
- PHP 版本是
<openrasp_rootdir>/rasp/plugins/
开启拦截
打开官方插件,首先定位到如下内容,将 all_log
改为 false。修改后,大部分检测算法都会变成拦截模式:
var algorithmConfig = {
// 快速设置
meta: {
// 若 all_log 开启,表示为观察模式,会将所有的 block 都改为 log
all_log: true,
// 若 is_dev 开启,表示为线下环境,将开启更多消耗性能的检测算法
is_dev: false,
// schema 版本
schema_version: 1
},
...
对于其他算法,如XSS检测,还需要手动调整拦截策略,即修改 action
字段为 block
:
var algorithmConfig = {
...
xss_userinput: {
name: '算法2 - 拦截输出在响应里的反射 XSS',
action: 'block',
filter_regex: "<![\\-\\[A-Za-z]|<([A-Za-z]{1,12})[\\/ >]",
min_length: 15,
},
...
}
之后根据 检测插件 的说明决定是否重启应用服务器。
开启行为日志
打开官方插件,首先定位到如下内容,将log_event
改为true
var algorithmConfig = {
// 快速设置
meta: {
// 若 all_log 开启,表示为观察模式,会将所有的 block 都改为 log
all_log: true,
// 若 is_dev 开启,表示为线下环境,将开启更多消耗性能的检测算法
is_dev: false,
// 若 log_event 开启,将打印应用行为信息到 plugin.log
log_event: false,
// schema 版本
schema_version: 1
},
...
开启后,JS插件会把应用的所有行为和堆栈都打印到<rasp_home>/logs/plugin/plugin.log
,比如
2022-03-07 15:05:56,658 INFO [http-nio-8080-exec-1][com.baidu.openrasp.plugin.js.log] http://127.0.0.1:8080/ [official] JNDI lookup: ldap://127.0.0.1:1389/a [ 'com.sun.jndi.toolkit.url.GenericURLContext.lookup',
'com.sun.jndi.url.ldap.ldapURLContext.lookup',
'javax.naming.InitialContext.lookup',
'org.apache.logging.log4j.core.net.JndiManager.lookup',
'org.apache.logging.log4j.core.lookup.JndiLookup.lookup',
'org.apache.logging.log4j.core.lookup.Interpolator.lookup',
...]
安装插件
打开插件目录,将文件复制过来即可。之后根据 检测插件 的说明决定是否重启应用服务器。
状态检查
你可以在插件末尾,打印一条日志,e.g
plugin.log('初始化成功')
当插件成功加载后就会执行,并在 plugin.log
里打印这条消息:
2017-10-18 17:30:34,781 INFO [main][com.baidu.openrasp.plugin.log] [offical] 初始化成功
若插件有语法错误会打印日志,e.g
2017-10-18 17:40:01,402 INFO [main][com.baidu.openrasp.plugin.log] org.mozilla.javascript.EvaluatorException: unterminated string literal (plugin.js#335)
卸载插件
打开插件目录,删除指定的文件即可。之后根据 检测插件 的说明决定是否重启应用服务器。
应用加固
在配置文件里,找到 inject.custom_headers
内容,并修改配置即可。
inject.custom_headers:
X-Protected-By: OpenRASP
# X-Content-Type-Options: nosniff
# X-Frame-Options: deny
# X-XSS-Protection: 1; mode=block
# X-Download-Options: noopen
若要去掉所有响应头信息,可以设置为空数组:
inject.custom_headers:
# X-Protected-By: OpenRASP
# X-Content-Type-Options: nosniff
# X-Frame-Options: deny
# X-XSS-Protection: 1; mode=block
# X-Download-Options: noopen
FAQ
1. 我修改了检测插件,总要重启服务器才会生效
如果你是在 VMWare 虚拟机里测试 OpenRASP,然后插件是放在 VMWare 共享
里的,这个时候 inotify
不会生效,也就无法实时更新插件
这可能是因为 vmhgfs 跟 inotify 本身存在兼容性问题,解决方法就是将整个服务器软件都复制到虚拟机的磁盘上,比如 /root/tomcat/