asd asdsa f
Статьи

Улучшения безопасности в Jelly Bean

0 26

В Android-е версии 4.2 были сделаны следующие улучшения касательно безопасности:

  • Режим доступа по умолчанию для ContentProvider-ов
  • Изменена базовая реализация SecureRandom
  • Введена специальная аннотация для методов Java-объектов, которые можно вызывать из javascript внутри WebView
  • Протокол ADB был расширен введением возможности безопасной USB-отладки.

Режим доступа по умолчанию для ContentProvider

У ContentProvider-ов есть специальный атрибут exported, который можно указать в AndroidManifest.xml:

<provider android:name=”com.example.ReadOnlyDataContentProvider”
    android:authorities=”com.example”
    android:exported=”true”
    android:readPermission=”com.example.permission.READ_DATA” />

Если указать для его значения true, то компонент считается доступным для чтения из других приложений, установленных в системе и получивших разрешения READ_DATA.

Атрибут exported не является обязательным. До Jelly Bean 4.2, если не указать его явно, его значение считалось равным true.

Теперь ситуация изменилась, и по умолчанию в Jelly Bean 4.2 значение считается «not exported». Этот подход гораздо лучше, т.к. помогает избежать потенциально нежелательного доступа к данным.

Базовая реализация SecureRandom

Класс отвечает за создание безопасных в криптографическом смысле псевдослучайных чисел.

До Jelly Bean 4.2 реализация этого класса была основана на Bouncy Castle. При этом было замечено, данные, полученные с помощью такой реализации могли быть детерминированными, а значит, легко вычисляемыми.

Теперь реализация  SecureRandom основана на OpenSSL, и, в связи с этим надежность результатов работы класса значительно повышена.

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

Необходимость аннотировать методы интерфейса Javascript

Ранее, чтобы вызывать методы java-объектов из WebView (из кода javascript), можно было передать в addJavascriptInterface() метод и свободно его вызывать:

class JsObject {
    @JavascriptInterface
    public String toString() { return "injectedObject"; }
 }
 webView.addJavascriptInterface(new JsObject(), "injectedObject");
 webView.loadData("", "text/html", null);
 webView.loadUrl("javascript:alert(injectedObject.toString())");

Теперь, каждый метод класса, доступный из javascript обязан иметь аннотацию JavascriptInterface:

// Annotation is needed for SDK version 17 or above.
@JavascriptInterface
public void doSomething(String input) {
   . . .
}

Безопасная отладка на устройстве через USB

В Jelly Bean 4.2 только авторизованные хост-компьютеры могут запускать отладку по ADB. При первой попытке запустить отладку на устройстве появляется сообщение с предложением авторизовать компьютер.

Это нововведение является расширением протокола ADB. Для разработчиков переход на обновленную версию ADB должен пройти незаметно.

Расширение доступно с версии 4.2.2.

Следите за новостями и задавайте вопросы в комментариях!

About the author / 

admin