Jamf Blog
August 17, 2023 op Jamf Threat Labs

Valse vliegtuigmodus: een mobiele sabotagetechniek om connectiviteit te behouden

Jamf Threat Labs ontwikkelde een 'post-exploit persistence technique' op iOS 16 die valselijk een functionele vliegtuigmodus laat zien. In werkelijkheid plaatst de aanvaller een kunstmatige vliegtuigmodus nadat het apparaat met succes is geëxploiteerd. De UI wordt aangepast zodat pictogrammen in de vliegtuigmodus worden weergegeven en de internetverbinding met alle apps wordt verbroken, behalve met de applicatie van de aanvaller. Hierdoor kan de aanvaller toegang tot het apparaat houden, zelfs als de gebruiker denkt dat het offline is. Deze techniek is nog niet op grote schaal waargenomen en is alleen mogelijk op een al geëxploiteerd of jailbroken apparaat.

Onderzoek geleid door Hu Ke en Nir Avraham.

Is er geknoeid met de vliegtuigmodus?

Zoals de naam al doet vermoeden, is de vliegtuigmodus ontworpen om passagiers in staat te stellen een mobiel apparaat veilig te gebruiken tijdens de vlucht, waarbij de draadloze mobiele functies worden uitgeschakeld om interferentie met kritieke vluchtapparatuur te voorkomen.

Het gebruik van de vliegtuigmodus gaat echter verder dan reizen en wordt door sommigen gebruikt om de batterij te sparen en door anderen als een manier om de verbinding met onze altijd verbonden wereld te verbreken. Het is zelfs voorgesteld als een meditatietechniek.

Voor mensen met cyberparanoia en technofobie kan het op de vliegtuigmodus zetten van je telefoon een handige psychologische truc zijn om gemoedsrust en een gevoel van extra privacy te bereiken.

Maar moet je de vliegtuigmodus gebruiken om je veiligheid en privacy te beschermen?

Vandaag duiken we in de technologie die ten grondslag ligt aan de vliegtuigmodus op iOS om een aanpak te demonstreren waarmee een kwaadwillende actor een mobiele netwerkverbinding voor een applicatie in stand kan houden, zelfs als de gebruiker denkt dat hij de vliegtuigmodus heeft ingeschakeld.

De onderlaag

We beginnen met te analyseren hoe de vliegtuigmodus werkt. Twee daemons hebben de hoofdtaak om de vliegtuigmodus om te schakelen. SpringBoard zorgt voor wijzigingen op de UI en CommCenter is verantwoordelijk voor de bediening van de onderliggende netwerkinterface. Merk op dat CommCenter ook verantwoordelijk is voor het beheer van de functie waarmee gebruikers 'de toegang tot mobiele gegevens voor specifieke apps kunnen blokkeren'.

Zoals je kan zien, zal onder normale omstandigheden, wanneer de gebruiker de vliegtuigmodus inschakelt, de netwerkinterface pdp_ip0 (mobiele data) niet langer IPv4/IPv6 IP-adressen weergeven. Het mobiele netwerk is losgekoppeld en onbruikbaar, tenminste op het niveau van de gebruikersruimte.

Een kunstmatige vliegtuigmodus maken

In dit gedeelte laten we zien hoe we een kunstmatige vliegtuigmodus hebben gemaakt, waarbij UI-wijzigingen behouden blijven terwijl de mobiele connectiviteit voor een geselecteerde applicatie behouden blijft (wat in een aanvalsscenario de malware van de aanvaller zou zijn die ze hebben geïnstalleerd als onderdeel van een apparaat exploit).

We beginnen met het volgen van de consolelogboeken. Merk op dat wanneer je de vliegtuigmodus inschakelt, het vroegste relevante logboek het onderstaande logboek lijkt te zijn: '#N User airplane mode preference changing from...'

We gebruiken deze string om de code te vinden die ernaar verwijst in de disassembler. Het is een symboolloze C++-functie die hier te vinden is:

In de hoop dat deze functie vroeg genoeg zat in de keten van aanroepen die de vliegtuigmodus inschakelen, hebben we deze functie met succes gehaakt en vervangen door een lege/geen-functie. Het resultaat was een valse vliegtuigmodus. Wanneer de gebruiker de vliegtuigmodus inschakelt, wordt het apparaat niet losgekoppeld van het mobiele netwerk en blijft de internettoegang ononderbroken en

de verwachte gebruikerservaring behouden.

Er zijn extra UI-tweaks nodig om de aanval te laten lijken op de typische vliegtuigmodus-ervaring. Een klein voorbeeld was het dimmen van het mobiele pictogram en voorkomen dat de gebruiker er interactie mee had.

