Social media

TikTok: Chinese app een bedreiging of toch niet?

TikTok: Chinese app een bedreiging of toch niet?

De laatste tijd is de berichtgeving over TikTok niet mals: het zou Chinese malware zijn waarbij de Chinese overheid direct mee kan kijken op je telefoon, je telefoon wordt leeggetrokken en dit leidt tot consequenties wanneer je het land in wilt komen. Maar waarom is nou juist TikTok een bedreiging voor Westerse landen? En is deze discussie terecht?

Geen zin om alles te lezen? Een samenvatting staat op de nieuwspagina van Fox-IT. Klik hier om deze te lezen.

Check je Play- of AppStore-overzicht maar: in de top 10 van ‘Sociale netwerken’ staat TikTok al een tijd bovenaan in de lijst. Met 3,5 miljoen gebruikers in Nederland (en meer dan 165 miljoen gebruikers in de VS)1, kun je wel zeggen dat het een hit is. Het welbekende dansje op de Siren Beat is een bekende, maar ook het doen van de macarena om de verkiezingsrally van Trump te saboteren komt op de app voorbij. En sabotage en macht over burgers door een ander land vinden ze niet zo aardig daar in de Verenigde Staten, dus de app moet het veld ruimen onder de noemer ‘bedreiging voor de nationale veiligheid’. Alhoewel gesteld wordt dat het hier écht gaat om het verzamelgedrag van de app, zal een persoonlijke vete wellicht hebben meegespeeld. Is dit verbod terecht of verzamelt de TikTok-app daadwerkelijk zoveel dat het een bedreiging vormt voor de Verenigde Staten? En kunnen we dan niet stellen dat alle social media apps een bedreiging vormen?

Tijd om een à la Radar een testpanel te starten en te kijken naar het verzamelgedrag van TikTok. Men neme een Androidtelefoon die geroot is met de app erop en een laptop. Vervolgens wordt er naar de volgende twee dingen gekeken:

  • De requests en responses van de app naar de servers en vice versa
  • Het aantal permissies dat de app vraagt en het aantal trackers

Het misbruiken of exploiten van achterliggende infrastructuur wordt niet meegenomen, puur omdat wordt aangegeven dat dit niet zomaar gedaan mag worden volgens hun Responsible Disclosurebeleid. En een ethisch hacker gaat daar natuurlijk niet mee rommelen als TikTok daar geen toestemming voor heeft gegeven.

Wanneer je een app installeert, communiceert deze met achterliggende servers. Op deze servers worden gegevens opgeslagen zoals filmpjes, maar ook jouw instellingen zoals je profiel. Wanneer je zoekt naar een filmpje over ‘hacken’ en dit invoert bij het zoekveld, stuurt de app een request naar een server van de app. De server geeft vervolgens een response terug: de filmpjes die aan dit zoekwoord voldoen. Wanneer je dus de requests en responses inzichtelijk maakt, kun je zien welke informatie er van jou wordt verstuurd en opgehaald. Deze kun je inzichtelijk maken op een laptop die je figuurlijk tussen de app en de servers achter de app plaatst. Nu is het zo dat tegenwoordig praktisch alles binnen apps (er zijn helaas uitzonderingen..) via een beveiligde verbinding verstuurd en opgehaald wordt én dat de app vergelijkt of een beveiligingssleutel van de server overeenkomt met de sleutel die in de app staat. Wanneer dit niet hetzelfde is, dan wordt er geen verbinding gemaakt. Als je de app nou de opdracht kan geven om deze check over te slaan, dan kun je bepaalde informatie wél zien. Dit noem je het uitschakelen van ‘SSL pinning’ en dat kan op een geroot Android device of een jailbroken iPhone.

Data

De app is geïnstalleerd en er is een account aangemaakt met een emailadres dat verder niet gebruikt wordt. Al snel na het laden van de app komt het volgende request voorbij, informatie wordt naar de server van TikTok gestuurd en deze registreert jouw smartphone als nieuwe telefoon.

