QCSec Security Blog

Crowd Control?

de “Leids Ontzet”-app van de Nationale Politie

geplaatst door Mark Koek op 06-Oct-2014

Voor de viering van Leids Ontzet zette de politie o.a. een speciale app in om de drukte in de stad onder controle te houden. Het publiek werd gevraagd om de app te installeren op de smartphone en om de app toegang te geven tot locatiegegevens.

Het lijkt erop dat dezelfde app is ingezet voor Koningsdag, de Gay Pride in Amsterdam en de Vierdaagse in Nijmegen - de app bevat van dit laatste ook nog sporen.

QCSec testte de privacy en veiligheid van de app en vond opmerkelijke resultaten. Derden kunnen eenvoudig 'meelezen' met de communicatie tussen de app en de politie, en kunnen zelfs de berichten manipuleren die aan het publiek worden verzonden. De privacy is niet gewaarborgd, en er kunnen gevaarlijke situaties ontstaan als iemand hier misbruik van zou maken.

In het historische stadscentrum van Leiden is elk jaar op 2 en 3 oktober een grote mensenmassa op de been voor de viering van Leids Ontzet. Voor de daarbij benodigde crowd control lanceerde de Nationale Politie dit jaar voor het eerst een speciale app voor smartphones. In de aanloop naar 3 oktober promootte de Nationale Politie in de regio Leiden daarom haar speciale "Leids Ontzet"-app voor iOS en Android. Hiermee kon op een "druktemeter" worden gekeken waar het druk was, konden berichten aan mensen worden gestuurd, en was de agenda van de feestelijkheden te vinden.

Screenshot1 Screenshot2 Screenshot3

De politie legt er sterk de nadruk op dat de privacy van de gebruiker gewaarborgd is. Dat konden we natuurlijk niet nalaten om eens nader te onderzoeken.

We downloadden de app op een testtoestel (een Apple iPod Touch met iOS 7.1.2) en startten tcpdump om al het netwerkverkeer van de app te registeren. Daarna gingen we op vrijdagavond 3 oktober de stad in!

Op diverse plaatsen in de stad keken we even in de app (soms met en soms zonder een plaatselijke wifi-verbinding) om de druktemeter en de door de politie aan het publiek verstuurde berichten te checken. Weer thuis haalden we het bestand met al het netwerkverkeer van de iPod over naar ons testsysteem voor nadere analyse.

Dus wat doet die app nou eigenlijk?

De app zoekt als eerste contact met een systeem op het internet met de naam d.siss.io. Enige nazoekwerk op dit adres levert meteen al een opmerkelijk resultaat. Het domein siss.io is namelijk geen eigendom van de Nationale Politie, maar van Spanner, een bedrijfje in het Noord-Engelse dorpje Ulverston. Volgens de website neemt Spanner deel aan het Socionical Project, een door de EU gesubsidieerd project, “building a mixture of web and iPhone tools to help in their study of the behaviour of crowds.”.

Spanner stuurt de Leidse feestganger door naar het Amerikaanse Amazon voor de verdere vertaling van d.siss.io naar diverse IP-adressen in de reeksen 54.192/16 en 54.224/12. Deze adressen worden o.a. gebruikt voor de Amazon Elastic Compute Cloud (EC2). Nog voordat we iets gedaan hebben is dus al verbinding gezocht met Engeland en de VS.

Naar deze adressen in de VS gaat de app dus daadwerkelijk connecties maken. Mobiele apps maken veelal versleutelde verbindingen, en het is soms een behoorlijke uitdaging bij een beveiligingstest om het netwerkverkeer te ontsleutelen. In dit geval blijkt daarvoor echter geen extra werk nodig, want: de politie communiceert onversleuteld!

We kunnen eenvoudig de volgende netwerkverbindingen observeren:

HTTP requests door politie-app

Zoals in het bovenstaande plaatje te zien is vraagt de app een reeks URL's op, alle beginnend met http:// (en niet https://, hetgeen op een versleutelde verbinding zou duiden).

