十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

[转]Android安全测试

上一篇 / 下一篇  2015-05-24 09:19:13 / 个人分类:APP安全

文章来源
  • 文章来源:【转载】

一、通过在线工具进行测试

1.腾讯金刚审计系统
http://service.security.tencent.com51Testing软件测试网dQ$P1bQpp3j

优点:包含了修复建议51Testing软件测试网,JQ0OS_Xz

2.阿里聚安全检测

gZ%y4EI,w4F0

网址: http://jaq.alibaba.com/ 
阿里聚安全下有自己的安全博客,包含一些:1.安全漏洞、2.病毒分析、3.技术研究、4.安全报告相关文档。51Testing软件测试网1J&Xk)lt

3.360捉虫猎手检测结果51Testing软件测试网"S"? yyM-gqm/T

网址: http://appscan.360.cn/ 
同样有自己的安全博客51Testing软件测试网Y+X w%y8|

4.爱加密

-T/g4~!zf F0

网址:http://safe.ijiami.cn/analyze
优点:在导出的报告中可以看到对当前apk的评分51Testing软件测试网E9n7X!P0Y/d/[ ` [@%O

5.百度MTC51Testing软件测试网(K;S)B"r$C]Eync

网址: http://mtc.baidu.com/51Testing软件测试网)g"?#Y$b^8n8? p

总结
经比较感觉腾讯金刚审计系统和360捉虫猎手检测结果更全面详细,而且包含修复建意
在线工具的缺点是会把apk暴露出来。

MM,JJ u j$nvJ0

二、使用Drozer测试

1.Drozer简介

7u n6|zydb0

drozer是一款针对Android系统的安全测试框架。drozer可以帮助Android app和设备变得更安全,其提供了很多Android平台下的渗透测试exploit供你使用和分享。对于远程的exploit,它可以生成shellcode帮助你进行远程设备管理。51Testing软件测试网 C:T(tbc3?

1.更快的Android安全评估
drozer可以大大缩减Android安全评估的耗时,通过攻击测试暴露Android APP的漏洞。51Testing软件测试网O"W"Pwi7cM

2.基于真机的测试
drozer运行在Android模拟器和真实设备上,它不需要USB调试或其他开发即可使用。51Testing软件测试网I3| vE?i:TJ O)v

3.自动化和扩展
drozer有很多扩展模块,你可以找到他们进行测试以发现Android安全问题。

;{Dp8pWIV)F0

2.Drozer的安装和使用51Testing软件测试网V g'f]b@"D}

1.安装
Drozer下载地址:http://mwr.to/drozer 
1.在客户端安装Drozer

'OE n3ky_{ADaje0

2.在手机端或模拟器安装agent.apk51Testing软件测试网x9ZXD1u5U

3.在手机端或模拟器运行agent.apk点击开启-->Embedded Server-->Enable

.YYx/Ct)x0

4.建立端口转发,drozer使用31415端口,即执行命令:adb forward tcp:31415 tcp:3141551Testing软件测试网!k$Mw3? [ `*s#bl@'O

5.drozer console connect

+U SWSD G!U0

6.安装包中还包含一个测试应用程序sieve.apk51Testing软件测试网#Y(i Kz^ P)O+y-rJB

具体可参考:https://www.mwrinfosecurity.com/system/assets/559/original/mwri_drozer-users-guide_2013-09-11.pdf 

1|@6PH V0

2.Drozer测试my.akp

_$nE9Ok$fY0

1)查看所有的安装的App的包名

c PU/?r^0?"rT0

dz> run app.package.list
2)查找my.apk

\!o ^V4g0

dz> run app.package.list -f sample
com.xxx.xx (my)

&c7_}~/kG;pe2_"c7@q8F;R0

3)获取my.apk的一些基本信息

3a#f6@o]%yL}o%I0
dz>run app.package.info -a com.xx.xxx

Package: com.xx.xxx
  Application Label: my
  Process Name: my
  Version: 1.0
  Data Directory: /data/data/com.xxxx.xxxx
  APK Path: /data/app/com.xxx.xx-1.apk
  UID: 10217
  GID:[3003, 1028, 1015]
  Shared Libraries: null
  Shared User ID: null
  Uses Permissions:
  - android.permission.READ_LOGS
  - android.permission.INTERNET
  - android.permission.ACCESS_NETWORK_STATE
  - android.permission.READ_PHONE_STATE
  - android.permission.ACCESS_WIFI_STATE
  - android.permission.WRITE_EXTERNAL_STORAGE
  - android.permission.WAKE_LOCK
  - android.permission.VIBRATE
  - android.permission.WRITE_SETTINGS
  - org.agoo.android.permission.MESSAGE
  - android.permission.CHANGE_NETWORK_STATE
  - android.permission.CHANGE_WIFI_STATE
  - android.permission.GET_TASKS
  - android.permission.SEND_SMS
  - android.permission.READ_EXTERNAL_STORAGE
  - android.permission.RECEIVE_SMS
  - android.permission.SYSTEM_ALERT_WINDOW
  - android.permission.ACCESS_COARSE_LOCATION
  - android.permission.ACCESS_FINE_LOCATION
  - android.permission.RESTART_PACKAGES
  - android.permission.MANAGE_ACCOUNTS
  - android.permission.GET_ACCOUNTS
  - android.permission.READ_CONTACTS
  Defines Permissions:
  - org.agoo.android.permission.MESSAGE
