Category Archives: 计算机

介绍几个Android分析工具

1. otertool

动态分析的瑞士军刀,功能包括:logcat筛选、文件系统diff、apk->smali及搜索、java->smali、app data browser(以及内嵌的text/hex/sqlite viewer)、smali编辑并一键build apk(可以签名)、一键安装apk、安装证书等。

地址是:https://github.com/wuntee/otertool,支持Linux和Mac OS。

如果你坚持用手机而不是模拟器分析,并且版本在4.0.3以上,otertool会有问题。可以用我的patch版本:https://github.com/secmobi/otertool

2. 010 Editor

文本和十六进制编辑器,主要好用的是,用拓展语言写文件格式解析模板,这是我一直想做的事情,果然已经被实现了。官方提供了多种文件格式的模板,包括DEX。(其他SWF、PDF、PE的也不错)

地址是:http://www.sweetscape.com/010editor/,支持Windows和Mac OS。售价50刀。不要问我买没买,你懂的。

3. Charles Proxy
HTTP/HTTPS Proxy。在Android/iOS中导入根证书后,可以将流量通过代理方式转给Charles开启的本地转发服务,它相当于中间人,负责与目标服务器通信,并自动生成同名的证书与客户端通信。这样,就可以看到HTTPS流量的所有内容了。

地址是:http://www.charlesproxy.com,支持Windows、Linux和Mac OS。售价也是50刀。

4. CocoaPacketAnalyzer
Mac OS下的抓包、包解析软件,功能没有wireshark强大。唯一的优点是,它是原生的,界面比较好看。而wireshark基于x11——mountain lion对x11的那个支持真是无语。

地址是http://www.tastycocoabytes.com/cpa/

关于MIUI中cit.apk暴露bugreport的漏洞

之前在乌云发布的MIUI数据泄露漏洞之一(WooYun-2012-08222),其中的“详细说明”部分,存在部分错误。这个漏洞涉及bugreport,我错误地指出在shell下可以调用的bugreport,第三方应用软件也可以随便调用,这是错误的。由此在微博上和回复里引起对Android一般安全的讨论,向大家表示歉意。

此外,需要强调的是,由于Cit.apk的组件暴露,在MIUI系统下,该漏洞依然可以利用。

以下是详细的技术分析,包括我犯的错误,以及在MIUI下的利用方法。
Continue reading

DIMVA’12见闻

by Spark Zheng @ CUHK

第一天 7月26日

会议开始,先去注册领了所有paper的纸质版和一堆乱七八糟的礼品。随后chair讲了一下会议paper的来源,大多数来自德国和美国。另外Android是今年很热的一个关键词。
 
Keynote: Industrial Control Systems Security
Corrado Leita (Symantec Research Labs)
这是请Symantec的研究员来做的一个演讲,主要内容是ICS(不是ice cream sandwich,是industrial control system)。同时也对病毒的发展历史做了个介绍,还分析了最近特别火的flame病毒。还有他们的WINE计划,可以在www.symantec.com/WINE找到介绍。

Using File Relationships in Malware Classification
这篇记不大清了,因为我把打印版的paper集扔到旅店没拿(太沉了),网上也找不到pdf和ppt……估计过两天能在库里搜到。是微软研究院的人做的利用文件之间的关系给malware分类。比如说A zip文件包含了a、b、c三个文件,另一个B zip文件包含了a、b、d文件,然后这两个Zip之间就会有相似性。当然也可以运用到Android上,因为apk本身就是个zip嘛。
 
Understanding DMA Malware
这篇paper介绍了一种开机自动加载进入内存的病毒。DMA means Direct Memory Access。这种病毒已经无限接近于硬件病毒了,无视操作系统(最新的windows和linux都ok),可以进行键盘记录。运行的时候会扫描内存,寻找感兴趣的string,记录下来,或者记录键盘的敲击。

