Android原生app安全测试

1、应用权限检测
将apk通过apktool进行反编译,得到androidManifest.xml文件,可查看应用权限信息,如图所示:
里插入图片描述
应不存在用户不知情或未授权的情况子啊,获取相应信息。
2、代码混淆检测
代码未做混淆,攻击者很容易阅读反编译后的代码,从而增加程序被破解的风险。
使用反编译软件。
测试步骤:
<1>使用apktool反编译apk,得到apk布局和资源文件
<2>使用Dex2jar软件将class.dex文件编译成jar文件
<3>使用Jd_jui查看jar文件中java源码
防护建议:
<1>通过对代码类名、函数名做替换来实现代码混淆保护
<2>简单的逻辑分支混淆
3、DEX文件检测
DEX未进行保护会被攻击者通过baksmali/apktool/dex2jar等反编译工具逆向出代码,造成核心代码的逻辑泄露、重要数据加密代码逻辑泄露等等。
危害:
classes.dex是android虚拟机的可执行文件,开发所写的java代码都在这个文件夹中,所以攻击者对应用程序的篡改都是针对classes.dex文件。
防护建议:
使用代码混淆,隐藏dex文件中关键的代码。代码混淆的力度从轻到重包括:静态变量的隐藏、函数的重复定义、函数的隐藏、以及整个类的隐藏。混淆后的dex文件依旧可以通过dex2jar等工具反编译成java源码,但里面关键的代码已经不能看到。
4、allowbackup漏洞(数据任意备份漏洞)
当allowbackup标识为true时,用户可通过adb backup来进行对应用数据的备份,在无root的情况下可以导出应用中存储的所有数据,造成用户数据的严重泄露。
测试过程:
查看AndroidManifest.xml文件中的allowbackup属性是否为true
5、debuggale漏洞(程序任意调试功能)
当debuggable的标志为true时,攻击者可通过对app调试,获取app的相关信息。
测试过程:
查看AndroidManifest的debuggable属性是否为true
组件安全漏洞
组成apk的四个组件:Activity、service、Broadcast Recievier、content provider,如果设置了导出权限,都可能被系统或者第三方的应用程序直接调出并使用。组件导出可能导致登录界面被绕过、信息泄露、数据库SQL注入、DOS、恶意调用等风险
6、Activity组件漏洞
Activity负责与用户的交互。
<1>Acticity组件暴露
Activity组件的属性exported被设置为true或未设置exported值但IntentFilter不为空时,activity被认为是导出的,可通过设置的相应的Intent唤起activity
危害:
黑客可能构造恶意数据针对导出activity组件实施越权攻击。
修复建议:
如果组件不需要与其他app共享数据或交互,将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 请对组件进行权限控制和参数校验。
<2>activity绑定browserable与自定义协议
activity设置“android.intent.category.BROWSABLE”属性并同时设置了自定义的协议android:scheme意味着可以通过浏览器使用自定义协议打开此activity。
危害:
可以通过浏览器对app进行越权调用。
防护建议:
app对外部调用过程和传输数据进行安全检查或校验。
<2>ActivityManager漏洞
ActivityManager类中的killBackgroundProcesses函数,用于杀死进程,属于风险API。
还有通过ActivityManager被动嗅探intent。Intent嗅探脚本首先调用一个Context.getSystemService()函数,并传给它一个ACTIVITY_SERVICE标志的标识符,该函数返回一个ActivityManager类的实例,它使得该脚本能够与activity manager进行交互,并通过这个对象调用ActivityManager.getRecentTasks()方法。最后把intent相关的信息格式化成字符串返回出来。
7、Service组件暴露
Service组件的属性exported被设置为true或未设置exported值但IntentFilter不为空时,Sevice被认为是导出的,可通过设置相应的Intent唤起Sevice
危害:
黑客可能构造恶意数据针对导出的service组件实施越权攻击。
防护建议:
如果组件不需要与其他app数据共享数据或交互,将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 对组件进行权限控制和参数校验。
8、ContentProvider组件漏洞
Content Provider为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。
<1>ContentProvider组件暴露
Content Provider组件的属性exported被设置为true或是Android API<=16时,Content Provider被认为是导出的
危害:
黑客可能访问到应用本身不能共享的数据或文件。
防护建议:
如果组件不需要与其他app共享数据或交互,将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 对组件进行权限控制和参数校验。
<2>读写权限漏洞
Content provider中通常都含有大量有价值的信息,比如账号密码等敏感信息。
测试步骤:
使用drozer寻找一些不需要权限的contentprovider:
dz> run app.provider.info –permission null
这条命令能列出所有不需要任何读写权限的Content Provider,然后找到相对应的包,去访问给定包存放在它的Content Provider中的数据。如果一些Content Provider的URI不需要读权限,那就可以通过drozer工具提取其中的数据。在某些情况下,设置和执行读写权限不当,也会将ContentProvider中的数据暴露给攻击者。除了提取数据,对于写权限管理不当的Content Provider还可以向其中写入数据,使得攻击者可以将恶意数据插入到数据库中。
危害:
攻击者恶意读写文件内容,破坏app的完整性。
防护建议:
若该文件存储敏感信息,去掉可读写权限。
<3>content Provider中的SQL注入漏洞
Android app的SQL注入主要包括两类,第一类是SQL语句中的查询条件子语句是可注入的,第二类是投影操作子句是可注入的。
测试步骤:
dz> runapp.provider.query [URI] –selection “1=1”
也可以使用其他恒为真的值,例如“1-1=0”,“0=0”等等。如果APP存在SQL注入漏洞,那么输入这行指令后就会返回数据库中的整张表。
危害:
可查看数据库的信息,暴露数据库中的信息
防护建议:
1、过滤用户输入,对用户输入输出进行校验。
2、不使用动态拼装SQL,使用参数化SQL进行数据查询存取。
3、封装异常信息,比如一些字符错误,数据库的报错信息,尽可能的防止泄露给客户端。
4、设立数据库连接分级授权,对用户的操作权限进行安全限制。普通用户只给普通权限,管理员后台的操作权限要放开,尽量减少对数据库的恶意攻击。
<4>Provider文件目录遍历漏洞
当Provider被导出且覆写了openFile方法时,没有对Content Query Uri进行有效判断或过滤。攻击者可以利用openFile()接口进行文件目录遍历以达到访问任意可读文件的目的。
危害:
攻击者可以利用openFile()接口进行文件目录遍历以达到访问任意可读文件的目的。
防护建议:
一般情况下无需覆写openFile方法,如果必要,对提交的参数进行“…/”目录跳转符或其他安全校验。
8、BroadcastReceiver组件漏洞
Broadcast Receiver是“广播接收者”的意思,就是用来接收来自系统和应用中的广播。
<1>BroadcastReceiver导出漏洞
BroadcastReceiver组件的属性exported被设置为true或者未设置exported值但IntentFilter为空时,BroadcastReceiver被认为是导出的。
危害:
当应用广播接收器默认设置exported=‘true’,导致应用可能接收到第三方恶意应用伪造的广播,利用这一漏洞,攻击者可以在用户手机通知栏上推送任意消息,通过配合其它漏洞盗取本地隐私文件和执行任意代码。
防护建议:
如果组件不需要与其他app共享数据或交互,将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 对组件进行权限控制和参数校验。
<2>动态注册广播组件暴露漏洞
Android 可以在配置文件中声明一个receiver或者动态注册一个receiver来接收广播信息,攻击者假冒APP构造广播发送给被攻击的receiver,是被攻击的APP执行某些敏感行为或者返回敏感信息等,如果receiver接收到有害的数据或者命令时可能泄露数据或者做一些不当的操作,会造成用户的信息泄漏甚至是财产损失。
危害:
导出的广播可以拒绝服务、数据泄露或越权调用。
修复建议:
使用带权限校验的registerReceiver API进行动态广播的注册。
参考资料:
https://blog.csdn.net/zxl1173558248/article/details/83276891

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值