本文发表在网络安全研究国际学术论坛 (InForSec)

今天参加的 session 比较杂,我主要参加了 keynote, web/mobile security session, protection across execution session, attack and defense session, phone security session, panel discussion 还有晚上的维也纳传统美食。

Keynote: 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 的研究真的改变了一个村子里的支付方式,这就是科研的影响力。

blog/ccs-2016-diary/keynote-ross.png

视频连接:https://www.youtube.com/watch?v=IbfG_KSlTD4

Technical Sessions

Measurement and Analysis of Private Key Sharing in the HTTPS Ecosystem

Frank Canglialosi (University of Maryland), Taejoong Chung, David Choffnes (Northeastern University), Dave Levin (University of Maryland), Bruce M. Maggs (Duke University), Alan Mislove and Christo Wilson (Northeastern University)

blog/ccs-2016-diary/IMG_3430.jpg

这篇文章主要介绍了在 CDN 中 HTTPS 使用情况的 measurement study。当今,大部分热门的网站都有在第三方的 CDN 上有部署。比如说 CloudFlare 就提供免费的 CDN 服务,我的主页就用了 CloudFlare 的服务。你把 DNS 解析服务放在 CloudFlare 上,一个 request 就有首先到达某个 CDN 服务器。CloudFlare 也提供了 HTTPS 链接服务,如果你使用了,那么所有的 HTTPS 访问就会使用 CloudFlare 的证书,而不是网站本身的证书。

blog/ccs-2016-diary/measurement-and-analysis-1.png
blog/ccs-2016-diary/IMG_3433.jpg

所以,在 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 漏洞之后的证书管理情况,文章主要有两张图概括。

blog/ccs-2016-diary/measurement-and-analysis-2.png

左边的是在 Heartbleed 漏洞公开之后证书没背撤销的比例,右面是没有 reissue 的证书的比例。可以得出一个结论是,outsourced 的证书(也就是 CDN 提供的证书)在漏洞刚出时,反应慢于自己管理的网站的证书。而一段时间之后(一周后),因为 outsourced 能够管理大量网站的证书,所以能够统一撤销、重新发放证书

 Build It, Break It, Fix It: Contesting Secure Development

Andrew Ruef, Michael Hicks, James Parker, Dave Levin, Michelle L. Mazurek (University of Maryland) and Piotr Mardziel (Carnegie Mellon University)

这个 talk 并不是讲科研的,而是主要介绍了作者组织的一种安全编程的比赛,不同于传统的 CTF, CGC,这个比赛主要面向刚刚接触安全的学生。比赛包括三个阶段:build, break, fix,模拟了真实世界当中的安全编程的情况。所以这个比赛考察了1. 如何写出安全可靠的代码,2. 如何找到软件的漏洞并且加以利用,最后3. 如何修复有漏洞的代码。

blog/ccs-2016-diary/IMG_3442.jpg

作者在论文中分析了 2014 年的比赛的一些信息:

blog/ccs-2016-diary/build-it-break-it.png

图表中最下面的图很有意思。比赛在 build 阶段会考虑 testcases 和 performance 的分数,在 break 阶段考虑 bugs 和 vulnerability 的分数,在 fix 阶段考虑 fix 后的结果。几乎所有的队伍在 break 阶段都会有减分,但是有些队伍在 fix 阶段就修补了漏洞。

对于这个 build, break, fix 的比赛,我感觉更像是综合了编程能力,算法能力,和安全能力的比赛。比赛还有奖金,感兴趣的同学可以关注一下明年的比赛。

比赛网址:https://builditbreakit.org

 SandScout: Automatic Detection of Flaws in iOS Sandbox Profiles

Luke Deshotels (North Carolina State University), Razvan Deaconescu, Mihai Chiroiu (University POLITEHNICA of Bucharest), Lucas Davi (TU Darmstadt), William Enck (North Carolina State University) and Ahmad-Reza Sadeghi (TU Darmstadt)

这篇文章主要研究了 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 的使用权限。

下图的这个例子就表示了 mobilesafaris 和 safarifetcherd 可以访问 /Media/Safari 目录下的所有文件,除了 secret.txt.需要注意的是苹果并没有公开最新的 SBPL 语法文档,profile 也是编译之后二进制文件。

blog/ccs-2016-diary/sandscout-0.png

这篇文章要解决三个问题,反编译 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 访问,而目录下面包含一些隐私数据。

blog/ccs-2016-diary/sandscout-1.jpg

