En

浅谈Android软件安全自动化审计

作者:riusksk(泉哥)[ TSRC ]公布时间:2012-09-19阅读次数:23863评论:0

分享

作者:     riusksk(泉哥)
邮箱:     riusksk@qq.com
博客:     http://riusksk.blogbus.com
微博:     http://t.qq.com/riusksk

 

【目录】

 

0x00  前言

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

   0x11 敏感信息明文保存

   0x12 程序文件及进程权限问题

   0x13 网络数据明文传输

   0x14 组件权限安全问题

   0x15 其它

0x20  自动化审计工具——DroidAppAuditter

0x30  业界Android软件安全现状

0x40  总结

0x50  关于我们

 

【正文】

 

0x00  前言


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

 

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


    0x11 敏感信息明文保存


    敏感信息明文保存一直是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 !!!


    0x12 程序文件及进程权限问题


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

 

[低危]:-rw-rw--w- :data/data/com.snda.cloudary/shared_prefs/UserInfo.xml

[低危]:存在Root权限 !


    0x13 网络数据明文传输


    在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.txt");


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

 

[中危]:存在明文传输内容:

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&version=1.0.5.1&ua=Mozilla/5.0 (Linux; U; Android 2.2; zh-cn; sdk Build/FRF91) AppleWebKit/533.1 


    0x14 组件权限安全问题


    在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也可能存在权限安全问题,亦可将其列入检测范围。

 

    0x15 其它


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


0x20  自动化审计工具——DroidAppAuditter


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

 




0x02  业界Android软件安全现状


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

 


 

0x03  总结


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


0x04  关于我们


         腾讯安全应急响应中心(Tencent Security Response Center)简称TSRC,是腾讯公司负责突发安全事件处理的团队,如果您对腾讯产品和业务有任何安全上的建议和意见可以与我们联系,也欢迎有意在互联网安全行业发展的同学加入我们。
    邮箱:security#tencent.com
    主页:http://security.tencent.com

 

评论留言

提交评论 您输入的漏洞名称有误,请重新输入