官方插件定制

不同的研发人员,编码的习惯可能会不同;不同的业务,应用场景也不同。根据QQ群里用户的反馈,我们进行了整理。如果还有没覆盖的情况,请联系QQ群主,我们会给出方案,并更新文档。

案例研究

我如何审计应用执行的命令?

OpenRASP 可以记录应用所有执行的命令,并上传到管理后台。若要开启,请在管理后台定位到 系统设置 -> 防护设置 -> 命令执行,将 记录或者拦截所有命令执行操作 改为 记录日志 即可(默认关闭)

通过文件函数写入 WebShell,OpenRASP 不会拦截?

我们发现,有的业务需要能够写 PHP 脚本,e.g

  1. wp_config.php - wordpress 安装时需要写配置文件,如果是安装好的可忽略
  2. 201704_cplog.php - discuz 错误日志,经常更新
  3. runtime/cache/ - thinkphp 框架页面缓存
  4. ...

由于这类情况较多,官方插件已经默认不再拦截写 PHP/JSP 等脚本文件的操作。如果你没有这样的业务,可以在管理后台定位到 系统设置 -> 防护设置 -> 任意文件写入,并将 拦截所有 php/jsp 等脚本文件的写入操作 改为拦截攻击或者记录日志即可。

我使用 WebShell 查看了一些系统目录,OpenRASP 不会拦截?

理论上,web 应用不应该访问 webroot 之外的文件。但在实际情况中,我们发现了很多例外:

  1. 某OA厂商反馈,他们的 tomcat 应用会读取 ../../../../license.dat,会造成误报
  2. PHP Larvael 框架,需要包含 webroot 同级目录的框架文件

为了兼容这些情况,我们在 directory_outsideWebrootinclude_outsideWebroot 等几个算法里都增加了判断,只有当请求参数里包含跨目录,且跳出了 webroot,我们才会判定为漏洞,比如:

  1. GET /download.php?file=./../..///././../../etc/resolv.conf

当然,如果你想快速解决这个问题,可以通过增加文件目录探针来解决。即定位到 forcefulBrowsing,修改探针列表:

  1. var forcefulBrowsing = {
  2. ...
  3. // 目录探针 - webshell 查看频次最高的目录
  4. unwantedDirectory: [
  5. ],
  6. // 文件探针 - webshell 查看频次最高的文件
  7. absolutePaths: [
  8. ]
  9. ...
  10. }

当应用访问了这些敏感文件或者目录,我们就会打印报警或者拦截请求。

我的SQL语句里包含 chr(10) 调用,导致被拦截

在SQL注入阶段,自动化利用工具通常会大量使用 chr 函数来实现盲注攻击。因此,OpenRASP对SQL语句进行了检查,默认情况下如果 chr 函数调用超过5次,就会判定为攻击。

若要关闭这个检测算法,请打开官方插件,定位到如下内容:

  1. function_count: {
  2. chr: 5,
  3. char: 5
  4. }

删除 chr 这一行后,重新在后台上传并下推插件即可。

我在使用 phpMyAdmin 的时候,操作被 OpenRASP 拦截

URL白名单是一个比较好的解决方式,目前可以通过修改检测插件的方式来实现。请参考 管理后台 - 添加白名单 进行配置。

某些情况下,你还需要重启PHP服务器生效。

我在应用内部,使用 ../../ 读取web目录外面的文件,OpenRASP不会拦截?

有一些OA厂商,在Windows下面会使用类似 ../../../license/license.dat 来读取文件,所以单纯看应用是否用 ../ 来读取其他目录的文件,是会产生误报的。所以我们默认关闭了 readFile_outsideWebroot 算法。

如果你没有这样的需求,可以打开这个算法。

支付回调接口,测试环境下SSRF误报?

SSRF 常见的特征为,访问的URL来自用户输入,且域名指向内网地址。比如,

  1. GET /ssrf.php?url=http://test.baidu.com

按照这个思路,我们实现了 ssrf_intranet 检测算法。但是在某些测试环境下,这个算法会产生误报。

  1. 支付类的接口,当支付完成,通常会调用回调接口以通知支付是否成功。在测试环境,回调接口通常是内网地址,就造成了 ssrf_intranet 算法的误报。当然,线上的回调接口都是公网地址,不会有这个问题。

OpenRASP 支持XSS检测吗?

支持,是通过检查页面结构是否被用户输入所改变来实现的。

其他参考

官方插件无法拦截攻击,我应该如何调试

有的时候,你会发现官方插件无法拦截攻击,你可以参考 999-event-logger.js 这个插件,将插件收到的内容打印出来,并观察官方插件的检测算法是不是不够完善?

有问题请到QQ群里反馈,我们会尽快解决。