经典的二进制缺陷攻击模式第二部分 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

经典的二进制缺陷攻击模式第二部分

申博_安全防护 申博 170次浏览 已收录 0个评论

0x00 – 媒介

本文是文言二进制破绽进击体式格局系列文章的第二局部。
在整篇文章中,我们将引见:
0x01 – 必备学问:权限和异常处置惩罚
0x02 – 防备:Stack Canaries
0x03 – 进击:花样字符串破绽
0x04 – 进击:SEH Overwrites
0x05 – 防备:DEP/NX
让我们最先吧!

0x01 – 必备学问:权限和异常处置惩罚

跟着您越来越多地运用盘算机,您能够会经常听到Kernel(内核)和userland(用户态)这两个术语。若是我们实验搜刮内核的界说,我们会发明:
内核是支配体系的中央,可以或许完整掌握体系上的一切内容(处置惩罚器,内存,芯片等)。每当顺序须要做任何事变(即写入文件,翻开网络衔接等)时,它都邑临时将对用户空间处置惩罚的掌握权交给内核。
虽然这个界说让我们对内核的内容有了很好的明白,但让我们疾速看看我的第五篇文章Explain Spectre and Meltdown Like I’m 5 的诠释:
每当蝙蝠侠和公理同盟的其他成员在与超等罪犯作战时,阿尔弗雷德(蝙蝠侠的管家)(内核)就会掌握蝙蝠侠的基地(处置惩罚者),如许他可以或许供应主要信息并资助公理同盟得胜。当公理同盟击败坏人时,蝙蝠侠消除并收回了阿尔弗雷德的掌握权。
为了减轻负担,内核是支配体系为您的应用顺序完成一切沉重的事变(即内存治理等)的后端。而另一方面,用户态是通例应用顺序运转内存空间。就像蝙蝠侠和公理同盟一样,用户态应用顺序在须要特权信息时将掌握权移交给内核(阿尔弗雷德)。
这类权限星散的体式格局在盘算机中大批运用。然则,虽然蝙蝠侠和公理同盟只要两类特权,但盘算机有4个自力的“戒指”特权。
经典的二进制缺陷攻击模式第二部分
如您所见,应用顺序在最低权限环中运转。然则,明显偶然应用顺序须要接见某些特权信息或功用(即竖立网络衔接,内存治理功用等)。在这类状况下,应用顺序将运用称为syscalls的特定函数,它们充任分歧特权环之间的桥梁。
描述特权戒指的一种简朴要领多是视频游戏中的品级:
为了进步全部游戏中的一样平常才能(无论是晋级护甲或兵器,进入分歧的天下,照样终究从尖刺的乌龟身上挽救公主),玩家必需经由过程分歧的关卡。若是玩家试图跳过一个级别,他/她就没有充足的气力或资本在他们跳到的关卡中击败BOSS! 他们会失利!
经典的二进制缺陷攻击模式第二部分
当用户态应用顺序实验接见特权信息时,应用顺序将失利并出现异常。这意味着应用顺序将瓦解并输出瓦解申报。除实验从非特权(用户空间)状况接见特权内存或函数以外,由于许多缘由,顺序能够都邑因异常而失利。比方,若是一个顺序试图将某个数据除以0(我们都晓得不克不及如许做),顺序将失利并抛出ArithmeticException的异常。
如今,虽然简朴地明白顺序能够失利的缘由很主要,但我们须要议论顺序失利时现实发作的状况。这就是结构化异常处置惩罚(SEH)的用武之地。在我们议论结构化异常处置惩罚顺序是甚么和它们怎样事变之前,让我们以夺宝奇兵为例:
在1981年的影戏“夺宝奇兵之法柜奇兵”中,琼斯和他的团队继承寻觅失踪的约柜方舟。沿着他的线路,琼斯和他的团队遇到了许多圈套,比方毒镖和巨石,这些圈套是由隐秘的压力板或开关触发的。琼斯和他的团队必需勤奋生计经由过程一切这些圈套,以完成他们的目的。
在夺宝奇兵之法柜奇兵中,琼斯和他的团队必需经由过程全部地牢和窟窿中设置圈套。这些圈套是在琼斯诞生前几年设想的,用来珍爱此次冒险的中央的金色雕像。一样,顺序有各自的圈套,从权限不婚配和接见谢绝到逻辑和算术毛病,顺序有许多要领可以或许防备(处置惩罚)毛病或毛病的支配。别的,顺序员可以或许经由过程函数来完成自界说异常处置惩罚顺序如try-catch代码块,应用try实验代码块,再运用catch捕捉处置惩罚他们时发作的任何毛病或异常。
在许多支配体系中(我们将更详细地议论Microsoft的结构化异常处置惩罚),正好有一个体系来处置惩罚最后未被异常处置惩罚顺序捕捉的任何异常。也就是说,若是捕捉到毛病但未准确处置惩罚毛病,支配体系将提拔异常处置惩罚的体式格局将捕捉的异常重定向到零丁的结构化异常处置惩罚顺序。若是异常继承没法准确处置惩罚,应用顺序将瓦解。
经典的二进制缺陷攻击模式第二部分
别的须要注重的一点是,当顺序因异常而失利时,顺序会异常短暂地取得对更高级别的接见权限,由于体系会检索有关瓦解的信息。

