Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Mobile] Authenticeren nieuwe app-installaties

Pagina: 1
Acties:

  • diabolofan
  • Registratie: Mei 2009
  • Laatst online: 13-11 08:57
Goedemorgen,

Al enige tijd ben ik aan het nadenken voor nog nader op te zetten WebServices (ASP.Net Web Api 2), en een nog nader te bouwen app voor Android, iOS en Windows Phone (Xamarin).
Mijn probleem zit hem alleen in het authenticeren van de requests vanuit de app. Deze dienen namelijk wel echt uit de apps te komen, en dus niet buiten de apps om aangeroepen te kunnen worden. Dit in verband met copyright en auteursrechten. Of er voor de content waar copyright en auteursrechten op rust betaald moet worden is nog niet helemaal duidelijk.

Een waterdichte methode is er natuurlijk niet, maar ik zou toch graag de zo veilig mogelijke manier willen gebruiken. De opties/beveiligingen die ik zelf al verzonnen had zijn als volgt:
  1. Checken of user-agent Android, iOS of Windows Phone is. Dit is uiteraard te manipuleren, dus niet erg handig en veilig.
  2. Elke gebruiker laten registreren. Ook maar een gedeeltelijke oplossing, omdat de api die de registratie regelt, natuurlijk ook gewoon vanuit een niet-app kan worden aangeroepen. Dit is ook niet erg gebruikersvriendelijk.
  3. Checken of er betaald is. De content waar copyright en auteursrecht op ligt dient misschien te worden gekocht, er zou dan dus bij elke request gecheckt kunnen worden of diegene betaald heeft. Dit kan dus niet wanneer er toch niet betaald hoeft te worden voor deze content.
  4. Device info meesturen, plus een hash over (een deel) van deze data, en deze op de server vergelijken. Dit is opzich best veilig, behalve wanneer de app gedecompileerd wordt. Dan kan natuurlijk gezien worden wat er in de code gedaan wordt om de hash te genereren. Dit is denk ik de veiligste methode, althans, de meest lastige te vervalsen, wanneer de kwaadwillenden (:+) het decomipleertrucje niet kent. (op Google vindt ik alleen niet veel info over het obfuscaten van Xamarin/C# code)
Het is me opzich wel duidelijk dat het niet mogelijk is het om het volledig waterdicht te maken. Wat eigenlijk mijn doel is om niet (al) (te) veel requests te krijgen dan alleen van de apps. Dit ter voorkoming van misbruik.

Ik ben dus benieuwd of er nog andere goede manieren zijn, die het 'ongevraagd' gebruiken van de Web Api (voor welk doel dan ook) te verhinderen/zo moeilijk mogelijk te maken.

Ik hoor het graag!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Zorg ervoor dat alle communicatie tussen je app en je server versleuteld is (d.m.v. SSL/TLS) en verifieer bij het verbinding maken dat het SSL-certificaat afkomstig is van de juiste partij. Hiermee voorkom je dat de communicatie wordt afgetapt d.m.v. een proxyserver die SSL-verkeer kan onderscheppen (zoals Fiddler).

Dit zou je kunnen doen door te controleren of de thumbprint van het CA-certificaat overeenkomt met wat je verwacht. Een nadeel van deze aanpak is wel dat je vastzit aan de leverancier van je SSL-certificaten, maar als je ooit van CA wil veranderen zou je dit met een app-update kunnen oplossen.

Verder zul je wat beveiliging in moeten bouwen, bijvoorbeeld door delen van je programma te obfuscaten of te werken met public/private key encryptie. Voor authenticatie zou je kunnen kijken hoe ver je met OAuth kunt komen.

We are shaping the future


  • diabolofan
  • Registratie: Mei 2009
  • Laatst online: 13-11 08:57
Het verifieren of het SSL certificaat klopt voorkomt inderdaad een proxyserver oid. Alsnog is het dan wel mogelijk om vanaf een andere domein een verzoek te doen naar de API. Dit verifieren lost daarvoor dus niet echt wat op...

Dat obfuscaten is inderdaad een goede optie. Moet me even meer inlezen of dit ook mogelijk is in combinatie met Xamarin.

Bedankt voor de input in ieder geval :)

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 16:24
diabolofan schreef op vrijdag 11 april 2014 @ 08:56:
Dat obfuscaten is inderdaad een goede optie. Moet me even meer inlezen of dit ook mogelijk is in combinatie met Xamarin.

Bedankt voor de input in ieder geval :)
Als het over het internet gaat is het af te tappen. Simple as that. Zelfs al doe je CA verificatie, dan nog kan je je alle URLs zien waarmee gecommuniceerd wordt. Requests aftappen (dat de app er dan niets meer mee doet omdat de CA niet goed is maakt niet uit) en zelf herhalen en je hebt de response.

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Dat is niet helemaal juist. Wanneer requests over SSL gaan kun je alleen de hostname zien (die wordt gebruikt voor DNS resolves en in het geval van SNI het kiezen van de juiste vhost), de payload van het request (inclusief de URL) is versleuteld.

We are shaping the future


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13:46

Janoz

Moderator Devschuur®

!litemod

SSL is allemaal leuk en aardig en het maakt het aftappen inderdaad een stuk lastiger, maar alleen wanneer beide uiteinden te vertrouwen zijn. In dit geval is dat echter niet zo. De app op de client draait immers in een untrusted enviroment.

Optie 4 is trouwens bij lange na niet zo betrouwbaar als je denkt. Het is immers vatbaar voor replay attacks. Als je dat gaat doen, laat dan iig een challange vanaf de server sturen zodat de berekende hash altijd anders is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1