„Android Zygote“ procesas: raktas į paleidimą, našumą ir saugumą

  • „Zygote“ yra pagrindinis procesas, iš kurio kyla visi „Android“ programų procesai, pagreitinantis paleidimą ir optimizuojantis atminties naudojimą.
  • „Android“ efektyvumas ir saugumas labai priklauso nuo procesų izoliacijos ir „Zygote“ apsaugos nuo kenkėjiškų grėsmių ar modifikacijų.
  • Tokios grėsmės kaip Trojos arklys „Triada“ išnaudojo „Zygote“ pažeidžiamumus, kad užkrėstų kelis procesus, o tai rodo, kaip svarbu palaikyti atnaujintą ir saugią sistemą.
  • Su „Zygote“ „Android“ leidžia greitai paleisti programas, bendrinti atminties išteklius ir užtikrinti sklandžią bei saugią naudotojo patirtį.

zigota

„Android“ ekosistema sukurta remiantis esminiais vidiniais procesais ir struktūromis, kurios užtikrina jos veikimą, našumą ir saugumą. Vienas iš svarbiausių, bet galbūt mažiausiai žinomų už kūrėjų ir sistemų ekspertų ribų yra vadinamasis Zigotos atauga. Apie ką tiksliai tai? Zigotos procesas, kaip jis paveikia „Android“ vidinę architektūrą, kokia jo reikšmė sistemai ir programoms ir kodėl jis buvo dėmesio centre tiek našumo optimizavimo, tiek pažangių saugumo grėsmių, tokių kaip „Triada“ Trojos arklys, srityse? Šiame straipsnyje rasite išsamią, techninę ir praktinę šio pagrindinio „Android“ elemento ir visų susijusių aspektų, atsiradusių nuo jo atsiradimo, apžvalgą.

Jei kada susimąstėte Kodėl programėlės telefone atsidaro taip greitai arba kas vyksta po gaubtu? Įjungus „Android“ įrenginį, atsakymas nuves jus į sistemos širdį: „Zygote“ procesą ir tai, kaip „Android“ tvarko paleidimą, atmintį, saugumą ir programų vykdymą. Šio proceso supratimas apima ne tik sistemų technologijų supratimą, bet ir galimų saugumo rizikų, su kuriomis šiandien susiduriame vartotojai, supratimą bei iššūkius, į kuriuos kūrėjai ir gamintojai turi atsižvelgti, norėdami užtikrinti greitus, saugius ir atsparius įrenginius nuo sudėtingų atakų.

Kas tiksliai yra „Zygote“ procesas „Android“ sistemoje?

„Android“ slengo terminologijoje Zigotos atauga Tai yra bazinis šablonas (arba tėvinis), iš kurio kuriami visi operacinės sistemos programų procesai. Pagrindinė jo funkcija – pagreitinti ir optimizuoti naujų procesų kūrimą atidarius programą, naudojant labai efektyvią techniką, vadinamą šakės, kuris kilęs iš Linux/Unix pasaulio. Pats pavadinimas „zigota“ nurodo jos vaidmenį: tai pradinė ląstelė, iš kurios kiekvieną kartą sistemoje paleidžiant programą atsiranda įvairūs antriniai procesai.

„Zygote“ procesas nėra bet koks „Android“ procesas. Tai specialus procesas, kuris prasideda labai anksti, kai įrenginys paleidžiamas, iškart po to, kai „Linux“ branduolys (operacinės sistemos branduolys) baigė krautis ir „init“ procesas (pirmasis, kurį paleidžia branduolys) paruošė pagrindinę aplinką. Zigotą išskiria init kaip viena pirmųjų sistemos paslaugų ir tuo pačiu įkelia į atmintį (RAM) visus knygynuose iš „Java“ ir bendri ištekliai kuris bus būtinas, kad „Android“ programos veiktų. Tai apima sistemos bibliotekas, sistemas ir kitas esmines priklausomybes, kurias bendrina dauguma programų.

Pagrindinis šio požiūrio privalumas yra tas, kad nebūtina krauti nuo nulio visi šie komponentai kiekvieną kartą atidarant programėlę. Vietoj to, kai vartotojas paleidžia naują programėlę, „Android“ tiesiog atjungia „Zygote“ procesą, sukurdama naują antrinį procesą, kuriame yra viskas iš anksto įkelta, išskyrus naujos programėlės kodą ir išteklius. Tai taupo paleidimo laiką, sumažina išteklių sunaudojimą ir pagerina naudotojo patirtį greičio ir sklandumo požiūriu.

