CVE-2016-5195是一个几乎通杀全版本linux的本地提权的神洞,最近学习了Linux内核的一些调试方法和漏洞利用技术,但到目前为止做过的漏洞还都是比赛中的题目,都是驱动上的漏洞,没有做过实际漏洞的分析,这篇文章作为第一次对实际Linux Kernel漏洞的分析学习。
代码虚拟机
Android Linker(二)
so链接
链接过程由soinfo_link_image函数完成,主要可以分为四个主要步骤:
1.定位dynamic section 由函数phdr_table_get_dynamic_section
完成,该函数会遍历program header,找到为类型为PT_DYNAMIC
的header, 从中获取的是dynamic section的信息,主要就是虚拟地址和项数。
Android Linker(一)
目前Android应用加固可以分为dex加固和Native加固,Native加固的保护对象为Native层的so文件,使用加壳、反调试、混淆、VM等手段增加so文件的反编译难度。目前最主流的so文件保护方案还是加壳技术, 在so文件加壳和脱壳的攻防技术领域,最重要的基础的便是对于Linker即装载链接机制的理解。本文分析了so文件的装载和链接过程,也就是在调用dlopen(“libxx.so”)之后,Linker的处理过程,还对so加壳的关键技术进行了简要介绍。
本文基于Android5.0 AOSP源码,仅针对ARM平台。
VirtualBox上调试Linux Kernel
之前写过用VMware调试Linux Kernel,今天又尝试了一下VirtualBox+gdb的组合。
环境搭建
我的环境,主机:Ubuntu14.04
虚拟机:VirtualBox5.1
客户机:Ubuntu12.04.5 x64
1.首先在VirtualBox上安装客户机
编译安装linux-3.13内核(一般是将源码放到/usr/src中):
Linux x64内核ROP
这是篇文章主要介绍一下Linux内核中的ROP chain如何构造来提升用户权限。内核ROP经常用来绕过和非可执行内存区域相关的限制,例如,在默认内核上,它提供了一种可以绕过内核和用户地址分离缓解技术(例如SMEP)的方法。
结果成功需要满足如下条件:
- 执行一个权限提升的有效载荷
- 可以引用驻留在用户空间的数据(允许从用户空间获取数据)
- 驻留在用户空间的指令可能不能被执行
在典型的ret2usr
攻击中,内核执行流被重定向到一个用户空间的地址,这个地址中包含了提权的载荷:
堆漏洞之House of Spirit
VMware上进行Linux Kernel调试
之前的Linux内核调试都是编译内核源码后,用qemu启动来调试,但是实际一些Linux的发行版还是需要用其他的虚拟机软件来进行调试,这里记录一下VMware调试环境的搭建过程。
主机是Ubuntu14.04 x86_64
VMware Workstation 12.5.6
虚拟机是Ubuntu12.04.5 x86_64
主机选择Ubuntu是因为需要用gdb对VMware中的Linux Kernel进行调试,选择这个版本的虚拟机是因为有一篇关于内核ROP的文章用到的这个版本,为了方便后面做实验选择这个版本。
配置过程如下: