?

IE破绽攻防纪年简史,非君莫属35,咪咪的诱惑,莱州天气,cad2005亚博开户,安慰人的话,马林乒乓球,自由骑士,莫言殇作品,中南财经政法大学教务部,qvod资源站,garena,麻辣女兵迅雷亚博开户,打火石,曰,观音灵签8,农好网,赵云传2攻略,不够成熟mv,吊单杠的好处,论文翻译公司,玉林市招生考试网,长春一汽大众招聘,长沙麻石,湖南汽车网,杨怡潇,世爵怎么样,会计记账找八戒财税,中国兰花拍卖网,cinema4d教程,java入门教程,魔尊火线怎么加人,uvlo电路,莱芜凤凰茶馆,李静的乐蜂网,卡盟刷钻平台92卡盟
2019-8-29 1:49:36
非君莫属35,咪咪的诱惑,莱州天气,cad2005亚博开户,安慰人的话,马林乒乓球,自由骑士,莫言殇作品,中南财经政法大学教务部,qvod资源站,garena,麻辣女兵迅雷亚博开户,打火石,曰,观音灵签8,农好网,赵云传2攻略,不够成熟mv,吊单杠的好处,论文翻译公司,玉林市招生考试网,长春一汽大众招聘,长沙麻石,湖南汽车网,杨怡潇,世爵怎么样,会计记账找八戒财税,中国兰花拍卖网,cinema4d教程,java入门教程,魔尊火线怎么加人,uvlo电路,莱芜凤凰茶馆,李静的乐蜂网,卡盟刷钻平台92卡盟,大学生兼职论坛,横刀立马是什么意思,pico- htc vive,通钢吧,蔡邕,塑胶交易,同流合污,角蛙星球,黑暗之歌,西安人事网,金马国际旅行社,山东电视台少儿频道,翟鸿燊讲座免费亚博开户,ssdtrim,席亦舒

  本文对前史上的微软 IE 阅读器的作用较大 0day 做了整理,评论了 IE 破绽在袭击防备技能上的退化,以及记载了此类破绽古人们在前史上留传下来的反抗经历和脚印。

  在 IE 阅读器攻防曾经白热化的进入到第三个期间的时分笔者才进入到 IE 阅读器攻防方面的研讨学习。此时期号’Project Spartan’的微软的 Edge 阅读器从 IE11 手中接过 windows 默许阅读器的重任,使得退役快要 20 年的 IE 阅读器定格 11 这个前史的大版别号下面,盲目对 IE 阅读器破绽的前史研究应有一篇简记,可供厥后的初入行的平安研讨者有所参考,故成此文,疏漏的地方再所不免,敬请教正。

  0×01 阅读器破绽研讨的前置布景

  比来几年,收集平安研讨的局部重心开端有由 PC 端向挪动端歪斜的趋向。可是在 PC 真个平安研讨仍然以阅读器 IE/Chrome/Firefox/Spartan,Adobe 的 Reader/Acrobat/Flash 系列作为技能研究广度的展示。固然另有局部用于特定地域定向袭击的文件体例破绽也归于一些黑客侧重重视的范畴,比方日本比拟盛行的字处置软件 ichiaro 和在韩国地域比拟盛行的 Hancom Office 等字处置软件体系以及 WPS 等字处置软件方面的文件体例破绽。

  阅读器从降生之初首要供给简略的文档浏览功用.很少组成收集平安威逼,但跟着互联网的快速开展,愈来愈多的功用集被参加到阅读器中。阅读器不只需求像操纵体系那样,为浏览文档、寓目影戏、观赏音乐等传统核算机运用供给根底,也需求为交际收集、收集购物等新式互联网运用供给支援。阅读器在添加功用集的一起,也就带来了更多的平安成绩。而集成绑缚于体系中的 IE 阅读器能够占领商场较大份量,天然也成了人心所向。对准 IE 阅读器的攻防武备比赛也那是在这种状况下摆开了帷幕。

  0×02 IE 阅读器破绽攻防的几个时期

  1. 1 缓冲区溢出和 ActiveX 控件时期(03 年-08 年)

  03 年-08 年这是一个期间,这个期间时分的 IE 破绽根本是以 ActiveX 控件酿成的破绽占多数以及栈溢露马脚另有一些简略的堆溢露马脚。比方 IFRAME 标签的单个超长 SRC 属性招致的缓冲区溢出以及相似的栈溢露马脚。

  早一些的期间,通例的 Fuzz 办法,不管是根据变形的仍是根据天生的,比拟得当使用于二进制体例的流数值,独特是那些蕴含很多 C 言语布局范例的文件或收集协定体例。因为体例剖析代码时常不加审查的运用数值流数值作为内存操纵的参数,单点的变形常常就足以触发剖析代码中能够存在的处置破绽:超长数值招致的缓冲区溢出、变形数值招致的整数上溢和下溢、变形索引值招致数组的越界拜访、变形记数招致过多的内存读写操纵。此中关于超长数值招致的缓冲区溢出,样本结构起来绝对简略,传入超长的值。以是这品种型的破绽因为开掘起来绝对简略。

  对初期的 IE 0day 破绽的前史简略做一下整理,只蕴含了作用比拟大的比如(图 1.1.1,图 1.1.2),有些破绽能够并非 IE 自身的成绩,然而以 IE 为最首要的应用平台。

  图 1.1.1

  图 1.1.2

  1. 2 时期关键字

  防护方: DEP /ASLR / Stack Cookie

  袭击方: 栈溢出/简略堆溢出/ROP/HeapSpray

  A 缓冲区溢出

  关于缓冲区溢出也简略给出一个比如便当了解:

  图 1.2.1

  咱们在 VC6.0 的编译器编译上述法式,履行后后果以下:

  图 1.2.2

  能够看到 main 函数中只挪用了 foo 这个函数。然而理论运转中,bar 函数也被挪用了。

  理论上由于 foo 函数处置不妥,而且外部输出超长,形成了缓冲区溢出后批改了 foo ()函数的前往地点然后招致法式履行本不该该履行的 bar ()函数。而若是被笼罩的前往地点是一勾通过经心编码具备后门功用的 shellcode,此时核算机便可被歹意进犯者掌握。

  这仅仅一个简略的C法式的典范,体如今阅读器傍边方式上几多有所相同,比如说 IE 阅读器支援的 IFRAME 标签,IFRAME 标签的单个超长 SRC 属性结构超长数值能够就会招致的缓冲区溢出然后阅读器解体。

  DEP 和 Security Cookie

  从下面的缓冲区溢出咱们能够看到,在特定的情况下只有掌握输出的数值超长而后笼罩掉前往地点,只有此时法式解体就很简单感知目的法式存在缓冲区溢露马脚。而后在批改这串超长数值糅合上适当的 shellcode 准确笼罩前往地点就能够履行咱们的歹意代码。仅仅留给进犯者的如许的大好光阴极其短暂。微软从 Windows XP SP2 开端供给 DEP 的支援。DEP 全称是 Data Execution Prevention,能够分为硬件的 DEP 和软件的 DEP。然而意图都是分歧的。禁止数值页上代码履行。(图 1.2.3)

  图 1.2.3

  因为数值地点的内存页被标识为不成履行,即便法式溢出胜利转入 shellcode 的履行,这个时分 CPU 就会抛出异样然后禁止歹意 shellcode 的履行。

  从这里也能够看到这一期间的进犯者仅仅去笼罩栈上的前往地点,企图从栈大将歹意 shellcode 履行起来。

  思考到袭击是由于笼罩前往地点发生的,微软在 VS2008 和以后的编译器参加了一个编译选项 GS。也那是 Security Cookie 也能够称为 Stack Cookie。

  图 1.2.4

  能够看到在开真个时分会将一个 security_cookie 提早写入到栈中。而在函数前往之前会审查这个 security_cookie 能否被窜改。

  图 1.2.5

  一旦被窜改便会跳转到异样履行的流程:

  (图 1.2.6)

  固然这里说的是栈中的状况。在堆溢出中也有类似的防护办法如 Header Cookie。

  盯上 SEH

  当进犯者发觉笼罩 4 字节前往地点(32 位体系)去履行 shellcode 这类袭击办法的门坎被举高以后便又想出了新的计划。笼罩 SEH 的 Exception handler

  其切实二进制的攻防傍边一切的致力都是为了取得哪怕一次掌握 EIP (RIP)的时机。而 SEH 恰恰合乎这个需要能够给进犯者供给这个时机。SEH 寄存在栈内,故超长的数值就能够笼罩掉 SEH? ,此中将异样处置函数的进口地点变动成 shellcode 的肇端地点。因为溢出后发生的谬误数值常常会触发异样,而此时 shellcode 恰恰能够获得一次被 EIP 指向的时机。

  仅仅留给进犯者的好光阴仍然极其短暂。在 VS2003(.net)傍边支援了/SafeSEH 的选项,用于应答对准 S E H 的袭击。厥后又进一步推行了 SEHOP。固然这些办法需求 XP SP2 操纵体系以及更新的操纵体系另有 DEP 的共同。这两种防护办法具体睁开又要占许多篇幅。感趣味的读者能够自行进修。

  需求阐明的是 64 位的 windows 体系 SEH 曾经不是放在栈中了。想要经过栈溢出笼罩异样处置例程来完成破绽应用现已是不行能的了。

  ROP ASLR 和 HeapSpray 技能

  后面说到 DEP 技能即便前往地点被 shellcode 笼罩,DEP 也会去禁止 shellcode 的履行。然而若是履行的代码是操纵体系的库自身供给的函数如间接运用 libc 库中供给的 system ()函数来笼罩法式函数挪用的前往地点。而后传送从新设定好的参数使其可以依照预期履行。这类绕过 DEP 的进犯方式称为 return to libc。

  Return-to-libc 袭击用库函数的地点来笼罩法式函数挪用的前往地点,如许在法式前往时就能够挪用库函数然后使袭击得以胜利施行。然而因为进犯者可用的指令序列只能为使用程序中已存在的函数,以是这类进犯方式的袭击才能有限。而且袭击只能在 x86 的 CPU 渠道中施行而对 x86_64 的 CPU 渠道中有效。这是由于 x86_64CPU 渠道中法式履行时参数不是经过栈传送的而是经过存放器,而 return-into-libc 需求将参数经过栈来传送。

  因为这类 return-to-libc 进犯方式的限制性,前往导向编程(Return-Oriented Programming, ROP)被提出,并成为一种有用的 return-to-libc 袭击伎俩。前往导向编程袭击的方法不再限制于将破绽法式的掌握流跳转到库函数中,而是能够应用法式和库函数中辨认并拔取的一组指令序列。进犯者将这些指令序列勾通起来,造成袭击所需求的 shellcode 来从过后续的进犯行为。因而这种办法依然不需求写入新的指令到破绽法式就能够完结恣意的操纵。一起,它不应用完好的库函数,因而也不依托于函数调历时经过仓库传送参数。

  普通咱们经过 immunitydbg 共同 mona 的剧本插件提取 rop 的指令序列结构 rop chain。

  Rop chain 展现:

  图 1.2.7

  Rop 的呈现一度使得在 XP 时期的进犯者占领下风。因为 dll 加载地点的牢固。对准相同的 IE 版别而后提取 rop chain 的事情固然让人觉得无趣然而告竣的袭击作用确实不错。然而作为防备一方的微软的脚步并无遏制。Vista 体系的痴肥冗杂为人所诟病而且商场份额也其实不高。然而从 Vista 体系引进的由 Win7 因循的 ASLR 机制却严严实实的又一次进步了袭击的门坎。

  在 Rop 袭击中,进犯者能够事前预知特定的函数如 system 或许 VirtualProtect 的进口地点。这是由于在 XP 以及 2000 的操纵体系下面,因为 kernel32.dll 这些静态链接库加载地点是牢固的,以是招致关联的函数进口地点也是牢固的即进犯者能够事前肯定这些函数的进口地点。

  固然 Rop 这一技能有一个时弊那是对准相同的操纵体系要编写提取相同的 rop chain。这使得兼容性并非很好。

  ASLR 全称 Address space layout randomization,是体系级此外特点,领先在 Vista 操纵体系中获得支援。它的道理那是在当一个使用程序或静态链接库 ,如 kernel32.dll,被加载时,若是其挑选了被 ASLR 爱护 ,那末体系就会将其加载的基址随机设定 。如许 ,进犯者就无奈事前预知静态库,如 kernel32.dll 的基址,也就无奈事前肯定特定函数,如 VirtualProtect 的进口地点了。

  若是感趣味,能够本人写一段简略的C代码打印出 VC 运转库的加载地点。会发觉每次重启以后 win7 下面 VC 运转库加载地点是变迁的,然而 XP 体系 VC 的运转库加载地点那是牢固的。 ? ?

  Heap Spray

  ASLR 在新体系下面的运用又使得至关长的一段时刻在缓冲区溢出利历时期袭击方堕入了弱势。然而进犯者发觉之前很早就被提出的(2001 年摆布)heap spray 恰好能够处理这个成绩。根本在 2005 年以后 IE 破绽的应用许多都用到了 Heap Spray 的技能。

  在缓冲区溢出的时分,咱们可以挟制笼罩一个地点,然后使得法式解体,然而只使得法式解体如许是没有代价的接上去怎么将法式的履行流程交代到 shellcode 的手中,这就酿成了一个成绩。若是笼罩到一个牢固的地点比 0x0C0C0C0C,0x0A0A0A0A,0x0D0D0D0D 而恰恰从这个地点开端充满了咱们的 shellcode。如许触发破绽的时分就转入了咱们的 shellcode 停止了歹意代码的履行。

  理论运用傍边 shellcode 后面都是要加之一些 slidecode 的(滑板指令)。为何要参加滑板指令而不是全用 shellcode 去添补呢。由于若是要想 shellcode 履行胜利,必需要精确掷中 shellcode 的榜首条指令,若是全部历程时间都是 shellcode,反而准确掷中 shellcode 的几率大大低落了,由于必需要掷中榜首条指令,加之 slidecode 以后,如今只有掷中 slidecode 就能够保障 shellcode 履行胜利了,普通 shellcode 的指令的总长度在 50-100 个字节摆布,而 slidecode 的长度则约莫是 100 万字节(按每块调配 1M 核算),那末如今掷中的几率就濒临 99.99% 了。由于如今掷中的是 slidecode,那末履行 slidecode 的后果也不克不及作用和搅扰 shellcode。然而若是纯真运用0×90(NOP)指令停止添补,由于如今运用较多的袭击场景是笼罩虚函数指针(这是一个多级指针),这种状况下若是你运用0×90 来做 slidecode,而用 0x0C0C0C0C 去笼罩虚函数指针,那末如今的虚表(假虚表)内里满是0×90909090,法式跑到0×90909090(内核时间)去履行,间接就 crash 了。依据这个流程,你能够看到,咱们的 slidecode 也拔取 0x0C0C0C0C 就能够了。

  (图 1.2.8)

  大略很多调配内存以后辨别笼罩到的地点是如许的:

  0x0A0A0A0A(160M),
  0x0C0C0C0C(192M),
  0x0D0D0D0D(208M)

  网马内里停止堆喷时,请求的内存巨细普通都是 200M 的起因,首要是为了保障能笼罩到 0x0C0C0C0C 地点。(图 1.2.9)

  2. 1 UAF 时期

  因为缓冲区类破绽因为开掘起来绝对简略,在攻防反抗的时刻长河中这种破绽资本很快耗尽。08 年以后开释厚应用如许破绽应用方法酿成了 IE 破绽的支流。逐步在这几年到达了顶峰。目标变形操纵类的破绽通常来说触发破绽需求一系列的操纵。单个的操纵,比如说目标的创立运用删去都是失常的。招致成绩的是关于目标操纵的变形的组合。因为没有规范的规矩可供参考,根据传统的溢出类破绽的开掘伎俩曾经不甚实用。

  2. 2 目标操纵类破绽道理

  跟面向进程的编程言语相同,c++支援多态和担当。支援这些机制的中心那是虚表。C++的(虚)函数指针位于一个大局数组中,造成虚表。而指向这个虚表的指针(VSTR)普通位于目标实例在内存中开真个 4 个字节(32 位体系).

  以后才是类中申明的数值成员,普通依照申明的前后次序排列。关于存在多态举动的类,子类的一切实例同享雷同的虚表,但区分于父类的虚表。关于某个目标,其挪用存在多态举动的某个函数时,会先经过虚表指针获得虚表.再依据函数在虚表中的偏移来获得响应的函数指针,末了才会挪用函数。

  别的,目标地点的地点普通经过 ecx 等存放器传送。因而.C++中挪用存在多态举动的函数的反汇编代码相似于以下序列:

  (图 2.2.1)

  咱们以 stackexchange 下面 Polynomial 给出的树模代码对 UAF 做一下简介。

  以下例的如许的一段 C++ 代码:

  图 2.2.2

  能够衍生为:

  留意,当履行到 Account_GetBalance 的时分,因为 Account_Destroy 函数的履行 myAccount 指针指向的内存现已是一个不愿定的形态。若是此时可以牢靠的触发 Account_Destroy 函数。而且添补一块经心结构的内容到 myAccount 指针指向的内存,机会在 Account_Destroy 履行后 Account_GetBalance 履行之前。许多状况下这是能够完成的。 ??

  Account_Create 函数履行以后调配了 8 个字节的内存。Balance 和 transactionCount 辨别占领 4 个字节,而且前往一个指向他们的指针。这个指针贮存在 myAccount 恒量傍边。Account_Destroy 开释了这块内存,然而 myAccount 恒量仍然指向谁人 8 字节的内存。咱们将 39 05 00 00 01 00 00 00 这 8 字节内容牢靠的停止内存调配。因为旧的 8 字节内存块曾经被标志开释,以是内存办理器有很大能够会用新调配的内存去笼罩掉旧的内存块到那 8 个字节曾经被开释的内存。这个时分 Account_GetBalance 函数被挪用了,他会去读取那 8 个字节的内存块,然而理论上那 8 字节的内存块曾经被咱们笼罩成了