POST /service/2/device_register/?iid=6844101830146787073<snip>ac=wifi&channel=googleplay&aid=1180&<snip>&version_code=160604&version_name=16.6.4&device_platform=android&ab_version=16.6.4&ssmix=a&device_type=Nexus+5X&device_brand=google&language=en&os_api=27&os_version=8.1.0&<snip>&manifest_version_code=160604&resolution=1080*1794&dpi=420&update_version_code=160604&<snip>&app_skin=white&storage_type=0&app_type=normal&sys_region=NL&pass-route=1&pass-region=1&timezone_name=Europe%2FAmsterdam&cpu_support64=true&host_abi=armeabi-v7a&app_language=en&ac2=wifi&uoo=0&op_region=NL&timezone_offset=3600&build_number=16.6.4&ts=<snip>&tt_data=a&config_retry=b&app_skin=white&storage_type=0&manifest_version_code=160604&<snip>&app_language=en&app_type=normal&iid=6844101830146787073&channel=googleplay&device_type=Nexus%205X&language=en&cpu_support64=true&host_abi=armeabi-v7a&locale=en&resolution=1080*1794&openudid=b24483ea02942b3b&update_version_code=160604&ac2=wifi&sys_region=NL&os_api=27&uoo=0&timezone_name=Europe%2FAmsterdam&dpi=420&ac=wifi&<snip>&pass-route=1&os_version=8.1.0&timezone_offset=3600&version_code=160604&app_name=trill&ab_version=16.6.4&version_name=16.6.4&device_brand=google&op_region=NL&ssmix=a&pass-region=1&device_platform=android&build_number=16.6.4&ts=1594563618 HTTP/1.1
Host: log.tiktokv.com

Een berg tekst, maar wat voor informatie zie je nou eigenlijk hierin? Als je goed kijkt zie je informatie over je telefoon, zoals de grootte van je scherm (resolution), het merk van je telefoon (device_brand), het type telefoon (Nexus 5X), netwerkverbinding (wifi), versie van de app (16.6.4) of welke kleurmodus je telefoon heeft (app_skin). Deze informatie wordt regelmatig gestuurd. In totaal zie je iedere 30 seconden (check de timestamp in de eerste kolom) wel een request naar een server van TikTok gaat: naar een API, naar een logserver of een monitorserver:

Wallpaper

Is dit gekke informatie? Nee, dit is informatie die nodig is om de app zo goed mogelijk te laten werken op je telefoon. Een request die vaak voorkomt naar log.tiktokv.com ziet er bijvoorbeeld zo uit:

POST /service/2/app_log/?iid=6848598252767119105<snip>&ac=wifi&channel=googleplay&aid=1180&app_name=trill&version_code=160604&version_name=16.6.4&device_platform=android&ab_version=16.6.4&ssmix=a&device_type=Nexus+5X&device_brand=google&language=en&os_api=27&os_version=8.1.0<snip>&manifest_version_code=160604&resolution=1080*1794&dpi=420&update_version_code=160604<snip>&app_skin=white&storage_type=0&app_type=normal&sys_region=NL&pass-route=1&pass-region=1&timezone_name=Europe%2FAmsterdam&cpu_support64=true&host_abi=armeabi-v7a&app_language=en&ac2=wifi&uoo=0&op_region=NL&timezone_offset=3600&build_number=16.6.4&ts=1594563892&tt_data=a&app_skin=white&storage_type=0&manifest_version_code=160604&_rticket=1594563894937&app_language=en&app_type=normal<snip>&channel=googleplay&device_type=Nexus%205X&language=en&cpu_support64=true&host_abi=armeabi-v7a&locale=en&resolution=1080*1794&openudid=b24483ea02942b3b&update_version_code=160604&ac2=wifi&sys_region=NL&os_api=27&uoo=0&timezone_name=Europe%2FAmsterdam&dpi=420&ac=wifi<snip>&os_version=8.1.0&timezone_offset=3600&version_code=160604&app_name=trill&ab_version=16.6.4&version_name=16.6.4&device_brand=google&op_region=NL&ssmix=a&pass-region=1&device_platform=android&build_number=16.6.4&ts=1594563892 HTTP/1.1
Host: log.tiktokv.com

<versleutelde data>

Weer heel veel informatie over je device en gebruik, maar ook versleutelde data. Gebruiker @fs0c131ty op Twitter heeft deze versleutelde data inzichtelijk gemaakt. Zijn conclusie? Ook in de versleutelde data staat weinig nieuws.

De requests in een eerdere versie (januari 2019) naar mon-va.tiktok.com zijn echter wel opvallend vanwege onderstaande (in originele versie zonder sterretjes natuurlijk):

"mc":"A8:B8:6E:**:**:**"

Tussen de informatie die we eerder hebben gezien, zoals het merk en de resolutie, staat ook het MAC-adres van netwerkinterface wlan0 van de telefoon. Dat is een unieke code van het fysieke stukje in jouw telefoon die zorgt dat je met WiFi-verbinding draadloos kunt internetten. Dit is echter alleen op Android, bij het opzoeken naar hetzelfde request op iPhone zie je onderstaande. Leeg dus!

