广 告 位 招 租 QQ:527116945
当前位置: 首页 » SEO » seo » 正文

自然seo

放大字体  缩小字体 发布日期:2022-05-29 01:30:48  来源:自然seo  作者:qu  浏览次数:13
核心提示:自然seo-Meltdown & Spectre 攻击及缓解措施(二)MIP改造已经上线很久了,在操作当中也一直出现了这样那样的问题。今天转

自然seo-Meltdown & Spectre 攻击及缓解措施(二)

MIP改造已经上线很久了,在操作当中也一直出现了这样那样的问题。今天转载一篇来自于MIP官方博客的问题解决的内容,这是7月份刚刚更新的常见问题的解答,希望感兴趣的朋友多多关注一下。正文部分如下:

在 MIP 推出后,我们收到了一些站长的疑问。现将常见问题整理出来,帮助大家了解 MIP 的知识。

一、MIP 认知类问题

1.1 MIP 化的收益是什么?具体数据是怎样的?

从目前收集到的数据来看,网站 MIP 化上线后,页面速度提升 30%~80%,页面到达率提升 5%~40%。

1.2 开发 MIP 后,搜索流量是导流到 MIP,还是导流到原页面?

应该导流到 MIP 页面,需要在 MIP 页面中做好和原页面的 对应关系。

1.3 MIP 移动网页加速器做了之后是只针对移动百度的展示,还是说也对我们其他的正常用户一样显示?

MIP 页面是可以独立运行的,可以在浏览器中通过 url 直接访问,不依赖百度结果页。由于 MIP 页速度较快,体验更优,会在百度移动结果页有更高的权重。

1.4 搜索结果打开是百度的域名,用户分享的是否也是是百度链接?使用百度域名是否不利于网站的品牌传播同时也会影响流量统计,该如何解决?

答:如果用户通过分享组件分享,则分享的标题,图片和内容都是原页面内容,具体分享内容可以在使用组件时定义。这种做法不会影响品牌传播,也不会影响流量统计。如果用户直接从浏览器复制链接分享,那么被分享的是当前页面 URL (MIP Shell 链接),URL 中是能够反解出原页面 URL 的。统计代码在页面加载完成后都会生效,不会受到分享影响。

1.5 搜索结果打开是百度的域名,是否会影响广告计费?

从搜索结果页点出的MIP页面,其页面上的任何内容(包括但不限于广告、在线咨询、统计等组件)均视为在原站点上的投放和使用。详情请见MIP 内容声明。

1.6 如果采取新建一套 MIP 页面的方式,假设新建 MIP 页面出现问题,譬如改造错误、失效或者其他不可预知问题,百度的处理机制是怎样的?

MIP 是有回退机制的,MIP 访问出问题后,会直接回到原来的 H5 页面;不会影响权重,MIP 会更被认可和优先。

1.7 MIP 可以加什么样的广告?

MIP 既可以加入百度联盟广告,也可以加入第三方广告。

1.8 MIP 是否开源?

MIP 核心代码和组件都是开源的,欢迎交流讨论。

核心代码 GitHub :https://github.com/mipengine/mip

MIP 组件 GitHub :https://github.com/mipengine/mip-extensions

1.9 MIP 对什么样的内容有较好的效果?

目前我们对内容浏览类的站点支持比较全面。后续,随着不断丰富的开放组件,MIP 可以支持更多类型的站点。

1.10 站长构建一个 MIP 的成本有多少?

MIP HTML 是基于 HTML 进行的优化。对于新建站点,按照 MIP 规范开发即可,没有额外成本;如果是已有的页面,需要具体看页面生成方式,模板形式的改造一次性成本。

1.11 MIP 与 Mobile Friendly 是什么关系?

Mobile Friendly 是用于评估个页面在手机端的浏览体验,评估标准包括内容易读性,功能易用性,广告面积等。而 MIP 是一套解决方案,不仅可以提升移动端浏览体验,还会解决页面加速和安全性的问题。所以应用了 MIP 的页面能够提升一定的移动友好性,但不一定能达到 Mobile Friendly 的要求。

1.12 加了 MIP 标签后对页面的展示有没有影响?

没有影响。MIP 标签会自带一些样式,但这些样式是可以被覆盖的。所以加了 MIP 标签后网页还可以保持原来的样式。

二、改造前准备

2.1 MIP 在原网站搭建,还是重新在新子域做,还是新目录做?

