编者按
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%。
Keynote
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 forRelationships: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 seeminglyimpossible gifts of unconditional love and a more peaceful planet, andthen dedicate yourself to discovering how to achieve them.”
Is it practical to build a truly distributed paymentsystem- Ross Anderson
Ross主要介绍了他在发展中国家试验的一种distributedpayment系统,利用了简单的密码学知识,使用一个手机和短信验证码,完成了交易。加密方式很简单:
The crypto is simple enough:a challenge is copied from thepayee‘s phone to the payer’s, and an authorisation code is thencopied back to the payee.
他的项目得到了Gates Foundation的资助,在一些贫穷国家尝试使用,效果非常不错。Ross的研究真的改变了一个村子里的支付方式,这就是科研的影响力。
视频连接:https://www.youtube.com/watch?v=IbfG_KSlTD4
安卓安全相关的文章
这里主要介绍四篇Android相关的文章,包括Android Unixdomain sockets的问题,call-back函数的错误使用,恢复混淆后的Android代码,还有第三方包的检测。
◇The Misuse of Android Unix Domain Sockets and SecurityImplications
这篇文章主要介绍了Android 的 Unix domain sockets,Unixdomain socket和传统的internet socket。不同的是:通信是在操作系统kernel中完成,而不是通过network protocol;服务器监听Unix domain socket namespace而不是IP和port number。Namespace包括FILESYSTEM 和ABSTRACT两种,它们分别有对应security enforcement级别,见表1。
正式因为Unixdomain socket的特性,我们可以做如下两种攻击,见表2。
本篇文章针对这个问题设计了一个检测因为unix domainsocket引起漏洞的系统SInspector。SInspector通过结合静态检测和动态分析两种方式,检测出漏洞。
Address Analyzer找出socket地址,并且检查是否有保护,Authentication Detector用来检测是peer authentication是否保护client的连接,如果用UID和GID来检测就很难伪造,但是只用PID 就容易伪造。
文章还讨论了应该如何在Android安全的使用Unix domainsocket,适合普通的开发者详细阅读,滥用domain socket会引起严重的信息泄漏漏洞。
◇Call Me Back!Attacks on System Server and System Apps inAndroid through Synchronous Callback
这篇文章主要讨论了callback函数在使用中的问题,如果callback函数使用不当,则会让系统服务锁死或者崩溃。最后文章建议尽量异步处理事务,多用try catch捕捉异常。
文章提出了静态分析的方法,提出的工具KMHunter基于FlowDroid。作者通过taint analysis找出错误调用callback函数的地方,并找到了6个漏洞,见表3。
◇Statistical Deobfuscation of Android Applications
这篇文章要解决的问题非常简单,就是如何恢复混淆后的代码。Android的代码混淆最基本的就是文章所谓的“layout obfuscation”,简单来说就是把包名、类名、方法名重命名成一个类似的名字,比如说“a”,“a.b”这种名字,让分析人员不容易搞明白代码的功能。
作者使用的是probabilistic model,拿open-source的没有混淆的源代码作为ground truth,经过static analysis找到semanticrepresentation 当作 taining set。然后就可以用这些semanticrepresentation去推测那些混淆过的类名,包名。
◇Reliable Third-Party Library Detection in Android and itsSecurity Applications
文章提出了一种检测第三方库的方法,很简单,从method到class再到package一层一层的做hash,然后进行匹配。不得不提的是,这个方法在我们2013年的DroidAnalytics的系统中已经用过了,这次竟然在CCS看到同样的方法,我们主要用于检测重打包的恶意软件,而这篇文章主要是检测第三方库。
最佳论文均与crypto key相关
Banquet上还颁发了一些奖项,Best Paper Award是下面这三篇论文:
High-Throughput Semi-Honest Secure Three-Party Computationwith 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 StudentPaper Award,以及 Dessertation Award和SIGSAC Awards,详细列表可以在:https://www.sigsac.org/ccs/CCS2016/awards/看到。
技术分论坛
◇Measurement and Analysis of Private Key Sharing in theHTTPS Ecosystem
如今,大部分热门的网站都有在第三方的CDN上有部署。比如说CloudFlare就提供免费的CDN服务。你把DNS解析服务放在CloudFlare上,一个request就有首先到达某个CDN服务器。CloudFlare也提供了HTTPS链接服务,如果使用了,那么所有的HTTPS访问就会使用CloudFlare的证书,而不是网站本身的证书。
因此,在HTTPS传输中,使用的key则来自于CDN服务。如果某个CDN服务出现漏洞,泄漏了key,那么所有使用这个CDN的网站可能都会收到影响。
作者首先通过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能够管理大量网站的证书,所以能够统一撤销、重新发放证书。
◇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阶段就修补了漏洞。
◇SandScout:Automatic Detection of Flaws in iOS SandboxProfiles
这篇文章主要研究了iOS的sandbox机制,主要是由container profile控制。iOS sandbox是一种mandatory access controlpolicy,使用了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 sandboxpolicy,自动化发现漏洞。正是因为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 ofChrome‘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与cloudservice通信,进而修改local filesystem。
作者举了个例子,在iframe里显示DropBox share file的按钮,就能绕过以前的web/localboundary直接通过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
◇UniSan:Proactive Kernel Memory Initialization to EliminateData Leakages
UniSan是一个检测Linux kernel的 memory initialization问题的。在这篇文章,作者为了找到这类的initialization引起的dataleakage,提出了用program analysis的方法检查程序是否初始化内存对象。具体是基于LLVM检查(没有选择GCC的原因是LLVM提供了更多的API)是否存在程序路径,使得一个内存对象离开内核空间时候没有被初始化。
◇iLock:Immediate and Automatic Locking of Mobile Devicesagainst Data Theft
iLock利用声音检测手机是否丢失,如果丢失了就锁定手机保护手机内的信息。具体的方法是使用了FMCW的方法,传输的信号频率回随着时间变大,通过计算接收到的信号的时间差,就能判断反射物体的距离。图5是FMCW的示意图。
◇On Code Execution Tracking via Power Side-Channel
这篇文章是用MCU的power side-channel来判断control-flowintegrity。具体的方法是通过power trace把CFG构建为一个hidden Markovmodel。作者对原始的HMM进行了修改。使在CFG里的一个block表示HMM的一个 node。
Singnal extraction是这篇文章的另一贡献,如何把powersignal抽象为observation symbol?如何修改Viterbi algorithm使它能够判断execution sequence是否是HMM的一部分(也就是判断CFG是否被修改了)。
◇Drammer:Deterministic Rowhammer Attacks on MobilePlatforms
作者利用Rowhammer攻击巧妙的拿到root权限。因为是memory的特性引入的攻击,系统也没有什么办法防御。简单来说利用了“DRAM hardware glitch casing disturbance errors”,结果是会造成DRAM中的bit在某些情况下翻转(0->1或1->0)。并且这种bits flipping在同样情况下是可以重现的。作者利用这种“特性”,攻击page table entries,可以让某个memory pagemApping指向上一个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)。(责编:杨洁)
(作者单位为香港中文大学)
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。