• 软件安装
  • 常见问题
    • 1. 常见自动安装失败原因
    • 2. OpenRASP 无法拦截攻击
    • 3. jnotify 无法释放
    • 4. Could not find or load main class com.baidu.rasp.App 错误
    • 5. APM 兼容性说明
    • 6. 常见 v8 加载失败原因
      • 6.1 java.io.IOException: Permission denied 异常
      • 6.2 java.lang.UnsatisfiedLinkError 错误

    软件安装

    最新版本下载 - 安装方法请参考子章节

    • Github - Releases
    • 国内镜像源代码下载 - 编译方法请参考 "二次开发" 章节

    • Github - baidu/openrasp其他常用链接

    • 发版纪要

    • 项目里程碑Beta 版本信息

    • beta 版本文档常见问题

    • 常见自动安装失败原因

    • OpenRASP 无法拦截攻击
    • jnotify 无法释放
    • Could not find or load main class com.baidu.rasp.App 错误
    • APM 兼容性说明
    • 常见 v8 加载失败原因

    常见问题

    1. 常见自动安装失败原因

    Java 版本

    错误码说明
    10001未找到插入 JAVA_OPTIONS 的标志
    10002未找到服务器根目录,e.g 使用了不存在的目录
    10003未找到启动脚本,e.g bin/catalina.sh
    10004无法识别应用服务器类型
    10005命令行参数错误
    10006不重启安装,attach 进程失败

    关于 java 不重启安装,卸载:由于不支持不重启升级,所以在不重启安装然后不重启卸载之后,想要再次安装需要重启服务器安装。

    PHP 版本

    错误码分类说明
    20001fswatch 类库初始化失败,比如 rasp 安装目录没有写权限
    20002日志记录发生异常,比如日志文件没有写权限
    20003申请共享内存失败
    20004php.ini 配置不正确,比如缺少 openrasp.root_dir 配置
    20005JavaScript 插件加载错误

    2. OpenRASP 无法拦截攻击

    Java 服务器

    • 首先,使用浏览器访问网站,检查服务器是否启动成功
      • 若服务器没有启动,可检查启动日志,寻找堆栈信息。对于 tomcat 通常是 catalina.out
    • 根据子章节的文档,检查 OpenRASP 是否安装成功
      • 方法一: 访问网站,检查响应头里是否有 X-Protected-By: OpenRASP 字样?
      • 方法二: 检查启动日志里是否有 OpenRASP Engine Initialized 字样
    • 检测测试用例是否支持

      • 对于官方测试用例,若无法拦截,则说明存在绕过或者bug
      • 对于其他测试用例,请联系QQ群群主,我们会检查PHP 服务器
    • 首先,使用浏览器访问网站,检查服务器是否启动成功

      • 若服务器没有启动,可检查 PHP/Apache/Nginx 错误日志
    • 根据子章节的文章,检查 OpenRASP 扩展是否安装成功
      • 方法一: 访问网站,检查响应头里是否有 X-Protected-By: OpenRASP 字样?
      • 方法二: 创建内容为 <?php phpinfo(); ?> 的PHP文件并访问,检查页面中是否包含 openrasp 扩展信息?
    • 检测测试用例是否支持
      • 对于官方测试用例,若无法拦截,则说明存在绕过或者bug
      • 对于其他测试用例,请联系QQ群群主,我们会检查

    3. jnotify 无法释放

    有的公司会定制应用启动脚本,比如 catalina.sh,当以root启动tomcat,他会自动切换到低权限用户,再继续启动

    通常,你会看到如下的堆栈错误

    1. Unable to extract jnotify library (rasp/libjnotify_64bit.so):
    2. java.io.FileNotFoundException: /data/w/tomcat/rasp/libjnotify_64bit.so (Permission denied)
    3. at java.io.FileOutputStream.open0(Native Method)
    4. at java.io.FileOutputStream.open(FileOutputStream.java:270)
    5. at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    6. at java.io.FileOutputStream.<init>(FileOutputStream.java:101)

    这说明 OpenRASP 在释放 jnotify 动态链接库时出错(用来监控插件目录变更),错误原因是 Permission denied

    所以,你可能需要调整下RASP目录权限,e.g chmod 777 -R rasp,然后再次启动 tomcat

    4. Could not find or load main class com.baidu.rasp.App 错误

    QQ群用户反馈,执行 RaspInstall 时报错,

    1. $ java -jar RaspInstall.jar -install /usr/local/tomcat/
    2. Error: Could not find or load main class com.baidu.rasp.App

    经过排查,这是因为当前目录本身没有读取权限导致的,执行 chmod 777 $PWD 后解决。

    5. APM 兼容性说明

    如果你同时使用 OpenRASPAPM 产品,比如 pinpoint,那你需要增大 -XX:MaxPermSize 参数。否则运行一段时间后可能会出现 java.lang.OutOfMemoryError: PermGen space 错误,产生大量GC,最终导致服务器假死

    如果原先没有配置过此参数,我们建议你设置为 1024m;如果配置过,我们建议在原先基础上增加至少 512m

    6. 常见 v8 加载失败原因

    6.1 java.io.IOException: Permission denied 异常

    如果 /tmp 目录没有写权限,Java 会抛出 java.io.IOException: Permission denied 异常,e.g

    1. java.lang.ExceptionInInitializerError
    2. at org.scijava.nativelib.NativeLoader.<clinit>(NativeLoader.java:107)
    3. at com.baidu.openrasp.v8.V8.Load(V8.java:25)
    4. at com.baidu.openrasp.plugin.js.JS.Initialize(JS.java:44)
    5. at com.baidu.openrasp.EngineBoot.start(EngineBoot.java:56)
    6. at com.baidu.openrasp.ModuleContainer.start(ModuleContainer.java:78)
    7. at com.baidu.openrasp.ModuleLoader.<init>(ModuleLoader.java:74)
    8. at com.baidu.openrasp.ModuleLoader.load(ModuleLoader.java:103)
    9. at com.baidu.openrasp.Agent.init(Agent.java:93)
    10. at com.baidu.openrasp.Agent.premain(Agent.java:70)
    11. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    12. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    13. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    14. at java.lang.reflect.Method.invoke(Method.java:606)
    15. at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
    16. at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:397)
    17. Caused by: java.io.IOException: Permission denied
    18. at java.io.UnixFileSystem.createFileExclusively(Native Method)
    19. at java.io.File.createTempFile(File.java:2001)
    20. at java.io.File.createTempFile(File.java:2047)
    21. at org.scijava.nativelib.BaseJniExtractor.getTempDir(BaseJniExtractor.java:123)
    22. at org.scijava.nativelib.WebappJniExtractor.<init>(WebappJniExtractor.java:69)
    23. at org.scijava.nativelib.NativeLoader.<clinit>(NativeLoader.java:103)
    24. ... 14 more

    此时请检查 /tmp 是否有写权限,以及是否有安全防护软件对 /tmp 目录增加了写保护。

    6.2 java.lang.UnsatisfiedLinkError 错误

    如果释放的 libopenrasp_v8_java.so 无法加载,Java 会抛出如下异常:

    1. ava.io.IOException: Couldn't load library library openrasp_v8_java
    2. at org.scijava.nativelib.NativeLoader.loadLibrary(NativeLoader.java:141)
    3. at com.baidu.openrasp.v8.V8.Load(V8.java:25)
    4. at com.baidu.openrasp.plugin.js.JS.Initialize(JS.java:44)
    5. at com.baidu.openrasp.EngineBoot.start(EngineBoot.java:56)
    6. at com.baidu.openrasp.ModuleContainer.start(ModuleContainer.java:78)
    7. at com.baidu.openrasp.ModuleLoader.<init>(ModuleLoader.java:74)
    8. at com.baidu.openrasp.ModuleLoader.load(ModuleLoader.java:103)
    9. at com.baidu.openrasp.Agent.init(Agent.java:93)
    10. at com.baidu.openrasp.Agent.premain(Agent.java:70)
    11. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    12. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    13. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    14. at java.lang.reflect.Method.invoke(Method.java:606)
    15. at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
    16. at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:397)
    17. Caused by: java.lang.UnsatisfiedLinkError: no openrasp_v8_java in java.library.path
    18. at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
    19. at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    20. at java.lang.System.loadLibrary(System.java:1088)
    21. at org.scijava.nativelib.NativeLoader.loadLibrary(NativeLoader.java:136)
    22. ... 14 more

    目前已知的情况有:

    • JDK是32位的,没有安装32位的glibc运行库。在CentOS系统下可以安装 glibc.i686 软件包。
    • JDK是64位的,在 docker:alpine 环境里无法启动。这个是已知 glibc 兼容问题,可以考虑换成 centos docker 容器。如果是其他情况,请加入QQ技术讨论群联系我们。