从零开始的Rasp——环境搭建

0x01 环境搭建

参考一下文章

浅谈RASP技术攻防之实战[环境配置篇]-先知社区

RASP从0到1-先知社区

文章环境配置:

Tomcat 8.5.56

Java 1.8

0x02 搭建中的问题

IDEA启动配置问题

Tomcat 参数
Configurations-Server-VM options:
-Dlog4j.debug
-Dfile.encoding=UTF-8
-noverify
-Xbootclasspath/p:Agent.jar(后续检测的代理jar包)
-javaagent:Agent.jar(后续检测的代理jar包)
Configurations-Deployment:
注意war包和Application context

依赖版本问题:

参考的文章2019,时间久远,有部分依赖已经升级

        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>9.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-commons</artifactId>
            <version>9.7.1</version> 
        </dependency>

同时,修改文章中的TestClassVistor

import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.commons.AdviceAdapter;

public class TestClassVisitor extends ClassVisitor implements Opcodes {

    public TestClassVisitor(ClassVisitor cv) {
        super(Opcodes.ASM5, cv);
    }

    @Override
    public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
        MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);

        if ("start".equals(name) && "()Ljava/lang/Process;".equals(desc)) {
            System.out.println(name + "方法的描述符是:" + desc);

            return new AdviceAdapter(Opcodes.ASM5, mv, access, name, desc) {
                @Override
                public void visitCode() {
                    // 这里使用 AdviceAdapter 自身的方法来操作字节码,避免直接使用 mv
                    this.visitVarInsn(ALOAD, 0);
                    this.visitFieldInsn(GETFIELD, "java/lang/ProcessBuilder", "command", "Ljava/util/List;");
                    this.visitMethodInsn(INVOKESTATIC, "cn/org/javaweb/agent/ProcessBuilderHook", "start", "(Ljava/util/List;)Z", false);
                    Label l1 = new Label();
                    this.visitLabel(l1);
                    super.visitCode();
                }
            };
        }
        return mv;
    }
}

0x03 项目结构

整个项目分为2个部分,agent和Web。
agent 后续计划是用于检测攻击,修改字节码等操作。
Web搭建一些CVE漏洞的靶场,目前已经加入了log4j2。

Web中目前不计划加入的:
XSS、SQL,
原因:
1、通过检测是否调用JDBC类或者其他数据库相关类,来阻断SQL注入,不现实;
2、如果是通过正则去判断,不如使用WAF;
3、个人认为RASP不能作为唯一的防护手段:a.Rasp做不了抗D,b.目前通过正则等方式拦截SQL、信息泄露误报率较高,且数量较多,从修改策略、服务器负载等方面来看waf更容易,c.如果防护设备出现问题,waf的部署调整更容易。

├─agent
│  ├─src
│  │  ├─main
│  │  │  ├─java
│  │  │  │  └─cn
│  │  │  │      └─JavaStudy
│  │  │  │          └─Rasp
│  │  │  │              └─agent
│  │  │  └─resources
│  │  │      └─META-INF
│  │  └─test
│  │      └─java
│  └─target
│      ├─classes
│      │  ├─cn
│      │  │  └─JavaStudy
│      │  │      └─Rasp
│      │  │          └─agent
│      │  └─META-INF
│      ├─generated-sources
│      │  └─annotations
│      ├─generated-test-sources
│      │  └─test-annotations
│      ├─maven-archiver
│      ├─maven-status
│      │  └─maven-compiler-plugin
│      │      ├─compile
│      │      │  └─default-compile
│      │      └─testCompile
│      │          └─default-testCompile
│      └─test-classes
└─Web
    ├─src
    │  ├─main
    │  │  ├─java
    │  │  │  └─Cve
    │  │  │      └─Log4j2
    │  │  ├─resources
    │  │  └─webapp
    │  │      └─WEB-INF
    │  └─test
    │      └─java
    └─target
        ├─archive-tmp
        ├─classes
        │  └─Cve
        │      └─Log4j2
        ├─generated-sources
        │  └─annotations
        ├─maven-archiver
        ├─maven-status
        │  └─maven-compiler-plugin
        │      ├─compile
        │      │  └─default-compile
        │      └─testCompile
        │          └─default-testCompile
        └─web
            ├─META-INF
            └─WEB-INF
                ├─classes
                │  └─Cve
                │      └─Log4j2
                └─lib

上一篇
下一篇