iOS浏览器安全探秘:漏洞挖掘与攻击技术解析

本文深入分析了iOS第三方浏览器的安全漏洞,包括UXSS通用跨站脚本、地址栏欺骗等关键技术原理,通过黑盒测试和代码审计揭示了WebKit框架下的同源策略绕过手法,并提供了实际案例和修复方案。

HITB2014AMS – 第2天 – 探索与利用iOS网页浏览器

iOS浏览器与UIWebview

iOS平台非常流行(据StatCounter统计为第三大流行平台)。移动浏览器约占20%至25%的市场份额。iOS提供与桌面浏览器和云端的集成(攻击者可获取相同数据)。许多第三方iOS浏览器存在相似弱点,这些弱点仍被新浏览器复制……且iOS被某些漏洞赏金计划采纳。

默认iOS浏览器是Mobile Safari。根据iOS应用商店审核指南,“浏览网页的应用必须使用iOS WebKit框架和WebKit Javascript”。当然,Mobile Safari并非苹果商店中唯一的浏览器,部分浏览器也可在桌面端使用。

浏览器使用UIWebView构建,该组件允许在应用内嵌入网页内容。UIWebView与原生Mobile Safari的关键差异集中在UI层面。两者核心均使用WebKit,但原生浏览器使用Viewport而非UIWebView。UIWebView API非常简洁直观,支持获取远程文件/HTML字符串/二进制数据,并可编程实现基本导航功能(前进、后退、停止加载、重新加载)。stringByEvaluatingJavaScriptFromString函数支持从字符串执行JavaScript,且权限与来源页面(request.mainDocumentURL)相同。远程Web服务器可通过内容安全策略(CSP)阻止JavaScript执行。JavaScript用于实现浏览器功能及重写原生函数,以通过Objective-C代码实现多标签页等功能。最后,UIWebViewDelegate API支持响应已加载文档中的特定事件。

演讲者指出其研究主要聚焦多标签页、地址栏、自动填充与密码管理器、下载、不受信任SSL证书支持及其他功能(安全评级、恶意软件防护、云集成)的行为机制。他们受《浏览器安全手册》(http://browsersec.googlecode.com)启发,该手册提供可在浏览器上运行的测试用例集(参见http://browsersec.googlecode.com/files/browser_tests-1.03.tar.gz)。此外,他们从Web视角进行黑盒测试、JavaScript代码审查及少量逆向工程/调试,准备了跨浏览器测试用例并发布于https://ios.browsr-tests.com。

他们还复测了部分旧版Mobile Safari漏洞(如CVE-2011-3426),发现某些修复并不完整。

UXSS(通用跨站脚本)

Lukasz表示,UXSS中攻击者利用浏览器漏洞。报告某些漏洞时,浏览器开发者通常回应“WebKit应处理同源策略,对吧”,将责任归咎于iOS。他们发现这种假设/反应并不总是正确。开发者常只关注功能而忽视安全性。CVE-2013-6893、CVE-2013-7197和CVE-2012-2899是不同浏览器(Mercury、Yandex、Google)中UXSS漏洞的典型案例。多数情况下,问题源于浏览器支持多标签页且可指定子窗口/标签页显示/执行内容。iOS中WebKit并未真正实现多标签页,这意味着浏览器开发者需自行实现所有必要功能。桌面浏览器所用技术相对安全,但iOS浏览器并非如此。

他们解释,父窗口/标签页使用原生UIWebView同源策略。创建新标签页需使用Objective-C“桥接”,开发者需记得更新地址栏等UI元素。为实现这些,需要自定义同源策略。最终子窗口/标签页再次使用原生SOP。

此外,由于移动浏览器无原生文件下载方式,通常先加载文件再通过本地file://源写入。某些情况下,文件(通过Content-Disposition: attachment)显示在托管站点的源中。iOS 5+实现了新的“隔离附件源”,但未解决所有问题。操纵Content-Type也产生有趣结果:text/plain可在< iOS 7中作为HTML执行(现已修复),application/octet-stream同样可作为HTML执行,而使用application/other打开页面会触发Mobile Safari询问用何应用打开文件(可能获取本地跨源权限)。总之,若能够执行JS并突破同源策略,可窃取Cookie、访问内部网站等。他们指出窃取密码并不容易。

为正确处理本地HTML文件,开发者应作为text/plain打开文件、应用内容安全策略标头、使用HTML5沙盒,或使用Quick Look替代UIWebView(因Quick Look不支持JavaScript)。

从攻击视角看,利用UXSS时若还能欺骗地址栏,成功率将提升。事实上,有时甚至无需UXSS漏洞,仅欺骗地址栏即足够。实际上,无法使用框架且通常只能攻击移动浏览器的父/顶层窗口,无法将窗口隐藏于其他窗口下……因此UXSS漏洞的成功率可能相对有限。

ABS(地址栏欺骗)

Marek解释地址栏是移动浏览器开发者编程的部分,不属于UIWebView。更改网站内容而不更新地址栏显然有害。实现方式之一是使用超时函数更新当前页面内容。“初始化和中断”技术是另一种ABS实现方式。代码可在页面加载前中断加载并加载其他内容。还可让浏览器回退到特定页面。在卡巴斯基安全浏览器和F-Secure安全浏览器中发现相关漏洞。某些情况下,即使使用自签名证书加载页面,浏览器仍保持绿色“证书正常”图标。

部分浏览器易受先加载无效页面再重定向到最终钓鱼页面却不更新地址栏的场景影响。循环加载页面并先连接未监听端口,再连接实际页面/端口,也可能允许控制地址栏URL(因端口常不显示)。

修复这些问题需显示UIWebView中当前加载的URL,而非预期URL。同时需在每个事件(包括webView::didFailLoadWithError)更新地址栏。最后,仅当存在实际成功且有效的SSL连接时才显示SSL锁图标。

其他常见弱点

他们还研究了其他漏洞,包括URI方案(影响下载、发送未认证推文和绕过弹窗拦截器)及URL处理(Mobile Safari中的格式字符串内存破坏漏洞可泄露栈内容,甚至在使用代理渲染时访问服务器文件系统)。

密码管理器功能也由网页浏览器开发者实现。在卡巴斯基安全浏览器的案例中,研究人员通过中间人漏洞(插入自动接收用户名/密码的隐藏框架)从密码管理器窃取密码。地址栏会短暂更新(除非与ABS结合),但演示攻击成功。

最后,SSL处理方式很重要。默认情况下,iOS UIWebView HTTPS请求中的无效证书无需用户交互即被拒绝。某些漏洞可改变此行为(使用户接受自签名证书)。Opera Coast 3.0是易受简单中间人攻击的浏览器之一。

关于演讲者

Lukasz Pilorz – 前国际电商平台应用安全专家,现任职于某英国大型银行的渗透测试员。OWASP波兰会议常驻演讲者及波兹南分部发起人。其Web安全生涯始于2006年的sla.ckers.org。

Marek Zmyslowski – 拥有多年渗透测试经验,包括波兰多家银行及金融机构的银行系统和电子银行测试。现任某世界最大银行内部系统首席渗透测试专家。持有Offensive Security的OSCP和OSCE认证,OWASP波兰董事会成员。毕业于华沙大学电子与信息技术学院。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计