答:都可以,这三种方案改造 MIP 都是可行的。做好 canonical 标签 对应即可。

2.2 使用伪静态 url 的网站如何使用 MIP?

MIP 页面可能会被 MIP-Cache 缓存,所以用户看到的不一定是动态的页面。当需要更新页面内容时,可通过 MIP 组件形式封装 JS 请求,以及后续更新 DOM 的 JS 操作。

2.3 代码适配站点如何使用 MIP?

区别讨论。如果后端根据 UA 判断是否为移动端页面,并返回页面,则将返回的页面 MIP 化即可。如果是前端判断浏览器宽度或 UA,再请求后端返回相应页面,则需要改变这套流程,使用后端判断,或直接改为响应式页面。

2.4 是否必须是 HTTPS 才能 MIP 化,如果不是 HTTPS 会有什么影响?如何快速 HTTPS 化 ?

MIP 改造本身是不需要支持 HTTPS 的。但如果页面需要与服务端进行交互,比如发送统计,提交表单,获取数据,需要支持 HTTPS。快速进行 HTTPS 化可以通过百度云加速的 HTTPS 方案进行快速部署 HTTPS 环境。

2.5 gbk 编码的网站如何使用 MIP?

更改成 utf-8 编码后使用 MIP。gbk 编码并不是国际通用标准,在一些手机上会有会显示乱码。

三、前端改造,组件使用

3.1 目前 MIP 组件之外的一些 Javascript 插件如何支持?譬如广告、统计、推荐,等等?

答:(1)MIP 为了确保安全性和性能表现,不允许用户自定义 Javascript,需要用 MIP 组件的形式引进来;MIP 组件是开源的,允许开发者自行开发组件并提交给 MIP 组件库。

(2)目前 MIP 组件已经支持多种功能组件:如广告支持站长自定义的横幅广告、视频广告、H5 广告,同时也支持一些第三方广告系统,统计可以支持百度统计,更多具体的组件支持的可以参考官网的 组件说明;后续 MIP 也将持续提供多样的组件,以适应不同的需求 .

3.2 MIP 页面中可以展现哪些元素?对于弹窗广告有何限制?

MIP 页面中可以展示所有原页面的元素,在前端代码中对于一些标签做替换即可。比如,如果需要使用悬浮元素(position:fixed)需要改用 mip-fixed 组件或 mip-semi-fixed 组件。

3.3 MIP 提供的组件不能满足交互需求怎么办?

在 MIP 官方组件不能满足需求的情况下,如果升级官方组件可以满足,可以 提需求 或自己升级官方组件,MIP 项目组来审核;如果涉及到站点自身业务逻辑,可以自行封装组件并通过 组件审核平台 提交审核组件,审核通过后可以上线。

3.4 网盟反屏蔽广告申请广告位的时候,能否同时生成 MIP 页面的广告代码片段?

答:暂时还是不支持直接生成的,需要人工的根据转换规则将非 MIP 反屏蔽投放代码转换成 MIP 反屏蔽投放代码。这个转换规则还是比较清晰的,在 MIP 文档 里有说明。

3.5 对于自适应站点,MIP 对页面的改造要怎么弄?

MIP 改造主要有三步:

a、引用 MIP 提供的 JS 和 CSS

b、替换部分标签为 mip-html 标签

c、去除原有 JS 逻辑,改引用 mip-js 组件。

是否需要特殊改造,由网站对 “响应式” 的实现方式决定:

如果您的自适应站点是用 CSS 的 Media Query 来实现的,那么不需要做特殊的改造,MIP 对 CSS 没有限制。

如果您的自适应是通过 JS 计算实现的,则需要进行相应的改造(见改造第 c 步)。 如果您需要的功能不在我们的组件列表里面,可以通过 github issues 给我们反馈。

3.6 MIP 规范中写到不能用 link 标签对样式表进行加载,是不是我的样式都要写到 HTML 页面里,并且只能出现一次 style 标签?

MIP 规范不建议外链样式表,是为了节省网络加载时间,加速 MIP 页面。 开发时,样式表可以作为单独的文件维护,上线前通过一次编译(fis3,grunt,gulp)实现文件内联,将 css 作为<style>标签插入<html>, 达到 MIP 要求。

3.7 如何保证 MIP 页面代码符合规范,有校验工具么?

代码校验工具地址为:https://www.mipengine.org/validator/validate。在 MIP 官网—常用链接中也可以找到。

