首页
社区
课程
招聘
[求助]有关文件格式漏洞
发表于: 2012-4-24 15:57 7925

[求助]有关文件格式漏洞

2012-4-24 15:57
7925
近来有关文件格式漏洞越来越多,诸如pdf,swf,excel,word等,往往都是某个tag的某个字段值非法导致内存错误,比如函数指针,写入越界等等。我在定位文件哪个字段会导致问题的时候,从崩溃点回溯调试很困难,如果程序逻辑复杂最后都不能将触发漏洞的原因和文件引起错误的字段对应起来。
一般采取的办法就是下内存写入断点和条件断点,如果寻找到触发漏洞相关的内存某一块的内容和文件某块内容一致的情况,还可以运气好懵上。更一般的情况下跟踪调试就淹没在一层层的调用中,最后不了了之了。
最典型的就是MAPP数据,我能重现场景调试成功的没有几个。在此请教下各位,有什么好办法调试吗?确定是文件的哪个字段触发的漏洞。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 1489
活跃值: (1028)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
和LZ一样同求方法或思路。
2012-4-24 19:43
0
雪    币: 692
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
菜鸟路过  不知道有啥好的方法,都是去网上找别人是怎么分析的
2012-4-24 20:08
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
4
回溯调试不是难点 ,你要想确定是文件的哪个字段触发的漏洞 首先要对这个格式了解,或者运气好一下子就能直接从内存buffer中对应到文件中的内容。

漏洞分析也是分好几个层次的
2012-4-27 00:03
0
雪    币: 72
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5

回溯调试不是难点 ,你要想确定是文件的哪个字段触发的漏洞 首先要对这个格式了解,或者运气好一下子就能直接从内存buffer中对应到文件中的内容。

漏洞分析也是分好几个层次的


instruder牛,要是运气不好呢?。。。。
2012-4-27 09:27
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主能拿到漏洞资料,牛人啊
2012-4-27 09:34
0
雪    币: 72
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
职位所在,混口饭吃呗,不是牛人,呵呵
2012-4-27 09:46
0
雪    币: 258
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
动态污点跟踪,可以完美解决这个问题
2012-5-3 09:38
0
雪    币: 72
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9

又翻出来这个帖子了。
漏洞成因分析完毕,可是引起异常的参数好像凭空蹦出来的一样,pdf文件解析来解析去都没发现有什么联系
2012-7-10 15:30
0
雪    币: 10
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我现在正在做的就是这么个东西,通过Pin的动态污点跟踪,检测系统调用,思路如下:
1、首先监测到NtCreateFile调用,从中提取出欲打开的文件名,如果是待测试的文件(而不是什么窗体之类的),则在调用结束后记录下得到的文件句柄;
2、向下监测到NtReadFile调用,与保存的文件句柄进行对比,如果相同,则确定是对该文件进行读操作。提取出参数列表中的信息,可以得到buffer地址与读入的长度;
3、与2同步地,监测NtSetInformationFile调用,与保存的文件句柄进行对比,如果相同,则确定是对该文件进行文件指针移动的操作。从中可以提取出当前将文件指针移动到磁盘文件的偏移量多少的地方。如果没有移动,则文件指针在文件当前位置,后续的NtReadFile就是从这里开始继续读文件。

通过2和3的配合,就可以确定内存当中的那些位置是文件中的哪些tag字段了,后续对这些位置进行类似于内存读写断点的处理就可以了。

希望这个解答对lz有帮助,希望继续一起探讨~
2012-7-11 09:58
0
雪    币: 72
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
ls说的这个东西,应该是个。。。呃。。。进程内存空间查看器,并将内存数据与文件对应起来。
如果能做出来,将是一个对于文件类漏洞攻击的非常好的分析工具。
这种工具一定是依赖动态调试的,我猜测更类似于一个OllyDBG的插件形式存在。
期待您做出成果,造福我等安全研究人员与hackers。
2012-7-12 13:15
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
Mark,谢谢楼主和楼上各位!

