Category Archives: 信息安全

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

模糊哈希算法的原理与应用

关于模糊哈希(Fuzzy Hashing)算法,目前网上有几篇中文资料介绍,但均不准确。写这篇文章以纠正,并对其原理和应用作详细的介绍。

一、概述

模糊哈希算法又叫基于内容分割的分片分片哈希算法(context triggered piecewise hashing, CTPH),主要用于文件的相似性比较。

2006年,Jesse Kornblum [1] 提出CTPH,并给出一个名为spamsum的算法实例。随后,Jason Sherman开发了ssdeep [2] 工具以实现这一算法。该算法最初用于取证,后来被用于恶意代码检测,最近又有用于开源软件漏洞挖掘等。

模糊哈希的主要原理是,使用一个弱哈希计算文件局部内容,在特定条件下对文件进行分片,然后使用一个强哈希对文件每片计算哈希值,取这些值的一部分并连接起来,与分片条件一起构成一个模糊哈希结果。使用一个字符串相似性对比算法判断两个模糊哈希值的相似度有多少,从而判断两个文件的相似程度。

对文件的部分变化(包括在多处修改、增加、删除部分内容),使用模糊哈希均能发现与源文件的相似关系,是目前判断相似性较好的一种方法。

Continue reading

Google为Android Market引入恶意代码检测

Android工程副总裁Hiroshi Lockheimer在Google移动官方博客发文称已经为官方市场的应用软件引入了恶意代码检测机制,地址是:

http://googlemobile.blogspot.com/2012/02/android-and-security.html

下面是对其中一段关键内容的翻译:

今天我们公开一个我们开发的服务,名为Bouncer。它提供了对Android市场上潜在恶意软件的自动化扫描服务,并且不影响Android市场的用户体验,也不需要开发者走应用软件批准流程。

该服务对Android市场的新增应用软件、已有应用软件、开发者帐号进行一些分析。它是这样工作的:当一个应用软件被上传后,该服务立即开始分析,判断其是否已知恶意代码、间谍件或木马;它还查找其中是否存在不当行为,并将其与之前分析过的软件进行比较以检测可疑点。事实上,我们将每个软件在Google的云设施上运行,模拟它们在Android设备上运行的情况,并观察是否有隐藏或恶意的行为。此外,我们还分析新增的开发者帐号以防止恶意代码出现、防止反复违规的开发者卷土重来。

文章称该服务已经在官方市场运行一段时间(可能是去年下半年开始的),并取得了较为显著的效果。

DroidRanger论文阅读笔记

NCSU的蒋旭宪教授团队去年在Android恶意代码发现上做出了有目共睹的成绩。昨天看到论文“Hey, You, Get off of My Market: Detecting Malicious Apps in Official and Alternative Android Markets”已经在其首页上公开,仔细阅读了一遍。做笔记如下。

文章主要介绍了名为DroidRanger的系统,用于从官方市场、第三方市场抓取和发现Android中已知家族和未知家族。

已知家族的策略是:

1. 基于已知家族所需必要权限,对所有灰名单样本过滤。例如,bgserv需要internet和收发短信权限,这样能过滤掉98.42%的灰名单样本。但也有例外,比如ddlight的过滤效果不好,则加上一个特定intent的receiver的规则来过滤;basebridge没有特殊权限,则用native代码来过滤。这样,每个家族的规则都能将灰名单样本过滤到5%以下。

2. 基于行为的特征匹配。包括三个方面的行为特征:manifest里注册的组件及其intent;特定组件(例如接收短信的receciver)的代码解析,提取API调用序列(例如invoke了abortBroadcast);代码结构布局(即Java的树形结构源文件,但没想明白在这里怎么提取特征)。

在已知方面,他们基于10个已知家族(每个家族2个样本)提取了权限过滤规则和行为检测规则,在官方市场和第三方市场的20万个灰名单样本中发现这10个家族共119个新样本。

在未知家族检测上,策略是:

1. 基于启发式特征的过滤。这里的启发式特征并不是统一的单点特征集,而是真正体现样本潜在行为的复杂特征。例如,样本使用DexClassLoader加载从远程下载的jar或dex代码(但大部分是第三方广告,用白名单过滤掉);样本在非默认路径lib/armeabi加载执行本地native code(常用于执行提权代码)。在这种启发式特征过滤下,把灰名单样本数量过滤到了1%以下。

2. 基于动态运行的行为监控。主要在两个层面做,对动态加载的jar和dex,记录其API调用及参数,例如sendTextMessage及其参数;对动态加载的native code,记录其发生的敏感系统调用,例如sys_mount(用于remount文件系统,常用于提权后写入系统分区的自我保护)。最后人工对这些日志进行分析。

在未知上,该团队由此发现Plankton(第一个DexClassLoader的恶意代码,官方市场,远控)和DroidKungfu(使用大量本地提权工具)。

从后续情况看,AnserverB应该也是被这种启发式规则触发而发现的。

论文提到还可以有其它启发式的特征,例如向高额扣费号码发送短信;将短信内容当成控制指令等。去年下半年该团队发现的很多新家族均有短信扣费和拦截的特点,猜测确实使用了这些特征。

关于已知检测的漏报问题,论文用contagio的公开样本进行了测试,称无漏报。

文中还提供了其他数据,例如对20万个样本的处理速度等。

总的来看,论文对细节公开的非常充分,取得的效果也很明显,值得我们学习。