public static void premain(String agentArgs, Instrumentation inst);public static void premain(String agentArgs);复制代码在premain函数中,我们可以对字节码进?操作,织?Rasp的安全探针 。
public static void premain(String agentArgs, Instrumentation inst)throws ClassNotFoundException, UnmodifiableClassException {inst.addTransformer(new ClassTransformer());}复制代码借助ClassFileTransformer接口,实现对字节码的修改,定义一个类,实现ClassFileTransformer接口,并重写transform方法,在这个方法中,通过 ASM 技术修改字节码 。
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {byte[] transformeredByteCode = classfileBuffer;if (Config.moudleMap.containsKey(className)) {try {ClassReader reader = new ClassReader(classfileBuffer);ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);ClassVisitor visitor = Reflections.createVisitorIns((String) Config.moudleMap.get(className).get("loadClass"), writer, className);reader.accept(visitor, ClassReader.EXPAND_FRAMES);transformeredByteCode = writer.toByteArray();} catch (Exception e) {e.printStackTrace();}}return transformeredByteCode;}复制代码简单的原理就是这样的,因为篇幅优先就不在这里展开太多了,大家如果感兴趣的话,可以看一下 (github.com/xbeark/java… )这个开源项目,这是我的一个阿里同事搞的一个简单的 RASP Demo,里面包含了一些REC、SQL 注入等的防护:

文章插图
?
使用 Java实现的,代码不多,很容易理解 。
开源工具RASP作为一个相对成熟的技术,现在已经有很多开源的产品了,国内外都有很多 。如国外的Micro Focus、Prevoty、OWASP AppSensor、Shadowd等等 。
国内也有很多厂商也有类似的工具 。如:
- 安百科技——灵蜥
- www.anbai.com/lxPlatform/
- 百度——OpenRasp
- rasp.baidu.com/
- 椒图科技——云锁
- www.yunsuo.com.cn
- 阿里云——ARMS
- help.aliyun.com/document_de…
参考资料:
segmentfault.com/a/119000004…
www.freebuf.com/articles/we…
github.com/xbeark/java…
原文作者:HollisChuang
原文链接:
https://juejin.cn/post/7046937908644675597
如果你觉的本文对你有帮助,麻烦点赞关注支持一下
【全网连夜修复的Log4j漏洞,如何做到一行代码都不改?】
推荐阅读
- 微软推出 Win10 KB5008212 累积更新:修复安全问题
- 生科医学|家长轻信网红药:10岁娃用牙洞修复牙膏后损失6颗牙
- 电脑网络显示小地球却可以上网修复办法
- 爽肤水|爽肤水哪个牌子好?不仅能修复和收缩毛孔的,还护肤效果是双赢的
- 铁观音茶叶般多少钱,铁观音茶叶多少钱斤
- 如何修复Windows上无效的JPEG图像?
- mysqlcheck 修复数据库表
- 做完眉毛要涂修复剂吗
- 假体丰胸后怎么修复?
- 修复mac上的“蓝牙不可用”错误的方法
