Zet een private mobiele app achter een VPN en een redelijk mens vraagt of die nog steeds certificaat-pinning nodig heeft. De vraag klinkt als een keuze tussen twee gelijkwaardige controles, en het is echt een vraag over twee verschillende poorten. De VPN bepaalt of dit apparaat het pad überhaupt mag gebruiken; de app bepaalt of de bereikte server de verwachte is. Beantwoord beide apart en het ontwerp wordt eenvoudiger.

Twee poorten, twee vragen

Netwerktoegang gaat over de client: is dit apparaat ingeschreven, is zijn referentie geldig, en staat het beleid het toe op dit pad? Appvertrouwen gaat over de server: bereikte de verbinding een dienst met een identiteit die de app accepteert? Die antwoorden komen uit verschillende systemen, falen om verschillende redenen en worden door verschillende teams opgelost. Een VPN-handshake kan slagen terwijl de app met een verlopen certificaat achter de peer praat. Een perfect gepinde app kan toch voor niemand bereikbaar zijn, omdat het apparaat nooit op het netwerk kwam.

De twee tellen op. Een van beide weglaten haalt een controle weg; de andere toevoegen vervangt hem niet.

Wat een pin werkelijk beperkt

Een pin vernauwt de verzameling serveridentiteiten die de app accepteert, meestal door een publieke sleutel of een certificaathash te noemen in plaats van elke keten te vertrouwen waarvoor een opslag zou instaan. Het is een beperking bovenop gewone validatie, geen vervanging ervan. Gewone validatie beantwoordt of een keten überhaupt betrouwbaar is; de pin beantwoordt of het de keten is die deze app verwacht. Een implementatie die de eerste stap overslaat, heeft geen veiligheid gewonnen, alleen nieuwheid.

Het object dat gepind wordt verschilt per platform, dus het woord alleen zegt je heel weinig. Een hash uit de truststore van één product kopiëren en die in een mobiele app als hetzelfde behandelen is een veelgemaakte en stille fout.

Pinning op het platform is een configuratie, geen beleid

Android biedt pinning via zijn netwerkbeveiligingsconfiguratie, waar een pinset digests van een publieke sleutel bevat en de keten er minstens één moet bevatten. Dat bestand is per app en vereist een bewuste buildwijziging. iOS heeft geen gelijkwaardig manifestmechanisme, dus pinning leeft daar in de eigen vertrouwensbeoordelingscode van de app.

Omdat het mechanisme verschilt, moet de eis per platform worden geschreven. Een beleid dat zegt pin het certificaat zonder het platform te noemen, is niet uitvoerbaar.

Rotatie bepaalt of de pin overleeft

Het lastige deel is niet de eerste release, het is de certificaatvernieuwing erna. Een restrictief vertrouwensbeleid wijst een legitieme nieuwe sleutel net zo stellig af als die van een aanvaller.

Twee mechanismen maken rotatie overleefbaar: een reservepin die al vertrouwd is voordat hij nodig is, en een vervaldatum op de pinset zodat de handhaving vervalt in plaats van de app onbruikbaar te maken. Beide zijn beleidsbeslissingen, en de vervaldatum is in het bijzonder een bewuste verlaging van de veiligheid, geen onschuldige timer. Benoem wie de build van de app, het TLS-eindpunt en de certificaatvernieuwing beheert, en breng ze in één wijzigingsproces onder. Als dat drie verschillende teams zijn, zal de pin uiteindelijk een storing veroorzaken die niemand had gepland.

Een verloren apparaat is een derde probleem

Het intrekken van een VPN-referentie beëindigt niet noodzakelijk een appsessie, en een serverpin doet helemaal niets aan een telefoon in andermans hand. Apparaatvergrendeling, opslag van referenties, sessieduur en intrekking op afstand zijn afzonderlijke beslissingen met afzonderlijke eigenaren. Ze in de pinningdiscussie vouwen garandeert dat geen ervan wordt ontworpen.

Test vier relaties in plaats van de ene die je ziet: de bedoelde server en handeling, een account dat geweigerd zou moeten worden, een serveridentiteit die verworpen zou moeten worden, en de geplande rotatie. Een werkende VPN oefent alleen de eerste. Schrijf op wat elke test bewees, want de volgende persoon zal aannemen dat een groene tunnel betekent dat alle vier slaagden.

Gerelateerde artikelen