【移动安全高级篇】————2、浅谈Android软件安全自动化审计

news/2024/11/24 12:50:07/

0x00  前言

 随着移动互联网的发展,移动终端安全也越来越受到关注。特别是Android系统的崛起,互联网上的各类Andriod软件数量迅速上升。因Android系统是开源的,导致各种android恶意软件迅猛增加,成为手机系统的最大受害者。与此同时,android系统和软件本身的漏洞也进一步危害到用户的隐私安全。本文主要针对Android软件安全进行审计,提供一些常见的安全检测点,并借此实现自动化审计工具,最后评估下业界常见android软件安全的现状。

0x01  Android软件常见漏洞原理及检测

敏感信息明文保存

 敏感信息明文保存一直是Andriod软件常容易出现的,这些敏感信息包括用户密码、住址、姓名等等内容,特别是密码问题。有些支持“记住密码”功能的软件常常将密码明文保存在软件目录下的某xml文件中,若手机中毒或者被其它恶意软件利用,直接读取xml文件中的明文密码然后远程发送给攻击者,这将会严重影响到用户帐号安全。以下是用于检测敏感信息的关键代码:

foreach $msg (@msgs) {my $base64msg = encode_base64($msg);my $md5msg = md5_hex($msg);						if(/$msg/){print "[高危]:$curfile: 行 $lines: 发现明文敏感信息:$msg !!!\n";$SearchStrResult .= "[高危]:$curfile: 行 $lines: 发现明文敏感信息:$msg !!!\n";push (@risk_level,4);$highnum++;}if(/$base64msg/){print "[高危]:$curfile: 行 $lines: 发现 Base64 敏感信息:$base64msg !!!\n";$SearchStrResult .= "[高危]:$curfile: 行 $lines: 发现 Base64 敏感信息:$base64msg !!!\n";push (@risk_level,4);$highnum++;}if(/$md5msg/){print "[安全]:$curfile: 行 $lines: 发现 MD5 加密信息:$md5msg !!!\n";$SearchStrResult .= "[安全]:$curfile:行 $lines:发现 MD5 加密信息:$md5msg !!!\n";push (@risk_level,1);$secnum++;}}

以下是当检测到明文密码时的输出结果(已过滤掉包名):

[高危]:data/data/com.***.v7/shared_prefs/rem_password.xml: 行 3: 发现明文敏感信息:passwd123 !!!

 程序文件及进程权限问题

如果我们限制程序目录的权限,禁止其它第三方软件访问,也能够在一定程度上防止明文密码泄露,除非软件已获得root权限,而软件一般无需root权限,大多是一些恶意软件或者杀毒软件才会用到,对于普通软件应该遵循“最低授权原则”,尽量以最低权限来完成所需操作,避免权限被恶意滥用。因此也可将程序目录权限和进程是否为root权限作为一个检测点,以下是DroidAppAuditter检测到问题时的输出结果:

[低危]:-rw-rw--w- :data/data/com.snda.cloudary/shared_prefs/UserInfo.xml[低危]:存在Root权限 !

 网络数据明文传输

