网站首页 > java教程 正文
NativeProtector:通过隔离和拦截第三方原生库来保护 Android 应用程序
?
第三方Android应用程序的大幅增加,让它们可以轻松下载和安装。但是,也会发生大量恶意应用程序,以泄露用户私人信息并执行危险操作。因此,防止隐私泄露并在Android应用程序中启用细粒度控制是必要的。
?
已经提出了许多方法来保护Android应用程序的安全性,但它们通常侧重于Java代码,因为Android应用程序通常是用Java语言编写的。事实上,Android 还提供了JNI(Java 原生接口)用于在应用中调用原生库,许多开发者倾向于使用第三方原生库来复用现有代码或执行 CPU 密集型任务(如图像过滤和视频编码)。但是,这些第三方原生库的安全性经常被忽略。
?
只有少数现有方法专注于 Android 中原生库的安全性。NativeGuard 是一个典型的框架,它使用进程隔离来沙箱原生应用程序库。它有两个主要优点。首先,NativeGuard 将原生库分离到另一个独立的应用,因此原生库无法完全访问整个应用地址空间,原生库与 Java 代码之间的交互是通过 Android 进程间通信 (IPC) 机制实现的。其次,生成的本机库应用程序不再被授予权限,因此无法执行危险操作。
?
但是,NativeGuard仍然存在一些限制。首先,由于没有向本机库应用程序授予任何权限,因此良性本机库在需要必要权限时会崩溃。其次,NativeGuard 缺乏对原生库的细粒度控制来管理它们的行为。
?
为了确保 Android 中原生库的安全性,我们提出了一种名为 NativeProtector 的实用方法。一方面,受 NativeGuard 的启发,我们使用进程隔离来防止原生库访问整个应用程序地址空间并限制原生库的权限。
?
另一方面,我们通过检测第三方原生库并拦截原生库调用来访问私有数据并执行危险的系统调用,从而对原生库进行细粒度控制。
?
具体而言,第三方本机库作为独立应用程序分开,因此本机库对 Java 代码的访问受到细粒度访问控制的限制。通过结合隔离和拦截,我们可以确保原生库的安全性,而不会使良性原生库崩溃。
?
同时,NativeProtector非常容易部署。它可以在没有 root 权限的情况下作为通用应用程序运行,因为 NativeProtector 静态检测目标应用程序。因此,不需要对 Android 框架进行任何修改。
?
通过结合隔离和拦截,我们提出了一种名为NativeProtector的实用方法,以保护Android应用程序免受恶意第三方本机库的侵害。
?
我们构建了 NativeProtector 的原型,将应用程序与原生库应用程序和 Java 代码分离,并检测原生库以执行细粒度访问控制。
?
我们已经在实际和手动构建的应用程序中评估了NativeProtector。结果表明,NativeProtector对安全性有效,兼容许多应用,性能开销也是可以接受的。
?
Java 原生接口与桌面Java程序类似,Android提供了Java本机接口(JNI)来定义Java代码和本机代码相互调用的框架。通常,开发人员在其应用程序中使用本机库进行代码重用、CPU 密集型任务或应用程序强化。
?
Android 提供了原生开发工具包 (NDK),允许开发人员使用 C 和 C++ 等原生语言实现部分应用。NDK 将原生源代码文件编译为共享库,这些库可以根据应用程序的 Java 代码请求动态加载。
?
我们已经用Java和C编程语言实现了NativeProtector的原型。每个Android应用程序都以名为APK(Android应用程序包)的包文件格式分发。APK文件包含一个名为AndroidManifest.xml的清单文件,dex字节码形式的应用程序代码,XML资源,其他资源以及作为独立Linux共享对象文件(.so)的本机库。为了支持任意应用程序,我们所做的一切都是在APK文件上。
?
我们已经介绍了NativeProtector的设计,实现和评估,这是一个用于调节Android应用程序中第三方原生库的系统。NativeProtector 将本机库和生成的挂钩库分离到另一个服务器应用,原始应用的其余部分作为客户端应用生成。
?
客户端应用在启动时绑定到服务器应用,所有本机函数调用都将替换为对服务器应用的 IPC。挂钩库在服务器应用中截获系统调用,以强制服务器应用中本机库的安全性。我们已经实现了NativeProtector的原型。我们的评估表明,NativeProtector 可以成功调节 Android 应用中的第三方原生库,并引入可接受的开销。
- 上一篇: Java安全编码军规(java安全编码规范)
- 下一篇: java安全编码指南之:线程安全规则
猜你喜欢
- 2024-11-10 面试Java多线程安全问题(面试java多线程安全问题答案)
- 2024-11-10 实战解析居安思危的Redis拓展—保护Redis,为Redis安全保驾护航
- 2024-11-10 Java线程安全(java线程安全是什么)
- 2024-11-10 JAVA应用程序集成控件JxBrowser v7.2来啦!允许自定义错误页面
- 2024-11-10 用了SpringSecurity后怎么全是403Forbidden了
- 2024-11-10 Java安全之初探weblogic T3协议漏洞
- 2024-11-10 快速云:如果自己的服务器受到攻击怎么办?
- 2024-11-10 如何在字节码层面实现方法拦截:探索 Java Agent 与 ASM 的魅力
- 2024-11-10 什么是Java线程安全?(java的线程安全是什么意思)
- 2024-11-10 【基本功】Java魔法类:Unsafe应用解析
你 发表评论:
欢迎- 最近发表
-
- pyinstaller打包python程序高级技巧
- 将python打包成exe的方式(python打包成exe的方法)
- Python打包:如何将 Flask 项目打包成exe程序
- py2exe实现python文件打包为.exe可执行程序(上篇)
- 如何将 Python 项目打包成 exe,另带卸载功能!
- Python打包成 exe,太大了该怎么解决?
- 可视化 Python 打包 exe,这个神器绝了!
- 案例详解pyinstaller将python程序打包为可执行文件exe
- Cocos 3.x 菜鸟一起玩:打包window程序
- 怎么把 Python + Flet 开发的程序,打包为 exe ?这个方法很简单!
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)