簡體   English   中英

如何在Android中安全加載本機庫?

[英]How to load native library securely in Android?

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

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

依靠調用系統來幫助定位事物(通過System.loadLibrary方法)可能導致系統提供一個不打算由應用程序加載的文件。 如果攻擊者可以將文件放在搜索范圍內的位置,則攻擊者可以將任意代碼注入應用程序並執行它。

如果指定了確切的路徑,則可以通過文件權限等方式保護加載的文件。

問題是:我們如何指定NDK庫的完整路徑,使得此路徑對每個Android版本/設備都有效。

System.loadLibrary是一個易於使用的高級方法:據我所知,它搜索應用程序的lib文件夾(在Android文件系統上),它對應於Eclipse項目的libs文件夾。

這意味着,為了通過使用System.loadLibrary加載錯誤的庫來搞亂您的應用程序,攻擊者必須能夠覆蓋此lib文件夾中的自己的庫,或者添加具有相同名稱的庫。這個lib文件夾在某種程度上。 我完全不知道這是否可能(我希望並且猜不到!),但假設它是,這意味着lib文件夾不能被認為是安全的。

這意味着為了保護您的應用程序免受此類攻擊,您需要將庫文件放在其他位置,這樣您就有了自己的邏輯,可以在某個地方將磁盤庫文件寫入磁盤。 在這種情況下,在這個邏輯的某個地方,你可以掌控你的libs的絕對路徑。

擁有libs的路徑,您可以使用System.load添加您的庫,它將獲取庫的完整路徑作為參數加載。

簡而言之,有兩種選擇:

  • lib文件夾是可攻擊的,你不能把你的庫放在那里,所以你有自己的邏輯來存儲它們,你可以使用System.load加載它們
  • 或者lib文件夾確實是安全的,然后就沒有攻擊它的風險:你可以使用更標准的System.loadLibrary

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM