首页
社区
课程
招聘
[讨论]Android上危险App的确定
2011-6-29 16:17 26382

[讨论]Android上危险App的确定

2011-6-29 16:17
26382
android上的恶意app现状越来越严重。想跟大家一起讨论下,恶意app的检测方案。我来抛砖引玉吧!大体分两步:
1.枚举android上已安装的App。
    主要方法如下:利用android中封装的PackageManager类中的PackageInfo成员即可获取当前手机已经安装的App各种信息。包括:应用版本号,图标,应用名,权限等等。具体可以查看android-sdk。下面给出大体流程:
         List<PackageInfo> packs = getPackageManager().getInstalledPackages();
             for( int i =0; i < packs.size(); i++ )
             {
                     PackageInfo p = packs.get(i);
                     String versionName = p.versionName;
                     int versionCode = p.versionCode;
                     String appName = p.applicationInfo.loadLabel(getPackageManager()).toString();
                     ......

             }
2.检测App的安全性。
      现在的android大部分用整个Apk的md5做特征。这个方法确实够简单。但必须要先获得恶意App的完整样本,然后才能用来检测,确定也大大的。为何不用PC的那种部分特征码呢?
***********************
各位牛牛,有何高见。一起讨论下!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞5
打赏
分享
最新回复 (22)
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
datm 2011-6-29 17:23
2
0
被压缩过的东西,用特征码好像不好对应吧
雪    币: 406
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
zyhfut 5 2011-6-29 17:56
3
0
整个apk做md5。没啥不好对应的啊
雪    币: 1411
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 6 2011-6-29 20:58
4
0
主要的问题正如你所说,出在样本捕获上。类似于DroidDream的植入型病毒同时植入到多个app中,像Pjapps、Geinimi等更是已经出现了百余变种,几乎不可能完全捕获,即便捕获,还需要人工分拣判定。所以仅靠apk的md5,漏报是必然的。
解包->dex格式识别->用恶意代码的class和method名来判定,是目前的一种主流做法,可以实现精确地判定。文件哈希是辅助手段,而且不一定是apk的哈希,例如F-Secure就是对classes.dex做哈希的。
雪    币: 488
活跃值: (185)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
ZhWeir 6 2011-6-30 08:45
5
0
学习了!这种方式确实比整个apk校验md5值强大很多,类似于特征码识别了。不知这样的检测是否耗时?另外说到Geinimi,大牛觉得它是手动植入app的呢,还是自动感染的?现在似乎Android App还没有一款真正意义上的“病毒”,因为无法实现自我复制通过感染其他app来传播自己。
雪    币: 1411
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 6 2011-6-30 08:58
6
0
在宿主系统上感染的,没有出现。有两点原因:
1、Android本身的安全机制限制。比如说,权限是在软件安装时注册到系统中的,安装完以后即便“感染”,也无法获取运行所需权限。签名是否一个问题,还没有考虑过。
2、dex格式的问题。结构性比较强,交叉索引很多,而且对所有符号和名字信息要求排序,所以直接“感染”dex文件的难度极大。但也不是没可能,只是没出现。而我认为没出现的原因是,不必这么做,已经可以攻击了。
dex格式对Android安全的意义,几乎相当于PE格式对Windows安全的意义,这个应该是重点学习和研究的对象之一。但是大家似乎都把注意力放到了如何用smali等工具上了。

时间问题我没有测试过。但个人的感觉是,Android中使用的格式,例如axml、dex等,都专门为解析而做了优化,毕竟经常要在移动设备中解析。所以做这种解析获得精确的检测效果,是值得的。

没做geinimi的家族分析,所以还有一个问题没法回答。
雪    币: 488
活跃值: (185)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
ZhWeir 6 2011-6-30 14:59
7
0
恩,签名、权限……对Android已安装程序的感染现在确实还没有很好的办法。可能也是因为这个原因,所以大家都没将精力放在dex格式解析上来吧!不过dex格式解析,对恶意App的扫描识别,应该也是必须的。

