宿迁腾云网络网站建设公司

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • APP开发
    • SEO优化
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • APP开发案例
    • SEO优化案例
  • 行业动态
    • 网站建设
    • SEO优化
    • 技术日志
  • 联系我们
    • 关于我们
首页 > 行业动态 > 技术日志 > 微软70的漏洞仍然是内存安全问题的例子?|译文

微软70的漏洞仍然是内存安全问题的例子?|译文

2021-08-14

以下是翻译:

之前,我们讨论了主动解决内存安全问题的必要性。显然,仅靠工具和指导无法防止此类漏洞。十多年来,内存安全问题与 CVE(常见漏洞披露)的比率非常接近。我们相信使用内存安全语言可以通过工具和培训无法实现的方式缓解这种情况。

在本文中系统编程语言,我们将探讨一些可以通过使用内存安全语言来防止的 产品漏洞(经过测试和静态分析)的真实示例。

内存安全

内存安全是编程语言的一个特性。在具有内存安全性的编程语言中,所有内存访问都是明确定义的。今天使用的大多数编程语言都是通过某种形式的垃圾收集来实现内存安全的。但是,无法承受垃圾收集器繁重的运行时间的系统级语言(即用于构建其他软件所依赖的底层系统的语言,例如OS内核、网络堆栈等)。通常不是内存安全的。

微软已经修复并指定了 CVE 安全漏洞,大约 70% 的根本原因是内存安全问题。虽然我们采取了缓解措施,包括严格的代码审查、培训、静态分析等。

微软 70% 的漏洞仍然是内存安全问题

尽管很多有经验的程序员都可以编写正确的系统级代码,但很明显,无论采取何种缓解措施,使用传统的系统级编程语言编写内存安全代码几乎是不可能的。

接下来,让我们看一些现实生活中使用没有内存安全保证的语言导致的安全漏洞的例子。

空间内存安全

空间内存安全是指确保所有内存访问都在访问类型的边界内。为此,需要代码来跟踪这些大小并根据这些大小正确检查所有内存操作。

在控制流的极端情况下,可能会因为没有考虑整数符号、整数提升或整数溢出的复杂性,可能会错过检查,或者可能会错误地执行检查。下面我们来看看Edge的这个例子,由(CVE-2018-8301):

[0] 处的检查是正确的。但是,[1] 可以修改字符串的大小,使获取的偏移量无效。这会导致在 [2] 处调用复制函数时产生与预期不同的偏移量,从而导致越界写入。

此漏洞的修复方法很简单:将“偏移检查”移到更接近使用时间的位置。问题是这个错误很容易出现在复杂的代码库中,简单的重构代码也可能再次导致这个漏洞。现代 C++ 提供了跨度来强制执行数组访问的边界检查。但是,不幸的是,这不是默认值,因此完全取决于开发人员使用 span。因此,在实践中很难强制使用这种结构。

如果编程语言可以自动跟踪和验证大小,那么程序员就不再需要担心正确执行这些检查,我们也可以确定这些问题不存在于我们的代码中。

时间记忆安全

时间内存安全是指确保指针在解除引用时仍指向有效内存。

一个常见的模式是发布后使用。触发此漏洞的方法是先引用一个内部访问并保存到本地指针系统编程语言,然后进行一系列复杂的操作,可能会释放或移动内存,导致本地指针中的引用失效,而然后在引用无效后取消引用。比如找到Edge的源码示例(CVE-2017-8596):

这个错误的原因是太多复杂的API相互交互,程序员无法在整个代码中强制对内存的所有权。在 [0] 处,程序获得指向该对象拥有的对象的指针。然后在[1]处,由于语言的复杂性,代码需要执行更多的代码来获取另一个变量。在[2]中,它将使用缓冲区和宽度,并使用指针的内容创建一个新对象。

问题是:

该程序同时使用垃圾收集和手动内存管理。垃圾收集器会跟踪对象,但不知道是否有指向对象内部的指针。由于可重入,JS程序可以修改状态并清除在[1]处创建别名的指针的所有权。该漏洞类似于迭代器失效漏洞。当状态被修改时,所有指向内部状态的指针都可能变成无效指针。但是在像浏览器这样的复杂程序中,几乎不可能使用静态方法来确保不出现错误。问题的根源在于为指向可修改状态的指针添加别名。 C 和 C++ 没有相应的工具来防止这种错误。但是,我们建议始终使用“智能指针”来跟踪内存所有权。

数据竞争条件

当同一个进程中的两个或多个线程同时访问同一个内存地址,并且至少有一次访问是写操作,并且线程不使用任何显式的锁操作来控制对内存的访问,则会发生数据竞争。在多线程访问共享数据的情况下,保持空间和时间内存安全变得更加困难且更容易出错。即使未同步的内存只共享了很短的一段时间,也有可能被其他线程修改数据,而被修改的数据就是引用其他内存地址的数据。这就是检查时间/使用时间()漏洞的原因之一,会导致空间和时间内存安全漏洞。

