adobe flash player invalid pointer vulnerability

29
FLASH漏洞分 陈志杰 SWF文件格式 无效指针利用 欺骗代码检查 In the wild 码分析演示 总结 . . . . . . . . . . Adobe Flash Player Invalid Pointer Vulnerability 漏洞分析 陈志杰 1 1 北京大学计算机所信安中心 Mar. 2009

Upload: z-chen

Post on 28-Jun-2015

926 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN . . . . . .

.

.. ..

.

.

Adobe Flash Player Invalid Pointer Vulnerability漏洞分析

陈志杰1

1北京大学计算机所信安中心

Mar. 2009

Page 2: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 2

内容大纲

.. .1 SWF文件格式

.. .2 无效指针利用

.. .3 欺骗代码检查

.. .4 In the wild 代码分析演示

.. .5 总结

Page 3: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 3

内容大纲

.. .1 SWF文件格式

.. .2 无效指针利用

.. .3 欺骗代码检查

.. .4 In the wild 代码分析演示

.. .5 总结

Page 4: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 4

SWF文件结构

Page 5: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 5

SWF Header结构

Page 6: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 6

DefineSceneAndFrameLabelData

Page 7: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 7

DoABC

Page 8: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 8

内容大纲

.. .1 SWF文件格式

.. .2 无效指针利用

.. .3 欺骗代码检查

.. .4 In the wild 代码分析演示

.. .5 总结

Page 9: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 9

IDA静态分析

.IDA静态分析..

.. ..

.

.

分析0x30074F1B,用于load各个TAG,当解析 DefineScene-AndFrameLabelData 头时,触发漏洞,请看分析:

Page 10: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 10

内容大纲

.. .1 SWF文件格式

.. .2 无效指针利用

.. .3 欺骗代码检查

.. .4 In the wild 代码分析演示

.. .5 总结

Page 11: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 11

ActionScript的检查/执行机制

.欺骗原理..

.. ..

.

.

verification 与 interpretation 分离;每个 AVM2 (ActionScript Virtual Machine 2) 指令均可以按照编号操作寄存器和 AVM2 的各种栈;AVM2的栈是建立在函数 ActionScript3 Execute()的运行栈里的,从而与其返回地址是在同一个栈中;

verification 阶段检查完指令的有效性和对寄存器、栈操作的合法性之后,interpretation阶段只管执行,遇到无效指令则默默地跳过一个字节。

.Verification示例代码.... ..

.

.IBM LASVM Page 13.

Page 12: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 12

欺骗方法

.构造marker命令..

.. ..

.

.

将AS3 argmask中某一0xFF标记的指令标记为有效,从而使检验阶段的解释器认为其后的连续几个byte都是此指令的参数从而不检查有效性和合法性。

Page 13: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 13

欺骗方法

.构造marker命令..

.. ..

.

.

将AS3 argmask中某一0xFF标记的指令标记为有效,从而使检验阶段的解释器认为其后的连续几个byte都是此指令的参数从而不检查有效性和合法性。

.达到的目的..

.. ..

.

.

...1 保存原始的 ActionScript3 Execute() 的 retEIP;

...2 将 retEIP 重定向到用户可控数据区;

...3 令 ActionScript3 Execute 返回;

...4 shellcode中保存当前环境;

...5 shellcode执行恶意代码;

...6 shellcode恢复 EIP 及其他上下文;

...7 Flash 跟没事儿似的安全退出……- -b

Page 14: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 14

AcrionScript的构造.达到的目的..

.. ..

.

.

...1 保存原始EIP;

...2 将EIP重定向到用户可控数据区;

...3 令 ActionScript3 Execute 返回;

...4 shellcode中保存当前环境;

...5 shellcode执行恶意代码;

...6 shellcode恢复 EIP 及其他上下文;

...7 Flash 跟没事儿似的安全退出……- -b.手段..

.. ..

.

.

...1 用 AS 指令将 EIP 存到栈上;

...2 将栈上的某一指向用户可控区域的指针存入EIP。(这一指针就是 codePtr,指向下一条AS指令(IBM文中说的当前))

Page 15: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 15

溢出用的AS指令序列示意图

Page 16: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 16

对marker的要求

.对marker的要求..

.. ..

.

.

...1 其地址要加4能被12整除;

...2 AVM2本身未用(0xFF);

...3 同时要是一条有效x86指令(codePtr指向了它)。

Page 17: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 17

对marker的要求

.对marker的要求..

.. ..

.

.

...1 其地址要加4能被12整除;

...2 AVM2本身未用(0xFF);

...3 同时要是一条有效x86指令(codePtr指向了它)。.0xF5!!!..

.. ..

.

.

...1 地址是 0x302047C4;

...2 0xF4-0xF7 AVM2都没用;

...3 0xF5是CMC指令。

Page 18: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 18

AS指令构造1-Save retEIP

Page 19: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 19

AS指令构造2-将codePtr压栈

Page 20: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 20

AS指令构造3-构造x86指令

Page 21: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 21

AS指令构造4-Pop

Page 22: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 22

AS指令构造5-覆盖 retEIP

Page 23: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 23

AS指令构造6-返回

Page 24: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 24

最终exlpoit SWF文件结构

.

.. ..

.

.

...1 SWF头部

...2 存在溢出的 DefineSceneAndFrameLabelData tag

...3 存放shellcode的 DefineBits tag

...4 存在恶意AS指令的 DoABC tag

...5 ShowFrame tag,用于开始执行。

Page 25: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 25

内容大纲

.. .1 SWF文件格式

.. .2 无效指针利用

.. .3 欺骗代码检查

.. .4 In the wild 代码分析演示

.. .5 总结

Page 26: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 26

In the wild 代码演示

.

.. ..

.

.

hxxp://qs214.cn/www/a26/i47.swf...1 入侵演示;...2 libemu静态分析;...3 OllyDbg 动态分析。

Page 27: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 27

内容大纲

.. .1 SWF文件格式

.. .2 无效指针利用

.. .3 欺骗代码检查

.. .4 In the wild 代码分析演示

.. .5 总结

Page 28: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 28

总结

.健壮性..

.. ..

.

.

...1 只依赖一个绝对地址;

...2 除了 AS3 argmask 之外,未破坏任何数据结构;

...3 Flash可以正常退出。.广泛性..

.. ..

.

.

...1 IE/Firefox均存在漏洞;

...2 XP/Vista均有效;

...3 ASLR 对 Flash 插件无效。

Page 29: Adobe Flash Player Invalid Pointer Vulnerability

FLASH漏洞分析

陈志杰

SWF文件格式

无效指针利用

欺骗代码检查

In the wild 代码分析演示

总结

JoYAN 29

.

谢谢大家!欢迎提问!.. .. ..

.

.