iOS 的安全问题历来都是 "under the hood",这次的 profile 机制以前确实没人研究过,但是想一想 SELinux/SEAndroid 不是也是 MAC 么?同样的问题,在 iOS 上一样存在,就是需要深入挖掘。

The “Web/Local” Boundary Is Fuzzy: A Security Study of Chrome’s Process-based Sandboxing

Yaoqi Jia, Zheng Leong Chua, Hong Hu (National University of Singapore), Shuo Chen (Microsoft Research), Prateek Saxena and Zhenkai Liang (National University of Singapore)

这篇文章讨论了在现在的浏览器中 web 和 local 的 boundary 开始模糊,因此造成的安全问题。下图左边描述了传统的 process-based 浏览器模式,在这种框架下 web/local boundary 非常清晰。最近出现的 cloud service (比如说 Dropbox) 引入了 cloud app, client app,使得 web/local boundary 不是唯一的。

blog/ccs-2016-diary/the-web-local-boundary.png

文中介绍了三种可能引起的问题:

  • 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。

blog/ccs-2016-diary/the-web-local-boundary-3.jpg

Yaoqi 举了个例子,在 iframe 里显示 DropBox share file 的按钮,就能绕过以前的 web/local boundary 直接通过 DropBox 获得/修改文件。

因为从 memory corruption exploit 到 bypass SOP 还有很多工作要做,作者还详细介绍了如何绕过 Chrome 的 memory protection (ASLR, CFI)。

下面是 POC 的代码,以及视频。

UniSan: Proactive Kernel Memory Initialization to Eliminate Data Leakages

Kangjie Lu, Chengyu Song, Taesoo Kim and Wenke Lee (Georgia Institute of Technology)

UniSan 是一个检测 Linux kernel 的 memory initialization 问题的。 Memory initialization 会有什么问题?我们看下面这个例子:

blog/ccs-2016-diary/unisan-2.jpg

上图的 kernel structure 中包括一个 unsigned int 和一个 unsigned char,为了 memory alignment,编译器会在后面加入 3-byte padding。问题就在于,这 3 bytes 并没有 initialize,可能还保留了上次的数据,当把这段内存返回给用户空间的时候,因而造成了 kernel memory 的 data leakage.

C11 的 spec 上却是也说明了应该是 unspecified values,所以也不是编译器的错了。

blog/ccs-2016-diary/unisan-3.jpg

作者把发现的问题报给 Kernel community 得到的反馈非常有意思,有怀疑的,有确认的,还有怨 GCC 的。

blog/ccs-2016-diary/unisan-4.jpg

在这篇文章,作者为了找到这类的 initialization 引起的 data leakage,提出了用 program analysis 的方法检查程序是否初始化内存对象。具体是基于 LLVM 检查 (没有选择 GCC 的原因是 LLVM 提供了更多的 API)是否存在程序路径,使得一个内存对象离开内核空间时候没有被初始化。

iLock: Immediate and Automatic Locking of Mobile Devices against Data Theft

Tao Li, Yimin Chen, Jinchao Sun, Xiaocong Jin, Yanchao Zhang (Arizona State University)

blog/ccs-2016-diary/on-code-execution-tracking-0.jpg

iLock 利用声音检测手机是否丢失,如果丢失了就锁定手机保护手机内的信息。具体的方法是使用了 FMCW 的方法,传输的信号频率回随着时间变大,通过计算接收到的信号的时间差,就能判断反射物体的距离。下面这个就是 FMCW 的示意图:

blog/ccs-2016-diary/ilock-1.png

On Code Execution Tracking via Power Side-Channel

Yannan Liu, Lingxiao Wei, Zhe Zhou, Kehuan Zhang (The Chinese University of Hong Kong), Wenyuan Xu (Zhejiang University) and Qiang Xu (The Chinese University of Hong Kong)

这篇文章是用 MCU 的 power side-channel 来判断 control-flow integrity。具体的方法是通过 power trace 把 CFG 构建为一个 hidden Markov model。作者对原始的 HMM 进行了修改。使在 CFG 里的一个 block 表示 HMM 的一个 node。

blog/ccs-2016-diary/on-code-execution-tracking-1.png

Singnal extraction 是这篇文章的另一贡献,如何把 power signal 抽象为 observation symbol?如何修改 Viterbi algorithm 使它能够判断 execution sequence 是否是 HMM 的一部分(也就是判断 CFG 是否被修改了)。详细内容可以阅读论文。

