DOP_SR

今天展示的是2016年IEEE S&P安全会议的一篇Data-Oriented Programming,我们简称DOP攻击。

在讲DOP之前,我们首先要看一下ROP。ROP全称Return-Oriented Programming ,顾名思义,就是以返回地址为目标的攻击手段。攻击者首先通过内存漏洞改写当前过程调用的返回地址,当过程调用结束了执行返回操作的时候,就陷入攻击者的目标代码处;随后攻击者通过串联事先在目标程序和共享库中找到的指令片段,来执行恶意语义。这些指令片段我们称之为gadget,每个gadget都是以ret指令结尾。

我们可以看到,ROP这类攻击的本质上是对程序控制流的劫持,操控程序的控制流。于是,有学者提出保护控制流完整性的策略CFI,之后针对CFI的研究层出不穷,理论上已经可以多种方法实现控制流的完整性检查。DOP的目标和ROP是一致的,但是它只操控程序的数据段,而不改变程序的控制流图,因此可以绕过CFI的检查。

DOP的前身追溯到2005年S&P安全会议的一篇“Non-Control Data Attacks Are Realistic Threats”,讲述了非控制数据攻击的方法;随后2015年S&P安全会议上又出现一篇“Automatic Generation of Data-Oriented Exploits”,讲述了自动化构造非控制流数据攻击的方法。图中给出了一个数据攻击的例子,攻击者通过内存漏洞直接改写pw->pw_uid的值为0,这样就使应用程序获得了root权限。可以看到这种攻击根本不会改变控制流。但是这类数据攻击一眼看上去,令人直觉上觉得攻击语义十分有限,只能改变存在数据段的条件变量或者泄露内存敏感内容。

但是DOP在现实中找到了这段代码:图中第7行readData存在内存漏洞,它可以溢出缓冲区数组buf,覆盖到buf之前的所有变量,那下面这整个循环就在攻击者的控制之下。攻击者可以控制循环条件,选择分支的条件,来实现各种赋值操作,解引用操作,逻辑运算操作。在这个例子中,12行13行的的操作我们称之为DOP的gadget,而攻击所需的循环我们称之为dispatcher,中文可以理解为调度器。

论文为了系统化DOP攻击,定义了MINDOP语言,包含六种操作,分别是:逻辑运算,赋值操作,加载和存储操作,跳转操作和条件跳转操作。这些操作在真实机器上都很容易找到相对应的gadget。前四种很容易理解,只要找到对应的指针操作即可。那为什么是必须是指针操作呢,因为在DOP中我们是对内存数据进行操作,通过覆盖指针值,我们很容易指向需要操作的内存数据段。

我们再来看下所谓的dispatcher,之前展示的例子中这个while循环就是一个dispatcher。dispatcher有个所谓的selector,控制需要用到的gadget,在该例子中就是type指针。

有了dispatcher后,我们来看一下如何实现MINDOP操作中的跳转语义。在这个例子中,第五行的函数是一个dispatcher,该dispatcher接收一个输入cmd来完成数据gadget,而cmd在第四行通过指针数组buf来赋值,指针数组buf里存储的是n轮操作的攻击语义,每轮操作后,更新cmd的值为下一个buf的指针值。那如何实现跳转语义呢,我们只要在当前轮操作完成后,更改cmd的值到buf数组的某处,比如buf[i-1],这样dispatcher就回到第i轮进行数据操作了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容

  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,340评论 0 6
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,703评论 24 1,002
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,704评论 18 139
  • 他说我,你总是喜欢把自己逼到绝路上去,不给自己一点机会,也不给别人一点机会。 我冷冷地说,是的,我是这样的人。 再...
    心情山庄阅读 350评论 0 1
  • 《敏儿》 记得那年你豆蔻年华,红红的脸颊 记得那年黄河游览晚归,嘻嘻哈哈 记不得那年20路公共汽车多少次上上下下 ...
    山东慧恩贺守金阅读 94评论 0 0