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

Android原生app安全测试相关推荐

  1. android获取app用户数据,Android 原生app获取用户授权访问Autodesk云应用数据

    oAuth机制对于网站间的授权管理是很容易实现的,设置好app回调端口,当数据服务提供方拿到其用户授权,则返回授权码发送到回调端口.上一篇文章介绍了如何授权Forge app访问Autodesk 云应 ...

  2. android原生app转成web,转战WebApp: 最适合Android开发者的WebApp框架

    原文出处:林法鑫的博客. ps:原以为又是一篇前端从业者人云亦云的水文,其实是篇干货,文中提到的AndroidUI4Web也是作者开发的. 为什么需要转战WebApp开发 随着移动端设备越来越多, 微 ...

  3. Android原生app与H5交互

    1.开发背景. 随着当前开发迭代要求速度更快,改动更灵活,不需要发布版本就能实时更新app的内容,故当前H5制作界面越来越受到科技公司和开发者的欢迎. 2.实现交互 今天记录一下开发过程中用到的H5交 ...

  4. 随想录(一个android原生app的代码赏析)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 今天下午,无意看到android一个原生的app代码,也就一个文件SpeechRecorder ...

  5. android app在线商城,ECMobile:只需一步即可生成iOS或Android原生APP商城应用

    App 快速开发服务已经屡见不鲜,国内有简网 App 工场.道有道.ECMobile这么简洁--你只需将一个集成过的文件夹放进ECShop(一款被广泛使用的开源 B2C 网店)安装根目录,无需任何配置 ...

  6. android生成ios程序,ECMobile:只需一步即可生成iOS或Android原生APP商城应用

    App 快速开发服务已经屡见不鲜,国内有简网 App 工场.道有道.ECMobile这么简洁--你只需将一个集成过的文件夹放进ECShop(一款被广泛使用的开源 B2C 网店)安装根目录,无需任何配置 ...

  7. Android原生App跳转到React Native App

    前言 众所周知,react native开发是前几年较火的一个话题,随着各种框架的更新换代,一些技术也会逐渐被掩埋.本篇是楼主在项目中总结出的一些开发经验.主要讲了react native和原生的ap ...

  8. Android 原生 APP

    常接触的 https://github.com/android/platform_packages_apps_launcher.git https://github.com/android/platf ...

  9. MuMu模拟器+Edge浏览器:Android原生APP嵌入的H5页面元素定位

    前提条件: 1.已安装MuMu模拟器 2.已配置adb环境 adb链接MuMu模拟器 C:\Users\shenyf>adb connect 127.0.0.1:7555 connected t ...

最新文章

  1. webpack安装和配置
  2. 敏捷的项目启动-尽早启动!
  3. Jsoup解析的例子 之 选择器
  4. 汽车电子专业知识篇(七)-什么是XCP协议
  5. pycharm 常用设置
  6. 瞬间“友尽”的五大整蛊代码,快去安排你的小伙伴吧!
  7. C语言16进制字符串转数字
  8. vue-quill-editor超链接bug问题
  9. String转成JSON或String转为list后转为JSON或String转为map后转为JSON
  10. 百度图片批量下载助手
  11. 蛋白质结构信息获取与解析(基于Biopython)
  12. REINFORCE和A2C的异同
  13. linux 实验心得体会
  14. 计算机使用方法的书,是否知道飞鸽传书软件的详细使用方法?查看介绍
  15. mysql sphinx 中文搜索_MySQL中文全文搜索用迅搜还是Sphinx?
  16. 解禁联想浏览器禁用的网址的方法
  17. 快速找出一个自然数的所有因数的方法
  18. 华为软件测试笔试真题,抓紧收藏不然就看不到了
  19. 使用MD.ai标注医学图像及covid-19数据集标注
  20. 关于循环位移指令ROL,RCL ;逻辑右移指令 SHR , 算术右移指令 SAR

热门文章

  1. 日语自学资料-N3(免费下载)
  2. GitKraKen——安装及基本使用
  3. Python爬取链家成都二手房源信息,异步爬虫实战项目!
  4. Java程序员面试必备之深入理解自旋锁
  5. 未能够识别出目标 ***;票根
  6. phtoshop理解与备忘
  7. PHP中traits是用来干嘛的?trait的语法,作用,特点。
  8. 安徽财经大学398法硕联考专业基础(非法学)考研历年真题库资料
  9. BUUCTF misc 专题(36)认真你就输了
  10. 程序员护眼不是你想象的那样