Android上的点击劫持rootkit原型

北卡大学蒋旭宪教授团队开发了一个Android上的点击劫持型rootkit原型。从新闻和视频来看,这个rootkit可以做到:

1. 隐藏,使已经安装的软件在桌面、launcher和系统设置中消失,但实际上依然存在于手机系统中并能正常运行,恶意代码可以利用这个技术隐藏自身;

2. 劫持,使桌面或launcher中的图标被用户点击后,实际执行其他的恶意应用软件,后者可以伪装成前者,实现进一步的攻击。

新闻地址是:

http://web.ncsu.edu/abstract/technology/wms-jiang-clickjack/

视频演示位于:

http://www.youtube.com/watch?v=RxpMPrqnxC0

个人猜测攻击的是系统中intent-filter相关的数据库。但视频是在官方ROM中实现的,也就是说没有获得root权限就做到了攻击,所以应该不是直接修改数据库。

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关联到类型的问题

iOS5下手工解密应用软件

按以往资料解密iOS5应用软件会遇到两个问题:

  1. nm出来的符号里,没有start了,因此不知道在哪里下断点,即便下到常规的0x2000处,也会断不下来;
  2. 找到合适的断点后,gdb只要run就出现奇怪的错误,还是断不下来。

下面以Douban.fm.ipa的解密为例,解决这两个问题,为了保持完整性,从头开始说明步骤。注意有的指令在Mac上运行,也有的指令在iOS上运行,根据命令提示符区分。在iOS上的默认路径是/var/mobile/Applications/79A81359-AD9D-4268-91FC-93D1E77F5208/Douban.fm.app/。
Continue reading

安装AndBug

安装文档的不足往往让一些好的项目无法被普及使用,比如androguard,比如andbug。

AndBug有效的安装步骤大致如下:

1. 安装Android SDK并更新,确保将其platform-tools目录添加到PATH环境变量,即在命令行用which adb可以找到

2. 安装python-dev和python-pyrex两个库,例如在ubuntu下,用sudo apt-get install python-dev python-pyrex即可

3. 安装python的一个名为bottle的库,如果没有安装,无法使用navi这个最重要的功能。安装方法是,到这里:

http://pypi.python.org/pypi/bottle

下载最新的bottle库,解压缩后,sudo python setup.py install即可

4. 下载AndBug: git clone https://github.com/swdunlop/AndBug.git

5. 在AndBug目录下,make。如果连make和gcc都找不到,请确认自己安装了build-essential(在Ubuntu下)或者Xcode的command line tools(Mac OS X下)

6. make成功后,在~/.bashrc或者~/.bash_profile里加上一行export PYTHONPATH=$PYTHONPATH:/lib,然后重启终端

7. 现在可以开始使用andbug了。

使用官方的安装文档,主要问题可能出在两个地方,一是没装python-dev导致make不成功,二是没装bottle导致navi无法启动。而这里的方法在Ubuntu 12.04以及Mac OS X里都已经测试没有问题。

Oakland’12

写下这个标题的时候比较心虚,因为我并没有去这个刚刚结束的会议。

anyway,papers和slides公布出来了,可以一饱眼福了。

papers: Google “site: www.ieee-security.org/TC/SP2012/”

slides: www.ieee-security.org/TC/SP2012/program.html

两个熟悉的团队,NCSU的Jiang,PKU的Wang,又一次分别发了论文。Jiang的这篇有些让人失望,我以为会是一个android malware’s meta-data platform for further researching,结果主要贡献是开放了样本集,以及分析了去年的趋势。

ReDeBug项目在更大的代码库中寻找重复代码导致的漏洞,依然有非常多实质性的漏洞报告产出。这一次是语言无关的,还没有细看他们是怎么做到的。我好奇的是,在漏洞有效性上,如何高效率地验证?

最佳论文和最佳学生论文都落到了移动安全上。这也是大势所趋。不知道移动安全还能火多少年,无论如何,现在正是黄金时期。

Prudent Practices for Designing Malware Experiments则是我认为这次最有意思的论文。最近几年,经常看到这种大牛在顶级会议上就研究方法的一些基本问题进行探讨和否定的。这种基本都很好玩,还有的会很卖萌……至于这篇,先读完正文再评价。