1、b11oo4 43 3敏感敏感sinksink识别识别特定参数特定参数2 21 1蓝军场景下的代码审计路由提取路由提取目 录SASTSAST类工具限制类工具限制开发框架不固定、代码写法不固定、源码限制、学习成本正则类工具瓶颈正则类工具瓶颈代码写法不固定、缺乏语义信息投入与效率投入与效率追求高效率SAST类工具限制正则类工具瓶颈投入与效率蓝军场景下的代码审计蓝军场景下的代码审计 SASTSAST限制限制以CodeQL举例1.源码2.断链正则表达式正则表达式瓶颈瓶颈代码写法多变正则表达式瓶颈无上下文关联信息JavassistJavassist打破打破困境困境Javassist Java 字节码操作
2、库,提供多种APICtClass Java类CtMethod Java方法CtField Java字段AnnotationsAttribute、Annotation、MemberValue 注解参考文档https:/www.javassist.org/html/AI coding输入副标题 输入副标题提取路由提取提取路由路由注解属性结构的语义解析提取提取路由路由控制器提取提取提取路由路由方法提取路由兼容层次化路由输入副标题 输入副标题敏感sink识别敏感敏感sinksink识别识别Java 方法调用指令 invokevirtual:调用实例方法(虚方法调用)invokeinterface:调用
3、接口方法invokespecial:调用特殊方法(构造函数、私有方法、父类方法)invokestatic:调用静态方法invokedynamic:动态方法调用(Java 7+)敏感sink识别Java 方法调用指令敏感敏感sinksink识别识别sink列表敏感敏感sinksink识别识别整体过程constPool 常量池符号引用:类名、方法名、字段名字面量:字符串常量、数字常量方法/字段描述符:参数类型、返回类型等输入副标题 输入副标题特定参数特定参数单参数执行伪代码特定参数特定参数复现CVE-2022-21724 Postgresql JDBC 任意文件写入 特定参数特定参数单String
4、构造函数 ClassPathXmlApplicationContext特定参数特定参数parameter操作APIgetParameterTypes()-获取参数类型数组(CtClass),存在符号引用转换Class对象getSignature()-获取包含参数信息的方法签名特定参数特定参数测试案例特定参数特定参数工具开发实践getParameterTypes-类必须在classpool中可用扩大classpool getDescriptor 获取方法描述符 总结总结Javassist VS 正则表达式 具备语义解析的能力,能力超过正则表达式。缺乏SAST等工具的代码分析能力,更适合作为辅助工具。