Liuw's Thinkpad

想要赢就先学会输,想要成功就先学会失败

Archive for the ‘stack overflow’ tag

Windows Mobile栈溢出漏洞利用

with 6 comments

这是暑期实习的成果。原来查了Phrack和PacketStorm等网站,都没有发现这方面的文档。

这篇文章主要解决了如何编写Unicode-proof ARM Shellcode的问题,个人觉得还是比较有意义的。其实也不一定是局限于Windows Mobile系统,只要是ARM架构,遇到要写Unicode-proof Shellcode这样的问题,这篇文章里面的方法都可以作为参考,因而放上来与大家一起分享。

本文采用Attribution-Noncommercial-Share Alike 2.5 China Mainland授权。

文章有点长,所以只放目录了,有兴趣看的再下PDF吧由于和导师有协议,所以不能把文章放出来,实在需要的联系我。

目 录
第一章 绪论 4
1.1 研究背景和意义 4
1.2 章节安排 4
第二章 相关概念和工具 5
2.1 Windows Mobile 6.1系统 5
2.2 ARM架构 5
2.3 Unicode编码 6
2.4 缓冲区溢出漏洞 6
2.5 相关工具软件 6
第三章 ARM架构 7
第四章 Windows CE 5.2 7
4.1 Windows CE 5.2的内存架构 7
4.2 当前运行进程的内存映射情况 9
4.3 Windows CE 5.2下的ARM栈祯结构 10
4.4 Windows CE 5.2下的ARM汇编 10
4.5 Windows CE 5.2系统安全性分析 11
第五章 漏洞分析与攻击 12
5.1 漏洞描述 12
5.2 漏洞成因 12
5.3 分析与攻击 12
第六章 已知的Shellcode编写技术 14
6.1 IA-32上Unicode-proof Shellcode的编写 14
6.2 纯数字字母的ARM Shellcode的编写 15
6.3 对两个方法的总结 16
第七章 Unicode-proof ARM Shellcode 16
7.1 ARM与x86在Shellcode编写上的差异 17
7.2 指令分析 17
7.2.1 Condition field 17
7.2.2 Data-processing instructions 18
7.2.3 Branch instructions 21
7.2.4 Load and store instructions 23
7.3 Shellcode编写方法:DirectConstructor 24
7.4 Shellcode实例:DirectConstructor方法 26
7.5 Shellcode编写方法:MagicLoopDecoder 31
7.6 Shellcode实例:MagicLoopDecoder方法 32
7.7 对编写Shellcode的一些建议 36
第八章 总结和展望 36
8.1 项目已完成部分 37
8.1.1 对千千静听1.29版的攻击 37
8.1.2 Unicode-proof ARM Shellcode的编写方法 37
8.1.3 辅助工具的编写 37
8.2 未来工作 37
8.2.1 Thumb状态指令Shellcode的编写 37
8.2.2 全自动化Shellcode生成工具的编写 38
参考文献 38
致谢 39
附录 40
A.1 trans工具的使用 40
A.2 findmagic工具的使用 41

Written by liuw

September 1st, 2009 at 2:50 pm

Security Cookie检测栈溢出

with one comment

过来中科院的,做的是从来都没有接触过的移动平台安全。师兄给了我两个方向,一个是漏洞挖掘,一个是漏洞利用,叫我先看看资料,看看自己喜欢哪个。

挖掘,主要使用的方法是fuzzing,其实从原理上说还不是特别的难,要写程序也挺容易,所以花在上面的时间不多。利用,师兄说其实和x86上的漏洞利用是差不多的,无非也是溢出。不过因为手机一般是使用ARM的处理器,所以汇编是不大一样的。于是上周基本在资料和小程序实验中试过,主要方面都花在钻手机漏洞利用方法了。

现在要讲的,倒也不是ARM汇编,而是在做实验中发现的一个有趣的东西,叫security cookie,可以检测是否有栈溢出发生。

code

在返回之前,调用了一个security_check_cookie的函数。

security_check_cookie

security cookie是编译器的一个feature(当然是可以关掉的)。原理是这样的,在每次进入函数的时候,在缓冲区边界处留出一个存储空间,复制一份security cookie的值,然后在函数返回之前,检查此地址的内容与security cookie是否一致。假如不一致,就说明栈发生了溢出。security cookie是一个magic number,基本上程序每次运行时都是不一样的,要猜中是很难的。即使猜中了,此cookie也会影响shellcode的编写。security cookie的一套代码,都是由编译器自动生成的,因而程序是不需要作什么修改的。

Written by liuw

July 20th, 2009 at 7:20 pm