In antwoord op de eerste aanroep (http://d.siss.io/ios/1/11/layout) geeft de server als antwoord hoe de app eruit moet zien: welke menu-items, waar zijn ze geplaatst, waar linken ze naartoe, etcetera. Omdat er geen verificatie of versleuteling plaatsvindt zou iemand in hetzelfde Wifi-netwerk eenvoudig menu-opties aan de app kunnen toevoegen of verwijderen.

Dat moeten we natuurlijk even proberen. Door een “zoek en vervang”-regel in te stellen op de berichten van de server naar de app (met de juiste tools eenvoudig te doen in een Wifi-netwerk) vervangen we de link naar "NS" door een link naar "QCSEC":

Aangepast menuscherm politie-app

(de link naar de druktemeter is verdwenen, we hebben niet nader onderzocht waarom dat tijdens onze test zo gebeurde)

Bij elke menu-optie kan via het netwerk een URL worden opgegeven die de app opent in een Webview als de menu-optie door de gebruiker wordt gekozen. Achter de URL kan zich ook Javascript bevinden. De mogelijk­heden voor een kwaadwillende om de app te manipuleren lijken alleen beperkt door zijn eigen creativiteit...

Device tokens

Als tweede stap POST de app een device token en een userid naar d.siss.io, waarschijnlijk nodig om push-notificaties naar de app te kunnen sturen.

Berichtenverkeer

Daarna doet de app een reeks verzoeken om te zien of er nog nieuwe berichten zijn in de diverse categorieën. Meestal zijn er geen nieuwe, en antwoordt de server met de status code 304 Not Modified. Als er wel een nieuw bericht is wordt dit als antwoord gegeven in JSON-formaat. Ook dit is door iemand in hetzelfde netwerk eenvoudig te manipuleren. Je moet er niet aan denken wat voor paniek er zou kunnen ontstaan als een grappenmaker op het Stadhuisplein met een Wifi-toegangspunt nepberichten in de categorie emergency gaat sturen naar de mensen op het stampvolle plein. Tot onze verbazing is dit alleszins mogelijk en met de juiste apparatuur en/of software zelfs niet heel ingewikkeld.

Hieronder een bericht zoals het van de server werd ontvangen. Zoals te zien is is er geen enkele authenticatie van de server zichtbaar, het bericht kan vrijelijk door iemand op hetzelfde netwerk worden afgevangen en aangepast zodat de ontvanger iets heel anders te zien krijgt:

Bericht van server aan app

Je zou hier cryptografische versleuteling en/of ondertekening van het JSON-object verwachten (bijvoorbeeld met JWT-tokens) maar we hebben niets van dien aard waargenomen.

Privacy

Uiteraard is iemands locatie zeer privacy-gevoelig en de politie geeft ons dan ook met nadruk de verzekering dat deze gegevens zorgvuldig worden behandeld. Het doorgeven van de actuele locatie om de druktemeter te voeden gaat via Apple (Apple legt op dat Location Services die werken terwijl een app inactief is via haar servers verlopen), en deze worden wel versleuteld verzonden (via HTTPS). Wel bleek dat deze data kan worden ontsleuteld door tussen app en server een speciale proxy te plaatsen, maar een volledige beveiligingsanalyse van Apple Location Services voert voor dit artikel te ver.

Maar voor iemand die wil weten waar een telefoon met de politie-app allemaal geweest is, is dat ook niet echt nodig. Er worden namelijk ook andere locatiegegevens verstuurd, en ook weer gewoon onversleuteld. De app stuurt elke paar minuten locatiegegevens aan een Duits bedrijf met de naam SIS software.

We zien periodiek verzoeken voorbij komen aan http://statistics.sis-software.de/putStatistics.py met inhoud zoals hieronder:

POST van locatie door politie-app

Er wordt dus exact bijgehouden waar op welke button is gedrukt, en dat wordt aan de maker gerapporteerd. En met deze informatie (vrijelijk leesbaar over het Wifi-netwerk) kunnen we onze route van vrijdagavond 3 oktober reconstrueren! De app zond de volgende locaties uit, weergegeven op een kaart:

Opgevangen locaties op de kaart

De route die we die avond door de stad hebben afgelegd is er mooi aan te zien. De locaties op de kaart gaan ook vergezeld van een tijdstip, dus het is ook goed inzichtelijk te maken hoe lang we op welke plek waren.

Conclusie

Dit is niet een app die zorgvuldig met onze privacy en veiligheid omgaat:

  1. Data wordt niet alleen met de politie gedeeld: verbindingen gaan naar of via betrokken leveranciers in Engeland en Duitsland, en via grote Amerikaanse internetbedrijven zoals Amazon en Apple;
  2. Data wordt niet vertrouwelijk verzonden: de app "broadcast" privacy­gevoelige data onversleuteld over openbare netwerken;
  3. Data wordt niet beschermd tegen manipulatie: een kwaadwillende met een access point kan de structuur van de app aanpassen en paniek zaaien met nepberichten.

Hoewel het goed is dat de politie van moderne middelen gebruik maakt om de veiligheid te verbeteren kunnen we stellen dat er nog een weg te gaan is voordat burgers in deze app vertrouwen kunnen stellen.

Feedback welkom!