Безопасность Android. От первой до 11-й версии - «Новости» » Самоучитель CSS
Меню
Наши новости
Учебник CSS

Невозможно отучить людей изучать самые ненужные предметы.

Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3

Надо знать обо всем понемножку, но все о немногом.

Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы

Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)

Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода

Самоучитель CSS

Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5

Новости

Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости

Справочник CSS

Справочник от А до Я
HTML, CSS, JavaScript

Афоризмы

Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы

Видео Уроки


Видео уроки
Наш опрос



Наши новости

       
25-05-2020, 16:00
Безопасность Android. От первой до 11-й версии - «Новости»
Рейтинг:
Категория: Новости

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

Начало времен


Понять смысл и назначение защитных механизмов Android проще всего в ретроспективе. А именно — изучив, как была реализована защита (или ее отсутствие) в первых версиях ОС и как и зачем она менялась впоследствии.


Итак, Android 1.0 — платформа, выпущенная осенью 2008 года вместе со смартфоном HTC Dream (T-Mobile G1). Безопасность обеспечивается пятью ключевыми подсистемами.


1. PIN-код экрана блокировки для защиты от несанкционированного физического доступа.


2. Песочницы (изолированная среда исполнения) для приложений. Каждое приложение запускается от имени созданного специально для него пользователя Linux. Приложение имеет полный контроль над файлами своей песочницы (/data/data/РёРјСЏ.пакета), РЅРѕ РЅРµ может получить доступ Рє системным файлам Рё файлам РґСЂСѓРіРёС… приложений. Единственный СЃРїРѕСЃРѕР± покинуть песочницу — получить права root.


3. Каждое приложение обязано указывать список нужных для его работы полномочий в манифесте. Полномочия позволяют использовать те или иные системные API (доступ к камере, микрофону, сети и так далее). Хотя соблюдение полномочий контролируется на нескольких уровнях, включая ядро Linux, явно запрашивать их у пользователя не нужно; приложение автоматически получает все перечисленные в манифесте полномочия, и пользователю остается либо установить приложение, предоставив ему все полномочия, либо не устанавливать его вовсе.


Контроль доступа на основе полномочий не распространяется на карты памяти и USB-накопители. Они используют файловую систему FAT, которая не позволяет назначить права доступа к файлам. Любое приложение может читать содержимое всей карты памяти.


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


5. Язык Java и виртуальная машина обеспечивают защиту от многих типов атак, перед которыми уязвимы приложения на небезопасных языках, таких как C и C++. Переполнение буфера или повторное использование освобожденной памяти в Java невозможны в принципе.


В то же время значительная часть операционной системы, включая системные сервисы, виртуальную машину, мультимедийные библиотеки, систему рендеринга графики, а также все сетевые подсистемы, написана на тех самых небезопасных C и C++ и работает с правами root. Уязвимость в одном из этих компонентов может быть использована для получения полного контроля над ОС или выполнения DoS-атаки. HTC Dream был «взломан» благодаря тому, что сервис Telnet, предустановленный на смартфон, работал с правами root. Все, что нужно было сделать, — это найти способ его запустить, а затем к смартфону можно было подключиться по сети и получить шелл-доступ с правами суперпользователя.


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


Строго говоря, все эти API не были уязвимостями в прямом смысле слова. Наоборот, они открывали широкие возможности для программистов и, как следствие, пользователей. Но если в 2008-м эти возможности не создавали особых проблем, поскольку рынок смартфонов был ориентирован на энтузиастов и бизнесменов, то уже через несколько лет, когда смартфоны получили распространение среди всех групп населения, стало понятно, что приложения необходимо ограничивать в возможностях.


 

Полномочия


Есть два способа ограничить приложения в правах и не дать им влиять на систему и пользовательские данные:


  1. Урезать возможности всех приложений до минимума, как это было сделано в J2ME.

  2. Позволить пользователю контролировать доступные приложению возможности (путь iOS).

Android, несмотря на мощную систему разделения полномочий внутри ОС, не позволял ни того, ни другого. Первые намеки на систему гранулярного контроля полномочий появились только в Android 4.3 вместе со скрытым разделом настроек App Opps.


Скрытое меню App Ops в Android 4.3
Скрытое меню App Ops в Android 4.3