2018 年披露的漏洞表明了数据竞争可能带来的影响。当虚拟机向主机发送特定消息时调用此代码。这意味着可以并行调用它来处理其他控制消息和数据包。这是有问题的,因为控制消息的处理函数使用的信息被修改,没有任何锁定操作[0]。

以下代码被多个控制消息处理函数使用,从中我们可以看到更新的信息是如何使用的:

由于访问不同步,新缓冲区可能会被旧的 -> [1] 值使用,导致越界写操作 [3]。

防止此类漏洞需要对多个线程访问的数据结构进行锁定操作,直到数据处理完成。但是,C++ 中没有简单的静态检查方法来强制执行此操作。

我们该怎么办

需要几个不同的指标来解决本文中提出的问题。 C++ 中的“现代”结构(例如 span)至少可以防止某些类型的内存安全问题,而其他现代 C++ 功能(例如智能指针)应尽可能使用。但是,现代 C++ 仍然不是一种完全内存安全且完全没有数据竞争的语言。更糟糕的是,这些功能的使用完全依赖于程序员“做正确的事情”,这几乎不可能在大型、晦涩的代码库中强制执行。 C++ 也没有工具可以用安全的抽象来包装不安全的代码,这意味着虽然可以在本地强制执行正确的编程习惯,但在 C 或 C++ 中构建安全组件将极其困难。

此外,软件也应尽可能转为完全内存安全的语言,例如C#或F#,它们使用运行时检查和垃圾收集来确保内存安全。毕竟,除非必要,否则您不应该参与复杂的内存管理。

如果您出于合理的原因(例如速度、控制和可预测性)使用 C++,则可以考虑转向内存安全系统编程语言。在下一篇文章中,我们将介绍为什么我们认为 Rust 是目前最合适的编程语言,因为它可以以内存安全的方式编写系统级程序。

原文:

Tag: 编程语言 指针 指针变量
网站制作公众号

宿迁腾云网络网站建设公司 | 网站开发 | 网站制作 | 网站优化

咨询电话:13160355545

上一篇

返回栏目

下一篇

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

热推

  • PHP是怎么做到最糟糕的编程语言?|?
  • php文件上传代码 PHP4.3.10和PHP5.0.3的判断错误代号及判断的区别
  • php网站模板下载浅聊一下网站搭建,一个什么都不懂的小白也可以php网站模板
  • php+免费开源cms织梦CMS收费意味着什么?CMS突然收费了!php+免费开源cms
  • php 网站 9万个主题中发现一个重要权限升级漏洞(图)php网站源码带后台
  • 一个基于Web界面的企业级运维监控平台,部署5.2.3前
  • 易语言:中文编程语言的老大,拥有独立的编译器
  • 华尔街最炙手可热的三门编程语言,能与Java旗鼓相当的编程语言
  • php语言培训学校如何选择一家靠谱的培训机构?-学PHP需不需要报培训班asp语言改php
  • 图形只需很少的培训,即可由控制工程师和工厂技术人员使用OOIP

相关

php实例开发机器之心编辑部连续八年荣登最常用编程语言榜首p

php实例开发机器之心编辑部连续八年荣登最常用编程语言榜首p

php分页代码简单实现万万没想到,黑客最爱的编程语言竟然是这

php分页代码简单实现万万没想到,黑客最爱的编程语言竟然是这

php编程词典(个人版)PYPL编程语言:2019年最后的一

苏州php网站开发腾云网络网站建设,腾云网络网站编程语言的时

苏州php网站开发腾云网络网站建设,腾云网络网站编程语言的时

php网站php编程语言编程语言中最流行的编程语言是哪几种?

php网站php编程语言编程语言中最流行的编程语言是哪几种?

php面向对象编程题1.2014年最受关注的编程语言,他们才

php面向对象编程题1.2014年最受关注的编程语言,他们才

php框架是什么意思PHP编程语言项目开发中常见的框架,看看

php编程培训为什么PHP还没死吗?怎么PHP更优秀的编程语

php编程培训为什么PHP还没死吗?怎么PHP更优秀的编程语

php编程培训2018年十大编程语言下表:现在不妨介绍跻身本

php编程培训2018年十大编程语言下表:现在不妨介绍跻身本

php网站程序更想了解PHP这门编程语言在各大网站使用情况是

php网站程序更想了解PHP这门编程语言在各大网站使用情况是

标签

seo(1182) 市场营销(661) 网站制作(573) 网站建设(564) 搜索引擎(553) 网站(482) PHP(361) 编程语言(345) 建站(294) 关键词排名优化(267) 网站建设公司(245) 优化(216) seo排名(207) 域名(190) 软件(171) 网站优化(148) 搜索引擎优化(146) 外链(141) 科技(136) 网站关键词(124) 网站排名优化(123) 域名服务器(120) 网站排名(107) 时政(103) 排名优化(95) 搜索引擎收录(93) 网站设计(92) 电子商务(88) 引擎(86) 移动互联网(85) 开发框架(79) 开发(75) 网站服务器(74) 框架(68) 前端开发(68) 网站分析(66) 网站建设方案(65) 关键(64) 流量(63) 源码(62) 百度优化(62) 网站权重(61) 开放源代码(59) seo培训(53) 网页设计(51) 百度(51) php框架(50) 网站建设知识(50) 大数据(50) 谷歌(49)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