动态追踪分析的资料很少,bitblaze,pin debugger基本没有看到有人谈起,

楼主现在有在用污点追踪来分析吗?

时隔一年,相信有了更多的感悟,希望可以继续留下宝贵的经验
2013-8-1 13:01
0
雪    币: 72
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
楼主现在依然不会用动态污点来分析,不过楼主手动追踪数据源比跑动态污点效率更高。
楼主已经不纠结文件格式漏洞了,现在纠结于逆向闭源的js引擎。
2013-8-2 14:34
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
14
把你的污点追踪分析工具直接开源吧,或者单独发给我学习也行^_^
2013-8-2 22:36
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
15
下面以前在分析漏洞时用到的一些方法,之前论坛也有人问过,顺手帖下:

(a)污点追踪分析:标记文件内容为污点,再使用ida 污点分析的相关插件来分析寄存器对应的文件内容,结合010editor文件格式分析脚本来定位文件结构。

(b)执行指令比对:记录正常文件与异常文件的执行指令(od、immdbg都有trace功能),然后再作代码diff,比对代码的差异性,再根据文件内容的差异性整体分析。

(c)条件消息断点:在一些可能导致漏洞的变量都设置条件消息断点,在log中记录他的值,不少变量都会被循环操作的,根据变量记录的结果,找到其中的规律来定位文件结构。

(d)假设法:有时分析漏洞真的是靠猜的,假设对应某个文件结构,再调试分析去证实。

(e)开源软件符号表加载:比如分析libpng漏洞,优先找个使用libpng且开源并提供有符号的软件,比如Firefox,分析libpng时直接使用firefox符号表去调试firefox就很容易定位结构,libpng函数也直接识别,或者你也可以直接编译libpng制作符号表。
2013-8-2 22:37
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
恭喜帮主进入了更高的境界  

传授些经验吧!
Link http://bbs.pediy.com/showthread.php?t=176758
2013-8-7 09:49
0
雪    币: 72
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=tudiwangma;1207082]恭喜帮主进入了更高的境界  

传授些经验吧!
Link http://bbs.pediy.com/showthread.php?t=176758[/QUOTE]

请参看你楼上riusksk牛的帖子!
2013-8-7 11:08
0
雪    币: 10
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
现在倒是做出了一个动态污点跟踪的系统,效率还可以。九月份开完个会之后希望在版上放出来,大家有兴趣的可以帮忙测试一下
2013-8-14 15:33
0
雪    币: 310
活跃值: (159)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
19
期待ing
2013-8-15 15:34
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
期待+1。我最近也在看动态污点分析方面的东西,十分不解的是,如何能够对污点数据进行标记并检测流向?关于理论看得十分熟悉,但是实际不知道该如何操作。目前刚用pin插装获得一些列指令对内存的读取地址。求赐教。
2013-8-21 21:42
0
雪    币: 10
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
污点跟踪的重点就是污点数据流传播逻辑。核心就是对指令集所有指令的数据处理和传送进行解析,包括显式操作数和隐式操作数。
所以,一般两套方案:很多比较成熟的系统引入中间语言,就是构造一个小的原子操作集合,将指令集的所有指令翻译为这些中间语言操作的序列,并对这几种操作来做污点数据流传播判定。另一套方案就是直接对所有指令进行语义解析,编写对应的模拟代码。中间语言对有些指令的翻译可能存在错误。我的系统采用了第二套,对x86指令集进行了逐条处理,包括xmm。缺点就是代码量太大了,写了一年多。
2013-8-23 20:17
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我现在想实现一个功能:输入数据后,检测这组数据流过指定路径。现在的思路是,用pin对基本块进行插装,,然后写一个count++功能的函数。对数据进行污点标记,然后如果发现流过指定位置就执行count++这个函数,检查结果就知道是不是流过了。
目前遇到的技术难点就是,污点标记和跟踪这块,找了很多资料都只是大概介绍污点的原理,没有具体的例程,不知道如何开始。能否有简单例程赐教?
2013-8-26 10:39
0
游客
登录 | 注册 方可回帖
返回
//