2013-11-20 2 views
2

Мне интересно узнать о проблемах безопасности между System.loadLibrary и System.load в Android.Как правильно загрузить загрузочную библиотеку в Android?

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

Опираясь на систему вызова, чтобы помочь найти вещи (через метод System.loadLibrary) может привести к системе обеспечения файл, который не был предназначен для загрузки приложением. Если злоумышленник может поместить файл в место, попадающее под поиск, тогда злоумышленник может ввести произвольный код в приложение и выполнить его.

Если указать точный путь, у вас есть возможность защитить загруженный файл через такие вещи, как права доступа к файлам и т.д.

Возникает вопрос: как мы можем указать полный путь к библиотеке НКА в таком что этот путь действителен для каждой версии Android/устройства.

ответ

3

System.loadLibrary является методом высокого уровня предназначен для простоты использования: насколько я знаю, он просматривает lib папки вашего приложения (на Android файловой системы), что соответствует libs папке вашего проекта Eclipse.

Это означает, что для того, чтобы испортить с вашим приложением, загрузив неправильную библиотеку с помощью System.loadLibrary, злоумышленник должен иметь возможность либо отменить свою собственную LIBS в этой lib папки или добавить библиотеку с тем же имя в этой папке lib в некотором роде. Я не знаю, возможно ли это (надеюсь и не думаю!), Но, полагая, что это означает, что папка lib не может считаться безопасной.

Это означает, что для защиты вашего приложения от такой атаки вы захотите разместить файлы в библиотеке где-то в другом месте и, следовательно, у вас есть собственная логика для записи файлов библиотеки на диске. В таком случае, где-то в этой логике, у вас есть ваша рука на абсолютном пути ваших библиотек.

Пройдя путь к вашим библиотекам, вы можете добавить свою библиотеку, используя System.load, которая берет полный путь к библиотеке для загрузки в качестве аргумента.

Короче говоря, 2 варианта:

  • либо папка lib является уязвимый, вы не можете поместить свои библиотеки там, так что у вас есть своя логика для их хранения, и вы можете загрузить их с помощью System.load
  • или папка lib действительно безопасны, и тогда нет риска атаки на нее: вы можете использовать более стандартный System.loadLibrary.

Надеюсь, это поможет!

+0

Как мы можем указать полный путь для библиотеки NDK таким образом, чтобы этот путь действителен для каждой версии Android/устройства? –

+0

Отредактировал свой ответ для более подробной информации. – mbrenon

+1

Не совсем - я подозреваю, что System.loadLibrary() будет искать некоторые системные каталоги в дополнение к папке lib приложения. Тем не менее, любой, кто может атаковать их, может, предположительно, атаковать папку lib (или приложение запускается на сильно сломанном устройстве, у которого есть записываемые системные каталоги). Вы вряд ли найдете местоположение более безопасным, чем папка lib вашего собственного приложения, тем более что эта папка не может быть доступна для записи вашим приложением, но где-нибудь еще, что вы могли бы поставить, это должно быть. –

Смежные вопросы