插桩技术指在保证原有程序逻辑完整性的基础上,在程序中插入探针,通过探针采集代码中的信息(方法本身、方法参数值、返回值等)在特定的位置插入代码段,从而收集程序运行时的动态上下文信息。
![378d61dd0696391ccdc4c7cd10a222a0.png](https://i-blog.csdnimg.cn/blog_migrate/be25a6256b1ae0fa7d061c0eb5e534de.jpeg)
一、"插桩"式技术实现原理
"插桩"式实现通过两个阶段,动态HooK和污点传播。
(一)动态HooK阶段技术原理
动态Hook阶段,越靠近底层,拿到的应用数据越详尽,数据量也越大,技术难度也越高;以Java为例,最常见的Hook层是JVM层,通过JVMTI接口对字节码,在类被加载之前对类进行拦截,通过插入监听字节码,进行修改以实现Hook(具体HooK的参数可以通过分析不同框架提前定义好,也可以通过API调用链做全量HooK)。
(二)污点传播阶段技术原理
污点传播分析技术是信息流分析技术的一种实践方法,该技术通过对系统中敏感数据进行标记继而跟踪标记数据在程序中的传播检测系统安全。污点分析可以有效地检测该问题污点分析,首先要识别引入敏感数据的接口(source,污点源)并进行污点标记,如果被标记的变量又通过程序依赖关系传播了给其它变量,那么根据相关传播规则继续标记对应的变量,变量都将会被标记,当被标记的变量到达信息泄露的位置(sink,污点汇聚点)时,则根据对应的安全策略进行检测。
![4d25142269047033391de01cb43af736.png](https://i-blog.csdnimg.cn/blog_migrate/d417ae1b94c131713fab6669a8753ee7.jpeg)
![d78ec0250fec573bd479d8acffbef0fa.png](https://i-blog.csdnimg.cn/blog_migrate/fb06d7f4994a0272fc1dcc40ef5751d2.jpeg)
二、"插桩"式优劣分析
(一)"插桩"式优势总结
1.基于业务调用上下文进行分析无需重放,检测效率较高;
2.可获取更多的应用程序信息,因此发现的安全漏洞既可定位到代码行,还可以得到完整的请求和响应信息,完整的数据流和堆栈信息,便于定位、修复和验证安全漏洞;
3.检测逻辑无需重放请求,可对防重放逻辑做测试(支持测试AJAX页面、CSRF Token页面、验证码页面、API孤链、POST表单请求等环境)。
4.支持第三方组件管理、硬编码信息、弱加密算法等检测;
5.基于请求、代码、数据流、控制流综合分析判断漏洞,漏洞测试准确性高,误报率极低。
(二)"插桩"式略势总结
1.无法解决逻辑漏洞、越权漏洞等业务风险问题,对客户端的漏洞覆盖(XSS)支持不完善;
2.Agent方式对于应用侵入性较强,可能会改变业务原本逻辑,且需要在关键方法、函数进行挂钩Hook操作,会直接影响应用性能;
3.开发语言不同、框架不一致、系统版本不统一、JDK版本不同,集成适配成本较高,可能会导致应用系统崩溃或HooK点不足导致的漏洞未检出;
4.Agent与业务是紧耦合的,需要在每台应用服务器上部署对应版本及语言框架的Agent 且每次更新都需要重启WebServer,使用成本较高;
5.污点传播技术仅靠调用关系做验证,无法保证漏洞的准确性;
6.只能在具有虚拟运行时环境的语言上执行,例如Java,C#,Python和NodeJS。它不支持C,C ++和Golang等语言。
三、"插桩"式技术阶段对应用影响
(一)性能影响
1.动态Hook带来的性能问题
Agent在hook的方法执行前后进行数据获取,存在若干次函数调用,类似于在免费停车场的入口安装了收费点,停车前后需要等待开门才能通过,导致响应时间变长、内存占用率增加、cpu使用率增加,其中响应时间更为明显。
2.污点传播技术带来的性能问题
由于需要在内存中维护污点数据,因此会占用一定的内存资源;在构建传播路径时,需要根据通过污点匹配算法进行判断,因此需要占用CPU计算资源。
(二)安全影响
1.动态Hook技术可能带来的安全问题(这些安全问题并不是技术本身的问题,而是技术没有被正确、合理的使用所导致的)
(1)数据安全
Agent以AOP方式插入应用方法前后,获取方法、方法的参数、返回值等,可以直接操作数据库(盗取数据、删除数据等)。
(2)系统安全
Agent直接在应用上运行,可直接执行本地命令等。
(3)Dos问题
Agent如果未正确处理hook的方法,会导致内存溢出、服务崩溃等问题,导致DOS,如:String类的replace方法在logging包里大量使用,如果agent本身通过logging打印日志且hook了replace方法,可能导致死循环的出现,该问题可通过正确的处理replace方法进行规避。
(4)应用异常响应
如果Agent获取了IO流/文件流等内容 ,且未在读取流后插入新的流,会导致应用本身获取流时读取不到数据,产生异常。
2.污点传播阶段带来的安全问题
污点传播阶段对应用本身的安全没有影响。
总结:数据安全和系统安全两类问题属于"信任"类问题,虽然不能直接获取源代码,但也获取了数据库及本地命令权限,测试环境中数据不能外发,且数据多为脱敏数据或自造数据,安全相对可控;Dos问题和应用异常响应两类问题属于故障点积累的过程,只有经过大量不同环境的测试,才能最大程度的保障应用自身的稳定,并检测出漏洞。
我是谁?
我是一名从事了多年软件测试的老测试员,今年年初我花了一个月整理了一份最适合2020年学习的软件测试学习干货,可以送给每一位对软件测试感兴趣的小伙伴,想要获取的可以关注我的头条号并在后台私信我:【测试】,即可免费获取。