BruceFan's Blog

Stay hungry, stay foolish

0%

CVE-2016-5195是一个几乎通杀全版本linux的本地提权的神洞,最近学习了Linux内核的一些调试方法和漏洞利用技术,但到目前为止做过的漏洞还都是比赛中的题目,都是驱动上的漏洞,没有做过实际漏洞的分析,这篇文章作为第一次对实际Linux Kernel漏洞的分析学习。

阅读全文 »

代码虚拟化简介

虚拟化是用一套自定义的字节码来替换程序中的native指令,而字节码在执行的时候又由程序中的解释器来解释执行。自定义的字节码只有解释器才能识别,一般工具无法识别这些字节码,所以基于虚拟机的保护相对其他保护而言要更加难破解。其中的关系就像解释语言一样,不是系统可执行文件,不能直接在系统中运行,需要相应的解释器才能运行,如Python。

阅读全文 »

so链接

链接过程由soinfo_link_image函数完成,主要可以分为四个主要步骤:
1.定位dynamic section 由函数phdr_table_get_dynamic_section完成,该函数会遍历program header,找到为类型为PT_DYNAMIC的header, 从中获取的是dynamic section的信息,主要就是虚拟地址和项数。

阅读全文 »

目前Android应用加固可以分为dex加固和Native加固,Native加固的保护对象为Native层的so文件,使用加壳、反调试、混淆、VM等手段增加so文件的反编译难度。目前最主流的so文件保护方案还是加壳技术, 在so文件加壳和脱壳的攻防技术领域,最重要的基础的便是对于Linker即装载链接机制的理解。本文分析了so文件的装载和链接过程,也就是在调用dlopen(“libxx.so”)之后,Linker的处理过程,还对so加壳的关键技术进行了简要介绍。
本文基于Android5.0 AOSP源码,仅针对ARM平台。

阅读全文 »

之前写过用VMware调试Linux Kernel,今天又尝试了一下VirtualBox+gdb的组合。

环境搭建

我的环境,主机:Ubuntu14.04
虚拟机:VirtualBox5.1
客户机:Ubuntu12.04.5 x64
1.首先在VirtualBox上安装客户机
编译安装linux-3.13内核(一般是将源码放到/usr/src中):

阅读全文 »

这是篇文章主要介绍一下Linux内核中的ROP chain如何构造来提升用户权限。内核ROP经常用来绕过和非可执行内存区域相关的限制,例如,在默认内核上,它提供了一种可以绕过内核和用户地址分离缓解技术(例如SMEP)的方法。
结果成功需要满足如下条件:

  • 执行一个权限提升的有效载荷
  • 可以引用驻留在用户空间的数据(允许从用户空间获取数据)
  • 驻留在用户空间的指令可能不能被执行

在典型的ret2usr攻击中,内核执行流被重定向到一个用户空间的地址,这个地址中包含了提权的载荷:

阅读全文 »

之前的Linux内核调试都是编译内核源码后,用qemu启动来调试,但是实际一些Linux的发行版还是需要用其他的虚拟机软件来进行调试,这里记录一下VMware调试环境的搭建过程。
主机是Ubuntu14.04 x86_64
VMware Workstation 12.5.6
虚拟机是Ubuntu12.04.5 x86_64
主机选择Ubuntu是因为需要用gdb对VMware中的Linux Kernel进行调试,选择这个版本的虚拟机是因为有一篇关于内核ROP的文章用到的这个版本,为了方便后面做实验选择这个版本。
配置过程如下:

阅读全文 »

这种类型的漏洞利用借助吾爱破解挑战赛的一个题目进行学习,给了一个有问题的驱动程序。
让在Ubuntu14.04 32位系统环境下提权,Ubuntu14.04内核版本是3.14,我的测试环境是在qemu中启动的一个linux-3.10的内核版本。用qemu是为了方便调试。

阅读全文 »

最常见的内核漏洞

  • NULL pointer dereference
  • kernel space stack overflow
  • kernel slab overflow
  • race conditions

一些漏洞利用比较简单,不需要准备Linux Kernel调试环境来写exploit,另外一些漏洞则需要Linux Kernel设计、工作原理和内存管理等方面的知识。

阅读全文 »