Large-Scale Analysis of Malware Downloaders
这篇paper的作者首先介绍了一下他们实验室已经做了好多年的malware dynamic的研究并拥有n多w样本。于是在这n多w样本中找出了11个至少活跃了一年的和18个依然活跃的downloader。随后对这些downloaders进行分析,找到了219依然活跃的C&C servers, 还进行了一些对于加密信息传输的研究。
 
Invited talk: The state of mobile security
这是邀请来的一个speaker,是iseclab的成员。从IOS和Android的基础讲起,把几乎所有的安全问题都讲了一遍,用到了好多用ida分析的例子。其中还讲到了怎么让apktool反编译失败dex,是在dex的指令序列里加入一些奇怪的跳转。还有ios的好多exploits和病毒,还有Android的静态和动态分析的内容(比如他们实验室研发的app分析系统:http://anubis.iseclab.org/)。这是一个非常好的一个talk,但他留下来的ppt只有首页,所有的内容都没给,我也没录音。看样子想了解他讲的东西只能通过他的主页找了:http://www.iseclab.org/people/pizzaman/

Juxtapp: A Scalable System for Detecting Code Reuse Among Android Applications
这是一个UC Berkeley的phd讲的找code reuse的系统。和jiang的fuzzy hashing那篇几乎没啥区别,除了算法从fuzzy hashing变成了feature hashing。并且对于const string混淆的应对能力弱到爆。不过这位童鞋也意识到了这点,估计是看了我的那篇paper,于是又透漏了好多他们现在做的工作,比如说用文件结构树来比较,以及对付混淆的方法。
 
ADAM: An Automatic and Extensible Platform to Stress Test Android Anti-Virus Systems
这是我的那篇文章,讲的是用3种repackaging和4种code obfuscation的方法来对Android malware进行混淆,不需要源代码(因为基于reverse engineering),全自动。类似于smali版本的proguard。 随后用了222*8个sample测试了40种anti-virus products. 通过结果,我们分析出大多数的anti-virus不是靠简单的apk md5或者dex md5来当作signature的。不过有很多是采用固定地址的binary code of dex file来取signature。但是rebuilt的过程会改变class order,所以如果class order变了,取的signature就会改变。还有许多anti-virus engine是采用方法名啊,类名啊,一些string啊来当signature的。缺点也很明显,容易被混淆击败,并且有很多的false positive。比如说你建个有com.geinimi package的app,里面一句代码也不写,却会有很多杀软报告这是geinimi的病毒。比较失败的是:我怕时间不够用,于是讲得很快,结果没有控制好时间,15分钟就讲完了,然后一群对对我进行了长达15分钟的Q&A……
 
然后有一段poster和discussion的部分,讲完筋疲力尽,木有参加,果断回去睡觉了。
 

第二天 7月27日

Invited talk: Defending Against Return-Oriented Programming
讲了一下exploit的历史,然后讲了现有的ROP的攻击方法和例子,同时提出了一种based on local machine的defense方法,也发布了一个系统用来防止文件被用来进行ROP exploit, 当然也有破解方法,那就是based on local machine的ROP compiler……更神级的东西了。很牛B的talk。于是去网上查了一下,发现这是今年oakland的paper,怪不得这么强大。
Read the paper. Get the (Orp: in-place binary code randomizer) code from http://nsl.cs.columbia.edu/projects/orp/.
 
A Static, Packer-Agnostic Filter to Detect Similar Malware Samples
讲了一种静态的方法,不用运行程序,也不用unpack pack过的程序来进行malware的相似度检测。大概是利用了一些加密原理的缺陷,然后不需要解密就可以进行相似度检测。大概是这样,这篇木有仔细听。
 
Experiments with Malware Visualization
说是malware变种比较的Visualization。其实就是字符串比较的Visualization而已。把malware的指令啥的转换成字符串,然后采用图像中常用的一种pin的算法,生成一个二维图。然后观察图像能发现很多有趣的现象,可以通过看的方式发现一些变种和原始病毒的变化。其实没啥用我感觉,PE的malware多的都几百万了,怎么可能看的过来。
 
Tracking Memory Writes for Malware Classification and Code Reuse Identification
虽然是篇short paper,但却非常有意思,讲的是如何利用动态的memory读写序列来进行malware的classification。首先是比较相似度的方法,大概是:先用虚拟机跑malware,记录malware对memory的读写操作,然后这个行为可以看成是一个字符串。随后进行一次快速比较,用来快速找出哪些section有大概的相似性,因为这个string可能非常长,要是进行完全匹配太浪费时间。随后利用一种diff-based LCS approach(改进后的LCS算法)进行完全匹配,最后计算得分(0~1)。
然后利用这种比较相似度的方法做了两个app:一个app是进行malware分成N组的clustering。Clustering就是data mining提到的,把一堆malware分成N组,但与classification不同的是不对分类器进行训练(training and testing)。首先是用pre-clustering来选出N个cluster leader, 然后采用Inter-cluster merging 来对剩下的malware进行分组(找最接近的cluster leader)。另一个app是Code Reuse Identification。这里除了基本的比较相似度以外还利用了一种map back的approach来找到是哪里的代码被reuse了,而不单单是知道code被resuse了。最后又做了一些实验来证明这个方法的有效性。
 
System-level Support for Intrusion Recovery
这个有点像mac的time machine,在server端同步着一个相同的虚拟镜像,同时记录memory和desk的各种行为。如果anti-virus发现病毒的话,立刻使用最新的没被感染的镜像开始回滚,同时模拟记录的操作执行到当前状况,但删除了malware对系统所做的那些行为。Q&A一直围绕着怎么样判断哪些行为是恶意行为讨论了很久。
 
NetGator: Malware Detection Using Program Interactive Challenges
这篇好像是讲利用malware不像人一样智能,在访问网络的时候加了一层检测,因为是人为加的,malware之前的设定并不知道,所以恶意行为无法执行。类似于防止CSRF的攻击?比如说app正常访问Internet相当于穿过一扇门,但我们系统设定app必须穿过两道门才能访问Internet,然后malware执行的时候不知道,就无法产生恶意行为。类似于一种变相的防火墙吧。
 
SmartProxy: Secure Smartphone-Assisted Login on Compromised Machines
就是让smartphone变成一个硬件防火墙。 电脑连接smartphone用手机的3G上网或者电脑的网络先经过smartphone,然后再上网。这个让我想到了Ubuntu出的那个smartphone版的ubuntu系统,以后办公室只有个显示器键盘鼠标就够了,然后大家都用自己手机当主机用。
 
BISSAM: Automatic Vulnerability Identification of Office Documents
这个是讲一个自动漏洞检测系统来找word, excel啥的office文件的一些漏洞。
 
Self-organized Collaboration of Distributed IDS Sensors
听了一天已经听晕了,梦游中……
 
Shedding Light on Log Correlation in Network Forensics Analysis
大概是在snort基础上搞了个log的规范,然后可以对茫茫多的log用decision tree或者SVM (各种data mining)进行分类,就可以让随后的入侵检测分析变得很简洁方便有效率。
 
OK,终于结束了。同时宣布了下一次DIMVA13的举办时间和地点:2013年7月在德国柏林.

让Vim和Ctags支持smali语法

smali是目前Dalvik指令集最适合阅读和解析的汇编语法,是做Android软件逆向分析必须学习的内容。比较可惜的是,到现在也没有特别好的smali阅读工具。下面给出的是平时习惯的Vim+Ctags组合下阅读smali的方法。先看最终效果:

可以看到,vim支持smali的语法高亮,ctags支持解析smali中的域和方法。实现这个的方法如下:

Continue reading

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权限就做到了攻击,所以应该不是直接修改数据库。