Din saldo $3000

En teknisk analyse af 4k Facebook-svindel

tl; dr: Stol ikke på webview-login på native apps, de kan læse dine cookies og bruge dem til deres fordel.
Følger Hacker News-tråden "Hvordan jeg tabte 4 € i et Facebook-svindel“, vi reverse engineering af appen for at se, hvordan dette sker.

Den nye phishing-bølge

Phishing. Vi kender det alle sammen, vi hader det alle sammen. Niek van der Maas hader det også, men han blev offer for en ny type phishing-svindel, som tog €4k fra hans bankkonto.

Hvordan skete dette? Hvordan faldt Niek, en teknologikyndig bruger, der ejer en e-handelsvirksomhed, for denne form for angreb?

Login flow og problem med brugertillid

Login-formularer er overalt i disse dage. Instagram, TikTok og endda din lokale avis, der er næsten altid et behov for brugergodkendelse for at bruge enhver app.

En af mulighederne for at logge ind involverer en ekstern udbyder – nemlig Google, Facebook, Twitter eller andre. I tilfældet med Facebook, for eksempel, præsenterer Android SDK brugeren for en native overlay og beder brugeren om at logge på Facebook ved hjælp af hans eller hendes brugernavn og adgangskode.

Dette får brugeren til at stole på app'en, og skaber i brugeren en tillid til, at det er sikkert at logge ind på hans eller hendes sociale konto via brugernavn og adgangskode.

Men det er ikke altid sådan.

Sagen om Webview-svindel

Hvad sker der, når du involverer webvisninger i login-processen?

Webvisninger er i sagens natur usikre ved design. Enhver Android-app, der bruger en webview, har fuld adgang til alle data, der er gemt på webstedet – sessionslagring, lokal lagring og vigtigst af alt, cookies.

For eksempel kan en app, der præsenterer en Facebook-loginside, stjæle brugerens cookies efter login på hjemmesiden.

Her er skærmbilleder af to login-sider. Den ene er af en usikker webvisning, og den anden er en sikker indbygget login-side. Kan du se forskel?

sikker indbygget login-side
usikkert webview-login

(Instagram-login er den sikrede native login-side)

At miste 4 € i et Facebook-svindel

Niek faldt for Webview-fidusen. Niek er ikke en typisk bruger; Han driver e-handel, online markedsføring og rådgivning. Med hans egne ord:

Jeg har stadig svært ved at tro, at jeg faldt for et fupnummer som dette. Jeg har 2FA på alle mine konti, bruger en password manager, og jeg er generelt meget forsigtig med kontosikkerhed.

Niek stolede på at logge ind på den ondsindede app ved at bruge sit Facebook-brugernavn og adgangskode. Men lidt vidste han, at den app, han downloadede, var ondsindet og brugte webview til at stjæle hans Facebook-cookies, logge ind på hans konto og stjæle €4k fra ham.

Lad os få et kig bag kulisserne af Tiktok Ads Business, den ondsindede app, som han downloadede.

Hentning af cookies fra en Webview på Android

Strømmen er enkel. Niek åbner appen, klikker på den store FB-knap og bliver præsenteret for en webview med Facebooks mobilside på.

Efter han har logget ind, kører appen denne meget enkle kodelinje, taget fra en dekompilering af appen, vi lavede her hos Sayfer:

public final string retrieveWebCookie() {
    return cookieManager.getCookie(LoginActivity.CONST_URL_FACEBOOK);
}

Facebook-coockies bliver derefter sendt til den ondsindede apps fjernserver og kan bruges til at logge ind på ofrets konto.

Enkel. Egentlig for simpelt – enhver bruger, der logger ind på et websted via en webvisning på en app, risikerer at give det fulde ejerskab af hans eller hendes konto væk.

Hvad er det næste?

En forandring er nødvendig på to forskellige niveauer.

For det første bør native flow-logins ikke stole på web-lignende visninger for login-flowet. Dette får brugerne til at stole for meget på dem, og det resulterer i, at brugere bliver ofre for svindel med ægte webview-cookies.

For det andet er der behov for en teknisk ændring i Androids implementering af webview. Apps bør ikke have adgang til cookies på nogen hjemmeside, de indlæser. Webviews bør være sandboxed, og appen skal kommunikere med den via en meget tynd og begrænset API, for at forhindre dem i at kapre brugeroplysninger.

Spring til indhold