„Android“ paleidimo kelionė: zigota kontekste

paleisti „Android“

Norint suprasti tikslią zigotos užimamą vietą, būtina suprasti jos fazes. paleisti „Android“. Sistemos paleidimas susideda iš kelių pagrindinių žingsnių: Įkrovos ROM (aparatinės įrangos inicijavimas), Bootloader (įkrovos įkrovos programa, paleidžianti „Linux“ branduolį), Branduolys (įkelia pagrindines sistemos funkcijas ir tvarkykles), Init (šakninis procesas, kuris pradeda esminę konfigūraciją ir paslaugas), o tada Zigotos atauga. Būtent tada prasideda „Android Runtime“ (ART) arba, senesnėse versijose, „Dalvik“ virtualios mašinos magija.

Zigota nėra vienintelis: po paleidimo ir prijungus failų sistemas, procesas init Jis paleidžia keletą svarbių paslaugų ir demonų (foninių procesų), tokių kaip „servicemanager“ (sistemos paslaugų tvarkyklė), „logd“ (žurnalų tvarkyklė), „vold“ (saugyklos tomų tvarkyklė) ir aktyvuoja „Binder“ tarpprocesinio ryšio (IPC) infrastruktūrą. Tačiau „Zygote“ vis dar yra atsakinga už „Android“ virtualios mašinos paleidimą ir aplinkos paruošimą vartotojo procesams bei kitiems aukšto lygio komponentams.

Kai „Zygote“ bus paleista, kita jos užduotis bus paleisti procesą Sistemos serveris, dar vienas esminis operacinės sistemos ramstis. Šis procesas, kuris yra tiesioginis „Zygote“ „vaikas“, paleidžia ir palaiko visą pagrindinių paslaugų rinkinį –Veiklos tvarkyklė, paketų tvarkyklė, langų tvarkyklė ir daugelis kitų – kurie sudaro bet kurio „Android“ telefono kasdienybę. Ir jei to būtų maža, „Zygote“ taip pat bus atspirties taškas kiekvieną kartą, kai reikės paleisti naują vartotojo programą, užtikrindamas, kad kiekvienas antrinis procesas paveldėtų nuoseklią ir saugią aplinką su visomis bibliotekomis ir karkasais, paruoštais naudoti.

Šakės mechanizmas: efektyvumas ir saugumas

Zigotos veikimo paslaptis slypi technikoje šakės. Kai reikia paleisti naują programėlę, „Zygote“ procesas nesukuria naujos aplinkos nuo nulio, o atlieka šakutė iš savęs, generuodamas antrinį procesą, kuriame jau yra visi į atmintį įkelti bendrinami komponentai. Tai turi keletą privalumų:

  • Taupymo laikas: Vaiko procesas jau turi bendras bibliotekas RAM atmintyje, todėl nereikia jų perkrauti ar iš naujo kompiliuoti baitkodų, o tai pagreitina programų paleidimą.
  • Sumažėjęs išteklių suvartojimas: Dalijant atmintį tarp procesų (pvz., naudojant mmapping), bendras išteklių naudojimas yra mažesnis ir išvengiama nereikalingų dubliavimų.
  • Nuoseklumas ir izoliacija: Kiekvienas „Zygote“ paveldėtas antrinis procesas prasideda nuosekliai iš anksto apibrėžtoje, tačiau izoliuotoje aplinkoje, nes „Android“ smėlio dėžės technologija sumažina atminties sugadinimo riziką ir pagerina bendrą stabilumą.

Verta paminėti, kad taikant šį metodą svarbiausia yra saugumas. „Android“ programos griežti leidimai, UID ir vartotojų grupės kiekvienai programai skirtingi, užtikrinant, kad vienos programos duomenys ir ištekliai negalėtų būti tiesiogiai pasiekiami kitos programos, išskyrus aiškiai apibrėžtas ir valdomas išimtis. Kai „Zygote“ „atšakoja“ naują programos procesą, ji jam priskiria Unikalus UID ir vykdo jį savo kontroliuojamoje aplinkoje. Taigi, nors bibliotekos ir sistemos yra bendrinamos atmintyje, likę svarbiausi ištekliai lieka apsaugoti.

