X-Ray检测Android设备Root漏洞过程分析

2024-03-31 08:08

本文主要是介绍X-Ray检测Android设备Root漏洞过程分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文章由Jack_Jia编写,转载请注明出处。  
文章链接:http://blog.csdn.net/jiazhijun/article/details/8660226
作者:Jack_Jia    邮箱: 309zhijun@163.com


一、序言

       
       到目前为止Android已被发现大量的提权漏洞,虽然这些提权漏洞随着系统版本的升级已被解决,但是市场上还存在着大量使用老版本系统的设备。提权漏洞在被合法
软件利用(比如一键Root工具)的同时也被大量恶意软件利用,恶意软件可以利用这些提权漏洞获取系统Root权限,这样就可以在您不知情的情况下,后台静默下载安装
软件,发送付费短信,上传隐私信息等恶意行为。
       用户如何检测自己设备是否存在已知提权漏洞呢?
       X-Ray就是一个检测Android系统中是否存在已知提权漏洞的软件。目前支持对8种漏洞的检测。
       X-Ray下载地址:http://www.xray.io/
       本文将对X-Ray扫描漏洞原理进行分析。

二、软件信息


         MD5:D25F41F9E077C85B5F81F1A4C36E736F

         package name: com.duosecurity.xray




三、分析检测原理


    部分Android提权漏洞是一定需要执行在ELF文件中的。ELF文件就是关键的查找点。


    1、安装包中是否存在ELF文件?

       经观察程序安装包中并不存在ELF文件。


    2、ELF文件是否在运行过程中动态下载?

       运行程序,执行检测任务后,观察程序文件夹变化,发现程序文件夹并没有新增文件。


    3、ELF文件是否在动态下载执行后被程序自动删除?

       搜索Smali代码,查找删除文件操作,发现程序调用

        invoke-virtual {v0, v2}, Lcom/duosecurity/xray/XRAY;->deleteFile(Ljava/lang/String;)Z。

       删除该段代码,重新打包签名后,运行程序后,观察程序文件夹变化,发现files文件夹新增如下文件:



       从文件名即可看出,这些ELF文件用于不同的Android提权漏洞检测。如果需要看懂这些ELF文件,需对Android不同提权漏洞有所了解,这里不在对提权漏洞原理进行进一步解释。

    通过对Log信息及代码的进一步分析,可以获知X-Ray扫描逻辑如下:

    1、联网获取漏洞信息,漏洞信息包含客户端处理检测漏洞的方式

     

