[英]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.