市面上有很多的在线Android安全扫描工具,比如梆梆的安全检测平台、360显危镜、爱加密安全检测平台等等,自动化工具出来的结果大多数情况下都是非准确的,都需要人工进行复核。这一章我们来学习组件导出风险

一、漏洞原理

app的四大组件,Activity,Service,Broadcast Receiver 和Content Provider,如果设置了导出权限,都可能被系统或者第三方的应用程序直接调出并使用。组件导出可能导致本地拒绝服务、越权、恶意调用等风险。

(1)什么是组件导出?
组件的导出具体表现在清单文件中,组件中存在"android:exported"这个属性,其值为true时表示组件存在导出。存在组件导出有以下几种情况
a. 主动设置android:exported为true
b. 组件存在IntentFilter,存在IntentFilter时android:exported属性默认值为true
c. 当组件是ContentProvider并且minSdkVersion或者targetSdkVersion小于等于16时,android:exported默认为true ,当大于等于17时,android:exported默认为false

在app上的具体表现是:比如游戏登陆时调用微信的Activity登陆组件,微信的Activity登陆组件就是可被导出的。简单来讲就是导出的组件可以被第三方app调用(唤醒)

(2)组件的导出一般会引起什么风险呢?
a. 本地拒绝服务(未对传递的数据进行校验和异常处理,导出app异常崩溃)
b. 越权(未对调用者的权限进行校验,风险:绕过登陆页面、非法进入app测试环境页面等等)
c. 数据库SQL注入(使用拼接字符串组成SQL语句的形式去查询数据库)
d. 恶意调用
等等...

在这当中最常见的就是"本地拒绝服务"和"越权"

二、检测手段

这里从两个方面讲检测的手段:
(1)市面上大多数检测引擎的检测方法
(2)自查自检

从这两种检测方法来讲,若是要过一些监管要求,则采用第一种检测方法做对应的修复就行(由于大部分安全检测的厂家,都是采用检测引擎扫描的方式直接出结果,而没有进行人工复核,因为对于批量化的检测来讲人工复核的成本过高),第二种检测方案是人工进行检测(可以采用检测引擎 + 人工复核的方式进行)

(1)市面上大多数检测引擎的检测方法
基本上要过监管的要求采取这种方式进行就可以了,因为这种检测的方式可以认为是一刀切的方式,不管app内部采取了怎么样的校验和拦截,若不把android:exported属性置为false,都会报出这个组件导出的风险。

step1. 反编译app的AndroidManifest.xml文件

step2. 扫描组件中是否显示的存在android:exported属性,属性值是否为true,若为true则存在组件导出风险,若为false则进入step3。

step3. 扫描组件中是否存在IntentFilter,若存在IntentFilter并且没有显示的设置android:exproted的属性值为false,那么android:exported的默认值为true,存在组件导出风险

(2)自查自检

由于某些情况下业务的需要,组件是必须要导出的,比如:微信和QQ给其它app提供的三方登陆功能、 安全认证校验功能等等。所以组件导出只有必要和非必要,那么不需要提供给其它三方使用时最好将android:exported属性置为false,以避免引起漏洞,若确实需要给三方提供某些功能时在app内部要做好权限校验和异常拦截处理保证app的使用安全。

那么自查自检最好采用检测引擎 + 人工复核的方式进行,这里推荐一款检测的工具Drozer,这个工具用来检测组件导出相当优秀,再结合人工的复核,能够极大的解决组件导出的隐患。
在这里我们来了解Drozer的使用命令,具体的安装和使用在网上进行查询就行了。

app.activity.info           Gets information about exported activities.
app.activity.start          Start an Activity
app.broadcast.info          Get information about broadcast receivers
app.broadcast.send          Send broadcast using an intent
app.broadcast.sniff         Register a broadcast receiver that can sniff        particular intents
app.package.attacksurface   Get attack surface of package
app.package.backup          Lists packages that use the backup API (returns trueon FLAG_ALLOW_BACKUP)
app.package.debuggable      Find debuggable packages
app.package.info            Get information about installed packages
app.package.launchintent    Get launch intent of package
app.package.list            List Packages
app.package.manifest        Get AndroidManifest.xml of package
app.package.native          Find Native libraries embedded in the application.
app.package.shareduid       Look for packages with shared UIDs
app.provider.columns        List columns in content provider
app.provider.delete         Delete from a content provider
app.provider.download       Download a file from a content provider that        supports files
app.provider.finduri        Find referenced content URIs in a package
app.provider.info           Get information about exported content providers
app.provider.insert         Insert into a Content Provider
app.provider.query          Query a content provider
app.provider.read           Read from a content provider that supports files
app.provider.update         Update a record in a content provider
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
auxiliary.webcontentresolverStart a web service interface to content providers.
exploit.jdwp.check          Open @jdwp-control and see which apps connect
exploit.pilfer.general.apnproviderReads APN content provider
exploit.pilfer.general.settingsproviderReads Settings content provider
information.datetime        Print Date/Time
information.deviceinfo      Get verbose device information
information.permissions     Get a list of all permissions used by packages on   the device
scanner.activity.browsable  Get all BROWSABLE activities that can be invoked    from the web browser
scanner.misc.native         Find native components included in packages
scanner.misc.readablefiles  Find world-readable files in the given folder
scanner.misc.secretcodes    Search for secret codes that can be used from the   dialer
scanner.misc.sflagbinaries  Find suid/sgid binaries in the given folder (defaultis /system).
scanner.misc.writablefiles  Find world-writable files in the given folder
scanner.provider.finduris   Search for content providers that can be queried    from our context.
scanner.provider.injection  Test content providers for SQL injection            vulnerabilities.
scanner.provider.sqltables  Find tables accessible through SQL injection        vulnerabilities.
scanner.provider.traversal  Test content providers for basic directory traversalvulnerabilities.
shell.exec                  Execute a single Linux command.
shell.send                  Send an ASH shell to a remote listener.
shell.start                 Enter into an interactive Linux shell.
tools.file.download         Download a File
tools.file.md5sum           Get md5 Checksum of file
tools.file.size             Get size of file
tools.file.upload           Upload a File
tools.setup.busybox         Install Busybox.
tools.setup.minimalsu       Prepare 'minimal-su' binary installation on the     device.