3.8 react 能否和 MIP 结合使用?是否会和其他 js 框架(比如angular )结合?

MIP 与其他框架(除zepto和jquery)及其组件不能结合使用。交互功能可以通过引入 MIP组件实现。

3.9 MIP页是否支持自定义cookie? 实现 登录、统计、广告等功能ess>组件实现,使用方法见博客《MIP ACCESS细节剖析》。

3.10 MIP的统计功能如何实现的?

目前我们提供百度统计,天润统计,第三方站长开发的 cnzz 统计,还有 mip-pix 自定义统计。在页面中引入相应的组件就可以实现统计功能。

3.11 与服务端异步交互请求如何发出,如AJAX,官方提供了什么组件?

与服务端的交互请求比较个性化,需要自行封装组件,在组件中可以用 fetch 自行实现。文档请见官网。示例:

fetch(location.href).then(function (res) {return res.text();}).then(function (text) {fetchElement.innerHTML = ‘fetch: ‘ + (text.search(‘mip-test’) !== -1);});

3.12 第三方自定义组件的时候是否限制个数和规范?

暂无个数限制,规范需要通过FECS的规范检查,请保证新提交的组件不重复实现已有功能。未来我们会开放MIP组件平台,方便大家提交组件。

3.13 组件开发后多久可以上线?

组件开发按照 github 的标准,开发自测完成后,提交到 MIP 组件上线平台。1个工作日内可以上线。

3.14 组件之间是否可以交互?

为了组件间的抽象分离,mip不建议做组件间的交互。但是可以通过dom加on属性的形式控制。如mip-lightbox 弹层组件与mip-sidebar侧边栏组件,点击button按钮可以触发展开收起。

<button on=”tap:my-lightbox.open” id=”btn-open” role=”button” tabindex=”0″>Open lightbox</button>

<mip-lightboxid=”my-lightbox”layout=”nodisplay”class=”mip-hidden”><div class=”lightbox”><h1>Hello, World!</h1><p> this is the lightbox</p></div></mip-lightbox>

3.14 组件之间是否可以交互?

为了组件间的抽象分离,mip不建议做组件间的交互。但是可以通过dom加on属性的形式控制。如mip-lightbox 弹层组件与mip-sidebar侧边栏组件,点击button按钮可以触发展开收起。

<button on=”tap:my-lightbox.open” id=”btn-open” role=”button” tabindex=”0″>Open lightbox</button>

<mip-lightboxid=”my-lightbox”layout=”nodisplay”class=”mip-hidden”><div class=”lightbox”><h1>Hello, World!</h1><p> this is the lightbox</p></div></mip-lightbox>

如果有遇到新的前端技术问题,可以通过 GitHub issues 与我们交流,提交 issue 可以按照博客文章操作。

四、提交生效

4.1 如何提交 MIP 页?MIP 推送 URL 限制是多少?

博客《百度站长平台 MIP 引入工具》中有提交 MIP 页的详细教程。提交上限根据站点而不同,最少的上限是每天 10000 条 URL,上不封顶。

4.2 MIP 化后对其他搜索引擎抓取收录以及 SEO 的影响如何?

在原页面 MIP 化,不会影响其它搜索引擎的抓取收录,也不会影响页面权重。新增 MIP 页可通过 robots.txt 文件禁用其它搜索引擎的抓取,从而保证原页面的权重。MIP相关的内容可以这么写(假设您的目录是/mip/):

User-agent: Baiduspider

(这里不用写关于mip的内容)

User-agent: Googlebot

Disallow: /mip/

4.3 针对拥有 PC、WAP、MIP 三套页面的网站,如何进行移动适配工具和 MIP 工具提交?

答:MIP 页面可单独通过百度站长平台的 MIP 引入 提交,不会影响 PC 和 WAP。

4.4 网站如何确认改造的 MIP 页面已经在线上生效?

答:MIP 页面都会使用百度搜索结果页异步打开,只需要在百度搜索中搜索链接,并且打开后 URL 上是百度地址。

4.5 MIP 提交几个月时间了,生效量比较少,是什么原因?

答:提交 MIP 页面后,经过收录、校验、和生效三个步骤,才能在结果页看到闪电标。

1)提交 url 后,spider 会去抓取收录;

2)页面收录后,会进行 MIP 校验,如果页面不能通过 前端校验,则说明页面源码不符合 MIP 规范,此时页面 ** 收录 ** 成功,但是并没有 ** 生效 **。