0x02 – 防备:Stack Canaries

在上一篇文章中,我们议论了客栈缓冲区溢出和可以或许掩盖客栈上数据的风险(或好处,取决于您在进击中所处的脚色)。多年来,为了防备这些进击,已在编译器和支配体系中实行了许多范例的防备。在本节中,我们将议论Stack Canaries,它是一种异常罕见且极为基础的溢出防备情势。
Stack Canaries现实上是参考the canary in a coal mine(煤矿中的金丝雀)定名的。
在1913年摆布,John Scott Haldane发起在深矿中运用金丝雀或其他温血动物以检测一氧化碳。理论以为,由于鸟类的身材对一氧化碳比人类的敏感度高很多,若是矿工看到鸟儿不行了,他们就会晓得氛围被一氧化碳污染了,因而,在遭到气体的影响之前就可以或许脱离窟窿了。
就像煤矿中的金丝雀一样,Stack Canaries会正告顺序有些事变是纰谬的,许可顺序在任何歹意支配发作之前退出。这是经由过程在为局部变量分派空间今后在客栈上安排一个长随机数并在函数返回之前搜检长随机数来完成的。若是客栈缓冲区溢出进击掩盖客栈的canary,顺序将退出。
经典的二进制缺陷攻击模式第二部分
虽然Stack Canaries是针对溢出进击的经常使用性防备,但它们远非无敌。我们接下来看看一些进击。

————————————-

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

0x03 – 进击:花样化字符串破绽

击败Stack Canaries的一种简朴的要领是找出它们在客栈中的地位和随机值是甚么,如许你就可以或许在溢出进击时期完整掩盖Canaries。然则,正如我之前提到的,Stack Canary值是大的随机数,因而,要“晓得”客栈canary的地位就异常难题。别的,在为应用顺序挖掘破绽时,您没法调试(在另一个特别的顺序中运转上述顺序并在运转时经由过程掌握其支配,显现数据和信息)这个顺序并简朴的检察客栈/手动搜刮Canaries。那末我们终究怎样检索这些信息呢?
好吧,这就是花样字符串破绽的泉源。在我们议论现实破绽之前,让我们先谈谈花样字符串是甚么。
在许多编程语言中(虽然我们将在本文中特地议论C),但有一个名为printf(或类似的器械)的输出函数。printf是用于花样化和打印数据的函数。要运用此功用,顺序员输入:
printf(“花样”,变量)
比方,若是顺序员想要打印出整数变量intvar的值,他们只需实行:
printf(“%i”,intvar)
在上面,%i被称为花样说明符,它只是指定要打印的变量的花样。虽然有许多有效的花样说明符,比方%s,它指定字符串值(一样平常文本,即“hello”,“123”等等(只如果双引号(“”)中的文本))。然则,在这类状况下,对我们来讲最主要的两个花样说明符是:
%x  – 十六进制值的花样说明符
%n – 一种特别花样说明符,它许可我们将现实的数据写入变量,而不是从变量中读取数据
你们中的一些人能够晓得我要说甚么了,但让我们来看一个小例子:
Bob方才经由过程UHB注册了一些网上银行(代表UnHackable Bank)当Bob进入UHB网站时,他看到了“输入你的账号”提醒。当Bob输入他的账号时,银行会显现他的账户信息,他可以或许自在检察并转移他的钱。有一天,鲍勃登录了银行的网站,但当提醒“输入你的账号”时,Bob不测的输入了毛病的账号。网站没有提醒“不准确的帐户”,而是进入了另一个客户的帐户,并可以或许检察并转移这个客户的钱。
可以或许显现恣意信息是一个伟大的安全破绽。若是可以或许显现和支配恣意信息则是一个灾难性的安全破绽,而花样化字符串破绽正是如此。
若是用户可以或许直接将字符串输入到printf语句而不举行任何范例的搜检,他们只需输入%x便可显现客栈上的信息,由于正如我们从上一篇文章中所知,客栈上存储了变量和其他数据。别的,若是歹意用户继承输入%x,终究能够会走漏极为敏感的信息,比方异常处置惩罚顺序指针(重定向举行处置惩罚毛病的函数的内存地址),以至是Stack Canaries。
别的,可以或许从内存中检察恣意数据是一个大问题,但若是歹意用户具有对printf挪用的完整接见权限,他们也可以或许运用%n这类花样说明符掩盖数据。这意味着歹意用户可以或许复制并运用自身想要的值掩盖Stack Canaries,然后实行ret2libc进击(在第一篇文章中议论过)或掩盖函数返回指向其他歹意payload的指针。
我们来看一个小例子:
经典的二进制缺陷攻击模式第二部分
让我们将上图分解为几个局部。
请注重:在上面的示例中客栈被删除,并没有显现
起首看代码:
经典的二进制缺陷攻击模式第二部分
起首,我们设置了两个字符串范例变量inputvar和stackvar 。
接下来,我们经由过程readuserinput函数读取用户的输入,并将所述输入存储在inputvar变量中。然后,我们运用花样说明符为%s的printf语句并传入inputvar。
上述代码中的破绽源于用户可以或许无需搜检花样说明符直接影响printf语句。
如今,看看上面的全部进击图。如您所见,当用户输入通例的,非花样说明符时,输入不会发作任何特别状况。然则,当用户输入“ %x%x%x”时,顺序输出客栈的内容(请注重:%x以十六进制花样输出客栈的内容。在此示例中,我只运用基础文本和数字,以便它更轻易明白)。别的,若是用户运用%n来掩盖客栈的cookie和返回指针,他/她将可以或许将顺序重定向到歹意的payload。