在2012年2月UCWEB浏览器被爆存在明文密码网络传输漏洞,若开启“云端加速”功能,在登录一些SSL站点时,它会将用户发送的WEB请求会转发到UC的代理服务器上,并且未进行任何加密处理,可能导致用户密码泄露。最初UC不承认此问题,后来在微博上确认存在此漏洞。对于存在明文网络传输的软件,若结合中间人攻击就极有可能造成密码泄露,特别是在KFC、麦当劳等公共场所。在Android中本身自带有tcpdump可用于网络抓包,再借助perl模块去解析cap,或者利用wireshark的命令行工具来解析也是可行的(以下为示例代码,不考虑命令注入问题):

 print "[*] 捕获网络数据包......\n\n";system("adb shell tcpdump -p -vv -s 0 -c 500 -w /sdcard/$targetfile.cap");print "\n[*] 提取cap文件至PC端分析......\n\n";system("adb pull sdcard/$targetfile.cap $cwd/TestSoft/$targetfile/$targetfile.cap");print "\n[*] 解析cap数据包......\n\n";system("$cwd/tshark/tshark.exe -r $cwd/TestSoft/$targetfile/$targetfile.cap -V > $cwd/TestSoft/$targetfile/$targetfile.

以下是检测到明文敏感信息网络传输时的输出结果:

[中危]:存在明文传输内容:password=passwd123&provider=sdo&login=13613******[低危]:存在 IMEI(国际移动设备身份码)隐私信息窃取行为、IP地址隐私信息窃取行为、SIM序列号隐私信息窃取行为:channel=6666&model=sdk&ip=10.0.2.15&mac=&sim=89014103211118510720&imei=000000000000000&size=480*800&os=2.2&platform=Android&vers

组件权限安全问题

在Android中存在多种组件,比如Content Provider、Broadcast Receiver等等,这些组件可能因权限设置不当导致信息泄露或者钓鱼欺骗等攻击。在2011年,香港理工大学的安全研究人员陆续报告了许多android软件中存在的Content Provider信息泄露漏洞(参见链接:http://www4.comp.polyu.edu.hk/~appsec/),由于程序对Provider的权限设置不当,导致第三方软件可读取Content Provider提供的信息,其危害程度取决于Content Provider提供的信息内容,比如联系人、电话、短信等隐私信息就可能包含其中。默认情况下,Content Provider的权限为android:protectionLevel=”normal”,最好的权限设置应为signature或者signatureOrSystem,进而避免被第三方恶意软件利用。下面是DroidAppAuditter中用于检测Content Provider权限的关键代码:

while(index($cont[$line],"<permission android:name=\"$ProviderName\"") == -1){if ($line <= $linecount) {$line++;}else{print "[中危]:Content Provider:$ProviderName 默认设置为\“normal\”权限,可能导致敏感信息泄露!\n";$CheckComponentResult .=  "[中危]:Content Provider:$ProviderName 默认设置为\“normal\”权限,可能导致敏感信息泄露,建议修改为\“signature\”或者\“signatureOrSystem\”!\n";……省略……last;}}if(index($cont[$line],"android:protectionLevel=\"normal\"") > -1){print "[中危]:Content Provider:$ProviderName 权限为\“normal\”,可能导致敏感信息泄露!\n";$CheckComponentResult .= "[中危]:Content Provider:$ProviderName 为\“normal\”权限,可能导致敏感信息泄露,建议修改为\“signature\”或者\“signatureOrSystem\”!\n";……省略……         }

除protectionLevel权限问题外,<grant-uri-permission>权限问题也可作为一个检测点,若设为true,可被其它程序通过URL访问到content provider的内容,容易造成信息泄露。

2011年盛大的安全研究人员DoDo在其博客写一系列关于Android安全的文章,其中有篇就提到关于Broadcast Receiver的问题,链接见:http://www.sectop.com/?p=128,这个依然是组件权限控制的问题,由于Broadcast Receiver被允许外部调用,可能被第三方恶意软件标记相关action给正常应用发送broadcast,那么正常应用就会对此进行响应处理,其危害程度也是取决于正常应用对广播接收采取的操作,比如发送短信、任务栏通知等操作,就有可能被用于钓鱼欺骗。防御此问题最简单的方法就是通过android:exproted来关闭receiver对外部应用的响应,但可能在同一公司开发的一些产品之间需要进行相互广播通讯,此时就可采取DoDo在文中提到的另一种方法:在receiver方的androidmanifest.xml中增加<permission>自定义权限项,并在sendbroadcast方得androidmanifest.xml中增加<uses-permission>匹配此权限。下面是DroidAppAuditter用于检测Broadcast Receiver权限的部分检测代码:

if(index($cont[$line],"android:exported=\"flase\"") > -1){print "[安全]:Broadcast Receiver:$Receiver 禁止被外部调用!\n";$CheckComponentResult .= "[安全]:$Receiver 禁止被外部调用!\n";}elsif(index($cont[$line],"android:permission=") == -1){print "[低危]:Broadcast Receiver:$Receiver 可被外部调用,可能造成钓鱼欺骗,建议添加 android:exported=\"flase\"!\n";$CheckComponentResult .= "[低危]:Brodcat Receiver:$Receiver 可被外部调用,可能造成钓鱼欺骗,建议添加 android:exported=\"flase\"!\n";……省略……}

除receiver和content provider的权限问题外,其它组件如service和activies也可能存在权限安全问题,亦可将其列入检测范围。其它

 除上文中提到的各个安全检查点之外,读者还可进行扩充,比如其它组件权限、XSS、SQL注入检测、内存泄露、intent fuzzing等多个方向进行分析,DoDo’s Blog上面也有一些安全文章可作为参考,大家如果有什么好的思路或检测点也可邮件与本人交流:riusksk@qq.com。

 自动化审计工具——DroidAppAuditter

对于业务量较大的公司,Android软件产品可能会很多,若一一通过手工检测,就会影响到效率,因此实现一款自动化审计工具是非常有必要的,至少可以减轻工作量,以腾出更多的时间出来看片……笔者将此审计工具命名为DroidAppAuditter,主要用Perl语言编写的,支持Android模拟器和实体机,可自动安装apk文件并运行软件,然后实现动态自动化检测,并图文并茂地输出分析报告。最后这里附上一份输出的完整分析报告,如下图所示,报告中的漏洞已于2011年修复:

业界Android软件安全现状
2011年我们借助自动化审计工具DroidAppAuditter,对业界各个主流Android软件进行安全审计,共审计了29个国内流行的Android软件,其中存在明文保存密码的有10个,其它XSS漏洞、明文传输,以及隐私窃取的行为共有12个,所有被审计的软件有超过一半是存在安全漏洞的。由此可见,目前android软件安全还未受到业界重视,但这也将成为今后发展的趋势。最后附上审计结果的部分截图,如下图所示:

0x03 总结

本文主要探讨了Android软件的一些常用安全检测点,并通过代码实现自动化审计工具,希望对各位有所帮助,如果你有更好的检测方案,也可与本人探讨。至于审计工具,由于各种原因就不公开了,因为我相信:“授人以鱼不如授人以渔”。

 


http://www.ppmy.cn/news/942453.html

相关文章

龙OL外网架设成功案例

文章目录 准备工作游戏服务流程介绍搭建步骤1. 服务端环境设置2. 网站及数据库搭建网站配置MySql数据库配置 3. 网站及服务端文件修改网站配置文件修改服务端配置文件修改 4. 启动服务端5. 客户端文件修改 最近想玩个老游戏&#xff0c;官方玩的不爽&#xff0c;某宝入手一个单…

2022美亚杯--Individual

检材文件下载链接&#xff1a;https://pan.baidu.com/s/1kg8FMeMaj6BIBmuvUZHA3Q?pwdngzs 提取码&#xff1a;ngzs 个人赛下载文件解压密码&#xff1a;MeiyaCup2022 个人赛加密容器解密密钥&#xff1a;CZDGm#&2_Ns$7wSMn%ZGr7xntcHS7d5uFta#Up9544jx_cvP$uFM7?pTDa*j…

阿里云、盛大云、臻云安全性评测

如果站长费劲心思建立的网站在关键时刻无法被用户访问&#xff0c;如果我们保存在云主机上的数据会丢失……我们还会选择云产品吗&#xff1f;一方面云产品节约了大量的成本资源&#xff0c;另一方面它的安全性能不能得到保障是我们关注的问题。现在我们广泛使用的公共云&#…

【转】2012年6月26 – 盛大PHP工程师最新面试题

无笔试。 口试&#xff1a;&#xff08;前半部分平淡无奇&#xff0c;没什么太难的问题&#xff0c;都是求职岗位基本要会的东西&#xff0c;局限于php。下面是真正进入状态的题。&#xff09;谈谈观察者模式是什么&#xff1f;主要应用。 答&#xff1a;类似会有一些server对象…

盛大云平台LAMP架站全攻略

一、申请云主机 1.登录盛大云平台grandcloud.cn 2.单击右上角的控制台&#xff0d;云主机 3.选择华北节点一&#xff0c;单击开始申请 4.选择超微主机&#xff0d;linux-ubuntu10.04 64位&#xff0c;BGP线路2M,单击下一步 5.选择申请主机数量1&#xff0c;主机和带宽都按月付费…

万字文肝Redis基础知识

目录 第一章 Redis 的介绍和安装1.1 为什么需要学习 NOSQL1.2 主流的 NOSQL 产品1.3 NOSQL 的特点1.4 Redis 概述1.5 Window 版 Redis 的安装(了解)1.6 Linux 版本 Redis 的安装1.7 Redis 基础命令1.8 多数据库特性第二章 Redis 的数据类型2.1 Redis 字符串(String)2.2 Redis 哈…

Python学习总结(2)—— Python 快速入门

前言 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性&#xff0c;相比其他语言经常使用英文关键字&#xff0c;其他语言的一些标点符号&#xff0c;它具有比其他语言更有特色语法结构。 Python 是一种解释型语言&…

2022美亚杯电子数据取证大赛-个人赛

&#x1f60b;大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白&#xff0c;自学ing。 本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;一起学习&#x1f497;&#xff0c;一起进步⭐️。 ⭐️此后如竟没有炬火&#xff0c;我便是唯一的光。⭐️ 最近忙着…