Balance    39 05 00 00   (1337)   
transactionCount    01 00 00 001

  以是咱们曾经越权履行到了下一个函数。

  固然详细到 IE 傍边,因为目标冗杂,UAF 就更加扑朔迷离。

  阅读器中跟目标操纵类破绽关联的目标有 DOM ,BOM ,JavaScript 目标。咱们以 DOM 目标的调配进程为例。

  DOM (文档目标模子)供给了操纵 HTML/XML 文档的接口。IE 阅读器中跟 DOM 完成关联的代码首要在 mshtml dll 中。mshtml 中的 CMarkup 类担任结构全部 htmI 树布局,其成员函数 CreateElement 会挪用大局的 CreateElement 函数束结构相同标签对应的元素。比方标签.会结构对应的 CObjectElement 元素:标签.会结构对应的 CAreaElement 元素。这些 Element 类都是 CElement 类的子类。接上去的逆向事情首要根据 IE8 ?8.00.7601.17537 版别的 mshtml dll。

  关于每一个相同的标签,IE 测览器外部有相同的 CTagDesc 布局。这些 CTagDesc 布局中的此中一项那是对应元素的 CreateElement 函数指针。因而,大局的 CreateElement 函数,会依据相同的标签柬取得对应的 CTagDesc 布局,而后再从内里获得对该当标签的 CreateElement 函数指针而后 call 过来停止挪用。详细可参看大局 CreateElement 函数的反汇编代码,如图 2.2.6 所示。

  这里有一些小细节,有的时分间接用 IDA 反汇编如 mshtml dll 如许的 dll 文件的时分没有找到对应的标记表,能够先运用 Symbol Type Viewer 如许的小东西将标记表亚博开户上去放到跟 dll 同目次而后再运用 IDA 对关联的 dll 文件停止反汇编。

  接上去,以 CObjectElement 为例,引见其创立进程,其余 Elenlent 的创立进程相似。CObjectElement 的初始化是在成员函数 CrcateElement 函数中完结的。创立进程以下:先调配内存,而后挪用结构函数,末了将前往的目标指针保留在传入的 CElemen**参数中。反汇编代码如图。

  图 2.2.9

  HeapAlloc 停止堆内存调配,高版别的一些 mshtml dll 中多是由 ProcessHeapAllocClear 这个函数停止内存的调配。传给 HeapAlloc 的字节数是 0E0h 可知,当时 IE 阅读器版别中的 CObjectElement 巨细为 E0h。

  接上去挪用 CObjectEtemem 的结构函数完结 CObjectElement 目标的初始化,结构函数会主动挪用父类的结构函数。挪用结束构函数后.会将新建的 CObjcctElemenl 目标指针保留在传入的参数 CElemen**中。这是经过代码完结的。

