Gatekeepers akilleshæl: Afsløring af en macOS-sårbarhed
Den 27. juli 2022 opdagede Microsoft en sårbarhed i macOS, der kan give angribere mulighed for at omgå begrænsninger for applikationsudførelse, der er pålagt af Apples Gatekeeper-sikkerhedsmekanisme, designet til at sikre, at kun pålidelige apps kører på Mac-enheder.
Microsoft udviklede en proof-of-concept-udnyttelse for at demonstrere sårbarheden, som vi kalder “Achilles”. Gatekeeper-bypasses som denne kan udnyttes som en vektor til indledende adgang med malware og andre trusler og kan hjælpe med at øge succesraten for ondsindede kampagner og angreb på macOS.
Efter en omhyggelig gennemgang af konsekvenserne delte vi sårbarheden med Apple i juli 2022 via Coordinated Vulnerability Disclosure (CVD) via Microsoft Security Vulnerability Research (MSVR). Rettelser til sårbarheden, nu identificeret som CVE-2022-42821, blev hurtigt frigivet af Apple til alle deres OS-versioner.
Microsoft bemærker, at Apples Lockdown Mode, der blev introduceret i macOS Ventura som en valgfri beskyttelsesfunktion for højrisikobrugere, der kan være personligt målrettet mod et sofistikeret cyberangreb, har til formål at stoppe nul-klik fjernudførelse af kodeudførelse og derfor ikke forsvarer sig mod Achilles. Slutbrugere bør anvende rettelsen uanset deres status i Lockdown-tilstand. Vi takker Apple for samarbejdet om at løse dette problem.
I dette blogindlæg deler Microsoft oplysninger om Gatekeeper og sårbarheden, der er i stand til at omgå den. Vi deler også denne forskning for at understrege vigtigheden af samarbejde mellem forskere og sikkerhedssamfundet for at forbedre forsvaret for det større økosystem.
Oplåsning af gatekeeperens sikkerhedsmekanisme
Mange macOS-infektioner er resultatet af brugere, der kører malware, ofte utilsigtet. Falske app-pakker kan maskere sig som forskellige apps, som Flash Player, eller som en legitim fil, såsom at bruge et PDF-ikon og bruge appnavnet “Genoptag”. For at bekæmpe denne meget populære infektionsvektor har Apple pålagt stærke sikkerhedsmekanismer. Når du downloader apps fra en browser, som Safari, tildeler browseren en særlig udvidet attribut til den downloadede fil. Denne attribut hedder com.apple.quarantine og bruges senere til at håndhæve politikker som Gatekeeper eller visse afhjælpninger, der forhindrer sandkasseflugt. I de senere år har Apple strammet sikkerhedspolitikkerne yderligere, og det nuværende Gatekeeper-design dikterer følgende adfærd for downloadede apps:
- Hvis appen er gyldigt signeret og notariseret, hvilket betyder godkendt af Apple, kræver en prompt brugerens samtykke, før den startes.
- Ellers informeres brugeren om, at appen ikke kan køres, da den ikke er tillid til.
Udvidede attributter er en filsystemfunktion, der understøttes på almindelige macOS-filsystemer, som APFS og HFS +, og deres hovedformål er at gemme filmetadata. Specifikt gemmer attributten com.apple.quarantine oplysninger om kilden til den downloadede fil samt data, der instruerer Gatekeeper i, hvordan filen skal behandles. Attributformatet er generelt:
flag;dato;agent_name; UUID
Udvidede attributter kan ses eller ændres med xattr-kommandolinjeværktøjet. https://ss64.com/osx/xattr.html
En flagværdi på “0083” håndhæver Gatekeeper-begrænsninger for filen, som vist nedenfor:
Figur 1. En fælles com.apple.quarantine udvidet attributværdiFigur 2. Gatekeeper blokerer en downloadet fil, der ikke er tillid til
På grund af sin vigtige rolle i at stoppe malware på macOS er Gatekeeper en nyttig og effektiv sikkerhedsfunktion. I betragtning af at der tidligere har været adskillige bypass-teknikker rettet mod sikkerhedsfunktionen, er Gatekeeper ikke skudsikker. At få evnen til at omgå Gatekeeper har alvorlige konsekvenser, da nogle gange malware-forfattere udnytter disse teknikker til indledende adgang.
Historisk oversigt over Gatekeeper-omfartsveje
Talrige Gatekeeper bypasses er blevet identificeret i de seneste år, nogle endda misbrugt af malware familier som Shlayer. Når vi undersøger Gatekeeper-omgåelser fra de seneste år, ser vi to tilgange:
- Misbrug den udvidede attributtildeling com.apple.quarantine.
- Find en sårbarhed i de komponenter, der gennemtvinger politikkontrol af filer i karantæne.
To tilfælde, som vi ikke anser for at udgøre en “ægte” Gatekeeper-bypass, er:
- Brug af ikke-understøttede filsystemer, som en USB-masselagringsenhed, der bruger FAT32, da disse kræver ikke-triviel brugerinteraktion for at køre macOS-applikationer.
- MITRE’s definition af “Gatekeeper Bypass” (T1553.001), som kræver kodeudførelse for kraftigt at ændre eller fjerne den udvidede attribut com.apple.quarantine.
Her er nogle eksempler på Gatekeeper bypass-sårbarheder opdaget i løbet af de sidste mange år:
Sikkerhedsrisiko | Udnytter | Beskrivelse: __________ |
Cve-2022-22616 | Tildeling af karantæneattributten. | Gzip-filer, der er arkiveret i styklistearkiver, tildeles ikke attributten karantæne, som er yderligere beskrevet her. |
Cve-2021-1810 | Tildeling af karantæneattributten. | Stier, der var længere end 886 tegn, blev ikke tildelt udvidede attributter. Derfor resulterer oprettelse af et symbolsk link, der peger på en app, der ligger i en lang sti, i en Gatekeeper-bypass. Da symbolske links ikke er tildelt karantæneattributten, var det muligt helt at omgå Gatekeeper, som beskrevet her. |
Cve-2021-30657 | Komponent(er), der håndhæver politikkontrol. | App-pakker med en manglende Info.plist og en shell script vigtigste eksekverbare komponent behandles forkert af syspolicyd, en komponent, der håndhæver politikbegrænsninger for apps. https://cedowens.medium.com/macos-gatekeeper-bypass-2021-edition-5256a2955508 https://objective-see.org/blog/blog_0x64.html |
Cve-2021-30853 | Komponent(er), der håndhæver politikkontrol. | En sikkerhedsfejl i vejen filer med en “Shebang” (#!) Header fortolkes af Syspolicyd, fordi den anser app-pakken for at være sikker, som beskrevet her. |
Cve-2019-8656 | Tildeling af karantæneattributten. | Da symbolske links ikke tildeles attributten karantæne, resulterer et arkiv, der indeholder et symbolsk link til en app, der findes i et eksternt filsystem (NFS), i en Gatekeeper-bypass. Apple løste problemet ved at blokere udførelsen af applikationer fra eksterne delte placeringer, dokumenteret her. |
Cve-2014-8826 | Komponent(er), der håndhæver politikkontrol. | Karantæneattributter kontrolleres ikke for JAR-filer, der køres af Java, som opsummeret her. |
Metadata persistens over AppleDouble
Fascineret af CVE-2021-1810, som anført i ovenstående tabel, spekulerede vi på, hvilken mekanisme der kunne udnyttes i arkiver. I betragtning af at symbolske links bevares i arkiver og ikke tildeles karantæneattributter – ledte vi efter en mekanisme, der kunne fortsætte forskellige slags metadata over arkiver.
Efter nogle undersøgelser opdagede vi en måde at fortsætte vigtige filmetadata gennem en mekanisme kaldet AppleDouble.
Selvom udvidede attributter er almindelige på forskellige filsystemer, kan de implementeres anderledes eller endda ikke understøttes, så kopiering af filer med deres metadata bliver en udfordrende opgave. For at løse dette problem introducerede Apple tilbage i 1994 konceptet AppleSingle og AppleDouble-formater. I en nøddeskal er AppleSingle en binær blob, der tilføjes som en del af det originale filindhold, så der kun er en “enkelt” fil at behandle, mens AppleDouble gemmer metadataene i en anden fil side om side ved siden af den originale fil med et “._” præfiks.
Interessant nok, når du udpakker et arkiv, behandler macOS enhver vedhæftet AppleDouble-fil og tildeler målfilen med de relevante metadata.
AppleDouble binære filformat er ret kompliceret, men koden, der analyserer det, kan læses i XNU git-depotet i filen, der håndterer udvidede attributter, som også inkluderer ASCII-art-skildring af formatet. For at demonstrere AppleDouble-filoplysningerne brugte vi ditto-værktøjet som sådan:
Figur 3. AppleDouble-fil oprettet som “._somefile”
Når filen arkiveres sammen med den oprindelige fil og derefter udpakkes af macOS, gendannes udvidede attributter fuldt ud, som vist her:
Figur 4. Brug af AppleDouble i en zip-fil til at bevare udvidede attributter
Ved hjælp af denne nyfundne viden undersøgte vi, hvordan vi kunne bruge AppleDouble-mekanismen til at narre Gatekeeper på en eller anden måde.
Vores første tilgang var at generere mange store udvidede attributter i AppleDouble-formatet, så der ikke er nok plads til at tildele den udvidede attribut com.apple.quarantine. Interessant nok virker det ikke – AppleDouble ignoreres, hvis den samlede størrelse er over 2 GB, og der er ingen begrænsning på antallet af udvidede attributter, som en fil kan få (udover diskens størrelse).
Ved at undersøge yderligere besluttede vi at undersøge kildekoden til unarchiving-mekanismen. Ved omhyggeligt at studere den copyfile_unpack implementering opdagede vi en mulighed for en særlig udvidet attribut ved navn com.apple.acl.text (gemt i XATTR_SECURITY_NAME konstanten i kildekoden), som bruges til at indstille vilkårlige adgangskontrollister.
Figur 5. Koden, der gør det muligt at indstille vilkårlige adgangskontrollister
Brug af ACL’er til udnyttelse
ACL’er (Access Control Lists) er en mekanisme i macOS, der yderligere udvider den traditionelle tilladelsesmodel. Den traditionelle tilladelsesmodel gemmer tilladelse til hver fil i en fil “tilstand”, som kan ændres ved hjælp af https://ss64.com/osx/chmod.html chmod-værktøjet. Det håndhæver tilladelser til den ejende bruger, ejergruppe og andre med hensyn til læsning (r), skrivning (w) og lancering (x). En fils tilstand kan ses ved at angive filer med flaget “-l” (lang):
Figur 6. Når du ser filtilstanden “hello.sh”, kan ejeren gøre alt, mens andre kun kan læse eller starte den
I modsætning til den traditionelle tilladelsesmekanisme tillader ACL’er finkornede tilladelser til filer og mapper. Hver ACL har en eller flere adgangskontrolposter (ACE’er), der dikterer, hvad hver rektor kan eller ikke kan gøre, ligesom firewall-regler. Ligesom filtilstanden kan ACL’er ændres med chmod-værktøjet og ses med ls-værktøjet . Det er vigtigt at bemærke, at filadgangskontrol dikteres af både ACL’er og de traditionelle tilladelsesmodelmekanismer, som det fremgår af følgende eksempel:
Figur 7. At nægte fillæsninger fra alle gør det umuligt at læse filen på trods af dens tilstand
Sættet af tilladelser, der understøttes af ACL’er, er veldokumenteret af Apple i chmod-manualen, som indeholder mere end de traditionelle læse-, skrive- eller lanceringsevner, herunder:
- writeattr: styrer muligheden for at skrive attributter til filen
- writeextattr: styrer muligheden for at skrive udvidede attributter til filen
- writesecurity: styrer muligheden for at indstille ACL’er til filen
- Chown: styrer muligheden for at indstille ejeren af filen
- Slet: Styrer muligheden for at slette filen
Udstyret med disse oplysninger besluttede vi at tilføje meget restriktive ACL’er til de downloadede filer. Disse ACL’er forbyder Safari (eller ethvert andet program) at angive nye udvidede attributter, herunder attributten com.apple.quarantine.
To mindre udfordringer, som vi var nødt til at overvinde under proof-of-concept (POC) -udviklingen var:
- Formatet på ACL-teksten, som gemt i AppleDouble-filen, er ikke identisk med formatet på chmod-kommandolinjen. Dette kan let overvindes ved at påkalde macOS acl_to_text API og gemme ACL med det korrekte format.
- Når du bruger ditto-værktøjet, går den udvidede attribut com.apple.acl.text tabt i den resulterende AppleDouble-fil. Dette kan overvindes ved enten manuelt at oprette den binære AppleDouble eller, som vi valgte i dette tilfælde, blot at lappe den resulterende AppleDouble-fil, før den arkiveres.
Derfor er vores POC som følger:
- Opret en falsk mappestruktur med et vilkårligt ikon og nyttelast.
- Opret en AppleDouble-fil med den udvidede attributnøgle com.apple.acl.text og en værdi, der repræsenterer en restriktiv ACL (vi valgte ækvivalenten til “alle nægter at skrive, skrive, skriveekstattr, skrivesikkerhed, chown“). Udfør den korrekte AppleDouble-patching, hvis du bruger ditto til at generere AppleDouble-filen.
- Opret et arkiv med applikationen sammen med dens AppleDouble-fil, og host den på en webserver.
Vi navngav vores POC-udnyttelse Achilles efter dens brug af ACL’er til at omgå Gatekeeper. Vores POC-optagede video kan ses her:
AppleDouble-filen, vi brugte til denne Gatekeeper-bypass, kan genereres, som vist nedenfor:
Figur 8. Generisk AppleDouble-fil, der kan bruges til enhver Gatekeeper-bypass
Forbedring af sikkerheden for alle gennem forskning og deling af trusselsefterretninger
Trusselslandskabet fortsætter med at udvikle sig og leverer nye trusler og angrebsfunktioner, der udnytter upatchede sårbarheder og fejlkonfigurationer som en vektor til at få adgang til systemer og data. Vores data viser, at falske apps forbliver en af de bedste indgangsvektorer på macOS, hvilket indikerer, at Gatekeeper-bypass-teknikker er en attraktiv og endda en nødvendig kapacitet for modstandere at udnytte i angreb. Ikke desto mindre stræber vi gennem forskningsdrevet beskyttelse og samarbejde med kunder, partnere og brancheeksperter på at berige vores beskyttelsesteknologier for at forsvare os mod sådanne problemer – uanset hvilken platform eller enhed der er i brug.
Da miljøer fortsat er afhængige af en bred vifte af enheder og operativsystemer, har organisationer brug for sikkerhedsløsninger, der kan give beskyttelse på tværs af platforme og et komplet billede af deres sikkerhedsstilling. Samarbejdsforskning som denne informerer vores omfattende beskyttelsesfunktioner på tværs af platforme, så Microsoft Defender for Endpoint kan levere og koordinere trusselsforsvar på tværs af alle større OS-platforme, herunder Windows, macOS, Linux, Android og iOS. På macOS-enheder registrerer og afslører Microsoft Defender for Endpoint trusler og sårbarheder, herunder CVE-2022-42821, ved hjælp af antivirus, slutpunktsregistrering og -respons (EDR) og funktioner til trussels- og sårbarhedsstyring. Denne forskning forbedrede også Microsoft Defenders funktioner til administration af sårbarheder til at opdage, prioritere og afhjælpe fejlkonfigurationer og sårbarheder. Dette inkluderer registrering af CVE-2022-42821 på macOS-enheder ved at undersøge AppleDouble-filer, der misbruger ACL’er.
Denne sag understregede også behovet for ansvarlige sårbarhedsoplysninger og ekspertsamarbejde på tværs af platforme for effektivt at afbøde problemer og beskytte brugerne mod nuværende og fremtidige trusler. Vi vil gerne endnu en gang takke Apples produktsikkerhedsteam for deres indsats og lydhørhed med hensyn til at løse problemet.
Figur 9. Registrering af Microsoft Defender til slutpunkt
Vores Microsoft-sikkerhedsforskere fortsætter med at opdage nye trusler og sårbarheder som en del af vores bestræbelser på at sikre brugernes computeroplevelser, uanset om det er en Windows- eller ikke-Windows-enhed. I bestræbelserne på at forbedre sikkerheden for alle vil vi fortsætte med at dele efterretninger og arbejde med sikkerhedsfællesskabet for at skabe og forbedre løsninger, der beskytter brugere og organisationer på tværs af platforme hver eneste dag.
Kilde: Jonathan Bar, Microsoft 365 Defender Research Team