"mc":"02:00:00:00:00:00"

Er wordt dus vrij normale data gestuurd naar de servers van TikTok (behalve MAC-adres, dat is echt totaal onnodig voor de verbetering van het algoritme). Is er dan misschien iets te vinden in de gedecompilede versie van de app? Als een ontwikkelaar een app maakt, wordt er veel code geschreven. Deze code wordt uiteindelijk tot één pakketje gemaakt (dat proces noem je compilen), dit pakketje installeer jij als app op je telefoon. Je kunt de app niet 100% weer terug krijgen naar de oorspronkelijke code, maar je kunt er wel een representatie van maken met een decompiler. Je krijgt dan wat ongeveer de code zou kunnen zijn en hier kun je informatie uit halen. Allereerst kun je kijken welke permissies de app allemaal nodig heeft. Voor TikTok is dat je locatie (ongeveer en nauwkeurig), internettoegang, lezen en schrijven van bestanden, je camera, je microfoon, je contacten, trilfunctie, maar ook.. welke andere apps er op je telefoon aan staan. Met de permissie genaamd android.permission.GET_TASKS kan de app ‘zien’ welke andere apps je op het moment aan het gebruiken bent of in de achtergrond draaien. Tijdens het testen kwam echter niet voorbij dat deze informatie werd gestuurd naar de server (maar dat kan ook bad luck zijn). Wanneer je de gedecompilede code bekijkt zie je dat het vooral gebruikt wordt om te kijken welk proces TikTok zelf gebruikt en om bij het afspelen de performance te verbeteren. Wel heeft de app de toegang om te kijken welke apps je nog meer actief op je telefoon hebt staan, dus een fijn idee is dit niet plus in volgende versies kunnen ze er - zonder dat je dat doorhebt - opeens wel actief gebruik van maken. Ter vergelijking: Instagram vraagt uiteraard ook om toegang tot je camera, microfoon en bestanden, maar niet informatie van actieve apps op je telefoon.

Naast permissies maakt de app nog gebruik van een aantal trackers, zoals AccountKit, AppsFlyer, Facebook en Google Analytics. Ook niks geks. Het zijn er iets meer dan Instagram, die gebruikt alleen Facebook (wat niet gek is als onderdeel van Facebook).

Maar waarom ligt TikTok dan onder vuur?

Simpel: TikTok is in handen van ByteDance, gevestigd in China. En de Verenigde Staten vindt China niet lief. Andersom ook niet trouwens. Over en weer beschuldigen ze elkaar van spionage en het stelen van informatie. En iemand die je daarvan verdenkt, wil je natuurlijk zo min mogelijk informatie over jou laten hebben. Een Chinees bedrijf met een app welke op de smartphones van meer dan 100 miljoen Amerikaanse burgers staat, heeft indirect macht over Amerika. En aangezien de Chinese overheid kan eisen van private bedrijven gegevens op te leveren, kan dit een bedreiging vormen. ByteDance heeft hand al deels in eigen boezem gestoken en een Amerikaanse CEO aangenomen (inclusief heel wat Amerikaanse medewerkers) en de locaties van de servers voor gebruikers al gewijzigd; informatie van Europeanen wordt bijvoorbeeld tegenwoordig in Europa of in Singapore opgeslagen2. Mensen in China gebruiken Douyin, de rest van de wereld (waar het nog niet verboden is) krijgt TikTok te zien. Ook al is de app gesplitst in twee versies, je ziet dat de app niet opnieuw gebouwd is en nog volop referenties naar een ooit ook deels Chinese app bevat. Zo staan er nog gewoon Chinese IPs in de broncode en staan er in de URLConfig de volgende versies gedefinieerd. Per versie staan de URLs daar welke de app moet gebruiken. Als je in dat geval de Amerikaanse versie van de app gebruikt, dan stuurt de app jouw data naar die URLs die achter AMERICA staat.

AMERICA
AMERICA_HTTP
CHINA
MUSICALLY
MUSICALLY_HTTP
SIG_ALIYUN
SIG_AWS

Gek is dat niet, maar een app waarbij referenties naar een ooit Chinese app staan is niet wenselijk. TikTok heeft bevestigd dat zij deze app verder uit gaan splitsen en deze referenties verwijderd worden.