[html]  view plain copy
  1. D/xray    (28458): *********** BOOTSTRAP RESPONSE ***********  
  2. D/xray    (28458): latest_probes: 10  
  3. D/xray    (28458): latest_app_version: 3  
  4. D/xray    (28458): latest_app_uri: /xray/static/XRAY-1.0.apk  
  5. D/xray    (28458): **************************************  
  6. D/xray    (28458): probeupdate: trying request 1 of 3  
  7. D/dalvikvm(28458): GC_CONCURRENT freed 257K, 48% free 3259K/6151K, external 481K/993K, paused 2ms+2m  
  8. s  
  9. D/xray    (28458): *********** UPDATE PROBE RESPONSE ***********  
  10. D/xray    (28458): id: zimperlich  
  11. D/xray    (28458): type: static  
  12. D/xray    (28458): name: Zimperlich  
  13. D/xray    (28458): query_url: /xray/zimperlich/query  
  14. D/xray    (28458): probe_url: /xray/zimperlich/probe  
  15. D/xray    (28458): result_url:  
  16. D/xray    (28458): static_payload: /system/lib/libdvm.so  
  17. D/xray    (28458): dynamic_slot:  
  18. D/xray    (28458): dynamic_payload:  
  19. D/xray    (28458): dynamic_signature:  
  20. D/xray    (28458): ********************************************  
  21. D/xray    (28458): id: gingerbreak  
  22. D/xray    (28458): type: static  
  23. D/xray    (28458): name: Gingerbreak  
  24. D/xray    (28458): query_url: /xray/gingerbreak/query  
  25. D/xray    (28458): probe_url: /xray/gingerbreak/probe  
  26. D/xray    (28458): result_url:  
  27. D/xray    (28458): static_payload: /system/bin/vold  
  28. D/xray    (28458): dynamic_slot:  
  29. D/xray    (28458): dynamic_payload:  
  30. D/xray    (28458): dynamic_signature:  
  31. D/xray    (28458): ********************************************  
  32. D/xray    (28458): id: zergrush  
  33. D/xray    (28458): type: static  
  34. D/xray    (28458): name: ZergRush  
  35. D/xray    (28458): query_url: /xray/zergrush/query  
  36. D/xray    (28458): probe_url: /xray/zergrush/probe  
  37. D/xray    (28458): result_url:  
  38. D/xray    (28458): static_payload: /system/lib/libsysutils.so  
  39. D/xray    (28458): dynamic_slot:  
  40. D/xray    (28458): dynamic_payload:  
  41. D/xray    (28458): dynamic_signature:  
  42. D/xray    (28458): ********************************************  
  43. D/xray    (28458): id: ashmem  
  44. D/xray    (28458): type: dynamic  
  45. D/xray    (28458): name: ASHMEM  
  46. D/xray    (28458): query_url:  
  47. D/xray    (28458): probe_url:  
  48. D/xray    (28458): result_url: /xray/ashmem/result  
  49. D/xray    (28458): static_payload:  
  50. D/xray    (28458): dynamic_slot: 01  
  51. D/xray    (28458): dynamic_payload: /xray/static/libashmem_v1.so  
  52. D/xray    (28458): dynamic_signature: H+4S6nSomTdUnqUfDKZltq2Mm51VbQ2jnhbzstZ7bzt2dSQU7H6+BefWgCId1b  
  53. 8gKYdDJrQk5FJ/6OWASVhS7FhNpH6HTN3ieeFbDIX9XYqFmBCzTj5ObFf2yIcQt9JAB3sP/wm7oqzktuX4N2/n+4jmaUOj7HUOgQ  
  54. imDPB9qK4m866+ScIVXiwZHmR6oaLgr8eJVm9uiOLem/DOhcGMsxSEuFY/6mZPrqMKfXPVP2gUsMPbjY1JAHnCD7yUXlCU2Jby18  
  55. HvOH15fo6hkcEhIg1/FvTj+tvHmY64ckKhQdEOOYaBv/Nv2AABMglPQoj/89ntsc7nN1V0qg64u6JJtg==  
  56. D/xray    (28458): ********************************************  
  57. D/xray    (28458): id: mempodroid  
  58. D/xray    (28458): type: dynamic  
  59. D/xray    (28458): name: Mempodroid  
  60. D/xray    (28458): query_url:  
  61. D/xray    (28458): probe_url:  
  62. D/xray    (28458): result_url: /xray/mempodroid/result  
  63. D/xray    (28458): static_payload:  
  64. D/xray    (28458): dynamic_slot: 02  
  65. D/xray    (28458): dynamic_payload: /xray/static/libmempodroid_v1.so  
  66. D/xray    (28458): dynamic_signature: P9VL0j2UbuB94WA6gF9XuAmtEUQmPDOWyxDJDQR9wmIbGq1ixThNSl7bnG1rgV  
  67. pj9M/AgAzxon4umr3FMQV3fLjmZG2QTbNFF7O622G2ssLxeBsCAH/9YC4b9RxVRBQP8cV5B078d+4DHmeOv6ey23omsIwMFoKhXn  
  68. RHnyU4FhtWpA9rT1Bu2d5RCOkuu8HM+qu2w+ZqWlJlnVIMQUbdfDS4YjVpjjS84hloES/wFPGOh/K2NZe1VhKGLhoIDWt6ROQCcG  
  69. 8bZ3hTYTq91JlCp+wqdV/D9XufKbBZVuZ5S7LcwZg/nYtLeXY6On4CcGji4Uu0B8E7ymP+u7e+mUgCWQ==  
  70. D/xray    (28458): ********************************************  
  71. D/xray    (28458): id: levitator  
  72. D/xray    (28458): type: dynamic  
  73. D/xray    (28458): name: Levitator  
  74. D/xray    (28458): query_url:  
  75. D/xray    (28458): probe_url:  
  76. D/xray    (28458): result_url: /xray/levitator/result  
  77. D/xray    (28458): static_payload:  
  78. D/xray    (28458): dynamic_slot: 03  
  79. D/xray    (28458): dynamic_payload: /xray/static/liblevitator_v1.so  
  80. D/xray    (28458): dynamic_signature: NNAPZiBOcZ6O1lPRVcjNzNpeLMvoVUnP1j9PFr/1cG00fju7lqJEKBcGtqgiz+  
  81. 4/hF8w0xKndvJ4NSq1ResiukET7vt6tuY/n1nT6FxrE+e/+06JhFMkX5S+BrOV5hMMqsXzzWc9oE+DFhOFxkcDt6R9HeZQePaa5w  
  82. YnpMSsQHD7EZ6qzCen6PrHm+0q5F0xelmiahx3njSGP2eg8TbKl6zhvzhW4SIaz8h9ZxRqBZHH43aWiXbc/nnttjABfvyvLle3fO  
  83. JxFaYFp84bOW36bXF33fkDoLegmlSQv3sWnaugefcPsWIzgvH3O3/iLxJtrzXdGf4zZbzekV2sFY028w==  
  84. D/xray    (28458): ********************************************  
  85. D/xray    (28458): id: exploid  
  86. D/xray    (28458): type: dynamic  
  87. D/xray    (28458): name: Exploid  
  88. D/xray    (28458): query_url:  
  89. D/xray    (28458): probe_url:  
  90. D/xray    (28458): result_url: /xray/exploid/result  
  91. D/xray    (28458): static_payload:  
  92. D/xray    (28458): dynamic_slot: 04  
  93. D/xray    (28458): dynamic_payload: /xray/static/libexploid_v1.so  
  94. D/xray    (28458): dynamic_signature: nBNyRJ0n3y6LSFM7SysnaYl58LKL0PYvgsukRWa+Q2QSr+0IWDgSidUSlMtG8p  
  95. KnsTTuEKcCxw4xmTGAyZVH/do5/hCwa2hWnJ+4IwLtc5hwZDVTCjPYypOeXV287gq79cbM/zIthy0VAkoBW6bYTYfGgqvNBOq/cE  
  96. u0HgWkgSeCnD6ML9svZUhXGmva8z71mTucvoMBkPs3Ft8eLmxumZjuB+kni01jhQD9N7u6jfPLbQmZUqxT47a9bSoFYJlVNQKL0U  
  97. /xPGWuXHGhnZs/K55s2A3r2aB6vNHXCV3C16tDm5KL0aSS+zU3TuBFTUQzRoVjZwDjJpdd4KRzPGOGpg==  
  98. D/xray    (28458): ********************************************  
  99. D/xray    (28458): id: wunderbar  
  100. D/xray    (28458): type: dynamic  
  101. D/xray    (28458): name: Wunderbar  
  102. D/xray    (28458): query_url:  
  103. D/xray    (28458): probe_url:  
  104. D/xray    (28458): result_url: /xray/wunderbar/result  
  105. D/xray    (28458): static_payload:  
  106. D/xray    (28458): dynamic_slot: 05  
  107. D/xray    (28458): dynamic_payload: /xray/static/libwunderbar_v1.so  
  108. D/xray    (28458): dynamic_signature: wqSKs7FCjCaFWqBixxV5IMW/qMBN+zSUpxix52Jw1mmjdbLOc0o6gevlRBuGN8  
  109. txKdrCD7dBUkGkMuaAd8VpHxcWBSlmiYB8kh3j9gEluVwz3HK8i+bdOGfSnlswHdDg/aQlu+DezhyS7ajfiDELJ2xaBPapzgCRCU  
  110. dGcu7RyJ2tUCWdvmBgvEyIsMhGrIUuVVklc8puJYLD3+2MVWy+BgFhGPDEpxujl/NNl0kVPVpQHngY1/hkrA3svDnpUyzeqAKqEZ  
  111. r7IF0e8B+I8LAS9P/ZejwM4vde/cLFs6ttfvtcYqFX+H0dqarDmDf11f6gaGnjxFMEXOAlBhqMJqN1vQ==  
  112. D/xray    (28458): ********************************************  
  113. D/xray    (28458): *********************************************  