三、修复方法

(1) 不需要导出的组件,设置组件属性android:exported=false
(2) 对于需要导出的组件需要做好:
   a. 权限校验和异常处理,避免应用出现拒绝服务
   b. 建议添加自定义signature或signatureOrSystem级别的私有权限保护


asjhan for Android reverse

Android安全检测 - 组件导出风险相关推荐

  1. Android安全检测 - 动态注册Receiver风险

    这一章我们来学习"动态注册Receiver风险",此项在安全检测平台上检测出的结果存在一定的报错率,一般需要三方检测平台或者开发者进行复核,这里我们研究如何避免此项风险. 一.漏洞 ...

  2. 最全Android安全检测漏洞解决方案

    前言:APP安全检测通常在一些小型企业涉及的比较少,并且并不太关注这方面的问题.然而在一些大型互联网企业或者国企等等就非常在意这方面的安全问题,并且会有专门的人去对APK进行检测.本节我们一起学习在A ...

  3. (3)客户端APP安全_组件导出

    1.四大组件描述 Android主要包含4大组件,分别是activity组件.service组件.content provider组件和broadcast receiver组件. - Activity ...

  4. Android中检测应用是否安装

    Android中检测应用是否安装有多种方法,其中比较常用的有如下2种: 1.通过获取系统上已安装的所有app列表来查找[不推荐.因为要获取已安装的所有app信息,可能会有隐私泄露风险] public ...

  5. Android模拟器检测体系梳理

    转自:https://www.wireghost.cn/2018/05/10/Android模拟器检测体系梳理/ 模拟器作为一种虚拟机,配合改机工具,能够以较低成本实现设备多开,因此而备受黑灰产的青睐 ...

  6. 手写内存泄漏检测组件

    手写内存泄漏检测组件 前言 内存泄漏 内存泄漏的现象与危害 内存泄漏检测组件的两个核心需求点 第一版:__libc_malloc, __libc_malloc 与 __builtin_return_a ...

  7. android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测

    android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测 https://dev.bangcle.com/ 业内专业的应用加固服务供应商 帮助数十万APP抵御破解风险, ...

  8. 海云安SCA平台迎来新升级 助力企业全面透视开源组件安全风险

    本月初,最受欢迎的开源轻量级 Java 框架 Spring 被曝存在高危的远程控制0Day漏洞,这一事件让开源安全再次引发了IT行业的讨论和关注.自SolarWinds太阳风黑客攻击事件和Apache ...

  9. Android感应检测Sensor(简单介绍),Android系统面试题

    Sensor 说明 Sensor.TYPE_ACCELEROMETER 加速度感应检测 Sensor.TYPE_MAGNETIC_FIELD 磁场感应检测 Sensor.TYPE_ORIENTATIO ...

最新文章

  1. mongodb拆库分表脚本
  2. javascript中的事件冒泡、事件捕获和事件执行顺序
  3. java 网站转app_java – 将现有Web应用程序转换为桌面应用程序
  4. eclipse打可运行的jar
  5. test index.php,index.php
  6. python消费kafka逻辑处理导致cpu升高_请教:Python模块KafkaConsumer会被Kerberos的状态影响嘛?...
  7. datetimepicker不可以选择当天之前_专访吴京:网上《战狼3》的消息我都不知道,大家可以选择不信...
  8. hashset java api_java常用对象API中集合框架之HashSet
  9. Alibaba Cloud Toolkit一键上云神器
  10. X64_Xcelera-CL_PX4采集卡测试记录
  11. Java快速入门笔记-02 Java基础(基本数据类型、变量和常量、运算符、数组、字符串)
  12. WPF 方块按钮 仿照360
  13. iOS-Core-Animation-Advanced-Techniques(五)
  14. 《Dreamweaver CS6 完全自学教程》笔记 第十七章:Spry 框架技术
  15. 自主创新持续领航,麒麟信安荣获“网信自主创新尖峰企业”称号
  16. 比 Bloom Filter 节省25%空间!Ribbon Filter 在 Lindorm 中的应用
  17. 初识语音视觉交互芯片——CSK6
  18. python爬取笔趣阁小说的代码微小调整修改
  19. 矩阵求导公式的数学推导四部曲
  20. SpringBoot整合Sharding-JDBC分库分表中间件

热门文章

  1. [VBA]批量替换PPT里的字体颜色
  2. 帮助中心 html页面,网页端直播
  3. 【黎乙丙】平面设计工具知识,PS中的基础原理之图像选区的创建与编辑
  4. 这可能是最接近微信朋友圈的图片压缩算法
  5. python 异常类型(比较全)
  6. 为什么越来越多的人不愿意做程序员?真相会让你哭
  7. 可解释深度知识追踪模型-刘坤佳
  8. 《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——第3章 无线个域网 3.1蓝牙...
  9. day034 jsp
  10. springboot整合redisson实战(二)Redisson分布式锁的使用