【技术分享】点我的链接我就能知道你用了哪些chrome插件 2017-01-12 12:06:12 来源:安全客 作者:YSRC
【技术分享】点我的链接我就能知道你用了哪些chrome插件

咳咳,我知道干货一般阅读量会比较低,所以我借用了安全圈段子讲的最好的人惯用的漏洞标题风格。

由YSRC安全研究员evi1m0和neargle挖掘并编写poc,测试链接在文末。需要指出的是这是一个p(标)o(题)c(党),探测不全是正常的,本身就有很多插件不可以利用文中的方式探测,要不然就变成发chrome的0day了~


0x01 About

编写过 Chrome 扩展的开发人员都应该清楚在 crx 后缀的包中, manifest.json 配置清单文件提供了这个扩展的重要信息,crx 后缀文件可以直接使用 unzip 解压,windows 下的安装后解压的路径在:C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Extensions ,MacOS 在:cd ~/Library/Application\ Support/Google/Chrome/Default/Extensions ,其中 manifest.json 的样例:

0.7.0_0catmanifest.json { "background":{ "scripts":["background.js"] }, "content_scripts":[{ "all_frames":true, "js":["content.js"], "matches":["http://*/*","https://*/*","ftp://*/*","file:///*"], "run_at":"document_end" }], "description":"ValidatesandmakesJSONdocumentseasytoread.Opensource.", "homepage_url":"https://github.com/teocci/JSONView-for-Chrome", "icons":{ "128":"assets/images/jsonview128.png", "16":"assets/images/jsonview16.png", "48":"assets/images/jsonview48.png" }, "key":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA/pG/flimvWWAeUelHGaQ+IJajQm01JkfK0EYOJPyfsdTkHLwD3Aw16N3zuFkmwz09DcGDT+ehww7GSpW7RpbX5kHrovsqyHXtwt+a2Sp8bYFFdpRPj3+HG6366kNkwttDHMtsDkwuKaBtrQofQe5Ud9mKu9h1FDPwc2Qql9vNtvOqKFhV+EOD0vD2QlliB6sKCteu4nYBlFEkh6pYWRaXdAYSKYdE1SYIuQzE3dk11+KCaAC1T6GffL3sia8n5brVX7Qd+XtXyBzuM54w5e3STwK7uLMhLGDIzHoTcldzWUUflfwuI86VQIFBxPbvXJKqFFFno+ZHs/S+Ra2SPmQIDAQAB", "manifest_version":2, "minimum_chrome_version":"21", "name":"JSONViewer", "permissions":["clipboardWrite","http://*/","contextMenus","https://*/","ftp://*/"], "short_name":"JSONViewer", "update_url":"https://clients2.google.com/service/update2/crx", "version":"0.7.0", "web_accessible_resources":["assets/options.html","assets/csseditor.html","assets/css/jsonview.css","assets/css/jsonview-core.css","assets/css/content_error.css","assets/images/options.png","assets/images/close_icon.gif","assets/images/error.gif"] }

可以看到关于这个扩展的 content_scripts, desc, homepage, icons 等等配置信息,其中 manifest_version 字段标明现在的 rule 为 2.0 版本,在 2012 年 Chrome 便将 1.0 manifest.json 配置版本的扩展禁止新建在应用市场中,但允许更新,直到 2014 年彻底禁用所有的 version 1.0 版本扩展/应用并更新至 2.0,其中一大部分原因是由于新版规则上安全性的提升。


0x02 Manifest

2.0 中关于 CSP 的强制应用,要求开发者配置 content_security_policy ,如果未设置的话则使用 Chrome 的默认 manifest csp 规则;

不同于老版本的规则,crx 下的资源文件不再是默认可用(直接访问)的图像、资源、脚本。如果想让网站能够加载其资源就必须配置 web_accessible_resources 清单;

删除 chrome.self API ,使用 chrome.extension 替代;


0x03 script <–> onload / onerror

在多年前的 ChromeExtensions 探测中我们可以直接探测静态资源文件来判断是否存在,在上面的更新变动中可以看到,如果访问资源则必须在 web_accessible_resources 中声明 LIST (可以使用通配符),拿 json-view 举例:

"web_accessible_resources":["assets/options.html","assets/csseditor.html","assets/css/jsonview.css","assets/css/jsonview-core.css","assets/css/content_error.css","assets/images/options.png","assets/images/close_icon.gif","assets/images/error.gif"]

访问他们资源的 URL 格式如下:

'chrome-extension://'+id+web_accessible_resources

在测试的过程中我们发现大量的扩展禁止了 iframe 内嵌访问,这里我们可以使用 script 加载页面的差异化来判断是否存在文件:

<scriptsrc="chrome-extension://aimiinbnnkboelefkjlenlgimcabobli/assets/options.html"onload="('json-view!')"onerror="(':(')"></script>

0x04 Chrome Extensions Spider

我们编写了爬虫获取整个谷歌商店中的扩展应用(id, name, starts, users, category, url),分类如下:

'ext/10-blogging', 'ext/15-by-google', 'ext/12-shopping', 'ext/11-web-development', 'ext/1-communication', 'ext/7-productivity', 'ext/38-search-tools', 'ext/13-sports', 'ext/22-accessibility', 'ext/6-news', 'ext/14-fun', 'ext/28-photos'

截至 2017年初 谷歌商店扩展应用总数量为 42658 ,我们将这些 crx 全部进行下载分析其 manifest.json 的编写规则,发现 12032 个扩展可以探测,在之后的实际测试过程中也发现探测应用的成功率为 1/3 ~ 1/4,比较客观,保存的 JSON 格式如下:

{ "web_accessible_resources":[ "19.png", "48.png", "i/4000.png" ], "name":"FacepadforFacebook\u2122", "stars":497, "id":"cgaknhmchnjaphondjciheacngggiclo", "url":"https://chrome.google.com/webstore/detail/facepad-for-facebook/cgaknhmchnjaphondjciheacngggiclo", "category":"ext/10-blogging", "users":"11,686" }, {"web_accessible_resources":["reload.js"],"name":"RefreshforTwitter","stars":184,"id":"hdpiilkeoldobfomlhipnnfanmgfllmp","url":"https://chrome.google.com/webstore/detail/refresh-for-twitter/hdpiilkeoldobfomlhipnnfanmgfllmp","category":"ext/10-blogging","users":"31,796" }, { "web_accessible_resources":["main.css","lstr.js","script.js","images/close.png","images/back.png","images/icon19.png","images/play.png","images/stop.png","images/prev.png","images/down.png","images/next.png","images/delete.png","classes/GIFWorker.js"],"name":"MakeGIFVideoCapture","stars":309,"id":"cnhdjbfjheoohmhpakglckehdcgfffbl","url":"https://chrome.google.com/webstore/detail/makegif-video-capture/cnhdjbfjheoohmhpakglckehdcgfffbl","category":"ext/10-blogging","users":"55,360" }, { "web_accessible_resources":["js/move.js"],"name":"PostagensMegafilmes2.1","stars":0,"id":"ekennogbnkdbgejohplipgcneekoaanp","url":"https://chrome.google.com/webstore/detail/postagens-megafilmes-21/ekennogbnkdbgejohplipgcneekoaanp","category":"ext/10-blogging","users":"2,408" }, ...

0x05 ProbeJS

通过编写脚本可以加载并探测本地扩展是否存在,虽然需要触发大量的请求来探测,但由于是访问本地资源其速度仍然可以接受,我们过滤出users 1000 以上的扩展来进行筛选探测( testing 函数动态创建并删除不成功的 dom 探测节点):

https://sec.ly.com/poc/ext_probe.html //jsondataparse $.get("ext1000up.json"+"?_="+newDate().valueOf(),function(ext){ for(letninext.data){ varid=ext.data[n].id; varname=ext.data[n].name; varwar=ext.data[n].web_accessible_resources; varcurl=ext.data[n].url; testing(id,name,war,curl); } $('#loading').remove(); }) ...
【技术分享】点我的链接我就能知道你用了哪些chrome插件

搜索“同程安全”或者扫描下方二维码关注YSRC公众号,招各种安全岗,欢迎推荐。


【技术分享】点我的链接我就能知道你用了哪些chrome插件

【技术分享】点我的链接我就能知道你用了哪些chrome插件
【技术分享】点我的链接我就能知道你用了哪些chrome插件 本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/3406.html

本文网络安全相关术语:网络安全工程师 网络信息安全 网络安全技术 网络安全知识

分页:12
转载请注明
本文标题:【技术分享】点我的链接我就能知道你用了哪些chrome插件
本站链接:http://www.codesec.net/view/522892.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 网络安全 | 评论(0) | 阅读(24)