- 官方插件定制
- 案例研究
- 我如何审计应用执行的命令?
- 通过文件函数写入 WebShell,OpenRASP 不会拦截?
- 我使用 WebShell 查看了一些系统目录,OpenRASP 不会拦截?
- 我的SQL语句里包含 chr(10) 调用,导致被拦截
- 我在使用 phpMyAdmin 的时候,操作被 OpenRASP 拦截
- 我在应用内部,使用 ../../ 读取web目录外面的文件,OpenRASP不会拦截?
- 支付回调接口,测试环境下SSRF误报?
- OpenRASP 支持XSS检测吗?
- 其他参考
- 官方插件无法拦截攻击,我应该如何调试
- 官方插件无法拦截攻击,我应该如何调试
官方插件定制
不同的研发人员,编码的习惯可能会不同;不同的业务,应用场景也不同。根据QQ群里用户的反馈,我们进行了整理。如果还有没覆盖的情况,请联系QQ群主,我们会给出方案,并更新文档。
案例研究
我如何审计应用执行的命令?
OpenRASP 可以记录应用所有执行的命令,并上传到管理后台。若要开启,请在管理后台定位到 系统设置 -> 防护设置 -> 命令执行,将 记录或者拦截所有命令执行操作 改为 记录日志 即可(默认关闭)
通过文件函数写入 WebShell,OpenRASP 不会拦截?
我们发现,有的业务需要能够写 PHP 脚本,e.g
wp_config.php - wordpress 安装时需要写配置文件,如果是安装好的可忽略
201704_cplog.php - discuz 错误日志,经常更新
runtime/cache/ - thinkphp 框架页面缓存
...
由于这类情况较多,官方插件已经默认不再拦截写 PHP/JSP 等脚本文件的操作。如果你没有这样的业务,可以在管理后台定位到 系统设置 -> 防护设置 -> 任意文件写入,并将 拦截所有 php/jsp 等脚本文件的写入操作 改为拦截攻击或者记录日志即可。
我使用 WebShell 查看了一些系统目录,OpenRASP 不会拦截?
理论上,web 应用不应该访问 webroot 之外的文件。但在实际情况中,我们发现了很多例外:
- 某OA厂商反馈,他们的 tomcat 应用会读取 ../../../../license.dat,会造成误报
- PHP Larvael 框架,需要包含 webroot 同级目录的框架文件
为了兼容这些情况,我们在
directory_outsideWebroot
、include_outsideWebroot
等几个算法里都增加了判断,只有当请求参数里包含跨目录,且跳出了 webroot,我们才会判定为漏洞,比如:
GET /download.php?file=./../..///././../../etc/resolv.conf
当然,如果你想快速解决这个问题,可以通过增加文件目录探针来解决。即定位到 forcefulBrowsing
,修改探针列表:
var forcefulBrowsing = {
...
// 目录探针 - webshell 查看频次最高的目录
unwantedDirectory: [
],
// 文件探针 - webshell 查看频次最高的文件
absolutePaths: [
]
...
}
当应用访问了这些敏感文件或者目录,我们就会打印报警或者拦截请求。
我的SQL语句里包含 chr(10) 调用,导致被拦截
在SQL注入阶段,自动化利用工具通常会大量使用 chr 函数来实现盲注攻击。因此,OpenRASP对SQL语句进行了检查,默认情况下如果 chr
函数调用超过5次,就会判定为攻击。
若要关闭这个检测算法,请打开官方插件,定位到如下内容:
function_count: {
chr: 5,
char: 5
}
删除 chr 这一行后,重新在后台上传并下推插件即可。
我在使用 phpMyAdmin 的时候,操作被 OpenRASP 拦截
URL白名单是一个比较好的解决方式,目前可以通过修改检测插件的方式来实现。请参考 管理后台 - 添加白名单 进行配置。
在某些情况下,你还需要重启PHP服务器生效。
我在应用内部,使用 ../../ 读取web目录外面的文件,OpenRASP不会拦截?
有一些OA厂商,在Windows下面会使用类似 ../../../license/license.dat
来读取文件,所以单纯看应用是否用 ../
来读取其他目录的文件,是会产生误报的。所以我们默认关闭了 readFile_outsideWebroot
算法。
如果你没有这样的需求,可以打开这个算法。
支付回调接口,测试环境下SSRF误报?
SSRF 常见的特征为,访问的URL来自用户输入,且域名指向内网地址。比如,
GET /ssrf.php?url=http://test.baidu.com
按照这个思路,我们实现了 ssrf_intranet
检测算法。但是在某些测试环境下,这个算法会产生误报。
- 支付类的接口,当支付完成,通常会调用回调接口以通知支付是否成功。在测试环境,回调接口通常是内网地址,就造成了 ssrf_intranet 算法的误报。当然,线上的回调接口都是公网地址,不会有这个问题。
OpenRASP 支持XSS检测吗?
支持,是通过检查页面结构是否被用户输入所改变来实现的。
其他参考
官方插件无法拦截攻击,我应该如何调试
有的时候,你会发现官方插件无法拦截攻击,你可以参考 999-event-logger.js 这个插件,将插件收到的内容打印出来,并观察官方插件的检测算法是不是不够完善?
有问题请到QQ群里反馈,我们会尽快解决。