PiOS阅读笔记

SecLab的PiOS: Detecting Privacy Leaks in iOS Applications是目前iOS上仅有的几篇高质量论文之一。花了一整天的时间阅读,记一点笔记。

目的

检测iOS软件是否存在用户隐私泄漏。

方法

1. 对二进制文件,构造类层次结构,生成CFG

2. 从隐私数据源到隐私数据泄漏点的执行路径中,检查是否存在与用户的交互

3. 分析数据流,判断隐私数据是否真的从源转移到泄漏点

主要困难

1. Objective-C是OO语言,绝大部分的调用都是成员函数,并且调用并不使用虚函数表,而是通过消息传递(objc_msgSend)。实际调用了哪个函数,是一个动态判断的过程。

2. 分析数据流时,Cocoa这个框架也需要考虑进去

实现

一、CFG

完全用IDA Python插件的形式来做,使用IDA Pro的反汇编结果。

1. 从mach-o文件头部抽出__objc_classlist节,找出其中的所有类信息,得到类继承层次关系,此外还从节中得到每个类实现的方法和变量。

2. 解析方法调用,即从obj_msgSend还原出实际会调用的类和方法。为了确定R0和R1,采用backward slicing,即回溯相关寄存器的操作直到一个静态值,然后再操作会到调用点判断调用时的值。此外,对动态生成的值,只考虑其对象类型,不考虑实际的值。

二、找出可能的隐私泄漏

1. 找出隐私数据源和泄漏点的API,并通过CFG找出代码路径

2.数据流分析,基本是污点分析的思路

结果

1. objc_msgSend的解析成功了82%,经验上看这个数据比较真实

2. 观察到很多软件里都使用了相同的广告库代码,并且这些代码中普遍存在泄漏设备ID(UDID)的情况,这一点与后来Android上很像。此外又发现统计和跟踪用户行为的库。一共有55%的软件存在这些第三方库,因此建立白名单,避免重复分析。

3. 在205个软件的CFG中找到代码路径,在其中172个中自动找出数据路径。剩下33个中,6个确实不存在,有27个是误报,存在数据路径但没能检测出。

4. 找到的绝大部分是设备ID的,其次是地理位置的(这两类中,Cydia软件居然少于官方软件)。另外有5个泄漏通讯录、1个泄漏手机号、1个泄漏Safari历史记录和照片。

局限

1. objc_msgSend不一定能完整解析出调用

2. 从id关联到类型的问题

Leave a Reply

Your email address will not be published. Required fields are marked *