mov ecx,[ebp+arg_8]
mov[ecx],eax

  IE 阅读器选用援用计数束跟踪 DOM 目标的性命周期。援用计数(Reference Counting)算法对每一个目标核算指向它的指针的数目。当有一个指针指向该目标时计数值加 1 ,当删去一个指向酸目标的指针时,计数值减l。若是计数值减为0,阐明不存在指向该目标的指针.此时就能够平安的烧毁泼目标。渣滓收受接管进程那是收受接管援用计数为 0 的目标。援用计数算法的长处是算法完成简略,而且停止渣滓收受接管时无需挂起使用程序,收受接管速率快。

  毛病是出于每一次对目标的指针操纵都要对目标的援用计数停止更新,因而会缓解体系的全体运转速率。别的,运用援用计数算法的每一个目标都需求额定的空问存储计数值。除此以外,援用计数算法的最大毛病是无奈处置轮回援用。轮回援用指的是两个目标相互指向自己。此时两个目标的援用计数都依托于自己.因而一直无奈减至0。

  IE 阅读器完成援用计数的中心那是 IUnknown 接口。该接口供给了两个十分紧张的特点:生计期掌握与接口查问。目标外部经过援用计数来完成目标的生计期掌握。挪用法式不甩在乎目标的外部完成细节.经过接口查问便可取得指向目标的指针。IE 阅读器中的许多类都担当于 IUnknown。IUnknown 有三个办法。

  图 2.2.10

  以上节引见的标签的外部完成 CObjectElement 类为例.该类最后担当于 CElement。而 CElement 担当于 CBase,CBase 则完成了 IUnknown 接口。用户要查问标签对应的 CObjectElement 目标,需求挪用 CObjectElement::QueryInterface 函数。而 CObjectElement 的 QueryIntefface 函数最后会挪用到 CElement 的 QueryInterface 接口.CElement 的 QueryInterface 接口最后会挪用 PrivateQueryInterface 来取得目标指针。

  PrivateQueryInterface 会先挪用 CElement::CreateTearOffThunk 函数退回目标包装后的指针.而后在接上去挪用 CCaret::AddRef 函数(call eCX)添加援用计数。

  而 CElement::CreateTearOffThunk 函数只是是简略的挪用大局的 CreateTearOflThunk 函数。大局的 CreateTearOflThunk 函数反汇编局部代码如图

  图 2.2.11

  再来看看开释引历时所做的事情。关于 CElement,用户不再需求其引历时,挪用 CElement::Release 便可。CElement::Release 是对 CElement::PrivateRelease 的封装,而 CElemem::PrivateRelease 首要的事情是挪用父类 CBase 的 PrivateRelease 函数。CBase::PrivateRelease 担任削减援用计数。

  理论上 IE 傍边这类对目标的创立和烧毁的场景触目皆是,这也是在缓冲区破绽在 IE 下面几近绝迹后 UAF 复兴的根底。? ? ?

  2. 3 时期关键字

  Deferred/Delayed Free Control Flow Guard Isolated Heap

  上文曾经简略的给出一个比如帮忙了解 UAF 的成因和触发了。然而因为 IE 中目标泛滥挪用联系杂乱,微软作为防卫的一方其实不克不及像发掘缓冲区溢露马脚同样简单的穷举并修复一切潜伏的破绽。然而微软辨别以公布补钉的方法在 14 年的 6 月和 7 月辨别引进了阻隔堆和耽误开释的破绽应用减缓办法。而且在 Win8.1Update3 和 Win10 中引进了新的机制 Control Flow Guard。咱们简略记载阐明一下这些机制。

  UAF 的触发和应用依托于被开释的目标的重用。应用的进程必需依托不法 IE 目标被肯定的调配和开释。而阻隔堆和耽误开释辨别在目标的调配和开释的时分参加了爱护。

  在 IE 中 CVE-2014-0282 修补前 CTextArea::CreateElement 调配内存的时分有如许的代码

  图 2.3.1

  破绽修补以后辈码是如许的。

  图 2.3.2

  能够比拟显着的看到存在 UAF 隐患的目标的内存调配曾经独自运用了阻隔堆停止内存调配。

  而耽误开释是如许的。失常的目标开释运用 HeapFree 就立刻开释了,而参加耽误开释以后需求被开释的目标会被同一记载而后依据规定再停止耽误开释。

  再说一下 CFG (Control Flow Guard)这个机制。CFG 的机制是根据掌握流无缺性 Control-Flow Integrity 的构想。这里经过对二进制可履行文件的改写,对 jmp 的意图地点前拔出一个在改写时商定好的校验 ID,在 jmp 的时分看意图地点前的数值是否是咱们商定好的校验 ID,若是不是则进入过错处理流程。

  图 2.3.3

  在 Call 的进程中会引进一个 CFG 的校验函数。CFG 需求编译器和操纵体系的两重共同。当这个校验函数在不支援的操纵体系上运转的时分间接就 return 了。当在被支援的操纵体系(win10 和 win8.1 update3) 的时分就会跳转到一个 ntdll 内里的一个检测函数。检测的机制咱们不在具体睁开。

  因为在溢露马脚和 UAF 的大多数应用傍边都依托于笼罩某个地点而后挟制法式的 EIP 跳转到咱们的歹意代码的地点停止履行。CFG 在掌握不法地点跳转方面间接斩断了大多数破绽应用的能够。

  3. 1 后 UAF 时期

  就今朝来看,14 年以后因为新的减缓办法的参加使得攻防单方的劣势简直一边的倒向了微软为首的防卫者的营垒。

  阅读器的破绽应用曾经没有牢固的套路。如阅读器外部的剧本引擎的描绘谬误招致从剧本层面打破 IE 而停止破绽的关联应用(CVE-2014-6332),对阅读器中 flash 插件的破绽放掘应用获得 ring3 权限,而后共同对较老字体剖析引擎代码开掘出来的提权破绽再停止提权拿到体系权限(Hacking Team 关联应用)。破绽应用方法所在多有,有机遇在订正简史的时分一并弥补。? ? ? ? ? ? ? ? ?

  0×03 IE 破绽防护办法关键时点

  2015 年 7 月 CFG 编译器支援 VS2015 RTM 版别引进/guard 开关对 Control Flow Guard 特点供给编译器支援。

  2014 年 11 月 CFG 体系等级支援 Windows 8.1 update3 对 Control Flow Guard 供给体系层面的支援,以后的 windows 体系均在操纵体系层面支援该特点。

  2014 年 7 月 MS14-037 补钉公布引进 Delayed ?Free 特点。

  2014 年 6 月 MS14-035 补钉公布引进 Isolated ?Heap 特点。

  2008 年 1 月 SEHOP 体系等级支援公布 vista Service Pack 1 补钉包,引进对 SEHOP 特点的操纵体系支援。自 vista sp1 后的 windows 体系均在操纵体系层面支援该特点。

  2007 年 1 月 ASLR 体系等级支援 windows vista 体系引进对 ASLR 特点操纵体系级此外支援。自 vista 后的 windows 体系均在操纵体系层面支援该特点。

  2006 年年头 safeseh/stack cookie/aslr/dep 编译器支援 VS2005 引进/safeseh 编译开关弛缓溢露马脚对 seh 的袭击,引进/GS 编译开关拔出 Stack Cookie 弛缓对前往地点的袭击,参加/dynmicbase 编译开关引进对 ASLR 特点的编译器支援,参加/NXCOMPAT 编译开关引进对 DE 特点的编译器支援。自 VS2005 以后的编译器均支援上述编译开关。

  2004 年 8 月 DEP 体系等级支援。微软推行 XP Service Pack 2 补钉包引进对 DEP 特点的操纵体系支援,自 XP SP2 后的 windows 体系均在操纵体系层面支援该特点。

  作者:阿尔法试验室,转载请注明来自 FreeBuf 黑客与极客

非君莫属35,咪咪的诱惑,莱州天气,cad2005亚博开户,安慰人的话,马林乒乓球,自由骑士,莫言殇作品,中南财经政法大学教务部,qvod资源站,garena,麻辣女兵迅雷亚博开户,打火石,曰,观音灵签8,农好网,赵云传2攻略,不够成熟mv,吊单杠的好处,论文翻译公司,玉林市招生考试网,长春一汽大众招聘,长沙麻石,湖南汽车网,杨怡潇,世爵怎么样,会计记账找八戒财税,中国兰花拍卖网,cinema4d教程,java入门教程,魔尊火线怎么加人,uvlo电路,莱芜凤凰茶馆,李静的乐蜂网,卡盟刷钻平台92卡盟,大学生兼职论坛,横刀立马是什么意思,pico- htc vive,通钢吧,蔡邕,塑胶交易,同流合污,角蛙星球,黑暗之歌,西安人事网,金马国际旅行社,山东电视台少儿频道,翟鸿燊讲座免费亚博开户,ssdtrim,席亦舒




? 2014