宿迁腾云网络网站建设公司

联系电话:13160355545

公司地址:江苏省宿迁市丽景湾华庭北门都市花园公寓9楼907

联系邮箱:admin@tyweb.net

全国分站
  • 北京
  • 广东
  • 东莞 广州 中山 深圳 惠州 江门 珠海 汕头 佛山 湛江 河源 肇庆 潮州 清远 韶关 揭阳 阳江 云浮 茂名 梅州 汕尾
  • 山东
  • 济南 青岛 临沂 济宁 菏泽 烟台 泰安 淄博 潍坊 日照 威海 滨州 东营 聊城 德州 莱芜 枣庄
  • 江苏
  • 苏州 徐州 盐城 无锡 南京 南通 连云港 常州 扬州 镇江 淮安 泰州 宿迁
  • 河南
  • 郑州 南阳 新乡 安阳 洛阳 信阳 平顶山 周口 商丘 开封 焦作 驻马店 濮阳 三门峡 漯河 许昌 鹤壁 济源
  • 上海
  • 河北
  • 石家庄 唐山 保定 邯郸 邢台 沧州 秦皇岛 张家口 衡水 廊坊 承德
  • 浙江
  • 温州 宁波 杭州 台州 嘉兴 金华 湖州 绍兴 舟山 丽水 衢州
  • 陕西
  • 西安 咸阳 宝鸡 汉中 渭南 安康 榆林 商洛 延安 铜川
  • 湖南
  • 长沙 邵阳 常德 衡阳 株洲 湘潭 永州 岳阳 怀化 郴州 娄底 益阳 张家界 湘西
  • 重庆
  • 福建
  • 漳州 泉州 厦门 福州 莆田 宁德 三明 南平 龙岩
  • 天津
  • 云南
  • 昆明 红河 大理 文山 德宏 曲靖 昭通 楚雄 保山 玉溪 丽江 临沧 思茅 西双版纳 怒江 迪庆
  • 四川
  • 成都 绵阳 广元 达州 南充 德阳 广安 阿坝 巴中 遂宁 内江 凉山 攀枝花 乐山 自贡 泸州 雅安 宜宾 资阳 眉山 甘孜
  • 广西
  • 贵港 玉林 北海 南宁 柳州 桂林 梧州 钦州 来宾 河池 百色 贺州 崇左 防城港
  • 安徽
  • 芜湖 合肥 六安 宿州 阜阳 安庆 马鞍山 蚌埠 淮北 淮南 宣城 黄山 铜陵 亳州 池州 巢湖 滁州
  • 海南
  • 三亚 海口 琼海 文昌 东方
  • 江西
  • 南昌 赣州 上饶 吉安 九江 新余 抚州 宜春 景德镇 萍乡 鹰潭
  • 湖北
  • 武汉 宜昌 襄樊 荆州 恩施 孝感 黄冈 十堰 咸宁 黄石 仙桃 随州 天门 荆门 潜江 鄂州 神农架
  • 山西
  • 太原 大同 运城 长治 晋城 忻州 临汾 吕梁 晋中 阳泉 朔州
  • 辽宁
  • 大连 沈阳 丹东 辽阳 葫芦岛 锦州 朝阳 营口 鞍山 抚顺 阜新 本溪 盘锦 铁岭
  • 黑龙江
  • 齐齐哈尔 哈尔滨 大庆 佳木斯 双鸭山 牡丹江 鸡西 黑河 绥化 鹤岗 伊春 大兴安岭 七台河
  • 内蒙古
  • 赤峰 包头 通辽 呼和浩特 乌海 鄂尔多斯 呼伦贝尔
  • 贵州
  • 贵阳 黔东 黔南 遵义 黔西 毕节 铜仁 安顺 六盘水
  • 甘肃
  • 兰州 天水 庆阳 武威 酒泉 张掖 陇南 白银 定西 平凉 嘉峪关 临夏 金昌 甘南
  • 青海
  • 西宁 海西 海东 海北 果洛 玉树 黄南
  • 新疆
  • 乌鲁木齐 伊犁 昌吉 石河子 哈密
  • 西藏
  • 拉萨 山南 林芝 日喀则
  • 吉林
  • 长春 白山 白城 延边 松原 辽源 通化 四平
  • 宁夏
  • 银川 吴忠 中卫 石嘴山 固原
SiteMap
网站地图
TAG标签
Copyright © 2017-2025 TYWEB.NET 宿迁腾云网络科技有限公司 ALL RIGHTS RESERVED.   苏ICP备17033535号-1

热门搜索

百度 下载 2025 2024 2026 货源 货货源 虚拟 禅道 报名 金蝶KIS旗舰版
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

精品模板
建站费用
成功案例
联系我们