错误,误解和攻击:分析广告拦截系统的众包过程
“众包”(crowdsourcing):这一概念是由美国《连线》杂志的记者杰夫·豪(Jeff Howe)在 2006年6月提出的。杰夫·豪对“众包”的定义是: “一个公司或机构把过去由员工执行的工作任务,以自由自愿的形式外包给非特定的(而且通常是大型的)大众网络的做法。
前言
广告拦截系统(例如:Adblock Plus)依赖众包建立和维护过滤列表。过滤列表决定网页上拦截哪些广告。
**写作目的:**增进对广告拦截社区以及众包流程的错误和缺陷的理解。
研究问题:
- FP错误和FN错误的发生频率如何
- FP错误和FN错误的产生原因是什么
- 众包在检测和减少误报和漏报错误方面的效果如何
- 过滤列表对于对抗者的健壮性如何
实验方法:收集和分析了涵盖过滤列表EasyList九年的动态变化的数据集以及同一时期提交的错误报告,得出了很多有关FP(误报)和FN错误(漏报)的特征及其产生原因的重要发现。除此之外,还分析了广告发布者对广告拦截者的攻击规避1。
主要贡献:
- 我们从广告拦截社区收集了两个大型数据集,用来分析众包过程从而检测并且减少广告拦截错误。
- 我们对广告拦截的准确性和过去9年过滤器的更新行为进行了深入分析。该分析为FP和FN错误的原因以及其对网站的影响提供了新的见解。
- 我们通过说明15种不同的规避方法及其经验用法,对广告拦截系统的漏洞进行了全面分析。
1.广告拦截系统简介
Internet中广泛使用广告拦截系统来移除来自网页的广告,保护用户隐私免受第三方追踪。众包是广告拦截采用的一种至关重要的机制,它可以引入新的过滤规则并减少过滤错误。目前,许多流行的广告拦截器都依赖于名为EasyList的众包项目。EasyList维护一个过滤规则列表,过滤器列表决定了要拦截的广告。表1显示了一些依赖EasyList的Firefox和Google的广告拦截扩展。
为了促进众包,EasyList建立了一个大型社区,用户可以在该社区提出反馈并且将错误报告给EasyList编辑者,然后EasyList编辑者就会手动更新广告拦截过滤列表。这些编辑者是EasyList开发者和以一些广告拦截专家。编辑者通过两种不同的渠道从人群中收集反馈和报告:公共论坛和插件应用程序。
大量的研究已经从多个角度对广告拦截系统进行了研究,但是,对于众包功能如何随着时间改善广告拦截系统的过滤列表以及此过程中的潜在缺陷和漏洞,仍然缺乏深入的了解。我们将重点放在EasyList上,并针对9年来的过滤列表和众包错误报告的动态变化进行测量研究。
2. 广告拦截数据集
通用的广告拦截系统通常具有三个主要组件:
- 广告拦截软件;
- 过滤器列表;
- 提供反馈以改进过滤器列表的用户社区。
广告拦截软件利用过滤器列表来拦截网页上的广告。社区由Internet用户和广告拦截过滤器列表的编辑者组成,二者主要作用如下:1)贡献新的过滤器规则,2)纠正由过滤器引起的错误。使用广告拦截系统的Internet用户通过报告错误来对过滤器列表做出贡献,而编辑者则通过解释并根据该反馈行动来控制列表。
2.1 D1: EasyList数据集
该数据集中包含从2009年11月30日到2018年12月7日之间的EasyList版本。当编辑者创建新版本并将其推送到远程存储库时,广告拦截系统会更新EasyList。(Mercurial存储库保存了对EasyList的更改,拥有自2009年11月以来的更新历史)
更新EasyList的三个原因是:
- 纠正FP错误
- 纠正FN错误
- 修改现有过滤器列表的顺序/结构
我们主要关注与纠错相关的更新。
D1 | 2009.11.30-2018.12.7总计 | 基本数据清理后 |
---|---|---|
EasyList版本数 | 117,683 | 55,607 |
基本数据清理过程:
面临的三大问题:
-
数据同步问题——EasyList并不总是以同步方式工作。报告某些FP/FN错误后,不同的编辑者可能会尝试在不同的时间解决相同的错误,从而导致过滤器重复。
解决方法:我们将这些变化视为噪音,并将其消除。
-
时间重复的过滤器——由于编辑者的操作,某些版本的过滤器可能会暂时存在。例如,EasyList曾经包含的两个过滤器1)missoulian.com###PG_fb;2)missoulian.comtheolympian.com###PG_fb。实际上,编辑者试图通过在可选字段中添加网站域“theolympian.com”来指定过滤器方位来修改第一个过滤器。编辑者没有直接修改现有过滤器,而是以新版本添加了第二个过滤器,之后再删除第一个过滤器。这导致列表中暂时存在重复的过滤器。
解决方法:我们为每个过滤器创建了一条记录,该记录指示过滤器创建的时间,过滤器的拆除时间以及过滤器创建和拆除之间的时间段(称为过滤器寿命)。我们利用EasyList创建的提交消息来确定删除过滤器的原因。如果提交消息指示原因是删除重复项,则我们跳过时间重复过滤器的版本。
-
结构维护——编辑者可以对过滤器列表重新排序,并重新构建某些过滤器的语法以创建新版本(例如,2011年EasyList列表和Fanboy列表的合并)。
解决方法:由于这些更改与FP/FN错误无关,因此我们在分析中未考虑这些版本。
2.2 D2: 众包报告数据集
用户通过两个渠道向EasyList编辑者报告错误。
- 用户可以在EasyList论坛上提交公开报告来报告错误
- 用户可以通过浏览器插件提交报告
浏览器插件报告和论坛报告之间的主要区别在于,浏览器插件报告是一种单向通信,即用户提交报告却得不到答复或者反馈。直观的讲,对于网站所有者/开发人员,他们更有可能提交论坛与EasyList编辑者进行交流并跟进错误纠正。2018年3月,一些浏览器扩展开发人员开始使用邮件与报告者进行交流。考虑到此类插件渠道才刚刚起步(并且其数据不是公开的),因此我们的数据收集集中在与D1覆盖时间相匹配的公共论坛。论坛报告的主要优势在于,EasyList编辑者通常会使用为解决所报告的问题而创建的“新EasyList版本”进行回复,这是回答我们研究问题的关键。
D2 | FN错误 | FP错误 | 总计 |
---|---|---|---|
主题数量 | 17,968 | 5,272 | 23,240 |
我们构建了一个爬虫程序,收集了论坛上所有可用的帖子。总的来说,我们收集的23240个主题中每个主题至少有一份错误报告;17,968个帖子与FN错误有关,5,272个帖子与FP错误有关。我们将此数据集称为D2。
3. 信息提取方法
3.1 将报告与EasyList连接——D2A
为了了解众包报告如何影响EasyList的更新,首先需要连接两个数据集。
在众包报告下,EasyList编辑者经常引用Mercurial存储库中的ChangeSet2链接。这是对所引用的EasyList版本中的FN或FP错误纠正的确认。同样,用户(报告者)也使用ChangeSet链接来指出导致错误的过滤器或EasyList版本,或解决错误的版本。
作者扫描了收集的论坛主题及其提出/回复。如果满足以下条件,将考虑帖子的详细信息:
- 回复中包含一个ChangeSet链接
- 回复是由EasyList编辑创建的
- ChangeSet链接中EasyList版本的时间戳即在报告的时间戳之后
- ChangeSet链接中EasyList版本的时间戳和回复的时间戳之间的时间间隔是一天之内
编辑者有可能纠正了错误,但没有回复报告者并确认纠正。在这种情况下,我们无法将报告链接到EasyList版本。此外,编辑者可能会返回旧的ChangeSet链接,该链接是在编辑者作出回应的一天之前创建的,或是由另一位编辑者创建的。在这种情况下,我们没有强有力的证据来证明存在某个EasyList版本是为回应它,或是一个相似的报告而创建的。编辑者偶尔返回一个旧的ChangeSet链接表明错误已经被解决。因此,上面列出的包含标准被设计为保守的,并且通过我们的方法选择的成功链接对是可信赖的(手动确认)。
D2A | FN错误 | FP错误 | 总计 |
---|---|---|---|
报告数量 | 3,700 | 1,584 | 5,284 |
完成此步骤后,我们总共有5,284个报告。758个用户提交了3,700个有关FN错误的报告,而801个用户提交了1,584个有关FP错误的报告。涵盖时间范围是从2009年11月到2018年12月。我们将此子数据集称为D2A。
3.2 重新生成FP——D2FP
为了深入分析FP错误,我们使用旧版本的EasyList和受影响的网页模拟了错误。
面临的两大问题:
-
每个网站都有不同的结构,该结构会随时间而变化。
**解决方法:**使用Internet存档——Wayback Machine服务提取网站的旧版本
-
如何识别受FP错误影响的元素。通常,由于多个匹配的过滤器,EasyList同时阻止和隐藏同一页面上的多个元素。有时,他甚至可以过滤掉数十个元素,其中大部分是广告,因此区分TP和FP错误是一项艰巨的任务。
**解决方法:**利用两个连续的EasyList版本之间的差异:纠正错误的版本和在此之前创建的版本,我们确定了受FP错误影响的网页元素。每个EasyList版本的范围取决于其过滤器的范围。遇到新的FN错误时,会创建一个新版本来扩展EasyList的范围,以覆盖出现该错误的页面中的广告。对于FP错误,通过添加新的例外规则或删除过滤器来缩小EasyList的范围。
识别FP错误影响的元素:
- ϒ:被误认为广告的合法元素
- Zk:为修复FP错误而创建的EasyList版本k
- Zk-1:紧随EasyList版本k的EasyList版本,该版本包含导致误报的过滤器
- N:网页中的元素集
- Fi(N):为与过滤器i匹配的广告元素集
- Ej(N):代表一组与例外规则j匹配的非广告元素,并覆盖Fi(N)的输出
使用EasyList版本k,网页中被拦截的广告元素为:
S
=
S=
S=
被Zk-1阻止的合法元素为:
ϒ
=
ϒ=
ϒ=
这样,作者构建了一个CSS选择器列表,当我们扫描Wayback machine时,用它来标识ϒ的文档对象模型(DOM)。我们扫描了来自不同网站的2,203个网页,这些网页在D2A中报告为FP错误。D2A中FP错误数量为1584,这为何有2203个网页都在D2A中报告为FP错误?
扫描的网页数量 | 能正确模拟FP实例数量 |
---|---|
2203 | 570 |
面临的问题:
-
使用Internet Archive的限制
-
最近邻时间戳问题——连续快照之间可能有很大的时间间隔
**解决方法:**使用了Wayback CDX Server API来检查距请求日期最近的快照3,以确保日期接近(由于缺少快照,因此删除了309个网页)
-
已存档的网页问题的缺失——某些网页由于漫游器排除协议而无法访问,或者网站排名较低。
无法解决,直接丢弃
-
-
FP错误持续时间——在网站上找到受影响元素的持续时间,并在过滤器列表中找到导致错误的过滤器的持续时间。直到纠错为止,这两个间隔之间的重叠是FP错误持续的时间。
解决方法:
-
构建了一个Java应用程序来扫描受影响网站的所有快照。利用了Wayback CDX Server API。该API支持复杂的查询,这些查询返回Wayback捕获的网页快照列表。
-
使用了HtmlUnit来模仿浏览器行为的某些部分,包括HTTP的低级方面和对JavaScript的支持。
-
为了找到导致错误的过滤器的持续时间,使用数据集D1来确定将过滤器添加到EasyList的时间。
-
构建了Google Chrome浏览器扩展程序,以在各种情况下重现广告拦截的效果。Chrome扩展程序与adblock Plus扩展程序类似,但带有特定列表。对于每种情况,我们都在扩展名中直接添加EasyList版本,该版本是在为纠正错误而创建的版本之前直接创建的。
-
此外,修改了一些过滤器以适应archive.org网站。
-
3.3 提取FN错误——D2B
EasyList依靠众包来检测FN 错误。为了进行详尽的分析,需要研究三个主要部分:
- 人群贡献
- EasyList反应
- 广告发布者的对策
因此,从数据集D2中,作者从FN错误报告中提取了一些信息:
- 报告错误的用户的个人资料
- 标题的域和解释性字词
- 发布的时间戳
- 答复的传出链接以及答复的内容
用户数量 | 网站数量 | FN报告数量 |
---|---|---|
4,552 | 12,866 | 17.9k |
4,552位用户报告了12,866个网站,提交了17.9k个FN报告。
作者试图提取被拒绝或不正确的FN报告。如果满足以下一个或多个条件,我们将此类报告归类为拒绝报告:
- 编辑者明确拒绝该报告;
- 编辑者指出该报告不使用,因为它涉及FP错误或诸如广告软件之类的其他问题;
- 报告不足且已锁定(如未答复或未包含发生错误的网站);
- 编辑者引用了一个ChangeSet链接,该链接属于另一个过滤器列表,或者以旧的ChangeSet链接作为响应。
- 在编辑者提出问题后,该话题被锁定,但是在那没有报告者的回答。
**D2B:**3,750个至少满足以上条件之一的报告
4. 分析
作者研究了与广告拦截系统准确性有关的主要因素:用户,网站,错误类型和时间。
4.1 FP与FN错误
根据报告者的经验和任务将其分为七个类别,如下所示:
类别 | 备注 |
---|---|
Editor | EasyList创始人或维护人员 |
Anonymous | 未在论坛中注册的访问用户 |
New Member | 帖子少于10篇的的注册用户(无论他们是否提交过报告) |
Senior Member | 在论坛中发帖量多于10篇的长期用户 |
Veteran | 由论坛管理员确定,在报告错误或纠正bug方面,对论坛作出巨大贡献的人 |
Developer | 广告软件开发人员 |
Other List Editor | 其他过滤器列表的作者 |
上表是从D2A中得出,可以看出Anonymous对报告错误作出的贡献最大。发现FP错误的更多是Anonymous和New Member。FN错误发现者在四个用户类别(Anonymous、Senior Member、Other List Editor、Veteran)中平均分布。EasyList编辑者更关注FP错误。解决错误的快速响应和标准偏差反映了这一点。但是,对于匿名FN报告,编辑者的响应比对匿名FP报告的响应更快。
作者排除了Anonymous类别,因为Anonymous用户没有“永久”的个人资料。可以看到,Veteran类中单个用户在纠正FP和FN错误方面最为活跃,Developer类中各个用户更倾向于纠正FP错误。
4.2 受FP和FN错误影响的网站
作者基于网站的人气度来分析两个方面:
- 受错误影响的大致用户数量
- 在不同排名的网站中众包检测错误的能力
网站人气排名:
作者使用网站的Alexa排名:
-
Alexa列表可能会受到每周末是或者每日更改的影响
**解决方法:**利用高级API来获得3个月的平均排名
-
排名可能会随着时间而改变
**解决方法:**分析涵盖了过去10年,没有关注特定的排名,而是专注于“排名范围”,使排名波动对总体结论的影响较小
根据Alexa排名对网站进行排名。如图所示,作者将网站分为7个类别:
可以看出,FN错误报告中的大多数网站都具有较高的排名。超过53%的网站排名在前10万名之内。FP报告中也有类似情况,超过57.8%的网站排在前10万名。
用户类别:
作者研究了每种用户类别报告的错误类型与网站类别之间的关联,对此进行两次测试:
- 检测两个变量之间的独立性——使用Pearson的卡方检验和似然比卡方检验
- 如果如果统计检验表明存在相关性,则使用Pearson的相关系数来测量线性趋势或者相关性
错误类型的变量是离散的,作者将网站类别的得分按1-7标记,FP错误得分标记为1,FN错误得分标记为2,以进行Pearson相关性测试。
以下是统计结果:零假设4为:错误类型和网站排名是独立的。
可以看出,在Anonymous, New Member, Senior Member, 和Veteran 类中,错误类型和网站类别不是独立的。在Anonymous和New Member类中,Pearson的相关性显示出负相关。这表明对于排名较低的网站,这两种类型的用户相比于FN错误,纠正了更多的FP错误。Senior Members 和 Veterans等则相反。
4.3 FP错误的影响时间
因为没有数据来衡量检测FN错误的延迟,因此仅关注FP。
在D2FP中已经计算了FP错误持续时间。从上图可以看出,有25%的网站的错误持续时间很短,但是,超过50%的网站的错误持续时间超过一个月。在0-600天的范围内,100k类别的百分比最高,而NR类别的百分比最低。此后,NR类的错误持续时间加长。
4.4 FP错误的产生原因
- EasyList添加了阻止非广告内容的过滤器
- 某些网站设计者可能会创建已经在EasyList过滤器范围内的非广告元素
使用D2FP数据集来研究谁应对FP错误的产生负责。例如,如果网站设计人员首先使用元素名称表示合法内容,那么引入导致FP错误的过滤器的广告拦截方就是责任方。作者使用了2017年12月14日发布的HTML 5.2标准,根据EasyList操作和元素类型对元素进行了聚类:
可以看出,广告拦截者应比网站设计者负更多的责任,其造成了65%的错误。大多数广告拦截失败都是由于使用了范围广泛的通用过滤器而造成的。对于“Section”元素类型,广告拦截软件隐藏了该元素;对于“Links"类型,广告拦截器会阻止对其来源发出的HTTP请求。
除此之外,很大一部分由网站设计人员导致的错误是由于他们使用与过滤器匹配的字符串。排名前500的网站设计者应该承担更多导致FP错误的责任,大约有34%的错误会导致“Embedded Content(嵌入式内容)”(例如iFrame元素),原因是嵌入的内容使用了src属性,该属性引用了第三方提供的来源,因此,第三方的设计者承担该错误的责任。
上图显示了导致网站中FP错误的四种不同操作的频率。
类别 | 详情 |
---|---|
EasyBlockR | 由于广告拦截程序阻止了web请求而导致的错误 |
EasyHideE | 由于广告拦截程序错误地隐藏元素而导致的错误 |
DesBlockR | 由于设计人员在URL中使用了不正确的字符串而导致的错误 |
DesHideE | 由于设计人员对EasyList过滤器匹配的元素使用了不正确的属性而导致的错误 |
可以看出,在所有类别的网站中,DesHideE的错误率均较低。DesBlockR对排名前500的网站有很大的影响,但是EasyBlockR在其余网站类别中都造成很大的影响。
4.5 导致FP错误的过滤器
上图显示了导致错误的过滤器来源的百分比。可以看出,超过54%的导致错误的过滤器来自直接添加新的过滤器(home pages上占31%,internal pages上占23%),有18%来自修改现有过滤器(modifying existing filter上占14%,making filter more generic占4%)。
EasyList中的每个过滤器都使用签名来匹配广告元素。签名依赖于HTML属性来隐藏使用src阻止HTTP GET请求的元素或URL。上图显示了导致错误的过滤器用来匹配HTML元素的属性,可以看出大多数导致错误的过滤器都使用global attribute。很少一部分是使用specific attribute。可以看出68%都是以字符串(例如部分地址值)作为签名。实际上,地址的这一部分使过滤器更通用,从而导致更多的错误。
4.6 众包的FN错误
上图为对代表报告的话题的答复。29%的帖子没有来自EasyList编辑者的回复。为了了解EasyList编辑者是否错过了这些报告或在没有公开回复的情况下解决了错误,作者从数据集D2B中提取了不完整的报告并且手动检查了报告,得出结论如下:
正确的FN报告 | 与错误报告有关的FN报告 | 其他原因 |
---|---|---|
20.6% | 20.8% | 58.6% |
作者分析了错误的报告,得出如下结果:
由于报告未提供有关广告和网站的足够详细信息,或者报告者未回答编辑者的问题,因此超过62%的报告被忽略。 有8%的报告由于广告软件而被拒绝。许多用户认为他们的广告拦截程序无法拦截特定的广告,但事实是他们的计算机已被广告软件感染,该软件覆盖了广告阻止程序以注入广告。 这些用户中约有97.6%是anonymous或 new members。
4.7 存在FN错误的网站
上图表示D2数据集中FN报告中指出最多的网站。这些网站在Alexa排名中都比较靠前。作者为了了解这些网站是否使用了针对广告拦截器系统的对策才导致FN错误数量的增加,从D2A中提取了这些网站的正确报告,然后检查了为纠正这些错误而添加的过滤器,发现添加的大多数过滤器是为了阻止来自信誉良好的广告网络的第三方请求。作者得出的结论是排名较高的网站中发生的大多数FN错误是由于第三方广告发布商引起的。
5. 敌对的逃避攻击
现有的论文已经讨论了EasyList的一些漏洞,这些漏洞使广告发布者或网站开发人员可以绕过广告拦截器来向用户投放广告。对此,作者分析了15中攻击并将其分为三类:
- 研究较多的攻击——包含四种攻击类型
- 研究不足的攻击——包含三种研究攻击
- 未研究的攻击——介绍了八种尚未被研究的攻击
5.1 研究较多的攻击
类型 | 介绍 | 研究发现 |
---|---|---|
WebSockets | WebSocket协议使Web开发人员能够使用客户端JavaScript建立与广告服务器的连接。此连接允许服务器将消息推送到客户机,而无需客户机的请求。 | 通过分析数据集发现,自2016年以来,EasyList阻止了291个网站和137个广告服务器使用WebSocket。 |
反广告拦截器 | 现有的大量工作都在研究反广告拦截器,研究目标包括衡量反广告拦截器的流行程度,设计绕过反广告拦截器的方法等。 | 对数据集D2的分析发现其使用付费墙限制网站上的内容,阻止网站,将用户重定向到其他网站或内容以及阻止网站上的合法内容 |
广告属性和URL的随机化 | 服务器可以随机化网页结构的DOM来隐藏广告签名,整个URL使用公钥加密技术加密,以使URL字符串随机化 | EasyList引入了两种新的过滤器语法针对这种情况。通过分析使用此类语法的过滤器,发现15个执行此类随机化的网站,Facebook最常出现在过滤器列表中。有57%的过滤器使用此语法功能来阻止Facebook上的广告。此外没有发现对URL进行加密以规避广告拦截程序的情况。 |
分解可接收的广告列表站点关键字 | 通过破解白名单站点密钥来规避EasyList并展示广告的方法 | 没有发现任何投诉此问题的报告 |
5.2 研究不足的攻击
-
更改广告服务器域
当加载网页时,广告服务器用于存储,维护和向网站访问者投放广告。广告网络经常更改广告服务器域,以避免被阻止。
上图显示了EasyList黑名单里添加和删除的广告服务器域的数量。日期表示将第一个域添加到EasyList的时间。可以看到添加域的数量明显大于删除域的数量。
除此之外,作者还使用4年的AWIS5数据集,分析了6,903个广告服务器域的567,293条记录,发现将这些广告服务器域添加到EasyList后三天,这些广告服务器的流量活动中有52%消失了,这是因为EasyList被设置为每四天更新一次。52%的广告服务器在创建后不久就大部分都被阻止了。在他们的流量活动开始后不久,他们的域就在同一天被添加到EasyList中。因为EasyList社区(包括编辑者和Adblock Plus开发人员)运行代码来监视某些网站的,以检测广告服务器的更改。因此,那些随机生成的域将被快速检测到并添加到EasyList中以进行阻止。
-
更改广告元素属性
网站开发人员可以通过更改广告元素属性来规避广告拦截器。EasyList不具备自动跟踪广告元素更改的功能。更改后的广告元素将获得新的签名,并被视为新的元素。这些新元素只有在众包报告时才被阻止。有时,当流行的广告网络对其所有网站进行更改时,EasyList可以识别广告属性的更改。在这种情况下,EasyList编辑者将用新过滤器替换旧过滤器。
对此,作者从D1中寻找删除旧签名并将新签名添加到同一EasyList版本的情况。仅有553个EasyList响应此类逃避而更改了过滤器的实例。 更改属性的平均延迟为10.3天。 从这些实例中,有311个网站更改了其属性,其中约88%是广告网络Yavli(yavli.com)的客户。
-
更改广告来源路径
EasyList过滤器使用域名或URL路径匹配请求。 因此,广告发布者可以更改URL的“路径”以规避广告拦截器。 与之前的分析一样,作者确定了应用于同一网站的每个EasyList版本中添加和删除的签名。,最后发现644个网站更改了其广告网址的路径以规避阻止。 其中约47.6%是广告网络Yavli的客户。
5.3 未研究的攻击
类别 | 介绍 | 研究发现 |
---|---|---|
利用过时的白名单过滤器 | 白名单包含例外过滤器,这些例外过滤器指示广告拦截器对其无效的元素和URL。 EasyList编辑者会随着时间的推移(每2-3个月)手动维护和删除过时的过滤器。 | |
使用通用例外规则 | 当用户访问带有反广告拦截器的网站时,反广告拦截器脚本会测试广告元素的状态以检测广告拦截器的存在。为了应对这种做法,EasyList会阻止反广告拦截器脚本,或者将相应的广告元素放入白名单中以排除它们。为了绕开广告拦截,一些广告网络和开发人员引入了可能触发反广告拦截并将其分布在许多网站上的元素。这样,EasyList很难发现所有正在使用这些元素的网站。因此,EasyList将为这些元素添加通用例外规则。我们发现许多网站滥用通用异常过滤器来绕过EasyList。 | |
利用FN错误 | 一些网站将广告元素与其合法元素关联并链接在一起。拦截广告后,非广告元素也会被拦截,从而导致广告拦截器出现误报。他们使用签名将广告元素与合法元素链接在一起,以将EasyList过滤器与其广告元素进行匹配。 | |
第一方内容和内联脚本 | 网站使用内联脚本检测广告拦截器以执行反广告拦截器任务。因此,EasyList为用作嵌入式脚本触发器的广告元素制定了例外规则。 但是,此行为吸引了Web开发人员提高嵌入式脚本和第一方内容的利用率。 网络开发人员已利用内联脚本创建网络请求以直接投放广告或使用第一方内容托管广告网址。 EasyList开始利用内容安全策略(CSP)[50]来阻止内联脚本。 | |
ISP注入广告 | 为了向用户投放广告,Internet服务提供商(ISP)可以将HTML,CSS或/和Javascript注入HTTP响应中。但是,也可以利用此方法来规避过滤器列表。在这种情况下,阻止广告服务器域的传统方法不再有效,因为没有HTTP请求被阻止并且广告会附加到第一方内容上。此外,ISP每次都可以将广告附加到不同的URL。 | 在所有FN报告中,发现只有一个报告表明由ISP名为Optimum 的ISP广告注入导致FN错误。 |
后台重定向 | 广告发布商可以使用称为“ Tabunders”的技术来规避浏览器的弹出广告拦截器。 | Chrome(68.0及更高版本)已阻止Tab-under,但其他浏览器(如Firefox)尚未采取任何措施。 |
利用WebRTC | 广告网络已利用WebRTC在服务器和浏览器之间建立实时通信,并使用RTCPeerConnection API发送广告 | 在2018年5月,EasyList和Adblock Pulse通过包装RTCPeerConnection开始阻止使用WebRTC的广告。 |
CSS 背景图 Hack | 一些网站使用CSS背景图片hack来展示广告 | EasyList创建了Adblock Plus和uBlock Origin使用的特殊过滤器,并采用了一种新语法来应对攻击 |
6. 结论
本文使用两个纵向数据集对广告拦截系统及其社区的行为进行了深入研究。主要结论是:
- 在使用过滤器列表的广告拦截系统中,FP是有意义的(non-trivial)。
- 由于多种原因,大量FP错误的寿命很长,在许多网站中都存在。
- 处理FN错误的机制存在一些不足和弱点
- 系统存在许多影响其准确性的漏洞。
本文通过展示15种不同的方法来规避该系统来展示这些漏洞。我们希望这些发现能为以后的工作奠定基础,以发展广告拦截并优化众包机制。
原文链接:https://gangw.cs.illinois.edu/imc2019-adblock.pdf