dz>

分析:可以看到myapk的版本信息,数据存储的目录,用户ID,组ID,是否有共享库,还有权限信息等。51Testing软件测试网/K3y)h'{:CJ7O/|

4)APP攻击面分析51Testing软件测试网b p1p2P rc$iz

分析Activity/Broadcast Receiver/Content Provider/Service是否能被其他的的应用程序调用51Testing软件测试网@'b%{7WT

dz>run app.package.attacksurface com.xxx.xxxx
Attack Surface:
  5 activities exported
  0 broadcast receivers exported
  0 content providers exported
  0 services exported
    is debuggable
dz>

分析:结果显示了潜在可以利用的组件个数: “exported”表示组件可以被其他App使用。 services is debuggable表示我们可以用adb绑定一个调试器到进程。51Testing软件测试网|0Pr$MH]$_

调试方法参见:http://bobao.360.cn/learning/detail/140.html

S"ZY9~"O%eN(Km0

5)Activity组件暴露51Testing软件测试网G0o6B6Z _ I8^"R

dz>run app.activity.info -a com.xxx.xxxx
Package: com.xxxx.xxxx
  com.xxxxx.xxx.xSinaWeiboActivity
    Permission: null
  com.tencent.tauth.AuthActivity
    Permission: null
  com.xxx.xxxx.xxxx.WXEntryActivity
    Permission: null
  com.xxx.xxx.ContainerActivity
    Permission: null
  com.xxxxx.xxxx.MainActivity
    Permission: null
dz>

分析:其中上图的MainActivity是程序启动时主界面,必须是exported,其他几个activity是理论上说是不能exported的。51Testing软件测试网g+x[S9xx"_

我们可以通过命令run app.activity.start --component 包名 包名.类名启动Activity51Testing软件测试网 @K'^:aIiO'\7~

dz#> run app.activity.start --component com.xxx.sample 包名.类名
dz#> run app.activity.start --component com.xxxx.sample com.xxx.xxxxx.WXEntryActivity

x7O{0y;d L ?1e,_l0

解决方案:51Testing软件测试网v eM,G+AU/m5B

保护应用程序组件51Testing软件测试网RR(E B;a2X5{I'p@

① 设置android:exported属性为false51Testing软件测试网b \ W7R m%c-\5{%S

在AndroidManifest.xml文件中,我们应该设置设置android:exported属性为false来保护应用。51Testing软件测试网.G(N:G}V9^!@6ZS

② 通过权限控制限制访问51Testing软件测试网 cI6]1l6c[:O

android:exported属性不是唯一的限制措施。我们还可以通过基于权限的方法来定制一个Activity的权限。这个可以限制应用之间的访问权限。51Testing软件测试网#iRch-B

无需暴露的组件请设置exported=”false”;若需要外部调用,建议添加自定义signature或signatureOrSystem级别的私有权限保护;需要暴露的

t#h~*~m1PwC0

组件请严格检查输入参数,避免应用出现拒绝服务。51Testing软件测试网!fH Z1y?*G$k7v~

6)ContentProvider组件暴露

P J!B&q&@&|O0
dz>run app.provider.info -a  com.xxxx.sample
Package: com.xxxxx.sample
  No matching providers.
dz>

分析:我们可能没有用到Content Provider或者说是安全的。如果包含则会显示exported的content provider的具体信息,包括名字,权限,访问路径等,就可以做一此类如Sql注入的操作。

G^ AA0c~'W-j0

① 检查是否有sql注入51Testing软件测试网#T ~0^^2JL

dz>run scanner.provider.injection -a com.xxxxx.sample
Scanning com.xxxx.sample...
D:\Java\jdk1.8.0_11\bin\javac.exe -cp C:\drozer\lib\drozer\lib\android.jar ZipUtil.java
C:\drozer\lib\drozer\lib\dx.bat --dex --output 4a78a7a38b67b985beccf6efac92375b.apk ZipUtil.class
trouble processing:
bad class file magic(cafebabe)or version(0034.0000)...while parsing ZipUtil.class
...while processing ZipUtil.class
1 warning
no classfiles specified
drozer could not find or compile a required extension library.
dz>

② 检查是否存在遍历文件的漏洞51Testing软件测试网[C'p*["{

dz>run scanner.provider.traversal -a com.xxxxx.sample
Scanning com.xxxx.sample...
D:\Java\jdk1.8.0_11\bin\javac.exe -cp C:\drozer\lib\drozer\lib\android.jar ZipUtil.java
C:\drozer\lib\drozer\lib\dx.bat --dex --output 4a78a7a38b67b985beccf6efac92375b.apk ZipUtil.class
trouble processing:
bad class file magic(cafebabe)or version(0034.0000)...while parsing ZipUtil.class
...while processing ZipUtil.class
1 warning
no classfiles specified
drozer could not find or compile a required extension library.
dz>

7)Broadcast receivers组件暴露

3]"v\#@!a7H5X@0

通过反编译可以看到有三个广播接收器被注册,且未设置exported=“false”51Testing软件测试网4V2aP&J)Tm

风险描述51Testing软件测试网^0Hk~ FS

导出的组件可以被第三方app任意调用,导致敏感信息泄露或者恶意攻击者精心构造攻击载荷达到攻击的目的。

$w1DeK&J)H0^-C}0