3)只有页面符合 MIP 规范,并且能通过前端校验,页面才算生效,也就是搜索引擎看到的是带闪电标志的页面。

生效量少的原因也会根据不同站点而不同,请先确认页面是否被收录并且能通过 MIP 校验,可以反馈问题到站长平台,来定位具体原因。

4.6 MIP 页面提交并收录了为什么搜索结果没有 MIP 闪电图标。

这种情况大多数是因为 MIP 页面乱码或者页面源码不能通过 校验 导致。如果还有其他问题,可以从站长平台 反馈入口 反馈问题。

4.7 MIP 页面提交给百度收录后,为什么有些会被转码?

由于广告不符合百度规范。MIP页面跟普通页面性质相同,都是可访问的html页面。百度搜索会将质量较低的页面转码,无论是否是MIP页面都会被转码。如果您的页面被转码,请参考《百度移动搜索落地页体验白皮书——广告篇》 修改页面内广告的投放。

百度搜索相关问题,可以通过百度站长平台的 反馈入口 反馈。

五、MIPCache

5.1 为什么要使用 MIPCache?

http://www.cnblogs.com/mipengine/p/why_mip-cache_exists.html

5.2 如果提交的网址错了,怎么删除错误的网址,另外把页面都改成404对站点排名有没有影响?

可以使用站长平台 mip-cache 的更新接口,删除错误网址。如果还有对应的h5网页的话,对排名没有影响。###### 5.7 使用MIP-cache是否增加页面抓取的压力?

会。MIP-cache为了保证页面的时效性,会在cache过期(52分钟-5天)后重新抓取所有页面,网站服务器会受到较高的qps压力。

5.3 已使用了 CDN 之后,再进行 MIP 改造,两套 CDN 会不会产生冲突和影响?

答:不会产生冲突,也不会存在双重加速的问题。 搜索请求会先发到 MIP-Cache(MIP-CDN),如果页面不存在或过期,会进一步访问原 CDN。

5.4 已经使用 CDN 再用 MIP 的必要性是什么?

答:MIP 的性能提升方案,很大一部分是技术实现的收益,非 cdn 收益。MIP 原理不能简单的理解为 Mobile Friendly 框架 + CDN,技术核心是通过页面渲染技术等提升性能,详见 博客:百度 MIP 移动页面加速——不只是 CDN。

5.5 页面的 url 没变,但展现内容进行了改版。改版后,新的内容为什么没有同步在百度搜索结果页?

答:MIP Cache 页面没更新导致。具体分两种情况:一是页面没有点击导致页面不被更新(自动更新时间最长 5 天,也就是说最多 5 天,页面也会被更新);二是页面有点击,但是站长服务器封禁了 spider 抓取,这样导致 Cache 抓取不回来新的页面,导致无法更新。目前 MIP Cache 抓取 UA 为 baidumib、mip,理论上讲,除非站长服务不稳定导致多次抓取失败,否则不会带来额外的太大压力。

5.6 MIP Cache 缓存更新时间是多长时间?

答:目前页面过期时间是 50 分钟左右,详细请见MIP-Cache 的更新和校验策略。

5.7 使用MIP-cache是否增加页面抓取的压力?

会。MIP-cache为了保证页面的时效性,会在cache过期(52分钟-5天)后重新抓取所有页面,网站服务器会受到较高的qps压力。

自然seo-SEO相关(1)

随着移动端网站的流量的不断增多,近期百度推出了MIP移动端加速功能,今天和朋友们分享的主题是关于MIP页面规范当中Canonical标签的运用。当然,对于网站前端不是很懂的朋友可能只能作为知识点了解一下,关于Canonical标签的运用技巧也是百度站长平台发布了官方的运用教程,正文部分如下:

MIP的规范要求必须添加强制性标签canonical,不然MIP校验工具会报错:

强制性标签<link rel=”/^(canonical)$/”> 缺失或错误

这个标签怎么写?又是干什么用的呢?MIP博客给你分享攻略:

简单来说,canonical标签用于关联原页面和MIP页,保证MIP页继承原页面权重,在移动搜索时优先展现MIP页。Canonical标签是MIP页连接外界的重要桥梁,不写或写错会导致MIP页不能和原页面产生联系,导致权重丢失,MIP页不展现。

1. “原页面”是哪个页面

原页面是相对于MIP页来讲的,如果在m.a.com/1.html的基础上,mip改造后得到mip.a.com/1.html,那么m.a.com/1.html就是mip.a.com/1.html的原页面。