2、根据返回的不同漏洞类型,做如下处理,部分漏洞需要上传文件到服务器,通过服务器反汇编和特征匹配来确定是否存在漏洞。部分漏洞需要下载用于检测漏洞的可执行文件,然后运行以判断是否存在漏洞。


(1)上传发生漏洞文件的检测方式

[html]  view plain copy
  1. D/xray    (28792): static: reading payload: /system/bin/vold  
  2. D/xray    (28792): static: hashing payload: /system/bin/vold  
  3. D/xray    (28792): static: gzip'ing payload  
  4. D/xray    (28792): static: base64'ing payload  
  5. D/xray    (28792): static: length of payload: 55892  
  6. D/xray    (28792): static: length of gzip'ed payload: 31193  
  7. D/xray    (28792): static: length of base64'ed payload: 41592  
  8. D/xray    (28792): query: trying request 1 of 3  
 

(2)下载检测漏洞的可执行文件的检测方式


[html]  view plain copy
  1. D/xray    (28792): dynamic: trying request 1 of 3  
  2. D/xray    (28792): dynamic: rsa signature verification succeeded  
  3. D/xray    (28792): dynamic: wrote lib to: liblevitator_v1.so  
  4. D/xray    (28792): dynamic: loading jni from: /data/data/com.duosecurity.xray/files/liblevitator_v1.  
  5. so  
  6. D/xray    (28792): dynamic: loaded jni from: /data/data/com.duosecurity.xray/files/liblevitator_v1.s  
  7. o  
  8. D/xray    (28792): dynamic: got result from probe: patched|can't open pvrsrvkm device  
  9. D/xray    (28792): probe: trying request 1 of 3  

这篇关于X-Ray检测Android设备Root漏洞过程分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/863843

相关文章

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Conda国内镜像源及配置过程

《Conda国内镜像源及配置过程》文章介绍Conda镜像源使用方法,涵盖临时指定单个/多个源、永久配置及恢复默认设置,同时说明main(官方稳定)、free(逐渐弃用)、conda-forge(社区更... 目录一、Conda国内镜像源二、Conda临时使用镜像源指定单个源临时指定多个源创建环境时临时指定源