基于java字节码的灰盒动态漏洞检测

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 基于java 字节码的灰盒动态漏洞检测 杭州安恒-­‐吴卓群
2. About  Me   !  About Me •  ⺫目目前就职于杭州安恒信息技术有限公司,任信息安全服 务部副总监、研究院安全分院负责人人、高高级安全研究员。 •  从事多年的 web 应用用安全领域研究。擅⻓长漏洞发掘、代 码审计、安全测试。
3. Why   •  目前常用的WEB 应 用自 动 化 测试 程序   –  白盒 测试 (源 码审计 系 统 )   •  误报 率太高   •  逻辑顺 序关 联 的 问题 无法 测试   –  黑盒 测试 (web 扫 描器)   •  很多漏洞无法 检测 ,如   –  存 储 跨站   –  ⻚页面面无无变化的注入入(  update,  insert   等)   –  大部分的代 码 注入   –  很多文件操作相关的漏洞   考虑使用 基于灰盒 的fuzzing 方式  
4. •  ⺫目目前做的内容 –  Java平台的下的灰盒fuzzing测试 –  劫持关键的操作函数(使用用hook的方方式)
5. •  Java  hook   的方式   太 过 繁 琐 ,兼容性不好   无法 满 足要求   修改中间 件及 JVM   字节码动 态修改   系统提供 的  hook   Java   Hook  
6. •  JAVA 编译执行行代码的过程   编译   Java源程序 (.java)   解释     字节码程 序(.class)   设置   hook   运行   JVM(转换 字节码到特 定平台机器 码)   操作系统  
7. •  Javaagent 实现 运行 时动态 修改   –   在启 动 和运行期都可以加 载 agent代理,在启 动 的 时 候可通 过 -­‐javaagent参数来 执 行agent 代理,而在运行期就是通 过 aFach 这 种机制 动态 load了  
8. •  修改  MANIFEST.MF   文件中 增加启动     Manifest-­‐Version:  1.0   Sealed:  true   Main-­‐Class:  JagentMain   Premain-­‐Class:  com.jagent.Jagent  
9. •  通过  InstrumentaRon 实现动态 字 节码 修改    
10. •  强大大的  Javassist   –  Javassist   是一个开源的分析、 编辑 和 创 建Java 字 节码 的 类库 。Javassist   是 jboss   的一个子 项 目,其主要的 优 点,在于 简单 ,而且快速。 直接使用java 编码 的形式,而不需要了解虚 拟 机指令,就能 动态 改 变类 的 结 构,或者 动态 生 成 类 。   –  利用 javassist   对⺫目目标函数动态注入入字节码代码  
11. •  Javassist   实现代码动态修改   –  备 份原有函数   –  修改原有函数注入回 调 函数  
12. •  Tomcat   为 例, 劫持的关键函数   –  Request 请 求初始化函数 –  Request 销毁 函数   –  数据 库查询 函数   –  ⻚页 面 输 出函数   –  ……    
13. •  Request 请 求初始化函数   –  只需要能在 执 行 执 行其他劫持函数前 获 得request   请求 的函数都可以   –  Org.apache.catalina.connector.Request   类   –  setRequestedSessionId函数       •  Request 请 求 销毁 函数   –  其他函数 执 行 结 束后request 销毁 前 执 行的函数都可以   –  org.apache.catalina.connector.Request   类   –  recycle  
14. •  数据 库查询 函数   –  各种  jdbc   的  class   库 中的 执 行 sql 语 句的函数   –  如:   com.mysql.jdbc.StatementImpl 类   executeQuery   函数     可检测存储跨站或注入入漏洞  
15. •  ⻚页 面 输 出函数   –  Org.apache.jasper.runRme.JspWriterImpl    write   函数     检测跨站脚本、信息泄露等漏洞  
16. •  使用反射解决 变 量 类型问题   –  在 编 写代 码时 ,会碰到大量中 间 件中使用的 class,及函数   –  通 过 反射的方式解决  
17. •  系统函数的  HOOK   –  部分漏洞的操作 实习 并非中 间 件,如   •  文件操作的漏洞   –  无法通 过 hook中 间 件 实现 ,只能hook系 统 函 数完成  
18. •  Java.lang   包的 处 理   –  JVM启 动 是加 载 RunRme,File等 类 加 载优 先于 premain 函数,所以无法劫持   –  Java.lang   中的  class   出于安全考虑无无法  redefine   或重新加载  
19. •  Xbootclass 和  SecurityManager   –  -­‐Xbootclasspath:bootclasspath   让  jvm   从指定路 径(可以是分号分隔的⺫目目录、 jar、或者zip )中 加载 bootclass ,用用来替换 jdk的rt.jar   –  SecurityManager,java的安全管理器(沙 盘 )    
20. ClassLoader 加载流程   •  每个ClassLoader 加载 Class 的过程是:     –  1. 检测此 Class 是否载入入过(即在 cache中是否有此Class),如果有到 8,如果没有到2     –  2.如果parent  classloader不存在(没有parent,那parent一定是 bootstrap  classloader了),到4     –  3. 请求 parent  classloader 载入入,如果成功到 8,不成功到5     –  4. 请求 jvm从bootstrap  classloader 中载入入,如果成功到 8     –  5. 寻找 Class文件(从与此classloader 相关的类路径中寻找)。如果 找不到则到 7.     –  6. 从文文件中载入入 Class,到8.     –  7.抛出ClassNotFoundExcepRon.     –  8.返回Class.    
21. •  SecurityMananger   –  安全管理器根据Java安全策略文件决定将哪 组权 限授予 类   –  也可以自定 义 SecurityManager完成需要的功能  
22. •  如何获得测试用用例   捕获正常请求, 生成fuzzing数据   设置HTTP代理   正常请求   浏览器   使用javaagent截 获fuzzing请求   正常请求   Proxy   Web服务器   Fuzzing   数据  
23. •  部署方式   –  修改启动参数 ,正常启 动    
24. •  扩展   –  劫持框架的关键函数,对中间件的安全进行行测 试 –  劫持所有应用用函数,判断瓶颈的函数 –  劫持函数进行行攻击阻断 –  Php的灰盒, apache模块扩展 –  .net的灰盒测试, Profiling  API
25. THINK  YOU  

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-28 03:41
浙ICP备14020137号-1 $Map of visitor$