2. 标签正确写法

Canonical标签添加在MIP页的<head>标签中,href指向原页面地址。

如:mip.a.com/1.html页面(MIP页)的正确写法为:

<!– TODO: 使用请修改href–><link rel=”canonical” href=”http://m.a.com/1.html”>

href指向原则:href指向百度移动搜索导流最多的页面。

不同情况下的href指向:

如果同样的内容既存在对应的pc页,也存在移动页,那么href指向百度移动搜索流量大的页面。

如果是动态页面,原页面 已经存在canonical标签,则href指向与原页面指向一致。

如果 原页面 有多个版式,href指向流量最大的页面。

如果没有对应的原页面url(如新建独立MIP站),则href指向MIP页本身。

如果直接在当前url进行MIP改造并直接生效,则href指向MIP页本身。

3. 用处:关联原页面 继承页面权重 优先显示MIP页

在爬虫抓取MIP页后,会根据其中的canonical标签得到当前MIP页和原页面的关系,在移动端需要展现原页面时,优先展现体验更好、速度更快的MIP页。

一个类似的例子是在站长平台上提交移动端适配。在提交适配规则“m.a.com/1.html对应www.a.com/1.html”后,在移动端m.a.com/1.html会继承www.a.com/1.html的权重,优先展现m.a.com/1.html。

4. 补充说明:

MIP页面和原始页面的主体内容应该大致相同。如果内容相差较大,被如果搜索引擎判定主体内容不一致的话,会认为canonical标签无效。

原网页与MIP页的url的对应关系尽量简单、直接(文档说明)。简明直接的对应关系有利于搜索引擎分析mip页与原网页的关系,加快MIP页被收录和展现的速度。

历史上,MIP曾使用“standardhtml”来链接MIP页和原页面,这个标签已经被“canonical”代替,新提交的mip页不再需要写“standardhtml”了。

自然seo-SEO相关(2)

之前和朋友们分享的是Meltdown & Spectre 攻击及缓解措施(一),今天的再和朋友们分享一下Meltdown & Spectre 攻击及缓解措施(二),这篇内容也是由百度安全指数平台在2018年1月9日发布的,正文部分如下:

4. 攻击能力分析

a、Spectre攻击

Spectre攻击有两个变种,V1可以用于绕过内存访问的边界检查,V2可以通过分支预测注入(对CPU分值预测机制的干扰)来执行代码。

到2018年为止,几乎所有的计算机系统都收到Spectre攻击的影响,包括几乎所有的服务器、桌面电脑、笔记本和移动设备。特别的是,Spectre不仅影响Intel,还影响AMD和基于ARM的处理器 [8, 2]。Intel通过官方声明对Spectre攻击进行了回应。AMD则回应称,由于AMD处理器结构的不同 [1],V2攻击对AMD处理器几乎是不可能的。

BoundsCheck Bypass – V1

V1攻击可以用于绕过内存访问的边界检查,核心是利用了推测执行可以执行条件分支语句之后的指令这一性质。攻击者可以利用V1攻击来执行特定的代码片段(gadget),获取其无权限获取的内存空间的内容。一个可被用于V1攻击的代码片段例子如:

图1:可以被V1利用的典型代码片段(gadget)。注意这里的x必须为攻击者能够影响,否则这个代码不可以被利用发起攻击。

这种方法恶意的利用了CPU的推测执行功能,在CPU做分支判断期间(数十个CPU cycle内)在推测执行模式下执行if语句块内的部分。在V1攻击中,攻击者在推测执行的分支中恶意执行一个越界内存访问。虽然推测执行模式下的内存访问不会被最后真实执行,但是其访问的信息很有可能会被攻击者用其他的方法感知(例如使用基于时间的侧信道攻击)。此外,感知泄露到的内存内容还可以用于构造控制流劫持的exploit。

BranchTarget Injection – V2