修复建议

sR O1o7pS0

如果组件不需要与其他app共享数据或交互,请将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 请对组件进行权限控制和参数校验。51Testing软件测试网vN/nH}0k'JpQ\

8)Service组件暴露51Testing软件测试网6U&?P GiL m5^

① 获取是exported状态的services的51Testing软件测试网D*L}J2y0hAM+k*w

dz>run app.service.info -a com.xxxxx.sample
Package: com.xxxxx.sample
  No exported services.
dz>

分析:没有exported的services

3?d k6Z8k g8G0

② 关于Services模块

S"Q6I(X WMx0
dz>cdappdz#app>cdservicedz#app.service>ls
app.service.info   Get information about exported services
app.service.send   Send a Message to a service, and display the reply
app.service.start  Start Service
app.service.stop   Stop Service

dz#app.service>

3.Logcat安全
android.permission.READ_LOGS:app读取日志权限,android 4.1之前版本通过申请READ_LOGS权限就可以读取其他应用的log了。但是谷歌发现这样存在安全风险,于是android 4.1以及之后版本,即使申请了READ_LOGS权限也无法读取其他应用的日志信息了。4.1版本中 Logcat的签名变为“signature|system|development”了,这意味着只有系统签名的app或者root权限的app才能使用该权限。普通用户可以通过ADB查看所有日志。

"T8b`P w({0

通过 adb shell logcat可以查看所有logcat信息51Testing软件测试网Dp{Xb3?[O

有些人认为任何log都不应该在发行版本打印。但是为**p的错误采集,异常反馈,必要的日志还是要被输出的,只要遵循安全编码规范就可以将风险控制在最小范围。51Testing软件测试网 r'MF8^0JdV,Y+j%Y b

建议:
Log.e()/w()/i():建议打印操作日志

?2iC)GQ@0

Log.d()/v():建议打印开发日志

Q)}G \8jY"SV0

1、敏感信息不应用Log.e()/w()/i(), System.out/err 打印。51Testing软件测试网"v#I(|gV)hg4U{

2、如果需要打印一些敏感信息建议使用 Log.d()/v()。(前提:release版本将被自动去除)51Testing软件测试网#L4vG$vY

3、Log.d()/v()的返回值不应被使用。(仅做开发调试观测)51Testing软件测试网3M D'S @G.Dru N6n

参考:http://www.droidsec.cn/android-logcat-security/51Testing软件测试网,J {lKm(iG5~

4.反编译查看myapk.apk是否安全

Y4K/_Ma0

1.使用APKTOOL反编译AndroidManifest.xml文件51Testing软件测试网2P J9Rh-W ^Kl

2.检查AndroidManifest.xml文件是否有如下内容:android:debuggable="true"

&hbl-EkA1D#c o!B0

如果你在其中发现了这样的内容,该应用是可以被调试的。很显示我们的xxxxx_sample是可被调试的。

f#r_u+k,t0

调试方法参见:http://bobao.360.cn/learning/detail/140.html51Testing软件测试网+?cLY h*mJin'j

3.反编译查看配置文件AndroidManifest.xml中activity组件(关注配置了intent-filter的及未设置export=“false”的)

3z:d\Mx!S\"Dbxz0

通过分析AndroidManifest.xml,我们获得了以下信息:

Jvk-Sby Y Nw0

包名:com.xxx.sample
入口”com.xxxx.sample.MainActivity

y.?Bx)`0

其它组件的export同Activity51Testing软件测试网3P\MVV` U;olN

三、参考资料

1.《Android 安全测试初探》合集:http://testerhome.com/topics/1698

^tZ J _0

2.Android Hacking and Security

y/^*z)A$C'p"}A;d0

英文原文: http://resources.infosecinstitute.com/android-hacking-security-part-1-exploiting-securing-application-components/51Testing软件测试网i8bGDR\;[

中文:http://bobao.360.cn/learning/detail/122.html51Testing软件测试网 ] \w%Y$P-BA

3.Android安全中文网站: http://www.droidsec.cn

~/I;j*l'@%gU9J0

TAG: Android

 

评分:0

我来说两句

Open Toolbar