С помощью этих настроек пользователь мог отозвать у приложения любые доступные ему полномочия по отдельности. Однако назвать эту систему удобной и дружелюбной пользователю нельзя: управление разрешениями было чересчур гранулярным, приходилось ориентироваться среди десятков разрешений, смысл которых часто оставался непонятен. При этом отзыв любого разрешения мог привести (и часто приводил) к падению приложения, так как в Android просто не было API, который бы позволил программисту понять, имеет его приложение разрешение на выполнение того или иного действия или нет. В итоге систему App Ops удалили из Android уже в версии 4.4.2, и только в Android 6 ей на смену пришла существующая до сих пор система полномочий.


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


Побочным эффектом такого РїРѕРґС…РѕРґР° стала... бесполезность РЅРѕРІРѕР№ системы. Дело РІ том, что РѕРЅР° работала исключительно для приложений, собранных РїРѕРґ Android 6.0 Рё выше. Разработчик приложения РјРѕРі указать РІ правилах СЃР±РѕСЂРєРё директиву targetSdkVersion 22 (то есть Android 5.1), и его приложение продолжило бы получать все полномочия в автоматическом режиме.


Google была вынуждена реализовать систему именно таким образом, чтобы сохранить совместимость со старым софтом. По-настоящему система начала действовать только спустя два года, когда Google ввела требование минимального SDK в Google Play, то есть просто запретила публиковать приложения, собранные для устаревших версий ОС. Окончательно решили вопрос только в Android 10: стало возможно отзывать полномочия у софта, собранного для Android 5.1 и ниже.


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


Безопасность Android. От первой до 11-й версии - «Новости»
Одноразовые разрешения в Android 11

Ограничения


Система управления разрешениями — только часть решения проблемы. Вторая часть — запреты на использование опасных API. Можно долго спорить, стоит ли позволять сторонним приложениям получать IMEI телефона с помощью разрешений, или необходимо запретить делать это вовсе. Для Google, входящей в эпоху тотального помешательства на прайваси, ответ был очевиден.


Несмотря на то что компания и раньше вводила запреты на использование тех или иных API (можно вспомнить, например, запрет на включение режима полета и подтверждение отправки СМС на короткие номера в Android 4.2), активные боевые действия начались только в 2017 году.


Начиная с восьмой версии Android скрывает многие идентификаторы устройства от приложений и других устройств. Android ID (Settings.Secure.ANDROID_ID) — уникальный идентификатор Android теперь различен для каждого установленного приложения. Серийный номер устройства (android.os.Build.SERIAL) недоступен приложениям, собранным для Android 8 и выше. Содержимое переменной net.hostname пусто, Р° DHCP-клиент РЅРёРєРѕРіРґР° РЅРµ посылает хостнейм DHCP-серверу. Стали недоступны некоторые системные переменные, например ro.runtime.firstboot (время последней загрузки).


РЎ Android 9 приложения больше РЅРµ РјРѕРіСѓС‚ прочитать серийный номер устройства без полномочия READ_PHONE_STATE. В Android 10 появилось ограничение на доступ к IMEI и IMSI. Чтобы прочитать эту информацию, теперь требуется разрешение READ_PRIVILEGED_PHONE_STATE, недоступное сторонним приложениям.


Для получения MAC-адреса Bluetooth РІ Android 8 Рё выше требуется разрешение LOCAL_MAC_ADDRESS, а MAC-адрес Wi-Fi рандомизируется при проверке доступных сетей (чтобы избежать трекинга пользователей, например покупателей в торговых центрах).


В Android 9 Google пошла намного дальше и запретила использовать камеру, микрофон и любые сенсоры, пока приложение находится в фоне (оставив возможность использовать камеру и микрофон «видимым сервисам» — foreground service). В Android 10 к этим ограничениям добавился запрет на доступ к местоположению в фоне (теперь для этого нужно разрешение ACCESS_BACKGROUND_LOCATION) Рё запрет РЅР° чтение буфера обмена РІ фоне (нужно разрешение READ_CLIPBOARD_IN_BACKGROUND).


Еще одно важное нововведение Android 9 — полный запрет на использование HTTP без TLS (то есть без шифрования) для всех приложений, собранных для новой версии Android. Это ограничение тем не менее можно обойти, если указать в файле настроек безопасности сети (network_security_config.xml) СЃРїРёСЃРѕРє разрешенных доменов.


Android 10 ввел запрет РЅР° запуск активностей (РїРѕ сути — запуск приложений) фоновыми приложениями. Р?сключения сделаны для bound-сервисов, таких как Accessibility Рё сервисы автозаполнения. Приложения, использующие разрешение SYSTEM_ALERT_WINDOW, и приложения, получающие имя активности в системном PendingIntent, тоже могут запускать активности в фоне. Также приложения теперь не могут запускать бинарные файлы из собственного приватного каталога. Это уже привело к проблемам в работе популярного приложения Termux.