V2攻击主要利用分支预测机制进行攻击。其主要思路利用CPU内部的间接跳转预测器(Indirect branch predictor),在推测执行模式下执行特定代码片段。攻击者可以通过许多方法影响甚至控制间接跳转预测器的行为,使得间接跳转预测器会预测执行攻击者指定位置的代码,从而在推测执行下执行攻击者想要的代码片段。条件跳转指令可以分成两种:条件直接跳转和条件间接跳转。条件直接跳转很难被用于V2攻击,因为其跳转的目标位置代码通常是不可控的。条件间接跳转可以被用于V2攻击,因为其跳转的目标地址有可能被攻击者控制。攻击者通过控制条件间接跳转的目标位置,或是其目标位置的代码,使得跳转目标处的指令片段对于隐私数据(例如密钥、token等)有相当强的side-effect,再使用侧信道感知推测执行模式下产生的side-effect来推测隐私数据(密钥、token),从而完成攻击。由于不同的CPU的间接跳转预测器原理不同,因此对CPU的间接跳转预测器进行干扰、注入的方法也各不相同。此外,超线程模式下,跑在同一个CPU核心上的两个线程和间接跳转预测器之间也有相当复杂的关系,也有可能参与到V2攻击中。

关于ASLR

为了完成攻击,攻击者需要在污染指令的虚拟地址(Virtual Address)上与被攻击目标的虚拟地址满足一定的约束,从而污染目标的预测分支。因此,理论上如果有完善的地址空间随机化(ASLR),那么攻击者很难有效的完成攻击。但是由于现有ASLR机制经常有信息泄露,因此攻击者在对目标系统进行充分研究后,往往有机会构造出成功的漏洞利用代码。为了进行有效的防护,往往需要更细粒度、更安全的ASLR防护。

关于预测执行中的内存加载时延

预测执行的时间是有限的,比如V1只有数十个CPU Cycle。而攻击目标的内存数据如果不在cache里,很有可能从DRAM中加载目标数据就不止数十个CPU Cycle,从而无法在时间限制内完成完整的攻击流程。

针对这种情况,攻击者可能可以简单的发起多次攻击。前次攻击虽然无法完成完整的攻击流程,但会将目标内存数据加载进Cache,从而使得后继的攻击不用再阻塞在内存加载上。但是这个可能性还未被确认成功,现有的PoC也无法对任意内核地址进行攻击以获得成功。

b、Meltdown攻击 – V3

V3攻击可以被用于从用户态读取内核态数据。通常来说,如果用户态程序直接访问内核的内存区域会直接产生一个页错误(由于页表权限限制)。然而,在特定条件下,攻击者可以利用推测执行机制来间接获取内核内存区域的内容。例如,在某些实现中,推测执行的指令序列会将缓存在L1 Cache中的数据传递给随后的指令进行操作(并影响Cache状态)。这会导致用户态程序能通过Cache侧信道的方式推测得到内核态数据。需要注意的是该攻击只限于已被内核分配页表的内存(在页表里被标为supervisor-only),被标为not present的内存区域是不能被攻击的。

Meltdown漏洞主要影响Intel处理器,而对AMD处理器几乎无效。Intel声明该缺陷几乎影响其发售的所有处理器,AMD则声称其处理器并不存在此缺陷 [7]。ARM声称主流的ARM处理器不受该漏洞影响,并发布了一份受影响的处理器列表。然而ARM的Cortex-A75处理器直接受Meltdown漏洞影响,同时Cortex-A57、Cortex-A72受到Meltdown漏洞变种的影响 [7]。同时,Raspberry Pi平台不受所有Meltdown和Spectre漏洞的影响。

图2:典型的Meltdown攻击代码样例。

c、浏览器攻击

在浏览器中,可以通过Javascript或者WebAssembly进行攻击代码构造。但是这样的攻击面临着几个严重的限制。

首先是ASLR,V1/V2攻击需要对可执行代码的地址做精确控制,而现代浏览器都部署了地址随机化。由于BTB碰撞只依赖于虚拟地址的低bit位,所以理论上攻击者依然有机会通过大内存段堆风水操作以及多次尝试来实现攻击,但在浏览器环境下,目前尚没有高效的攻击方法出现。

已有的Javascript V1攻击,充分利用了同一个浏览器内部的相对地址固定的前提,完成了浏览器内部的跨站数据获取。但是对于V1攻击,要有可控的index来操纵越界读,在PoC中可以直接传输。但对于现实场景下,寻找到可用的目标脚本片段也是一个很大的挑战。

对于V3攻击,由于Javascript引擎会检查数组越界,所以无法直接发起V3攻击。但是可以结合V1攻击,形成V3c组合攻击。但是这依然受限于ASLR。要发起有意义的攻击,需要结合其他的安全漏洞获取地址泄露信息,或者做长时间大范围的内存扫描。此外,由于Javascript的Array index类型长度是一个32bit整数 [11],所以很难在64bit系统上有效的指向kernel内存区域。Web Assembly会提供比Javascript更合适的攻击环境,但单独的攻击实战意义依然有限。

