5 уровней ОС Android [🔗]:
- Ядро Linux (драйвера + управление)
- Нижний уровень;
- Поддерживает аппаратные драйвера (камера, микрофон, ...);
- Управляет процессами, памятью, питанием, ...;
- C/C++ Библиотеки (WebKit, libc, SSL, ...)
- Библиотеки для поддержки различных типов данных;
Surface Manager
→ управление дисплеем;SGL
/openGL
→ управление 3D / 2D графикой;Media Libraries
→ управление / хранение видео / аудио файлов;WebKit
→ поддержка веб-браузеров;FreeType
→ поддержка шрифтов;libc
→ поддержка библиотек C;
- Android Runtime: – среда выполнения Android-приложений [🔗];
- Фреймворки приложений (менеджеры, система представлений, контент-провайдеры)
- Activity Manager (Менеджер действий): – управляет жизненным циклом приложений;
- Notification Manager (Менеджер уведомлений): – позволяет приложениям отображать уведомления;
- Resource Manager (Менеджер ресурсов): – управляет доступом к строковым, графическим, ... ресурсам;
- Telephony Manager (Менеджер телефонии): – управляет всей функциональностью касаемо телефонии;
- Location Manager (Менеджер локации): – получает информацию о географической позиции устройства;
- Content Providers (Контент-провайдеры): – управляют передачей данных между приложениями;
- View System (Система представлений): – набор представлений с расширяемой функциональностью для составления внешнего вида приложений из компонентов;
- Приложения
Компоненты Android приложений [🔗]:
- Activities (Действия): – предоставляют интерфейс для взаимодействия пользователя с приложением;
- Services (Сервисы): – занимаются фоновыми операциями (прим: загрузка / скачивание данных, ...);
- Broadcast Receivers (Широковещательный приемник): – компонент, ответственный за внешние события (прим: перезагрузка, SMS, звонок, ...);
- Content Provider (Контент-провайдер): – предоставляет интерфейс для доступа к данным между приложениями;
[ Архитектура ОС Android 🔗 ]
Флоу создания приложений:
[Исходный код на Java] → Компилятор Java → [Байт-код Java.class
] → [.dex
] → Android Runtime → [.apk
]
Инструменты для разработки / отладки / анализа приложений:
- Java Runtime Environment (JRE): – виртуальная машина для исполнения Java-приложений;
- Android Software Development Kit (SDK): – инструменты для создания / компиляции / упаковки приложений;
- Android Debug Brigde (ADB): – утилита для работы над данными на устройстве под управлением ОС Android;
- Android Developer Tools (ADT) / Android Studio: – IDE с дополнительной функциональностью для разработки под ОС Android;
Два уровня модели безопасности:
• Уровень операционной системы = изолирует приложения друг от друга;
• Уровень приложения = позволяет разработчикам настраивать возможности приложений + открывать доступ к определённой функциональности;
- Изоляция приложений + Сокращение площади атаки
- Сепарация с помощью UID: – каждому приложению назначается определённый User ID, чтобы приложения могли взаимодействовать лишь с теми файлами, которыми владеет тот же User ID (помимо общих файлов);
- SELinux (
Android 4.3+
) [🔗]: – модуль ядра Linux для настройки политик контроля доступа для разных частей системы; - Scoped storage (
Android 10+
): – хранилище с заданной областью; механизм, позволяющий приложениям хранить чувствительные данные во внешнем хранилище; - Package visibility (
Android 11+
): – видимость пакетов; позволяла приложениям получать информацию о других установленных приложениях, была ограничена; - Secure computing mode (Seccomp,
Android 8.0+
): – технология Linux, файрволл между процессами пользовательского пространства и пространства ядра;
- Митигации
- Address Space Layout Randomization (ASLR)
- Аппаратный No eXecute (NX)
- Целостность устройства
- Дополнительные услуги по обеспечению безопасности
- Специальные обновления механизмов безопасности;
- Google Play Protect: – защита пользователей от вредоносных приложений;
- Safe Browsing / SafetyNet: – API для защиты пользователей от вредоносных веб-сайтов в Chrome;
- Запрет на установку приложений из сторонних источников;
ОС Android изолирует приложения / процессы [🔗]:
- Каждому приложению присваивается уникальный Linux User ID
- Каждое приложение запускается в собственном процессе
- Каждое приложение запускается в собственной среде выполнения DVM / ART
- У приложений нет доступа к приватным данным / памяти процесса других приложений
- Приложения общаются посредством Binder'ов – систем межпроцессной коммуникации / удаленного вызова методов; Для общения с другими процессами приложение отправляет сообщения Binder'у, который проверяет, имеет ли приложение нужные для общения права
uses-permission
внутриAndroidManifest.xml
5 уровней защиты, на которые делятся права Android:
normal
→ предоставляются по умолчанию во время установки приложения;dangerous
→ запрашиваются у пользователя, обеспечивают доступ к чувствительным данным / важным частям устройства;signature
→ предоставляются только тем приложениям, что подписаны таким же сертификатом разработчика, что и приложение, в котором объявлено право доступа;knownSigner
→ предоставляются только тем приложениям, что подписаны ранее разрешённым сертификатом разработчика;signatureOrSystem
→ предоставляются только тем приложениям, что подписаны таким же сертификатом разработчика, что и приложение, в котором объявлено право доступа, ЛИБО в том случае, если приложение подписано тем же сертификатом, что и образ системы Android / приложение расположено в специальной папке в системе;
Введена для обеспечения целостности приложений – валидная подпись теряется при декомпиляции + возможна лишь с использованием сертификата разработчика.
Схемы генерации подписи [🔗]:
- APK Signature Scheme v1: – основана на подписи JAR, защищает только некоторые части приложения;
- APK Signature Scheme v2 (
Android 7.0+
) - APK Signature Scheme v3 (
Android 9+
): – схожа с v2, но поддерживает ротацию ключа и добавляет информацию о поддерживаемых версиях SDK; - APK Signature Scheme v4 (
Android 11+
): – основана на дереве Меркла, вычисляемом по всем байтам APK;
- [ 📗 ] Гайд: Официальный гайд Android об архитектуре ОС Android 🔗
- [ 📗 ] Гайд: Официальный гайд Android об архитектуре приложений для ОС Android 🔗
- [ 📘 ] Документация: Официальная документация Android об Android Runtime 🔗
- [ 📘 ] Документация: Официальная документация Android о компонентах Android приложений 🔗
- [ 📗 ] Гайд: Модель безопасности Android от HackTricks 🔗
- [ 📗 ] Гайд: Компоненты Android приложений от HackTricks 🔗
- [ 📄 ] Статья: ‟Безопасность Android. От первой до одиннадцатой версии” от Евгения Зобнина в ][akep 🔗
- [ 📄 ] Статья: ‟Криптостойкие андроиды. Как работает полнодисковое и пофайловое шифрование в Android” от 84ckf1r3 в ][akep 🔗
- [ 📄 ] Статья: ‟Эволюция системы безопасности Android или как защищается система сегодня” от Анастасии Худояровой на Habr 🔗
- [ 📄 ] Статья: ‟Permissions в Android: как не допустить ошибок при разработке” от Mr_R1p (Swordfish Security) на Habr🔗
- [ 📘 ] Документация: Официальная документация о безопасности Android 🔗
- [ 📘 ] Документация: Официальные бюллетени о безопасности Android 🔗
- [ 📘 ] Документация: Официальная документация о песочнице Android 🔗
- [ 📘 ] Документация: Официальная документация о подписи Android приложений 🔗
- [ 📘 ] Документация: Официальная документация о шифровании в Android 🔗
- [ 📘 ] Документация: Официальная документация о SELinux в Android 🔗
- [ 📘 ] Документация: Официальная документация о Verified Boot в Android 🔗