blog/ccs-2016-diary/on-code-execution-tracking-2.png

Drammer: Deterministic Rowhammer Attacks on Mobile Platforms

Victor van der Veen (Vrije Universiteit Amsterdam), Yanick Fratantonio, Martina Lindorfer (UC Santa Barbara), Daniel Gruss, Clementine Maurice (TU Graz), Giovanni Vigna (UC Santa Barbara), Herbert Bos, Kaveh Razavi and Cristiano Giuffrida (Vrije Universiteit Amsterdam)

blog/ccs-2016-diary/drammer-1.jpg

这篇文章恐怕是本届 CCS 最为期待的了吧,一个很小的屋子里挤满了人,位置不够,很多人就站在后面听。作者利用 Rowhammer 攻击巧妙的拿到 root 权限。因为是 memory 的特性引入的攻击,系统也没有什么办法防御。

简单来说利用了 "DRAM hardware glitch casing disturbance errors",结果是会造成 DRAM 中的 bit 在某些情况下翻转(0 -> 1 或 1 -> 0)。并且这种 bits flipping 在同样情况下是可以重现的。

blog/ccs-2016-diary/drammer-2.jpg

作者利用这种“特性”,攻击 page table entries,可以让某个 memory page mapping 指向上一个 page,从而可以在 page table entry 写入任意值。

blog/ccs-2016-diary/drammer-3.jpg

之后,写入 kernel memory 的 page table entry 就可以访问到 kernel memory 了,找到 struct cred 修改 uid 和 gid 就能拿到 root 权限。

blog/ccs-2016-diary/drammer-4.png

因为要不断扫描 DRAM 找到会发生反转的 bit,作者 evaluate 不同机器所需的时间:

blog/ccs-2016-diary/drammer-5.png

Q&A 的时候讨论了防御的方法(暂时没有好的解决方案),在 iPhone 上攻击的可能性(完全有可能),以及其他细节,建议大家浏览一下视频,非常有趣。

Panel Discussion: Impact of Academic Security Research: Frogs in Wells, Storms in Teacups, or Raw Diamonds?

Chair: Ahmad-Reza Sadeghi, TU Darmstadt, CYSEC, Germany

Panelists: Ross Anderson, University of Cambridge, UK Davide Balzarotti, EURECOM, France Robert Broberg, Cisco Systems Inc Bart Preneel, KU Leuven, Belgium Anand Rajan, Intel Labs Greg Shannon, White House Office of Science & Technology Policy, USA

今年的 panel discussion 也是非常有趣,请了两位安全届前辈 Ross, Bart,两位工业界的 Anand (Intel), Robert (Cisco),一位政府的 Greg (白宫科技政策办公室?) 和一位年轻教授 Davide(就是统计了四大安全会议十年来的收录情况的哪个教授)。

讨论了几个非常有争议的话题:安全学术研究的价值,attack v.s. defense 哪个更重要,四大安全会议收录 paper 的现状,应用密码学和传统密码学的冲突,未来安全研究的发展方向(例如:usable security)。我把现场几个有意思的图片发出来,感兴趣了大家去看视频 吧:

blog/ccs-2016-diary/IMG_3505.jpg
blog/ccs-2016-diary/IMG_3506.jpg
blog/ccs-2016-diary/IMG_3507.jpg
blog/ccs-2016-diary/IMG_3508.jpg
blog/ccs-2016-diary/IMG_3509.jpg
blog/ccs-2016-diary/IMG_3510.jpg
blog/ccs-2016-diary/IMG_3511.jpg
blog/ccs-2016-diary/IMG_3513.jpg

视频地址:https://www.youtube.com/watch?v=yT2pTElBY4Q&index=3&list=PLDJxfCuZwWGA0s641b-G3LX6CAyAcVepx

System Security Circus v2.0: http://s3.eurecom.fr/~balzarot/notes/top4/index.html

这个 System Security Circus 总结了四大安全会议从 2000 年以来的所有文章作者,接受率,提交数量,作者地理分布,作者所在单位等等。里面包含的图表非常有趣,也一部分代表了这十几年来 security community 的发展变化。

blog/ccs-2016-diary/system-security-circus.png

Traditional Viennese Dinner @ Heuriger

在维也纳郊区的一个酒庄,葡萄酒很好喝 :)

blog/ccs-2016-diary/viennese-dinner-1.png
blog/ccs-2016-diary/viennese-dinner-2.png