5. 缓解方案

边界检查绕过的缓解 – V1的缓解

V1攻击高度依赖于特殊的代码片段(gadget)。因此,简单有效的软件解决方案就是插入一个barrier来阻止推测运行机制在这段特殊代码里面执行。Barrier可以选用LFENCE指令。MFENCE同样可以,不过它的性能损失比LFENCE大。

图3:加入LFENCE指令在判断语句之后,防止后面的代码执行推测运行机制。

对于Linux系统,禁用eBPF机制可以阻断现有PoC攻击,使得攻击者无法通过eBPF接口注入V1 gadget到内核空间,从而显著提升exploit的构造难度。Intel的一个分析报告 [3]指出,可以作为V1攻击的代码片段在Linux内核中很少。这样使得攻击者发起V1攻击的可行性降低。

跳转目标注入攻击的缓解 – V2的缓解

对于跳转目标注入攻击,有两个可行的缓解方案。

RSB 填充 + BTB 刷新。这是一个纯软件解决方案。其核心思想就是对跳转目标的buffer, 即RSB和BTB进行清理,使得攻击者注入的跳转目标不再有效。因为RSB是一个32个槽的循环buffer,因此只需要32个虚假的call指令就可以把整个RSB清理一遍(实例代码如图4所示)。BTB的槽从1K到16K不等,而且从虚拟地址到BTB索引的映射函数f(x)还不公开,因此要清除BTB,需要首先使用逆向工程方法找到f(x),然后根据f(x)找到1k到16K的虚拟地址来对应每个BTB的槽。最后发起1K到16K个虚假的call/jmp把所有BTB的槽清空(实例代码如图5所示)。需要指出,该方案的性能overhead很大。

图4:RSB Padding。32个虚假call来清空RSB。

图5:BTB Flushing。使用1K或16K跳转来清空BTB。

微码升级 + 系统软件(VMM/kernel)补丁.这个缓解方案需要CPU微码升级和系统软件(VMM/kernel)更新。CPU微码的升级提供了三个新的接口给系统软件:

a、Indirect Branch Restricted Speculation (IBRS)。当IBRS被设置上时,高优先级代码不会使用低优先级的跳转地址。比如VMM不会使用任何VM提供的地址,kernel也不会使用任何用户进程提供的地址。

b、Single Thread Indirect Branch Predictors (STIBP)。当STIBP被设置上时,同一物理CPU上的两个HyperThreading逻辑内核直接的跳转地址不再共享。

c、Indirect Branch Predictor Barrier (IBPB)。当IBPB被设置时,之前的跳转地址不会影响之后的跳转预测。这个功能一般用于从高优先级到低优先级切换上下文的时候。比如VMM回到VM或kernel回到用户空间。

这三个功能是否支持可以用CPUID加ax=0x7来检测。返回结果中rdx的第26位表明这三个新功能是否支持。对系统软件(VMM/kernel)的更新,各个操作系统已经发布了相关的补丁。

如果无法得到微码升级,可以考虑使用Retpoline指令替换技术 [10] 进行防御,替换掉容易被V2攻击的间接跳转和间接调用指令。

此外,类似于V1,Linux下关闭eBPF也可以有效的提升V2攻击的难度。

Meltdown攻击的缓解措施 – V3的缓解

抵御Meltdown攻击最有效的方式就是KAISER/KPTI。KAISER/KPTI方案中要求操作系统维护两个页表,一个页表给用户程序使用,一个给kernel自己使用。并且确保程序所使用的页表不会映射高优先级的页面,即不会映射kernel的页面。KAISER/KPTI方案最早提出时是为了侧信道攻击对内核地址随机化(KASLR)的影响。该方案恰巧也可以用来抵御Meltdown攻击。

两个页表的切换,会导致CR3的重新加载,从而引起TLB刷新,进而降低内存的访问速度。如果某些应用场景需要大量的内核和用户空间切换(两个页表之间的切换),会造成较高的性能开销。为了降低这些性能开销,kernel需要使用充分的利用PCID特性,把TLB的刷新降低。

了解跟多:https://mp.weixin.qq.com/s/Bdc58fRJO4nFzCHnO5WIYQ

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
 

关键词: 自然seo
 
推荐图文
最新热点文章