记事本

通过eBPF实现对Linux内核的灵活扩展

背景介绍 eBPF(Extended Berkeley Packet Filter),翻译为中文即扩展型柏克莱封包过滤器。单纯从名称上可能不容易理解eBPF究竟是什么,因为这个名称源自上世纪90年代初诞生的BPF。用直白的话来说,eBPF是在Linux操作系统内核中实现了一个虚拟机,当特定事件触发时,可以在这个虚拟机安全环境中执行eBPF字节码,从而实现性能监控、安全、网络等多种功能。 ...

使用Ghidra P-Code对OLLVM控制流平坦化进行反混淆

本文同步自银河实验室博客。 简介 OLLVM的控制流平坦化是一种常见的代码混淆方式,其基本原理是添加分发器来控制流程的执行。针对这种混淆方式的还原也有了许多研究和工具,大致思路分为动态和静态两种: 动态:通过Unicorn模拟执行的方式获取各真实块的关系 静态:通过符号执行、中间语言分析等方式获取真实块之间的关系。 静态方式进行OLLVM反混淆的工具,许多是依赖于Bina...

内联汇编的限制符

本文同步自银河实验室博客。 问题背景 最近,在编写代码时,因为限制用到了内联汇编(inline assembly)。之前对这种在C代码里嵌入汇编的方式了解的并不多,只知道可以通过asm()来实现。但是,编写的代码经过编译器-O2优化后的代码却出现了问题。 简单的示例代码如下: #include <stdio.h> #include <stdlib.h> i...

基于Unicorn和LibFuzzer的模拟执行fuzzing

本文同步自银河实验室博客。 之前,银河实验室对基于unicorn的模拟执行fuzzing技术进行了研究。在上次研究的基础上,我们进一步整合解决了部分问题,初步实现了基于Unicorn和LibFuzzer的模拟执行fuzzing工具:uniFuzzer。 关于这项研究的相关背景,可回顾实验室之前的这篇文章基于 unicorn 的单个函数模拟执行和 fuzzer 实现,这里就不再缀述了。总体...

Java反序列化漏洞辅助工具之gadgetinspector

本文同步自银河实验室博客。 Java反序列化漏洞可谓是近年来人气颇高的一种漏洞。由于其影响范围广,造成危害大,每次新曝光的反序列化漏洞,往往都要掀起一片血雨腥风。而针对这类漏洞的自动化扫描,大都集中于反序列化的入口(source),但对于如何构造调用链(gadget chain),最终到达目标方法(sink),则仍然需要研究者花费大量人工工作。虽然有诸如ysoserial和marshals...

MP4v2视频库漏洞分析

背景介绍 MP4v2是一个读取、创建、编辑MP4媒体文件的开源库。这个开源库在各大Linux发行版仓库中都有提供,也有在Android和iOS上的移植。然而,由于代码较为久远,且似乎已经无人维护,其中存在的安全漏洞较多。最近我们对这个库进行了漏洞挖掘,目前为止已经发现并提交了5个CVE。漏洞的类型也较为典型,例如整数溢出,double free等。在这篇文章中,我们将依次对这些漏洞的成因进...

AFL改进小试

在阅读学习AFL源码的过程中,有一个变异阶段引起了我们的极大兴趣:havoc。AFL的做法,是将一系列变异随机组合到一起,因此这部分是不折不扣的“看天吃饭”。 然而,当我们搞清楚havoc的变异策略后,脑海中闪过的第一个想法就是:能不能减少一些“随机化”,尽量去变异那些“更重要”的字符,从而提高路径覆盖效率?于是,基于这一点,我们对AFL做了一些尝试改进,不过也踩了很多坑。 基本思路 ...

AFL文件变异一览

上一篇文章主要对AFL的一些实现细节进行了分析,但正如文章最后所说,还有很多细节讲到。所以我又另外写了这篇文章,专门介绍AFL是如何对输入文件进行变异的。 总的来讲,AFL维护了一个队列(queue),每次从这个队列中取出一个文件,对其进行大量变异,并检查运行后是否会引起目标崩溃、发现新路径等结果。变异的主要类型如下: bitflip,按位翻转,1变为0,0变为1 arithm...

AFL内部实现细节小记

AFL(American Fuzzy Lop)是一款开源的fuzzing工具。最近我对其代码进行了简要的阅读,大致总结了一些AFL的实现细节,在此记录整理。 代码插桩 使用AFL,首先需要通过afl-gcc/afl-clang等工具来编译目标,在这个过程中会对其进行插桩。 我们以afl-gcc为例。如果阅读文件afl-gcc.c便可以发现,其本质上只是一个gcc的wrapper。我们不...

在Android N上对Java方法做hook遇到的坑

之前编写的Android hook工具YAHFA,在Android N之前的环境上运行基本是没有什么问题的。但是,在Android N之后,同样的代码会造成应用崩溃,并且可以稳定复现。为了解决这一问题,我对Android N引入的新机制进行了一定的研究,并针对性地做了修复。由于网上关于Android N混合编译及方法hook的资料不多,这里简要记录下近期学习的内容和修复YAHFA的思路。 ...