ndroid е една от най-бързо развиващите се операционни системи през последното десетилетие. Нейната популярност надхвърли всички очаквания, които имаха специалистите при първа й поява. Само за няколко години Google и целият екип от разработчици успяха да наложат своята система на пазара на няколко категории потребителска електроника. Днес виждаме как Android се разпространява не само в нашия джоб и раница под формата на смартфони и таблети, но вече навлиза и в нашите автомобили и часовници.
Успехът на тази система до голяма степен се дължи и на нейната стабилна платформа, базирана върху голяма част от ядрото и технологиите на Linux и други проекти с отворен код. За защита на данните и предотвратяване на хакерски атаки, Android работи с няколко различни механизма едновременно. В настоящата статия ще разкрия подробно как точно функционират те.
Възможности на системата
Организацията на операционната система Android се основава върху 6 основни структури: рамка (framework) на операционната система, приложения, собствени библиотеки, основни програми, HAL слоя и ядрото Linux.
Основните градивни части на платформата са хардуерът (устройството), операционната система и Dalvik. За да се обясни по-добре концепцията, нека разгледаме по-подробно всеки един компонент от рамката на Android.
1. Приложения
Разработчиците ги делят на два основни вида – предварително инсталирани и потребителски.
Предварително инсталираните програми включват не само основните приложения на системата Android, както и тези, които производителят е заложил да бъдат инсталирани на предлаганите устройства. Предварително инсталирани са и всички библиотеки и системи, осигуряващи достъп до платформата на Google Play за управление и допълнително инсталиране на други програми чрез екосистемата на Android.
Потребителските приложения са всички програми и услуги, които се инсталират от потребителите. Това включва не само свалени от официалното хранилище Google Play, но и инсталирани отделно от него чрез други методи, включително и т.нар. „sideloading” – теглене на APK файл от друг иточник и неговото инсталиране ръчно.
2. Собствени библиотеки
Включват се всички собствени библиотеки, които осигуряват функционалността на основните приложения на системата. В тази категория влизат и шрифтовете, кодеците и графични системи.
3. Рамка на Android
В нея се разполагат услугите за уведомления, възможности за интеграция на съдържание в приложенията и операционната система, както и телефония.
4. Основни програми
Те включват Dalvik виртуалната машина, изпълняваща приложенията и програмите в реално време, както и основните библиотеки, които осигуряват правилната ѝ работа.
5. HAL слой
Съкратено от Hardware Abstraction Layer, това е пакет от програми и системни процеси, отговарящи за работата със сензорите и хардуерните компоненти на устройството. HAL управлява и позволява достъпа до камерата, графиката, възможностите за въвеждане на данни чрез сензорен екран или друго устройство, както и следи за правилна интерпретация на сигналите към системата.
6. Linux ядро
Ядрото е сърцето на операционната система, като в неговата модулна структура се вграждат всички необходими драйвери и се настройват основните системи. Ядрото управлява и процесите, отговарящи за енергийните профили.
На практика уязвимости, вируси, злонамерен софтуер и други проблеми в сигрността могат да възникнат най-често в две основни области – операционната система Android, приложенията и Dalvik.
Системи за сигурност при Android
При Android всяко приложение се изпълнява чрез виртуалната машина Dalvik и се осигуряват в самостоятелен процес, изолирани от други приложения и/или системи услуги, освен ако не се осигурят нужните привилегии. Поради тази причина много често вирусите се разпространяват чрез фалшиви приложения или експлоатират слабости в операционната система, водещи до ескалация на привилегиите. Системата е устроена по сложен начин, а разработчиците са приложили сложен модел за сигурност, който служи като рамка при нейното постоянно развитие. Основните стъпки в създаването на сигурна среда е следването на следните точки при разработката на Android:
- Отговорен дизайн – всяка една функция и услуга, която се предлага от операционната система се разглежда и одобрява от експерти по кибер сигурност.
- Провеждане на тестове за уязвимости – по време на разработката на Android и свързаните компоненти с операционната система се провеждат тестове за уязвимости в специализирани лаборатории. По този начин възникналите проблеми се поправят още преди да бъдат пуснати предварителните версии.
- Проверка от общността на разработчици – всеки един разработчик може сам ръчно да провери изходния код на системата чрез достъп до публичното хранилище. Това осигурява отворен достъп и прозрачност на работата върху Android.
- Отговор при заплахи – въпреки всички заложени механизми, проблеми в сигурността винаги се случват. Затова и работи специален екип, който се занимава с откриването, проследяването и поправянето на уязвимости, когато е засегната операционната система. При поява на легитимен проблем в сигурността на Android се формира специален екип, който в рамките на часове създава необходимата организация за актуализирането на системния код и поправяне на уязвимостта
Мерките за сигурност се създават, за да се осигурят трите основни ресурса: потребителските данни, системните ресурси и мрежата и изолация на приложенията за осигуряване на сигурна среда за изпълнение на команди.
В сърцето на Android е ядрото Linux
Най-основното във всяка операционна система е ядрото, а при Android се използва една от най-добрите разработки в областта – Linux. Android не само използва утвърдените политики на разработчиците на Linux, но и осигурява сигурен комуникационен канал между приложенията, основните програми и ядрото. Тази функция за сигурност най-явно се вижда при използването на т.нар. „пясъчник“ – изолираната среда на приложенията, изпълняваща всяка една програма в отделен процес и среда, така че да се ограничи максимално взаимодействието между процесите. Това не позволява на злонамерен софтуер да се разпространи в другите програми, освен ако не е упълномощен със съответните привилегии от потребителите. При поява на проблем със сигурността тези мерки предотвратяват също и системата и хардуера на устройството.
Пясъчникът на ниво ядро използва стандартни механизми, познати от системите UNIX – потребителски и групови идентификатори, права за достъп до файлове (разделени по трите основни атрибути – четене, писане, изпълнение) и други. При някои други операционни системи грешките в паметта могат да доведат до разбиване на целия модел на сигурност, поради липсата на подобна изолация. При Android това се избягва, защото под риск влиза само определен процес, а той е изолиран от останалата система.
Ядрото управлява хардуера на устройството и служи като посредник между процесите (операционната система, програмите и приложенията) и самото устройство. Фундаментът на Android се поддържа от цялата общност на разработчици на Linux, което е достатъчна гаранция за стабилна и сигурна работа.
Предимство е неговата модулна природа, която позволява на разработчиците да интегрират и премахват различни функции и да добавят нови възможности само чрез прекомпилирането му. Това улеснява значително поддръжката и разработката на по-нови версии на Android за съответното устройство.
Linux системите са създадени, за да бъдат многопотребителски. Това е в основата и на принципа за сигурност, който се следва от разработчиците. На практика това създава една гарантирана среда за всеки един потребител на устройството. Използването на Linux в Android дава възможност за защита и на личните данни – Потребител 1 не може да чете файловете на Потребител 2. Той също така не може да харчи от заделените ресурси на Потребител 2, включително процесорно време, памет и специфични функции. Това важи и когато системата се използва от няколко потребители едновременно.
Системният дял и безопасният режим са основни механизми, които Linux системите притежават. Системният дял съдържа ядрото и най-основните библиотеки и програми, използвани за стартиране на Android. Този дял е с права на достъп само за четене и изпълнение при пускането на устройство. Безопасният режим на работа позволява изпълнението само на най-основните програми и се използва за диагностика при някакъв проблем. В този режим не се допуска в работната среда всякакви програми и приложения от трети страни.
Android използва Security-Enhanced Linux (SELinux) за прецизен контрол на достъпа на приложенията. Това е системен модул в ядрото, който въвежда задължителен контрол на достъпа по подобие на изискванията на американското министерство на отбраната (US DOD). Много експерти по сигурност смятат, че тези политики са едни от най-сигурните за използване в съвременните операционни системи.
Android работи и с множество системи за криптография, осигуряващи сигурна комуникация. В самото ядро е вградена поддръжката за всички основни стандарти, като AES, RSA, DSA и SHA. Добавена е и поддръжка за сигурни протоколи, като SSL и HTTPS, а от Android 4.0 се въвежда и KeyChain. Това е метод за съхранение на сертификати и частни ключове в специализирано хранилище.
По подразбиране Android системата позволява само на ядрото и малък набор от основни програми да работят с целия набор от права за достъп, писане и изпълнение на файлове и ресурси.
Въпреки всичко, Android не пречи на потребителите да придобият root достъп до системата чрез различни методи. Това сериозно може да навреди на сигурността на системата, затова и не се препоръчва. Практика е производителите на устройства да заключват системите, за да осигурят по-сигурна среда за своите клиенти. Разработчици и напреднали потребителите обаче могат свободно да придобият root достъп до своите устройства, изпълнявайки специфични инструкции. Опасността се крие във възможността да се навреди на някои от основните програми, или ядрото, чрез изпълнение на злонамерен код или въвеждане на вирус.
Чрез осигуряване на пълен достъп до системата е възможно и инсталиране на алтернативни операционни системи и модификации на Android. Използвайки тази възможност, потребителите могат наистина да поемат контрол над устройствата, които притежават. На практика Android се превръща не само в операционна система, но и в платформа, даваща свобода по отношение на инсталирания софтуер.
С пускането на Android 3.0 Google въведе възможност за пълно криптиране на файловата система. То се извършва директно от модул в ядрото с шифъра AES-128 и контрол на сумата с SHA-256. Изгражда се частен ключ, произхождащ от паролата на потребителя. Чрез използването на този вид криптиране се предотвратява неоторизаният достъп до записаните данни без паролата на потребителя, която активира ключа за декриптиране на системата. Разработчиците са внедрили и механизми, които защитават срещу опитите за отгатване (т.нар. „rainbow tables” – опити за разбиване на пароли).
Сигурност при приложенията
Отворената платформа на Android дава възможност да се изпълняват приложения чрез виртуалната машина Dalvik (която интерпретира езика Java), но операционната система позволява и изпълнението на native code. В по-голямата част от случаите разработчиците използват Java за своите приложения, съобразявайки се и с пълната гама от възможности за работа с Linux ядрото и неговата модулна структура.
Всяко едно приложение се „опакова“ в инсталационен файл с разширение .apk, съдържащо следните компоненти:
- AndroidManifest.xml – контролен файл, който описва компонентите в приложенията. Той съдържа и списък с всички нужни права за достъп до системни компоненти, за да работи правилно приложението.
- Activities – колекция от код, необходим за изпълнението на всяка отделна задача в самата програма. Често към този компонент спада и потребителският интерфейс.
- Services – тук се включват услугите, които работят във фонов режим. В зависимост от сложността на цялостното приложение, програмистите могат да решат да използват собствен процес или основния на приложението. Пример е плейър за слушане на музика. При изход от основното приложение (чрез затваряне му), музиката продължава да звучи, защото има активен процес във фонов режим.
- Broadcast Receiver – това са специални елементи, които служат за следене на променливи и сигнали от операционната система или други приложения. Те служат за взаимодействие с различни услуги или следят за определено поведение от потребителя. Много често дадена промяна води до действие в приложението. Например, при спад на батерията се извикват съобщения или се прекратява работата на дадена задача, за да се спести енергия.
Всички приложения се изпълняват в изолирана среда едно от друго. При нужда от взаимодействие между едно приложение с друго или с операционната система, се изискват и специални права за достъп. Системата управлява основните процеси на Android, като с този ход не се допуска намеса от страна на потребителя в системните приложения.
Въведен е и допълнителен механизъм за защита на някои компоненти, до които се изисква специално разрешение – камерата, данни за местоположение (използване на GPS и A-GPS), Bluetooth комуникация, функциите за телефонно обаждане, SMS/MMS и работа с Wi-Fi и мобилни данни. Тези ресурси работят директно с операционната система, която се явява посредник между тях и приложенията, изискващи достъп до ресурсите.
При инсталиране на приложение от хранилището Google Play потребителите изрично трябва да разрешат достъпа чрез системата до тях. В настройките на всяко Android устройство могат да се проверят точно какви права за достъп са зададени за всяко едно приложение. Допълнителна възможност е включването и изключването на ресурсите от самите потребители, което е глобално и не може да се манипулира от инсталираните приложения.
Android проверява всеки един иск от дадено приложение или услуга за достъп до информация, ресурс или входно устройство. Само и единствено при изрично дадени права от потребителя се дава достъп. Разработчиците са премахнали и възможността за директен достъп до SIM картата на устройството от страна на приложенията, за да не е възможна манипулацията с тях.
Всички приложения, работещи под платформата Android, се подписват от разработчиците. Софтуер, който не е разписан, автоматично се отхвърля при инсталация от Google Play или инсталатора на системата. Това се прави с цел потвърждението на идентичността на създателя.
От Android 4.2 съществува и възможност потребителите да поискат потвърждение от специалисти по отношение на инсталираните приложения. Този процес служи за предпазване от злонамерен софтуер или ограничаване на някои функции, които биха довели до риск в сигурността.
Управлеието на дигитално съдържание с платени авторски права се урежда чрез специализирана система, наречена DRM Manager. Тя поддържа много различни алгоритми, които работят с най-различни видове защитено съдържание. Системата се въвежда чрез два архитектурни слоя на Android:
- Приложен интерфейс, който работи с приложенията и се изпълнява чрез виртуалната машина Dalvik.
- Самостоятелен DRM Manager, който управлява и декриптира съдържанието.
Актуализации
Google работи със специален екип по сигурността, който разработва, определя и поправя всички функции и възможности на Android, свързани със сигурността на платформата. Този екип самостоятелно провежда проучвания и експерименти, за да идентифицира узявимости и други проблеми. Трети страни могат да докладват за проблеми чрез специализирана система. Други източници на информация за уязвимости могат да бъдат доклади, академични разработки от специалисти, съобщения от разработчици на софтуер с отворен код, доклади от производители и други.
Обновленията по сигурност винаги се предоставят с приоритет и незабавно при наличие и поправка на критична уязвимост. В системата е установена политика по класифициране на проблемите със сигурността в четири степени – критична, висока, средна и ниска степен на опасност. Всяка една категория е определена чрез заплахите, които представлява. Характеристиките са следните:
1. Критични – представляват заплахи от най-високо естество.
* Изпълнение на код на привилегировано ниво с допълнителни права за достъп до ресурси на системата.
* Цялостно компроментирана система – устройствата трябва да бъдат изцяло преинсталирани за изчистване на заплахата.
* Отдалечени директни атаки, предизвикващи отказ на важни системи.
2. Високо ниво на опасност
* Изпълнение на код на привилегировано ниво с допълнителни права за достъп до ресурси на системата.
* Локален достъп до системни и сертификационни права или възможности без разрешение.
* Локалени директни атаки, предизвикващи отказ на важни системи.
* Отдалечен временни атаки, предизвикващи отказ на важни системи.
3. Средно ниво на опасност
* Достъп до ограничени права за достъп до ресурси без разрешение.
* Отдалечен временни атаки, предизвикващи отказ на важни системи.
4. Ниско ниво на опасност
* Достъп права за досъп без разрешение.
* Местни временни атаки, предизвикващи отказ на важни системи.
Местни и отдалечени заплахи и атаки
Отдалечена атака, или бъг, може да компроментира сигурността на устройството. Това включва дупки в сигурността, предизвикани от злонамерен софтуер чрез скрипт в уеб страница, отваряне на прикачен файл с вирус или връзка към мрежа, съдържаща капани.
Тези видове атаки могат да се осъществят чрез отдалечена атака от страна на престъпник в близост до жертвата или чрез някакъв канал. Местните атаки изискват инсталиране на компроментирано или опасно приложение. Към тази класификация спадат и физическите атаки, при които престъпници използват физически методи за взлом в системата.