Kaip macOS Ventura tikrina aplikacijų saugumą?
Naujus „Mac“ naudotojus neretai glumina tas faktas, kad beveik unisonu tvirtinama, kad „macOS“ nereikalingos „antivirusinės“ aplikacijos. Kaip „macOS“ veikia apsaugos ir patikros mechanizmas?
Atidarant aplikaciją „macOS“ vyksta jos patikrą. Aplikaciją atidarant ne pirmą kartą, jos patikra kiek mažiau kompleksinė (tačiau ji vis tiek vyksta), tačiau atidarant aplikaciją kompiuteryje pirmą kartą ji praeina visą patikrų grandinę.
Kurį laiką naudojantys „Mac“ ir jame diegiantys aplikacijas, tikriausiai atkreipė dėmesį į tai, kad atidarant kai kurias naujas aplikacijas, jos tiesiog atidaromos, kitas — pasirodo įspėjimas, kad aplikacijas atsisiųsta iš interneto, o trečias apskritai pasiūloma mesti į šiukšliadėžę (taip dažniausiai nutinka atidarant nelegaliai modifikuotas aplikacijas).
Ankstesnėse „macOS“ versijose „Gatekeeper“ buvo gana atlaidus. Kai aplikacija buvo patikrinta pirmą kartą, daugeliu atvejų, ji būdavo paliekama ramybėje ir vėliau nebūdavo atliekama jokių nuodugnių patikrinimų. Programėlėms, kurios atsinaujino pačios, tai buvo palengvinimas, nes atnaujintojas galėjo jas lengvai keisti, nepasirašydamas aplikacijos dar kartą. Tačiau, tai leido aplikacijoje atlikti kenkėjiškas modifikacijas ir keistą situaciją taip, kad „XProtect“ kenkėjiško kodo požymių atnaujinimai nebūtų pritaikyti esamoms aplikacijoms. Visa tai pasikeitė su „macOS Ventura“ debiutu.
Panagrinėkim „macOS Ventura“ apsaugos mechanizmą.
LaunchServices
Tarkim, savo /Applications aplanke turiu patalpinęs aplikaciją pavadinimu Pyragaičiai.app. Jos nė karto nebuvau atidaręs savo kompiuteryje todėl ji patalpinta karantine. Atidarau aplikaciją. Čia iš karto įsijungia „LaunchServices“ (paleidimo servisai):
1.016423 LaunchServices LAUNCH: Opening file:///Applications/Pyragaičiai.app/ with 0 items on behalf of 411 role=e flags=8000001 (null)
, kur procesas 411 yra „Finder“.
Tada įrašai praneša, kad programos rinkinys turi būti nustatytas kaip patikimas, kad jį būtų galima paleisti, o „LaunchServices“ ieško bet kokių papildinių ir įskiepių. Tada aplikacijai „LaunchServices“ duomenų bazėje sukuriamas paketo įrašas, išanalizavus jos Info.plist failą, o tai užbaigus aplikacija užregistruojama kaip patikima. Tada „LaunchServices“ perduoda aplikacijos paleidimą „RunningBoard“, kuri tvarko ją ir jos išteklius.
AMFI (Apple Mobile File Integrity)
Toliau patikrų estafetę perima AMFI, kuri tęsia aplikacijos saugumo patikrą. 1.009653 amfid Entering OSX path for /Applications/Pyragaičiai.app/Contents/MacOS/Pyragaičiai
ir iškviečia „Security“ patikrinti patikimumą ir praneša Requested evaluation with only soft restricted entitlements, but no soft restricted entitlements found
.
Gatekeeper
Kadangi aplikacija praėjo prieš tai buvusias patikras, reikalo imasi „vartų sargas“ — syspolicyd iškviečia „Gatekeeper“.
1.0164465 syspolicyd GK process assessment: /Applications/Pyragaičiai.app/Contents/MacOS/Pyragaičiai >-- (/sbin/launchd, /Applications/Pyragaičiai.app/Contents/MacOS/Pyragaičiai)
1.0164488 syspolicyd Gatekeeper assessment rooted at: /Applications/Pyragaičiai.app
1.0164535 syspolicyd starting work for scan for code: PST: (path: /Applications/Pyragaičiai.app), (team: (null)), (id: (null)), (bundle_id: (null))
XProtect
Iškviečiamas „XProtect“ atlikti tiesioginį kenkėjiško kodo ir „dylib“ nuskaitymą.
1.0191387 Xprotect is performing a direct malware and dylib scan: /Applications/Pyragaičiai.app
Reikia turėti omenyje, kad „XProtect“ nėra fone veikiantis „XProtect Remediator“, o seniai sukurta paslauga, kuri pagal pareikalavimą atlieka patikras, kad aptiktų kenkėjišką kodą, naudojant kompiliuotus Yara parašus. „Ventura“ šie nuskaitymai atliekami kiekvieną kartą, kai turi būti paleista aplikacija arba vykdomasis kodas, nors ankstesnėse „macOS“ versijose jie buvo atliekami tik aplikaciją paleidžiant pirmą kartą, kai buvo nustatyta karantino žyma.
Notarizacija
Sekantis patikros žingsnis (turint omenyje, kad visi ankstesni neaptiko nieko įtartino) yra notarizacijos patikra, kuri vykdoma per „iCloud“ (https://api.apple-cloudkit.com/database/1/com.apple.gk.ticket-delivery/production/public/records/lookup) per CFNetwork naudojant TLS.
Kiekvienas aplikacijų „Mac“ kūrėjas, nepriklausomai nuo to ar savo aplikacijas platina per „Mac App Store“ ar iš savo svetainės turi aplikaciją pateikti „Apple“ patikrai ir jei ją praeina — aplikacijos duomenys įvedami į duomenų bazę, su kuria ir vyksta notarizacinis patikrinimas.
1.0191983 cloudkit record fetch: https: //api.apple-cloudkit.com/database/1/com.apple.gk.ticket-delivery/production/public/records/lookup, 2/2/f843c9b4ade871ca9b08f314d8bcd121e3e4b17a
1.0192001 cloudkit request cache info: PFT-com.apple.gk.ticket-delivery-production-2/2/f843c9b4ade871ca9b08f314d8bcd121e3e4b17a, max-age=300
Greičiausiai, tai yra kriptografinių raktų tikrinimas, siekiant patikrinti aplikacijos paketo vientisumą. Atminkite, kad tai vykdoma virtualioje mašinoje, kuri neturi „Apple ID“ ir „iCloud“ prisijungimo, ir yra „iCloud“ paslaugos pavyzdys, kurią naudoja visi „Mac“, nepriklausomai nuo to, ar naudotojas yra prisijungę prie „iCloud“, ar ne.
„Apple“ teigia, kad api.apple-cloudkit.com su TCP prievadu 443 yra viena iš būtinų tinklo paslaugų, kad būtų galima atlikti notarizaciją.
Kai tai baigiama, pateikiami „XProtect“ rezultatai ir juos įrašo syspolicyd.
OCSP (Online Certificate Static Protocol)
OSCP paslauga yra atsakinga už aplikacijų sertifikato būsenos patvirtinimą. „macOS“ įrenginiai naudoja OCSP, kad patvirtintų, jog prieš paleidžiant programą kūrėjo sertifikatas nebuvo atšauktas. OCSP yra standartinis interneto protokolas.
1.1014393 Network [C2 9700F665-9EB7-411B-B539-3B9DB847CC23 ocsp2.apple.com:443 quic-connection, url hash: 58998593, definite, attribution: developer, context: com.apple.CFNetwork.NSURLSession.{913A1C2B-4B6A-77E1-B716-B17433DE27AD}{(null)}{Y}{2} (private), proc: AFBB1044-7B43-10BA-4D8E-386ACA5FB6A3, effective proc: 437FF9A3-86A1-864A-38E3-1EC4CF9A3A0176, pid: 208, uid: 0, account id: com.apple.trustd.TrustURLSession] start
1.1014409 mDNSResponder [R175] getaddrinfo start -- flags: 0xC000D000, ifindex: 0, protocols: 0, hostname: ocsp2.apple.com, options: 0x8 {use-failover}, client pid: 182 (trustd), delegator pid: 208 (syspolicyd)
Tai buvo prieštaringiausias „Gatekeeper“ patikrų etapas nuo tada, kai 2020 m. buvo nustatyta, kad šie patikrinimai buvo atliekami naudojant paprastą HTTP, o ne HTTPS. Tuo metu „Apple“ įsipareigojo pagerinti savo OCSP serverių patikimumą, naudoti saugias ryšio su jais priemones ir suteikti vartotojams galimybę visiškai išjungti šiuos patikrinimus. Šis pažadas išlieka matomas ir šiandien, šio „Apple“ įrašo pabaigoje, tačiau „Apple“ vis dar neįvykdė paskutinio iš šių pažadų.
„Apple“ deklaruoja ocsp2.apple.com per TCP 443 prievadą kaip vieną iš būtinų tinklo paslaugų, kad būtų galima patikrinti sertifikatus.
Gatekeeper patikros pabaiga
Kai patikra baigta, syspolicyd deklaruoja apie „Gatekeeper“ patikros rezultatus.
1.2439452 syspolicyd GK scan complete: PST: (path: /Applications/Pyragaičiai.app), (team: QWY4LRW926), (id: (null)), (bundle_id: (null)), 4, 4, 0
1.2517939 kernel AppleSystemPolicy evaluation result: 3, allowed, cache, 1678266601
Galiausiai, praėjus beveik pusei sekundės po to kai naudotojas nurodė atidaryti aplikaciją, Pyragaičiai pradeda savo darbą ir įkelia nustatymus
1.254611 Pyragaičiai CoreFoundation Loading Preferences From User CFPrefsD
ir padeda daryti tai, kam ir buvo sukurta.
Pakartotinos patikros
Nors dabar „Ventura“ vis dar atlieka „Gatekeeper“ patikras kiekvieną kartą atidarant aplikaciją, kai aplikacija įvedama į „LaunchServices“ ir saugos duomenų bazes, kai kurios čia pateiktos patikros užduotys gali būti praleistos. Sertifikatų patvirtinimai naudojant OCSP saugomi vietoje, todėl sumažėja internetinių patikrinimų dažnis. Tačiau, kaip rodo testai, kenkėjiškų programų tikrinimas naudojant „XProtect“ ir kodo vientisumas dabar yra universalūs.
Jei norite patikrinti patys
Jei norite patikrinti patys ar pavyks paleisti modifikuotą aplikaciją:
- Nukopijuokite kokią nors aplikaciją į kitą vietą, tarkim sukurkite kokį nors aplanką savo naudotojo ~/Documents srityje.
- Kadangi senesnės „macOS“ versijos jautriai reaguoja į aplikacijų perkėlimą į kitą vietą — atidarykite tą aplikaciją ir įsitikinkite, kad ji veikia teisingai.
- Uždarykite aplikaciją.
- Pasitelkę kokį nors teksto redaktorių, pavyzdžiui „TexEdit“ atidarykite aplikacijoje esantį Info.plist failą ir pakeiskite vieną raidę aplikacijos copyright informacijoje. Arba, jei turite, pasitelkę binarinių kodų redaktorių pakeiskite kokią nors raidę aplikacijos tekste (Contents/MacOS)
Jei pasiseks — pamatysite atšaukimo langą. Kai kuriais atvejais gali padėti pabandymas aplikaciją atidaryti nuspaudus Cmd ⌘ klavišą ir gal net bus suteiktas dar vienas šansas, tačiau toliau sėkmė turėtų ir baigtis.