gpt4 book ai didi

java - 如何在 Android 中安全地加载 native 库?

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:55 27 4
gpt4 key购买 nike

我想知道 Android 中 System.loadLibrary 和 System.load 之间的安全隐患。

static {
System.loadLibrary("mylib");
}

依赖调用系统来帮助定位事物(通过 System.loadLibrary 方法)可能会导致系统提供一个本不打算由应用程序加载的文件。如果攻击者可以将文件放在搜索范围内的位置,则攻击者可以将任意代码注入(inject)应用程序并执行它。

如果指定了确切的路径,则可以通过文件权限等方式保护加载的文件。

问题是:我们如何指定 NDK 库的完整路径,使该路径对每个 Android 版本/设备都有效。

最佳答案

System.loadLibrary 是一种为便于使用而设计的高级方法:据我所知,它会搜索应用程序的 lib 文件夹(在Android 文件系统),它对应于 Eclipse 项目的 libs 文件夹。

这意味着,为了通过使用 System.loadLibrary 加载错误的库来搞乱您的应用程序,攻击者必须能够在这个 中覆盖您自己的库lib 文件夹,或者通过某种方式在这个lib 文件夹中添加一个同名的库。我完全不知道这是否可能(我希望并且猜测不会!),但假设是这样,这意味着 lib 文件夹不能被认为是安全的。

这意味着为了保护您的应用免受此类攻击,您需要将您的库文件放在其他地方,因此您有自己的逻辑将库文件写入磁盘上的某个地方。在这种情况下,在此逻辑中的某个位置,您可以掌握库的绝对路径。

有了您的库的路径,您可以使用 System.load 添加您的库它采用库的完整路径作为参数加载。

简而言之,有 2 个选项:

  • 要么 lib 文件夹是可攻击的,你不能把你的库放在那里,所以你有自己的存储它们的逻辑,你可以使用 System.load
  • 或者lib文件夹确实是安全的,也就没有被攻击的风险:你可以使用更标准的System.loadLibrary

希望这对您有所帮助!

关于java - 如何在 Android 中安全地加载 native 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20096780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com