Valdoma ir bendrinama atmintis: „Zygote“ ir „Android Runtime“ vaidmuo

Atminties valdymas „Android“ sistemoje yra glaudžiai susijęs su „Zygote“ dizainu. Tiek „Android Runtime“ (ART), tiek senoji „Dalvik“ virtualioji mašina atmintį valdo valdomu būdu, naudodama šiukšlių surinkimo ir kartos metodus, kad automatiškai paskirstytų ir atlaisvintų išteklius pagal sistemos ir programų poreikius. Kai programa atsišakoja iš „Zygote“, ji paveldi ne tik bibliotekas, bet ir iš anksto nustatytą atminties kaupą, kuris padeda kontroliuoti suvartojimą ir optimizuoti RAM puslapių bendrinimą.

„Android“ naudoja tokius mechanizmus kaip bendroji atmintis („ashmem“, „gralloc“) ir statinis failų susiejimas (pvz., .odex, .so arba sistemos išteklių failus), kad programų procesai nedubliuotų būtinos informacijos atmintyje. Zigota čia vaidina lemiamą vaidmenį, nes ji yra atsakinga už šių bendrų išteklių inicijavimą ir įkėlimą prieš sukuriant pirmąjį antrinį procesą. Tokiu būdu bet kuri vėliau paleista programa gali pasinaudoti šia architektūra nepatiriant įkrovimo ar laukimo papildomų išlaidų.

Vidinė architektūra: kaip viskas jungiasi „Android“ sistemoje

programos exe failas

„Android“ sistema sukurta sluoksniais, kiekvienas sluoksnis atlieka pagrindines funkcijas ir bendrauja su kitais per aiškiai apibrėžtas sąsajas. Pačioje bazėje yra „Linux“ branduolys, atsakingas už procesų, vartotojų, atminties ir fizinių įrenginių (tvarkyklių) valdymą. Virš jo, Aparatinės įrangos abstrakcijos sluoksnis (HAL) suteikia vienodą sąsają su aparatine įranga, leidžiančią skirtingiems įrenginiams paleisti „Android“, per daug nesijaudinant dėl ​​kiekvieno lusto ar jutiklio techninių skirtumų.

Kitas sluoksnis sudarytas iš rinkinio gimtosios bibliotekos (daug jų yra C/C++), tarp kurių išsiskiria libc, SSL, SQLite ir pati „Android“ virtualioji mašina. Visa tai anksti įkelia „Zygote“ ir sudaro „standartinę aplinką“ programoms. Aukščiau veikia „Android Runtime“ (ART) arba, senesnėse sistemose, „Dalvik“ virtuali mašina (DVM), kuri yra atsakinga už programų baitų kodo (.dex formatu) vykdymą, naudojant tiek „just-in-time“ (JIT), tiek „ante-of-time“ (AOT) kompiliavimo strategijas.

Virš vykdymo laiko randame sistemos paslaugų sistema, pasiekiama iš „Java“ / „Kotlin“ programų per aukšto lygio API. Čia yra veiklos tvarkyklė, paketų tvarkyklė, turinio teikėjas, langų tvarkyklė ir kitos svarbios paslaugos, kurių dauguma paleidžiamos iš „Zygote“ sukurto sistemos serverio proceso. Galiausiai, viršutinį sluoksnį užima vartotojo programos, kurios veikia savo sistemos valdomame procese ir niekada neveikia tiesiogiai branduolyje.

Programos gyvavimo ciklas ir zigotos vaidmuo

Bet kurios „Android“ programos gyvavimo ciklas yra glaudžiai susijęs su tuo, kaip „Zygote“ tvarko procesų atidarymą, vykdymą ir uždarymą. Kai vartotojas paleidžia programėlę, sistema nustato, ar procesas jau vykdo kurį nors tos programėlės komponentą. Jei ne, paprašykite „Zygote“ atlikti šakutę ir sukurti naują procesą. Kai tai bus padaryta, sistema įkels konkrečiai programai skirtą kodą ir išteklius, pradės pagrindinę veiklą ir įprastą gyvavimo ciklą („onCreate“, „onResume“ ir kt.).

