文/孙茗珅
带你走进维也纳版的CCS2016(二)
文/孙茗珅
编者按
2016年的CCS是有史以来最大规模,参会人数最多的一次。本期将继续分享香港中文大学孙茗珅博士提供的参会总结和感想,本文主要介绍CCS论坛主论坛上图灵奖获得者Martin Hellman发表的演讲,几篇与Android有关的论文,以及10月26日分论坛中的主题报告及keynote, web/mobile security分论坛等。
2016年 CCS 在霍夫堡宫殿 (Hofburg Palace) 举办。这次 CCS是历史上参会人数最多的一次,一共有 1006 个参会者,来自 42个国家、426 个组织。会议组织者统计了参会者来自的国家,前三是美国、德国和英国,随后有韩国、奥地利、法国等等。来自中国的参会人数排名第八。如果按照组织排名的话,第一是德国的 TU Darmstadt,后面还有 SBA Research, ETH Zurich, Google, Penn State 等。
本次论文接收情况如下:一共收到了来自 2000 个作者的 831篇投稿,相比2015年多了 185 篇。会议邀请了 138 位 PC,3 位chair 和 360 位 external reviewers。总共写了 2368 篇 reviews,每篇文章大概能收到 3 篇 review,应该算是正常水平,这么多的投稿,估计审稿的压力也很大。总共接受了 137 篇文章,接受率 16.5%。
2016年图灵奖获得者Martin Hellman
Keynote 来自 Martin Hellman,2016年图灵奖获得者——Diffie-Hellman key exchange (D-H) 中的 Hellman。Keynote 的题目是 Cybersecurity, Nuclear Security, Alan Turing, and Illogical Logic。主要讲述了他发明 key exchange 的经历,对于图灵奖的一些感想,以及和他的夫人写的一本关于爱情的书 (A New Map for Relationships: Creating True Love at Home & Peace on the Planet)。从Martin 的 keynote 演讲中能感受到 Martin 对于科研的热爱,为之不断奋斗的热情,非常鼓舞人心。Martin 不仅是一位非常优秀的科学家,在 keynote 的后半部分他也讲述了和他妻子的爱情、家庭、生活。他用 illogical logic 这个词来形容爱情中的关系,讲述了他在科研中的严谨逻辑也没办法明白爱情中的 “illogical”。就像他书中写道的:
The essence of this book is: “You have to believe in the seemingly impossible gifts of unconditional love and a more peaceful planet, and then dedicate yourself to discovering how to achieve them.”
Is it practical to build a truly distributed payment system- Ross Anderson
Ross 主要介绍了他在发展中国家试验的一种 distributed payment 系统,利用了简单的密码学知识,使用一个手机和短信验证码,完成了交易。加密方式很简单:
The crypto is simple enough: a challenge is copied from the payee’s phone to the payer’s, and an authorisation code is then copied back to the payee.
他的项目得到了 Gates Foundation 的资助,在一些贫穷国家尝试使用,效果非常不错。Ross 的研究真的改变了一个村子里的支付方式,这就是科研的影响力。
视频连接:https://www.youtube.com/watch?v=IbfG_KSlTD4
这里主要介绍四篇 Android 相关的文章,包括 Android Unix domain sockets 的问题,call-back 函数的错误使用,恢复混淆后的 Android 代码,还有第三方包的检测。
◇The Misuse of Android Unix Domain Sockets and SecurityImplications
这篇文章主要介绍了 Android 的 Unix domain sockets,Unix domain socket 和传统的 internet socket 。不同的是:通信是在操作系统 kernel 中完成,而不是通过 network protocol;服务器监听 Unix domain socket namespace 而不是 IP 和 port number。Namespace 包括 FILESYSTEM 和 ABSTRACT 两种,它们分别有对应security enforcement级别,见表1。
正式因为 Unix domain socket 的特性,我们可以做如下两种攻击,见表2。
表1
表2
本篇文章针对这个问题设计了一个检测因为 unix domain socket 引起漏洞的系统 SInspector。SInspector 通过结合静态检测和动态分析两种方式,检测出漏洞。
Address Analyzer 找出 socket 地址,并且检查是否有保护,Authentication Detector 用来检测是 peer authentication 是否保护client 的连接,如果用 UID 和 GID 来检测就很难伪造,但是只用PID 就容易伪造。
文章还讨论了应该如何在 Android 安全的使用 Unix domain socket,适合普通的开发者详细阅读,滥用 domain socket 会引起严重的信息泄漏漏洞。
◇Call Me Back! Attacks on System Server and System Apps in Android through Synchronous Callback
这篇文章主要讨论了 callback 函数在使用中的问题,如果callback 函数使用不当,则会让系统服务锁死或者崩溃。最后文章建议尽量异步处理事务,多用 try catch 捕捉异常。
文章提出了静态分析的方法,提出的工具 KMHunter 基于FlowDroid。作者通过 taint analysis 找出错误调用 callback 函数的地方,并找到了 6 个漏洞,见表3。
◇Statistical Deobfuscation o f A n d r o i d Applications
这篇文章要解决的问题非常简单,就是如何恢复混淆后的代码。Android 的代码混淆最基本的就是文章所谓的 "layout obfuscation",简单来说就是把包名、类名、方法名重命名成一个类似的名字,比如说 "a", "a.b" 这种名字,让分析人员不容易搞明白代码的功能。
作者使用的是 probabilistic model,拿 open-source 的没有混淆的源代码作为 ground truth,经过 static analysis 找到 semantic representation 当作 taining set。然后就可以用这些 semantic representation 去推测那些混淆过的类名,包名。
表3
◇Reliable Third-Party Library Detection in Android and its Security Applications
文章提出了一种检测第三方库的方法,很简单,从 method到 class 再到 package 一层一层的做 hash,然后进行匹配。不得不提的是,这个方法在我们 2013 年的 DroidAnalytics 的系统中已经用过了,这次竟然在 CCS 看到同样的方法,我们主要用于检测重打包的恶意软件,而这篇文章主要是检测第三方库。
Banquet 上还颁发了一些奖项,Best Paper Award 是下面这三篇论文:
High-Throughput Semi-Honest Secure Three-Party Computation with an Honest Majority
A Systematic Analysis of the Juniper Dual EC Incident
A Surfeit of SSH Cipher Suites
这三篇论文都是和crypto key相关的,虽然crypto是个很古老的研究方向,但是对于传统加密方式的应用依然很有影响力,特别是滥用(或者错用)传统加密方法造成的安全隐患值得重视。
还有一些 Test-of-Time Award, Europe Council Best Student Paper Award, 以及 Dessertation Award 和 SIGSAC Awards,详细列表可以在:https://www.sigsac.org/ccs/CCS2016/awards/ 看到。
◇Measurement and Analysis of Private Key Sharing in the HTTPS Ecosystem
如今,大部分热门的网站都有在第三方的 CDN 上有部署。比如说 CloudFlare 就提供免费的 CDN 服务。你把 DNS 解析服务放在 CloudFlare 上,一个 request 就有首先到达某个 CDN 服务器。CloudFlare 也提供了 HTTPS 链接服务,如果使用了,那么所有的HTTPS 访问就会使用 CloudFlare 的证书,而不是网站本身的证书。
因此,在 HTTPS 传输中,使用的 key 则来自于 CDN 服务。如果某个 CDN 服务出现漏洞,泄漏了 key,那么所有使用这个CDN 的网站可能都会收到影响。
图1
作者首先通过 WHOIS 里的信息区分了每个网站的拥有者,然后利用收集的数据回答了以下几个问题:
How many organizatins share keys?
How may keys do providers have?
How are SAN lists used?
随后,文章又研究了 certificate management 的问题,我最感兴趣的是关于 Heartbleed 漏洞之后的证书管理情况。
如图1所示,左边的是在 Heartbleed 漏洞公开之后证书没背撤销的比例,右面是没有 reissue的证书的比例。可以得出一个结论是,outsourced的证书(也就是 CDN 提供的证书)在漏洞刚出时,反应慢于自己管理的网站的证书。而一段时间之后(一周后),因为 outsourced 能够管理大量网站的证书,所以能够统一撤销、重新发放证书。
图2
◇Build It, Break It, Fix It: Contesting Secure Development
这个 talk 并不是讲科研的,而是主要介绍了作者组织的一种安全编程的比赛,不同于传统的 CTF, CGC,这个比赛主要面向刚刚接触安全的学生。比赛包括三个阶段:build, break, fix,模拟了真实世界当中的安全编程的情况。所以这个比赛考察了一是如何写出安全可靠的代码,二是如何找到软件的漏洞并且加以利用,最后如何修复有漏洞的代码。作者在论文中分析了 2014 年的比赛的一些信息:图2中最下面的部分很有意思。比赛在 build阶段会考虑 testcases 和 performance 的分数,在 break 阶段考虑 bugs和 vulnerability 的分数,在 fix 阶段考虑 fix 后的结果。几乎所有的队伍在 break 阶段都会有减分,但是有些队伍在 fix 阶段就修补了漏洞。
图3
◇SandScout: Automatic Detection of Flaws in iOS Sandbox Profiles
这篇文章主要研究了 iOS 的 sandbox 机制,主要是由container profile 控制。iOS sandbox 是一种 mandatory access control policy,使用了 Trusted BSD MAC framework: http://www.trustedbsd. org/mac.html. 它可以为不同的 sandbox 设置不同的 “profile”。通过使用一种 SBPL (SandBox Profile Language) 的语言,可以在Profile 里面可以定义 system call 的使用权限。
图3的这个例子就表示了 mobilesafaris 和 safarifetcherd 可以访问 /Media/Safari 目录下的所有文件,除了 secret.txt.需要注意的是苹果并没有公开最新的 SBPL 语法文档,profile 也是编译之后二进制文件。
这篇文章要解决三个问题,反编译 profile 文档,model sandbox policy,自动化发现漏洞。正是因为 SBPL 的复杂,定义稍有不慎,就会出现逻辑上漏洞。沿着这个思路,作者把 graph-based SBPL 转化成 Prolog 的逻辑定义。profile 变为Prolog 后,就可以用一些 policy quiery来检查 profile 是否存在漏洞。
通过这种方法,作者发现了七类漏洞,并且通知了 Apple,大部分漏洞都能修改 profile 解决。下图这个例子是 iTunes 的隐私泄露漏洞,主要原因是 /private/var/ mobile/Medi- a/iTunes_Control/iTunes 目录可以被任何第三方App访问,而目录下面包含一些隐私数据。
iOS 的安全问题历来都是 "under the hood",这次的 profile 机制以前确实没人研究过,但是想一想 SELinux/SEAndroid 不也是MAC 么?同样的问题,在 iOS 上一样存在,就是需要深入挖掘。
◇The “Web/Local” Boundary Is Fuzzy: A Security Study of Chrome’s Process-based Sandboxing
这篇文章讨论了在现在的浏览器中 Web 和 local 的 boundary开始模糊,因此造成的安全问题。图4左边描述了传统的process-based 浏览器模式,在这种框架下 Web/local boundary 非常清晰。最近出现的 cloud service (比如说 Dropbox) 引入了cloud App, client App,使得 web/local boundary 不是唯一的。
文中介绍了三种可能引起的问题:
accessing files on the local system
interacting with the local system
misusing system sensors
利用方法是假设通过 rederer 的 memory corruption exploit 修改SOP enforcement,使 a.com 可以加载 b.com 到 iframe里。那么就能通过 iframe 与 cloud service 通信,进而修改 local file system。
作者举了个例子,在 iframe里显示 DropBox share file 的按钮,就能绕过以前的 web/local boundary 直接通过 DropBox 获得/修改文件。
因为从 memory corruption exploit 到 bypass SOP 还有很多工作要做,作者还详细介绍了如何绕过 Chrome 的 memory protection (ASLR, CFI)。
下面是 POC 的代码,以及视频。
POC: https://github.com/jiayaoqijia/Web-Local-Attacks
DEMO: https://youtu.be/fIHaiQ4btok
图4
◇UniSan: Proactive Kernel Memory Initialization to Eliminate Data Leakages
UniSan 是一个检测 Linux kernel 的 memory initialization 问题的。在这篇文章,作者为了找到这类的 initialization 引起的 data leakage,提出了用 program analysis 的方法检查程序是否初始化内存对象。具体是基于 LLVM 检查 (没有选择 GCC 的原因是LLVM 提供了更多的 API)是否存在程序路径,使得一个内存对象离开内核空间时候没有被初始化。
◇iLock: Immediate and Automatic Locking of Mobile Devices against Data Theft
iLock 利用声音检测手机是否丢失,如果丢失了就锁定手机保护手机内的信息。具体的方法是使用了 FMCW 的方法,传输的信号频率回随着时间变大,通过计算接收到的信号的时间差,就能判断反射物体的距离。图5是 FMCW 的示意图。
图5
◇On Code Execution Tracking via Power Side-Channel
这篇文章是用 MCU 的 power side-channel 来判断 control-flow integrity。具体的方法是通过power trace 把CFG 构建为一个hidden Markov model。作者对原始的 HMM 进行了修改。使在CFG 里的一个block 表示 HMM 的一个 node。
Singnal extraction 是这篇文章的另一贡献,如何把 power signal 抽象为 observation symbol?如何修改 Viterbi algorithm 使它能够判断 execution sequence 是否是 HMM 的一部分(也就是判断CFG 是否被修改了)。
图6
图7
◇Drammer: Deterministic Rowhammer Attacks on Mobile Platforms
作者利用 Rowhammer 攻击巧妙的拿到 root 权限。因为是memory 的特性引入的攻击,系统也没有什么办法防御。简单来说利用了 "DRAM hardware glitch casing disturbance errors",结果是会造成 DRAM 中的 bit 在某些情况下翻转(0 -> 1 或 1 -> 0)。并且这种 bits flipping 在同样情况下是可以重现的。作者利用这种“特性”,攻击 page table entries,可以让某个 memory page mApping 指向上一个 page,从而可以在 page table entry 写入任意值。
随后,写入 kernel memory 的 page table entry 就可以访问到kernel memory,找到 struct cred 修改 uid 和 gid 就能拿到 root 权限,如图6所示。
因为要不断扫描 DRAM 找到会发生反转的 bit,作者 evaluate不同机器所需的时间,如图7所示。
此外,在panel discussion 环节还讨论了几个非常有争议的话题:安全学术研究的价值,攻击和防御哪个更重要,四大安全会议收录论文的现状,应用密码学和传统密码学的冲突,未来安全研究的发展方向(例如:usable security)。
(责编:杨洁)
(作者单位为香港中文大学)