0x04 – 进击:SEH Overwrites

与ret2libc进击异常类似,SEH(结构化异常处置惩罚顺序)Overwrites是掩盖指向分歧函数指针的进击。然则,虽然ret2libc进击基于掩盖返回指针以将顺序重定向到特定的libc函数,SEH Overwrites经由过程掩盖异常处置惩罚顺序指针函数,然后触发异常,以便顺序重定向到我们歹意的payload。
你可以或许设想SEH溢出类似保险敲诈:
Bob具有一艘有大批保险单的船,保单的代价远远超过了这艘船自身。Bob作为罪犯,他决议试图经由过程燃气走漏把船炸飞来诳骗保险公司,如许他就可以或许索赔保险金。经由几周的谋划,Bob炸了他的船。经由一番观察后,保险公司没法明白证实Bob的船燃气走漏但现实上没有爆炸,因而支付了索赔。
与Bob的保险敲诈异常类似,SEH Overwrite进击强迫异常处置惩罚顺序指向到歹意用户的payload,而不是准确的异常处置惩罚顺序。这些进击可以或许应用花样字符串破绽或一样平常客栈缓冲区溢出进击来完成,由于异常处置惩罚顺序指针也是存储在客栈中的。要实行此破绽,歹意署理须要掩盖异常处置惩罚顺序指针以指向歹意payload,而不是现实的异常处置惩罚顺序,然后用户须要触发异常。一旦捕捉到该异常,它将被重定向到歹意函数,然后歹意函数可以或许抛弃异常并实行它的payload。
经典的二进制缺陷攻击模式第二部分

0x05 – 防备:DEP/NX

到目前为止,您能够已意想到不受限定地接见客栈是一件异常风险的事变。别的,纵然Stack Canaries充任防备,歹意用户也可以或许在花样字符串破绽的资助下轻松地重定向顺序的实行,以至可以或许轻松地将歹意函数和功用添加到顺序中。然则,跟着我们在这个系列的愿望,你会很快发明虽然有许多进击,但也有许多防备步伐。在本节中,我们将议论Data Execution Prevention(DEP)和Non-Executable memory(NX)。
可以或许联想到DEP和NX的好要领多是本来的点格棋游戏。
在点和方框中,两个玩家以点网格最先。在每一个回合中,玩家可以或许绘制一条衔接两个点的线。两个玩家会用赤色(玩家一)和绿色(玩家二)在点中着色,当画线使一个正方形关闭时,在地区内画一该玩家标记,透露表现占据。在游戏结束时,哪一个玩家占据的地区大就会得胜。
如今,设想一下你脑壳里的谁人盒子(或许从wikihow看下面的图片):
经典的二进制缺陷攻击模式第二部分
我们假定每一个正方形都是盘算机上的内存地区,而不是点和框的网格。在赤色地区是许可数据实行的,绿色地区则不许可数据实行。
这正是DEP和NX的意义。它们只是阻挠在分歧的内存地区中实行写入内存支配(即歹意代码)的机制。比方,大多数古代顺序在客栈上启用了DEP,因而歹意用户没法经由过程客栈实行payload。
在抱负的天下中,盘算机可以或许在一切内存运用W^X(write xor execute)战略,然则有几个很大的缘由没法如许做。W^X战略是一种内存可以或许特地写入或可以或许独有实行的战略,然则不克不及二者同时举行。由于多种缘由一切存储器中局部不克不及依照这个战略举行事变,这些将在今后的文章中引见。然则关于某些内存地区比方客栈,DEP和NX的运用让运用这个战略成为能够。

0x05 – 第2局部结论

在本文中,我们议论了:
0×01.内核和特权环
0x02.异常和结构化异常处置惩罚顺序
0x03.结构化异常处置惩罚顺序掩盖进击
0x04.花样化字符串和printf敕令
0x05.花样字符串破绽和应用
0x06. DEP/NX
我愿望这篇文章很有资助。请密切注重本系列的下一局部,我们将议论更多的进击和防备。
若是您还没有最先浏览,请浏览本系列的第一篇文章:
文言二进制破绽进击体式格局第一局部


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明经典的二进制缺陷攻击模式第二部分
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址