月度归档:2012年01月

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万个样本的处理速度等。

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

SEAndroid

NSA在1月16日发布了基于SELinux的SEAndroid。项目主页是:

http://selinuxproject.org/page/SEAndroid

粗读了一下他们的幻灯片,主要意思如下:

1、要把SELinux系统及其设计思想移植到Android有不少困难,比如非标准Linux机制(Ashmem、Binder等模块)、Android框架层的策略、现有DAC权限控制模型、文件系统不支持安全标签等等,但SEAndroid项目最后解决了这些问题

2、对目前Android系统上发现的几乎所有提权漏洞、Android应用上发现的大量信息泄露漏洞,SEAndroid都能补上,主要是漏洞利用程序的利用步骤会被SEAndroid的安全策略所阻止,也就是无法顺利利用漏洞。

3、作者认为对Android,MAC模型是有意义的,并且可以和现有安全体系并存。

从RageAgainstTheCage、zergRush(幻灯片中称之为GingerBreak)这两个漏洞利用的阻止细节上,我觉得SEAndroid的安全做得比较理想,对权限的管理已经到了及其严格的地步,利用代码几乎寸步难行。

而这个项目目前存在什么问题,幻灯片中只字不提。我觉得,对性能的损耗可能是第一位的。

在去年看到的一篇论文中,有提到,即便是在Android所有敏感API的入口处基于源码做hook,记录API触发行为和参数,编译得到的系统的性能都有显著的降低,而这个降低的性能在真实机器上可能引发连锁效应,导致整个系统无法启动。

而SEAndroid从文件系统开始广泛使用标签,对每个需要管理的对象使用标签来实施安全策略,这里还包括对每个敏感行为的审计。我倾向于认为这样的改动也会遇到同样的问题。至于NSA有没有解决,是如何解决的,还需要进一步看细节。我会在年后使用他们提供的源码编译出一份可用的系统,在Nexus S上进行测试。

无论如何,这个项目值得我们进一步学习。

用于LaTeX的smali语法高亮文件

smali是对Dalvik虚拟机指令集的一种汇编语法,基于jasmin语法修改而来。在LaTeX中引用代码,一般使用listings宏包,最后一定修订于1999年的listings显然不会支持smali高亮,所以我写了这样一个文件,下载地址:

http://code.google.com/p/amatutor/source/browse/smali.sty

效果如下:

LaTeX的smali语法高亮效果

其中关键词和配色方案参考了lohan+在其博客http://androidcracking.blogspot.com中提供的smali for Vim/Notepad++/UltraEdit/SyntaxHighlighter的高亮文件。再次感谢lohan+的杰出工作。

以及,请关注使用了这一高亮文件的amatutor项目。

LaTeX中换行换页的表格

LaTeX中,表格一般用tabular。如果要表格内容自动换行,则需要使用tabularx宏包。在使用时,指定表格宽度和可能换行的列,例如:

\usepackage{tabularx}

\begin{tablularx}{\textwidth}{lX}
  aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
\end{tabularx}

其中,由X指定的第二列就会根据表格中单元格的宽度自动换行了。

由于表格只是一个box,只能出现在同一页内。要使得表格能够换页,需要使用longtable宏包。例如:

\usepackage{longtable}

\begin{longtable}{ll}
  aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
\end{tabularx}

如果希望两者兼得,该怎么办?有一个叫做ltxtable的宏包就综合了上述两个,能实现既有单元格换行,又有表格换页。比较麻烦的是,ltxtable要求表格内容单独保存为文件,为此再引入filecontents宏包,使表格内容和正文能在同一个文件之中。例如:

\usepackage{ltxtable, filecontents}

\begin{filecontents}{mytable1.tex}
  \begin{longtable}{lX}
    aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
  \end{longtable}
\end{filecontents}

\LTXtable{\textwidth}{mytable1}

其中,filecontents宏包会将其中的内容单独保存为mytable1.tex文件。在这个文件中,longtable可以使用tabularx中的X符号指定要换行的单元格了。此后,调用ltxtable的LTXtable命令,指定表格宽度为\textwidth,并指定引用文件mytable1。这样就可以编译得到单元格内换行、整个表格可换页的表格了。

这里还有两个问题:

1、标题、标签怎么办?这个我还没有查到,尝试放在filecontents中会出错,在ltxtable的文档里也没有。如果有大牛看到这里知道该怎么办,请指教~

2、多出来的tex文件在版本管理里不好办,我的方法是,在filecontents里指定文件为mytable1.tmp而不是.tex后缀名;在LTXtable命令里使用文件全写mytable1.tmp而不是缩写;在.gitignore里忽略以.tmp结尾的临时文件;在Makefile的clean目标里删除.tmp结尾的文件即可。

除了使用ltxtable,还有两个宏包可以解决问题:ltablex和tabu。在stackoverflow上对此有过讨论。据说ltablex和caption会有冲突,但这两个我都没有用过。

最后,所有尝试都是在写amatutor的过程中产生的,欢迎大家继续关注这个项目~

2012年学习计划

出:

  • 继续写amatutor,写成这个小领域最有参考价值的资料之一
  • 写一点能让别人用得上的开源代码
  • 写5篇高质量博文
  • 英文直接写一万字
  • 写一篇敢投出去的论文

入:

  • 精读两本经典书
  • 精读10篇OS/Arch/Sec方向经典论文
  • 学三门公开课
  • 继续学python和common lisp,for fun
  • 继续学软件安全、移动安全,尝试入门硬件安全
  • 将vim玩熟
  • 进入一个计划之外的领域