Om dit te bereiken hebben we twee Objective-C methodes gehaakt en een stukje code geïnjecteerd dat het mobiele pictogram aanpast om het beoogde effect te bereiken. -[SBStatusBarStateAggregator _noteAirplaneModeChanged] en -[CCUIModularControlCenterOverlayViewController _beginPresentationAnimated:interactive:]

De internetverbinding lijkt te worden verbroken

Na het inschakelen van de vliegtuigmodus zonder wifiverbinding, zouden gebruikers verwachten dat het openen van Safari zou resulteren in geen verbinding met het internet. De typische ervaring is een meldingsvenster dat de gebruiker vraagt om 'de vliegtuigmodus uit te schakelen'. Om dit effect te bereiken, zullen we de eerdergenoemde CommsCenter-functie gebruiken om 'de toegang tot mobiele gegevens voor specifieke apps te blokkeren" en deze te vermommen als vliegtuigmodus via de gehaakte functie hieronder.

De schermafbeeldingen hieronder tonen de gespoofte gebruikerservaring met de melding die normaal optreedt bij de functie 'Blokkeer toegang tot mobiele data voor specifieke apps' aan de linkerkant en het resultaat van het vastmaken van het meldingsvenster zodat het eruit ziet als de typische vliegtuismodusmelding aan de rechterkant.

Het waarschuwingsvenster vervangen is één ding, maar hoe hebben we het internet voor Safari afgesloten zonder de vliegtuigmodus in te schakelen en het hele apparaat te beïnvloeden? Dit is immers het belangrijkste teken dat de vliegtuigmodus is ingeschakeld.

Hoe werkt het waarschuwingsvenster 'Mobiele data uitgeschakeld'?

Net als bij de eerdere manipulatie van pictogrammen ontdekten we dat de systeem UI Manager SpringBoard het waarschuwingsvenster opriep na een melding van het CommCenter. Als we een stap verder kijken, concluderen we dat CommCenter werd geïnformeerd door de kernel via een geregistreerde observer/callback-functie.

CommCenter`CellularUsagePolicyController::createNEConfigurationStore_sync

-> NetworkExtension.framework`-[NEPathEventObserver initWithQue:eventHandler:]

-> libnetwork.dylib`network_config_cellular_blocked_observer_create

Deze network_config_* functies roepen intern socket()/ioctl() aan voor interactie met de kernel:

network_config_cellular_blocked_observer_create

-> network_config_policy_observer_create

-> __network_config_policy_observer_create_block_invoke

-> network_config_setup_policy_event_watcher

-> socket(32, 3, 1)

-> ioctl(...)

We hebben `fsevents` gebruikt en geconstateerd dat de daemon CommCenter ook een SQL-databasebestand /private/var/wireless/Library/Databases/CellularUsage.db beheert. Deze database registreert de status van de mobiele gegevenstoegang van elke app.

De waarde van "flags" wordt ingesteld op 8 als een applicatie wordt geblokkeerd voor toegang tot mobiele gegevens. Dit is handig omdat we een lijst met applicatiebundel-ID's uit dit SQL-databasebestand kunnen lezen en hun vooraf ingestelde waarde kunnen verkrijgen.

Met behulp van deze database met geïnstalleerde applicatiebundel-ID's kunnen we nu een app selectief blokkeren of toestaan om toegang te krijgen tot wifi- of mobiele gegevens met behulp van de volgende code. In combinatie met de andere technieken die hierboven zijn beschreven, lijkt de valse vliegtuigmodus zich nu net zo te gedragen als de echte, behalve dat het internetverbod niet geldt voor processen die geen applicaties zijn, zoals een backdoor-trojan.

Jamf Executive Threat Protection kan geavanceerde aanvallen identificeren om je gebruikers veilig te houden.

Jamf Threat Labs
Jamf
Jamf Threat Labs is samengesteld uit ervaren bedreigingsonderzoekers, cyberbeveiligingsdeskundigen en gegevenswetenschappers. Zij hebben vaardigheden die penetratietests, netwerkbewaking, malware-onderzoek en app-risicobeoordeling omvatten en zijn voornamelijk gericht op Apple en mobiele ecosystemen.
Schrijf je in voor het Jamf blog

Krijg markttrends, Apple updates en Jamf nieuws direct in je inbox.

Raadpleeg ons Privacybeleid voor meer informatie over de manier waarop we uw gegevens verzamelen, gebruiken, bekendmaken, verplaatsen en bewaren.