2015-08-03 3 views
0

Так что я заметил, что нет варианта startService(), который принимает разрешение. Разве это не опасно?startService() с разрешениями

Я представил себе следующий простой сценарий атаки:

  1. APPA называет StartService с помощью явного намерения на «myApp.serviceClass». Этот класс сервиса должен быть экспортирован в AppB, который должен быть установлен отдельно.
  2. Злоумышленник может создать вредоносную версию AppB. Последний будет экспортировать «myApp.serviceClass» в качестве службы, а затем захватить данные, которые включены в намерение, когда AppA вызывает startService().

Я что-то упустил? Я ожидал какой-то вариант startService(), который требует, чтобы целевое приложение обладало определенным разрешением, как это делает sendBroadcast (намерение, разрешение). Как вы могли бы предотвратить такое вмешательство?

Спасибо!

+0

Если appa и appb принадлежат одному издателю, общий идентификатор пользователя разрешит это. – njzk2

+0

@ njzk2: Во-первых, я не вижу, как это решит это. Во-вторых, 'sharedUserId' серьезно рискован для обычных разработчиков SDK, как только он установлен, вы никогда не сможете его изменить. – CommonsWare

+0

@ njzk2: Интересно, не могли бы вы объяснить это дальше, пожалуйста? – Knight

ответ

0

Я что-то не хватает?

Да. Разрешение не решает проблему, так как злоумышленник просто заявляет, что они имеют соответствующее разрешение. На Android 4.4 и ниже, if the attacker is installed first, the user might not even know about this. Или пользователь может вслепую согласиться с разрешением.

Как бы вы предотвратили такое вмешательство?

На клиента лежит ответственность за подтверждение того, что услуга является надлежащей реализацией. Одним из решений является проверка ключа подписи, используемого для подписи файла APK службы, сравнивая его с известным значением. Для этой цели у моей библиотеки CWAC-Security есть a SignatureUtils class. Этот pair of sample projects иллюстрирует подход.

+0

Благодарим вас за быстрый ответ. Но все же, если вы установите уровень защиты подписи, атакующее приложение, по крайней мере, должно быть подписано с тем же сертификатом; предполагая, что правильное приложение установлено первым. – Knight

+0

@Knight: Правильно. Но сценарий, в котором оба приложения принадлежат одному разработчику, а «minSdkVersion» - 21 или выше, является нишей на данный момент.Обратите внимание, что широковещательные рассылки являются единственной из четырех составных моделей IPC, где запросчик может использовать разрешение для проверки ответчика. Нет 'startActivity()', который принимает разрешение, и не существует зеркального набора методов на ContentResolver, которые принимают разрешение на работу с поставщиком. Все эти случаи требуют проверки подписи или аналогичных подходов. – CommonsWare

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