Maar ze kopiëren mijn clipboard!

In iOS 14 kun je tegenwoordig zien wanneer een app bij jouw clipboard ofwel klembord wil komen. Bij gebruik van de TikTok-app op iOS 14 kreeg je deze melding. Deze melding zou je ook krijgen bij LinkedIn en Reddit: zij willen namelijk deze toegang ook. Daadwerkelijke informatie die op het klembord stond van de testtelefoon kwam echter niet langs bij de data die naar de servers verstuurd werd (of het moet nog een keer bad luck zijn).

De duistere kant

De duistere kant van TikTok heeft minder te maken met het verzamelgedrag van de app. Eind 2019 werden de regels voor moderators van het platform publiek gemaakt. Moderators checken en filteren de video’s die geupload worden. Regels zorgen ervoor dat er bijvoorbeeld geen schokkende beelden worden geplaatst op de app3. In deze regels stond dat ‘kwetsbare’ mensen beschermd moeten worden. Dit houdt in dat wanneer iemand op een filmpje een zichtbare handicap heeft, duidelijk overgewicht of een lhbti-thema, de filmpjes beperkter of niet werden getoond aan gebruikers van de app. De reden? Ze wilden online pesten tegengaan. Dit zorgt ervoor dat het beeld van gebruikers van de app vrij eenzijdig werd gepresenteerd en dit is een zeer kwalijke zaak. Na confrontatie hebben ze deze regels aangepast, maar het kan dus zeker zo zijn dat bepaalde video’s op bepaalde gronden niet worden getoond aan gebruikers of alleen in het land waarin ze zijn geüpload.

Ook bijzonder: het gaat om versie 16.6.4 op Android die getest is. In de tussentijd was versie 16.7.3 verkrijgbaar in de Play Store. Wanneer er werd geprobeerd verkeer tussen de app en de server in te zien, werkte de huidige setup niet meer. Er ging enkel één soort request richting de servers van TikTok waarbij o.a. je IP-adres en de naam van je WiFi-netwerk werd verstuurd naar de monitoringservice. Maken ze het onderzoekers nou moeilijker?

Toevoeging op 13-08-2020: ook bleek er in latere versies MAC-adressen te worden verzameld, maar de data waarin dit zat werd versleuteld verstuurd naar de servers. De Wall Street Journal kwam hierover met een artikel. Nu is het niet toegestaan van de Play Store om deze informatie te verzamelen van je gebruikers, waarna de app dit gedeelte versleuteld heeft verstuurd om het de Play Store én onderzoekers het moeilijker te maken.

Veilig gebruik mogelijk?

De hamvraag is uiteindelijk dan: kun je TikTok dan wel veilig gebruiken? Deze vraag kan het beste worden beantwoord met een Brabants gezegde: “da moete gij zelf witte” (vertaling: dat kun je het beste zelf bepalen). Op basis van de informatie hierboven zijn er in principe technisch geen rare dingen te zien aan de app en gedraagt deze zich net als andere social media of video apps, met een kleine kanttekening dat ze alleen vaker informatie van jou versturen en meer toegang tot services op je telefoon hebben. Maar, let op, niet schrikbarend. Zeggen dat je TikTok - wanneer je puur naar het technische gedeelte kijkt - moet verwijderen, maar ondertussen Instagram en bijvoorbeeld internetgames blijven gebruiken is een beetje hypocriet. Het grote verschil is het soort bedrijf dat deze informatie verzamelt. Maak een goede afweging of jij een app wilt gebruiken waarvan het hoofdkantoor in China zit en of je het acceptabel vindt of jouw gedrag door hen wordt geanalyseerd.

Kun je dan niks doen om het in te perken? Jawel, maar écht verschil maak je alleen door de app niet meer te gebruiken. Mocht je deze ‘fear of missing out’ niet aankunnen, dan kun je altijd nog de site in je browser bekijken. Er worden dan minder gegevens over bijvoorbeeld je apparaat verstuurd. Heb je de overwogen keuze gemaakt dat je het bekijken van je dagelijkse dansjes niet kunt missen via de app, dan kun je de app de toegang tot je camera, microfoon en locatie ontzeggen. Wanneer TikTok dan toch de ambitie heeft om later iedereen op grote schaal af te luisteren, gaat dat bij jou wat minder makkelijk.

  1. Bron: TikTok statistics 

  2. Of het vervolgens weer ergens anders terecht komt is op het moment niks over te zeggen binnen de scope van deze test 

  3. Bron: The Intercept