Jei vartotojas perjungia programas arba jas uždaro, procesas paprastai kurį laiką lieka talpykloje, kad būtų galima greičiau paleisti iš naujo, tačiau sistema gali jį bet kada nutraukti, jei aptinka poreikį atlaisvinti išteklius. Dėl „Zygote“ paveldo, programos paleidimas iš naujo paprastai yra labai greitas net ir iš šaltų būsenų, nes reikia iš naujo inicijuoti tik konkretų kodą.

Kalbant apie izoliaciją, kiekviena programa veikia su savo UID ir jos teises riboja „Android“ saugos sistema. Tai neleidžia vienai programai gauti neteisėtos prieigos prie kitos programos duomenų ar išteklių, išskyrus kontroliuojamas situacijas (pvz., naudojant „SharedUserId“ arba aiškius leidimus manifeste). Apsaugą sustiprina „Linux“ branduolys ir saugumo politikos, tokios kaip „SELinux“. Norint išsamiau suprasti, kaip visa „Android“ sistemos architektūra jungiasi, gali būti naudinga peržiūrėti „Android x86“ projektas.

„Android“ ir „Zygote“ saugumas: rizika ir priemonės

„Android“ saugumo architektūra pagrįsta keliais sluoksniais, iš kurių pagrindiniai elementai yra „Zygote“ ir „smėlio dėžės“ technologija. Kiekviena programa veikia savo smėlio dėžėje su vienu vartotoju, o sąveiką su sistema ar kitomis programomis kontroliuoja sistema, leidimų politikos ir UID/GID, apibrėžtų android_filesystem_config.h faile, naudojimas.

Tačiau tai, kad „Zygote“ yra visų programų šablonas, reiškia, kad bet koks šio proceso pažeidžiamumas ar manipuliavimas gali turėti itin rimtų saugumo pasekmių. Iš tiesų, zigotos procesas buvo kai kurių taikinys kenkėjiška programa sudėtingiausi „Android“ pasaulyje aptikti įrenginiai, tokie kaip Remix OS projektas.

Triados atvejis: kai kenkėjiška programa atakuoja zigotą

Kibernetinio saugumo srityje vieną iš labiausiai pagarsėjusių atakų, nukreiptų prieš zigotos procesą, įvykdė Trojos arklys. Triada. Ši „Kaspersky Lab“ atrasta kenkėjiška programa pažymėjo mobiliųjų grėsmių evoliucijos prieš ir po etapo, pasinaudodama savo prieiga prie sistemos, kad modifikuotų pačią „Zygote“ ir tokiu būdu įterptų savo kenkėjišką kodą. visuose paraiškų teikimo procesuose.

Triada išsiskyrė dėl kelių priežasčių:

  • Root teisių gavimas: Jis panaudojo kitus Trojos arklius, kad gautų root prieigą, pažeisdamas įprastus „Android“ saugumo apribojimus.
  • Zigotinės ataugos infekcija: Pakėlęs teises, jis modifikavo „Zygote“ atmintį, kad įdėtų kenkėjiškus modulius ir taptų visų antrinių procesų šablono dalimi. Taigi, visos nuo to momento išleistos programos paveldėjo kenkėjiškas funkcijas, todėl jos buvo praktiškai visur ir jas buvo labai sunku aptikti.
  • Modulinis ir nuolatinis funkcionalumas: „Triada“ buvo sukurta taip, kad būtų lanksti, atsisiųstų ir vykdytų modulius pagal poreikį, o pagrindinis tikslas – užgrobti finansines operacijas SMS žinutėmis, išgauti asmeninę informaciją, įdiegti kitas kenkėjiškas programas, paslėpti savo buvimą ir netgi išgyventi sistemos perkrovimą.
  • Pašalinimo sudėtingumas: Kadangi didelė dalis kodo buvo tik atmintyje (RAM), o ne diske, tradicinė antivirusinė programinė įranga jo praktiškai neaptiko ir jį buvo galima sunaikinti tik visiškai išvalius įrenginį.
Kas yra EFIDroid ir kaip jis veikia?
Susijęs straipsnis:
EFIDroid: kelių paleidžiamųjų „Android“ įrenginių naudojimas nekeičiant atkūrimo režimo