С Android 11 приложения больше не могут получить прямой доступ к карте памяти (внутренней или внешней) с помощью разрешений READ_EXTERNAL_STORAGE Рё WRITE_EXTERNAL_STORAGE. Вместо этого следует использовать либо личный каталог приложения внутри /sdcard/Android (он создается автоматически и не требует разрешений), либо Storage Access Framework, не допускающий доступ к данным других приложений.


Интересно, что Google ограничивает сторонние приложения не только средствами операционной системы. В конце 2018 года в Google Play появилось требование, гласящее, что все приложения, использующие разрешения на чтение СМС и журнала звонков, должны относиться к одному из разрешенных типов приложений и в обязательном порядке проходить ручную премодерацию. В результате из маркета удалили многие полезные инструменты, авторы которых просто не смогли обосновать перед Google необходимость использовать те или иные разрешения.


Долгое время Android имел славу медленной, небезопасной и в целом убогой ОС, предназначенной для тех, кто не смог накопить на iPhone. Но так ли это сейчас и был ли Android на самом деле так плох? В этой статье мы не будем касаться плавности работы интерфейса и возможностей ОС, но проследим за историей едва ли не самой больной части Android — системы безопасности. Начало времен Понять смысл и назначение защитных механизмов Android проще всего в ретроспективе. А именно — изучив, как была реализована защита (или ее отсутствие) в первых версиях ОС и как и зачем она менялась впоследствии. Итак, Android 1.0 — платформа, выпущенная осенью 2008 года вместе со смартфоном HTC Dream (T-Mobile G1). Безопасность обеспечивается пятью ключевыми подсистемами. 1. PIN-код экрана блокировки для защиты от несанкционированного физического доступа. 2. Песочницы (изолированная среда исполнения) для приложений. Каждое приложение запускается от имени созданного специально для него пользователя Linux. Приложение имеет полный контроль над файлами своей песочницы (/data/data/РёРјСЏ.пакета), РЅРѕ РЅРµ может получить доступ Рє системным файлам Рё файлам РґСЂСѓРіРёС… приложений. Единственный СЃРїРѕСЃРѕР± покинуть песочницу — получить права root. 3. Каждое приложение обязано указывать СЃРїРёСЃРѕРє нужных для его работы полномочий РІ манифесте. Полномочия позволяют использовать те или иные системные API (доступ Рє камере, микрофону, сети Рё так далее). Хотя соблюдение полномочий контролируется РЅР° нескольких СѓСЂРѕРІРЅСЏС…, включая СЏРґСЂРѕ Linux, СЏРІРЅРѕ запрашивать РёС… Сѓ пользователя РЅРµ нужно; приложение автоматически получает РІСЃРµ перечисленные РІ манифесте полномочия, Рё пользователю остается либо установить приложение, предоставив ему РІСЃРµ полномочия, либо РЅРµ устанавливать его РІРѕРІСЃРµ. Контроль доступа РЅР° РѕСЃРЅРѕРІРµ полномочий РЅРµ распространяется РЅР° карты памяти Рё USB-накопители. РћРЅРё используют файловую систему FAT, которая РЅРµ позволяет назначить права доступа Рє файлам. Любое приложение может читать содержимое всей карты памяти. 4. Приложения должны быть подписаны ключом разработчика. Р’Рѕ время установки РЅРѕРІРѕР№ версии приложения система сверяет цифровые РїРѕРґРїРёСЃРё старой Рё РЅРѕРІРѕР№ версий приложения Рё РЅРµ допускает установку, если РѕРЅРё РЅРµ совпадают. Такой РїРѕРґС…РѕРґ позволяет защитить пользователя РѕС‚ фишинга Рё кражи данных, РєРѕРіРґР° троян прикидывается легитимным приложением Рё после «обновления» получает доступ Рє файлам оригинального приложения. 5. Язык Java Рё виртуальная машина обеспечивают защиту РѕС‚ РјРЅРѕРіРёС… типов атак, перед которыми СѓСЏР·РІРёРјС‹ приложения РЅР° небезопасных языках, таких как C Рё C . Переполнение буфера или повторное использование освобожденной памяти РІ Java невозможны РІ принципе. Р’ то же время значительная часть операционной системы, включая системные сервисы, виртуальную машину, мультимедийные библиотеки, систему рендеринга графики, Р° также РІСЃРµ сетевые подсистемы, написана РЅР° тех самых небезопасных C Рё C Рё работает СЃ правами root. Уязвимость РІ РѕРґРЅРѕРј РёР· этих компонентов может быть использована для получения полного контроля над РћРЎ или выполнения DoS-атаки. HTC Dream был «взломан» благодаря тому, что сервис Telnet, предустановленный РЅР° смартфон, работал СЃ правами root. Р’СЃРµ, что нужно было сделать, — это найти СЃРїРѕСЃРѕР± его запустить, Р° затем Рє смартфону можно было подключиться РїРѕ сети Рё получить шелл-доступ СЃ правами суперпользователя. Если же говорить Рѕ стандартных приложениях, то РѕРЅРё хоть Рё РЅРµ имели прав root Рё работали РїРѕРґ защитой виртуальной машины РІ собственной песочнице, так или иначе обладали очень широкими возможностями, свойственными десктопным операционным системам. РџСЂРё наличии нужных прав стороннее приложение могло сделать очень РјРЅРѕРіРѕРµ: прочитать СЃРїРёСЃРєРё РЎРњРЎ Рё Р·РІРѕРЅРєРѕРІ, прочитать любые файлы РЅР° карте памяти, получить СЃРїРёСЃРѕРє установленных приложений, работать РІ фоне неограниченное время, выводить графику поверх РѕРєРѕРЅ РґСЂСѓРіРёС… приложений, получать информацию практически РѕР±Рѕ всех системных событиях (установка приложения, включение-выключение экрана, Р·РІРѕРЅРѕРє, подключение зарядного устройства Рё РјРЅРѕРіРѕРµ РґСЂСѓРіРѕРµ). Строго РіРѕРІРѕСЂСЏ, РІСЃРµ эти API РЅРµ были уязвимостями РІ РїСЂСЏРјРѕРј смысле слова. Наоборот, РѕРЅРё открывали широкие возможности для программистов Рё, как следствие, пользователей. РќРѕ если РІ 2008-Рј эти возможности РЅРµ создавали особых проблем, поскольку рынок смартфонов был ориентирован РЅР° энтузиастов Рё бизнесменов, то уже через несколько лет, РєРѕРіРґР° смартфоны получили распространение среди всех РіСЂСѓРїРї населения, стало понятно, что приложения необходимо ограничивать РІ возможностях. Полномочия Есть РґРІР° СЃРїРѕСЃРѕР±Р° ограничить приложения РІ правах Рё РЅРµ дать РёРј влиять РЅР° систему Рё пользовательские данные: Урезать возможности всех приложений РґРѕ РјРёРЅРёРјСѓРјР°, как это было сделано РІ J2ME. Позволить пользователю контролировать доступные приложению возможности (путь iOS). Android, несмотря РЅР° мощную систему разделения полномочий внутри РћРЎ, РЅРµ позволял РЅРё того, РЅРё РґСЂСѓРіРѕРіРѕ. Первые намеки РЅР° систему гранулярного контроля полномочий появились только РІ Android 4.3 вместе СЃРѕ скрытым разделом настроек App Opps. Скрытое меню App Ops РІ Android 4.3 РЎ помощью этих настроек пользователь РјРѕРі отозвать Сѓ приложения любые доступные ему полномочия РїРѕ отдельности. Однако назвать эту систему СѓРґРѕР±РЅРѕР№ Рё дружелюбной пользователю нельзя: управление разрешениями было чересчур гранулярным, приходилось ориентироваться среди десятков разрешений, смысл которых часто оставался непонятен. РџСЂРё этом отзыв любого разрешения РјРѕРі привести (Рё часто РїСЂРёРІРѕРґРёР») Рє падению приложения, так как РІ Android просто РЅРµ было API, который Р±С‹ позволил программисту понять, имеет его приложение разрешение РЅР° выполнение того или РёРЅРѕРіРѕ действия или нет. Р’ итоге систему App Ops удалили РёР· Android уже РІ версии 4.4.2, Рё только РІ Android 6 ей РЅР° смену пришла существующая РґРѕ СЃРёС… РїРѕСЂ система полномочий. Р’ этот раз инженеры Google пошли РґСЂСѓРіРёРј путем Рё объединили смежные полномочия, получив РІ итоге семь метаполномочий, которые РјРѕРіСѓС‚ быть запрошены РїСЂСЏРјРѕ РІРѕ время работы приложения. Р’ РѕСЃРЅРѕРІРµ системы лежал новый API, позволивший программистам проверять доступные приложению

Теги: CSS

Просмотров: 484
Комментариев: 0:   25-05-2020, 16:00
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

 
Еще новости по теме:



Другие новости по теме:
Комментарии для сайта Cackle