Статьи

Руководство для разработчиков по опасным разрешениям для Android-приложений

Операционная система Android — это открытая платформа на базе Linux, интегрированная в мобильные устройства, умные часы, планшеты и даже телевизоры и автомобили. Возможность создавать приложения на множестве устройств поднимает проблему безопасности, которая, на мой взгляд, является самой большой проблемой Android.

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

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

Проблема безопасности

Android использует разрешения для фильтрации возможностей приложения, и пользователь сам принимает решение о том, принимать ли разрешения приложения после установки. Проблема в том, что пользователи, как правило, не читают разрешения и принимают их бездумно. Это может привести к целому ряду проблем безопасности, от передачи конфиденциальной информации в операционную систему Android и, что еще хуже, к изменениям в ядре.

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

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

Android Манифест

Самые опасные приложения разрешений

Чтобы судить, какие разрешения принимать, каждый пользователь должен помнить о функции установленных приложений. Например, «Почему игра требует разрешения для моих контактов или запрашивает разрешение на отправку SMS-сообщений?». Вам не нужно отправлять смс в игре. Такие разрешения имеют тенденцию быть опасными и приводить к утечке личной информации пользователя.

Разрешения, которые вы можете пересмотреть

1. Root-разрешение

Пользователь root является системным администратором и контролирует всю систему без ограничений. По умолчанию пользователь Android не имеет доступа к корневым свойствам, поскольку неопытные пользователи могут нанести серьезный ущерб своей операционной системе. Root-привилегии получают с помощью процесса, называемого «Rooting Android-устройство». Нет никаких ограничений в том, что может сделать вредоносное приложение, когда оно получит это разрешение от пользователя root.

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

try {

    String[] reboot = new String[] { "su", "-c", "reboot" };
    //-c will cause the next argument to be treated as a command

    Process process = Runtime.getRuntime().exec(reboot);

    process.waitFor();  //wait for the native process to finish executing.

      } catch (Exception e) {

    Toast.makeText(getApplicationContext()," Device not rooted.\n Could not reboot...",Toast.LENGTH_SHORT).show();

    }

С помощью команды «su» приложение будет работать с привилегиями SUPER USER и, если устройство рутировано, оно перезагрузится.

Перезагрузка устройства

Когда код запускается на некорневом устройстве, появится всплывающее сообщение.

суперпользователя

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

 <uses-permission android:name="android.permission.ACCESS_SUPERUSER"></permission>

2. Чтение / запись личных данных разрешений

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

 <uses-permission android:name="android.permission.READ_CALENDAR"></uses-permission>
  <uses-permission android:name="android.permission.WRITE_CALENDAR"></uses-permission>
  <uses-permission android:name="android.permission.READ_CALL_LOG"></uses-permission>
  <uses-permission android:name="android.permission.WRITE_CALL_LOG"></uses-permission>
  <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
  <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>

3. Финансовые разрешения

Некоторые разрешения могут стоить пользователям денег, если они невольно предоставляются. Наиболее важными для приложений для мобильных телефонов являются разрешения SMS / MMS и разрешения вызовов. Они могут отправлять SMS в фоновом режиме и звонить на телефонные номера, даже не заходя в приложение Dialer. Эти разрешения могут позволить приложению читать SMS и MMS в фоновом режиме, незаметно для пользователя.

Разрешения, необходимые для работы с SMS, MMS и вызовами:

 <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>

Разрешение используется для отправки SMS и MMS сообщений.

 <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

Разрешение используется для инициирования телефонного звонка.

Вот простой пример того, как отправить SMS на указанный номер.

 String message = "Hello Android fans! ";
  String number = "xxxxxxxxxxxx";
  //it is preferable to use a complete international number

  SmsManager.getDefault().sendTextMessage(number, null, message, null, null);

Помните, что этот код будет работать, только если это разрешение включено в файл манифеста.

 <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>

4. Разрешение на местоположение

Разрешения на местоположение позволяют приложению получать доступ к местоположению пользователя в любое время:
Доступ к грубому местоположению : приложения могут получить доступ к приблизительному местоположению, полученному из вышек сотовой связи и Wi-Fi.
Доступ к точному местоположению : приложения могут получить доступ к точному местоположению из таких источников, как GPS, вышки сотовой связи и Wi-Fi.

Разрешения, необходимые для работы с местоположением:

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

Для доступа к приблизительному местоположению.

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

Чтобы получить доступ к точному местоположению.

Вот как узнать точное местоположение устройства Android:

 public class MainActivity extends Activity implements LocationListener {

     private LocationManager locationManager;

     @Override
     protected void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

         locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                 3000, 10, this);

     }


  @Override
     public void onLocationChanged(Location location) {

         String myLocation ="Location changed...\n\nYou are located at: " + "\nLatitude: " + location.getLatitude()
                 + "\nLongitude: " + location.getLongitude();

         Toast.makeText(getApplicationContext(), myLocation, Toast.LENGTH_LONG).show();
     }

     @Override
     public void onProviderDisabled(String provider) {

         Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
         startActivity(intent);
         Toast.makeText(getApplicationContext(), "Gps is turned off... ",
                 Toast.LENGTH_SHORT).show();
     }

     @Override
     public void onProviderEnabled(String provider) {

         Toast.makeText(getApplicationContext(), "Gps is turned on... ",
                 Toast.LENGTH_SHORT).show();
     }

     @Override
     public void onStatusChanged(String provider, int status, Bundle extras) {

     }

  }

Для запуска этого кода вы должны включить это разрешение для доступа к точному местоположению:

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

Класс java MainActivityLocationListener

В методе onCreate()requestLocationUpdates()onLocationChanged()

Метод onProviderDisabled()

Расположение приложения

5. Аудио и видео разрешения

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

Разрешения, требуемые в файле манифеста:

 <uses-permission android:name="android.permission.CAMERA"></uses-permission>
  <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"></uses-permission>
  <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"></uses-permission>
  <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>

6. Установка пакета

Они могут устанавливать дополнительные пакеты на телефон без ведома пользователя. Пользователь не должен принимать их, потому что приложение имеет разрешение на это.

 <permission android:name="android.permission.INSTALL_PACKAGES"></permission>

7. Убить фоновые процессы

Это позволяет приложению вызывать killBackgroundProcesses(String)

 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"></uses-permission>

Что такое Google дальше?

В прошлом месяце Google анонсировал Android M во время Google I / O 2015 . В Android M есть много нововведений, включая новый механизм прав доступа к приложениям. Разрешения будут запрашиваться при первой попытке пользователя использовать функцию, а не в точке установки. Сделать разработчика и пользовательский опыт намного лучше.