Недокументирана функция на Android позволява на произволно приложение да получи root достъп в разрешителна среда на SELinux. Прочетете, за да научите повече!
В света на модифицирането на Android хората са склонни да смятат root достъпа за крайъгълен камък на всички неща. Тя позволява на потребителите да поемат пълен контрол над своите устройства и да добавят функции, които не винаги са налични в стандартната конфигурация. Но както се казва — „с голямата сила идва и голяма отговорност“ — не е разумно да заобикаляте модела за сигурност на Android, освен ако не знаете в какво се забърквате. За ветерани Android ентусиасти в нашите форуми, вероятно сте наясно с потенциала за съществуване на задни вратички на вашето устройство и по-вероятно е да използвате доверен мод с активиран root върху най-новата версия на Android с най-новата защита лепенки. Като каза това, може би познавате няколко души, които не се интересуват какви корекции на root инсталират, стига да изглеждат работещи за тях. Ето защо все още можете да намерите камион с модове, които работят само когато SELinux е настроен на permissive, което от своя страна оставя потребителите изключително податливи на заплахи за сигурността.
Какво е SELinux
SELinux, или Linux с повишена сигурност, е модул за сигурност на ядрото на Linux, специално проектиран за достъп и управление на политики за сигурност. Първоначално въведен в Android 4.3 Jelly Bean и зададен на неговия режим на прилагане по подразбиране след Android 4.4 KitKat, SELinux помага за налагането на права за контрол на достъпа и се опитва да предотврати ескалацията на привилегии атаки. Накратко, SELinux действа като пречка за неоторизиран контрол над вашето устройство, като например приложение или уязвимост, целящи злонамерен достъп до root. Задаването на SELinux на "Enforcing" по подразбиране е един от ключовите начини, по които нормалните потребители са защитени от подобни атаки.
Защо Permissive SELinux не се препоръчва
За да повторим, типичният начин за постигане на root достъп на устройство с Android не е задължително да променя състоянието на SELinux. Преместването на режима на SELinux от „Enforcing“ на „Permissive“ умишлено деактивира една от ключовите функции за сигурност на устройството, поради което потребителят трябва изрично да разреши това да се случи, като инсталира специализирано персонализирано ядро или модифицира параметрите на съществуващото изображение за зареждане. Лошо кодирана модификация, на която липсва подходяща SELinux политика, обикновено принуждава крайните потребители да преминат към разрешителен SELinux и по същество разширява повърхността на атаката. Точно това е разработчикът vvb2060 демонстрира, когато те публикува доказателство за концептуален метод за ескалация на привилегии където единственото изискване за получаване на контрол е разрешителният SELinux.
Влезте в Magica
Потребителят да получи пълен root достъп на собственото си устройство, работещо с Android 10 (или по-нова версия) с SELinux, настроен на permissive, е шокиращо лесно направете: Всичко, което трябва да направите, е да натиснете install и "Magica" автоматично ще получи root достъп в услуга и ще инсталира Magisk в зареждането изображение. Това е нещо много по-широко като обхват от просто настройване на вашето устройство. Според XDA Senior Recognized Developer и Magisk supporter topjohnwu, всяко произволно приложение, включително злонамерен софтуер, може да руутне за постоянно вашето устройство без вашето съгласие и разрешение чрез използване на PoC.
Ако се чудите на техническо ниво какво експлоатира Magica, topjohnwu обясни следното в публикация в Reddit:
„Когато SELinux е разрешителен по време на зареждане, zygote ще разбере това и ще деактивира филтрите за syscall на seccomp. Това основно неограничава кои системни извиквания са разрешени в процеси на трети страни.
В Android 10+ има нова „недокументирана“ функция, наречена „App Zygote“, където на приложения на трети страни е разрешено да създават своя собствена Zygote за „Изолирани услуги“ (също почти недокументирана). Както „App Zygote“, така и „Isolated Services“ са специални функции, предназначени за Chrome/Webview*. Процесите на App Zygote се изпълняват със специални разрешения и с деактивиран seccomp може да извика setuid 0 и да ескалира своите привилегии и да получи root достъп.
Все още е някак ограничително в сравнение с това, което предоставят нормалните root решения (напр. Magisk), но много мерки за сигурност в Android ще бъдат напълно премахнати, когато UID=0. Например, достатъчно е да се използва за корекция на изображения за зареждане, което означава, че може да се използва за инжектиране на зловреден софтуер, като например модифициран Magisk, за да му помогне да получи „истински“ root права.
Актуализация: какво може да направи самият UID=0? В рамката на Android почти всички услуги имат сляпа зелена светлина, когато UID на искащия процес е 0. Това означава, че този root процес е в състояние да манипулира тонове неща, използвайки специфични API за Android (напр. ActivityManager)"
*Според разработчика aviraxp, тези две функции са по-общо предназначени „за споделяне на ресурси и памет между множество изолирани процеси“.
Заключение
Имайки предвид непоправимата вреда, която може да бъде нанесена на потребители, насочени към злонамерен софтуер в разрешителна среда на SELinux, силно препоръчваме на всички да продължат да я прилагат, освен ако не е абсолютно необходимо. Въпреки че просто имаме късмет да имаме доказателство за концептуален експлойт, нямаме представа колко автори на зловреден софтуер вече знаят за този път на атака. В крайна сметка жертвата ще продължи да не забелязва компрометираното състояние на своето устройство, ако не го направи станете свидетели на активното използване на експлойта, което не е трудно да се постигне за измамно приложение, което има постоянен root достъп.