有机会大家可以一起研究讨论下!
雪    币: 406
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
zyhfut 5 2011-6-30 15:21
8
0
通过牛牛的指引,恶补了下Apk反编译用的几种方法,如下:
1.apktool+auto_sign
2.batsmali+smali
3.dex2jar+jd_gui
4.模拟器中自带的dexdump.exe
(另:AXMLPrinter2.jar还原.xml文件)
上面的4种方法均可以获取apk中用到的class及method。个人感觉dex2jar+jd-gui更牛。apktool+auto-sign可以用来感染apk。
但上述方法基本均是手动或弄个批处理。如何用代码实现classes.dex文件中class,method名的查找呢?
雪    币: 406
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
zyhfut 5 2011-6-30 16:50
9
0
classes.dex做hash,跟apk直接hash,感觉并无本质区别嘛。还是不能解决变种问题。
雪    币: 488
活跃值: (185)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
ZhWeir 6 2011-6-30 17:10
10
0
我理解bughouse的意思:目前主流的解决变种问题的方法是“解包->dex格式识别->用恶意代码的class和method名来判定”。而“文件哈希是辅助手段”。
雪    币: 406
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
zyhfut 5 2011-6-30 17:15
11
0
这个我能理解。只是想想这个dex的hash跟apk面临着一样的问题。而且还得从apk中解压。而效果跟apk做hash一样。
不知这个主流的class+method名方法,怎么用程序实现?
雪    币: 1411
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 6 2011-6-30 17:26
12
0
dex解析需要自己写代码,没有现成的工具。
Android源码中包含了相关文档、解析源码(有点乱),至少不需要对格式做逆向了。

apktool是一个集成工具。
dex2jar的结果有很多错误,请参考我在本版另一帖的说明。不要太依赖这个……
只有smali和ddx是严格按照dalvik指令格式解析的,是一种精确的解码。也因为如此,所以可以将smali文件再编码为dex代码执行。

签名可以作为白名单,权限可以作为启发式,但全线本身不是本质性的恶意,所以不能作为决定性因素。

对classes.dex做哈希只是F-Secure的一种策略。zip解包是任何反病毒引擎都要做的,而且是迭代地解,用dex便于实现归一化的检测策略。
解释一下这个意思:在这种策略下,引擎结构是:只要是压缩包就解开,直到不是压缩包为止,然后哈希再到库里匹配。
而不用这种策略,引擎结构式:对压缩包,判断是正常压缩包,还是apk文件,如果是前者,解包并继续迭代,如果是后者,对apk文件做哈希。。。
雪    币: 406
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
zyhfut 5 2011-6-30 18:53
13
0
用class+method做特征,要是加了混淆呢?
雪    币: 488
活跃值: (185)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
ZhWeir 6 2011-6-30 20:17
14
0
有道理。那就直接反编译过来,扫描检查smali代码。定义某种方法或类的调用组合关系为恶意行为。
雪    币: 406
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
zyhfut 5 2011-6-30 20:27
15
0
看来得研究下batsmali,或者dex格式了。
雪    币: 279
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
pentacleNC 4 2011-7-15 15:40
16
0
回贴关注一下。
雪    币: 214
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fdog 2011-11-4 13:15
17
0
文件md5比较快但无法扫描变种,但如果每个apk都解压缩扫描class,在手机上执行消耗太大吧
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
loongboy 2011-11-22 11:43
18
0
我是来学习各种回复的。
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qinlicang 2012-1-11 10:25
19
0
综合说来,看雪上的人还是比较牛的,并且能坦诚的讨论一些问题,这是我这么多年来没有离开这个论坛的原因。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wuoo 2012-1-24 16:58
20
0
楼主加油 ,classes.dex做哈希只是F-Secure的一种策略。这个我能理解。大家可以一起研究讨论
雪    币: 104
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lgwinner 2013-4-29 22:16
21
0
现在的手机查毒功能都特别的快 一般都在半分钟之内完成 比如LBE 这样的软件在查毒的时候不是对其中的方法都检查吧
雪    币: 31
活跃值: (145)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
wdynasty 1 2013-5-18 22:03
22
0
如何检测APP,比较复杂,手法也很多。回头我几篇文献吧,国外研究的不少!
雪    币: 104
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lgwinner 2013-6-17 01:29
23
0
目前在对权限方面做些研究。看了几篇不错的文章,对恶意软件所申请的权限和正常软件申请的权限做了统计分析,从中可以看得出,有些权限是基本存在于恶意软件而极少存在于正常软件中的;并且,恶意软件在申请的权限数量上也大大多于正常软件。 我认为权限的检测在恶意程序的检测中也是很有必要作为一部来考虑的。

对恶意样本的md5检测确实主要依赖于搜集到的样本库,这个功能也挺好实现,实际操作表明速度还是很快的,基本不费时间,所以可以作为检测的第一步。

版主所说的使用权限做启发式能否再详细说明下? 谢谢
游客
登录 | 注册 方可回帖
返回