Begin deze week is een kwetsbaarheid geopenbaard in encryptiemogelijkheden op Android. Daarlangs hebben kwaadwillenden de virtuele valuta Bitcoin gestolen, ter waarde van 5700 dollar. De random nummergenerator in Google's mobiele besturingssysteem blijkt niet echt willekeurige getallen aan te maken. Op basis van random nummers worden encryptiesleutels aangemaakt, die in het geval van Bitcoin-apps dienen voor de uitwisseling van dat virtuele betaalmiddel.

Veel meer apps kwetsbaar

Google bevestigt het eerder al geopperde vermoeden dat deze kwetsbaarheid niet alleen Bitcoin-apps ondermijnt. Het Android-securityteam concludeert na eigen onderzoek dat alle apps kwetsbaar zijn die de Java Cryptography Architecture (JCA) gebruiken voor verschillende beveilgingsfuncties. Dit zijn het aanmaken van encryptiesleutels, het digitaal ondertekenen van code of content, en het aanmaken van random nummers.

Apps die dit via JCA doen, "kunnen mogelijk geen cryptografisch sterke waardes ontvangen", blogt het team. Dat betekent dat de daarop gebaseerde beveiliging valt te kraken. De oorzaak is dat de onderliggende random nummergenerator (PRNG) niet goed wordt geïnitialiseerd. Daarnaast zijn ook apps kwetsbaar die de OpenSSL PRNG van Android direct aanroepen, zonder expliciete initialisatie daarvan.

Random en echt random

Securityleverancier Symantec heeft al geblogd dat 'het Bitcoin-gat' mogelijk honderdduizenden Android-apps raakt. Het bedrijf heeft via een zoektocht in zijn Norton Mobile Insight-data meer dan 360.000 Android-apps geïdentificeerd die de SecureRandom-functie gebruiken. Daarmee zijn die apps niet per definitie kwetsbaar. Van de gevonden 360.000 zijn er zeker 320.000 die de nummergenerator gebruiken op een soortgelijke manier als de Bitcoin-apps die hierdoor wel kwetsbaar zijn gebleken.

De diverse soorten Android-apps zijn in gelijke mate geraakt door dit nieuwe cryptolek:

Via: Symantec.

Het Android-securityteam sust dat niet alle Android-apps die beveiliging gebruiken nu niet meer te vertrouwen zijn. De veiligheid is wel gewaarborgd in gevallen waar beveiligde TLS/SSL-verbindingen worden aangemaakt door de classes HttpClient en Java.net te gebruiken. Die componenten gebruiken namelijk de OpenSSL PRNG door die willekeurige waardes te voeren afkomstig van de Linux-interface /dev/urandom. Daarmee levert Androids Linux-onderlaag de random getallen op, en niet de generator die is opgenomen in het van Java-afgeleide Dalvik.

Patches, voor Android en voor apps

Terwijl Google nu patches heeft uitgebracht voor de diverse Android-versies, draagt het als eerste advies aan voor app-developers om hún producten aan te passen. Apps moeten updates krijgen zodat ze voortaan de ingebouwde OpenSSL PRNG alleen gebruiken in combinatie met (echt random) getallen van /dev/urandom of van /dev/random. De Android-maker draagt in de blogpost ook een voorbeeldimplementatie hiervan aan.

Het belang van updates voor apps is groot, omdat patches voor Android zelf in de praktijk langs een omweg worden gedistribueerd. Dat gebeurt via smartphonemakers en telecomproviders, die Google's partners zijn in het samenwerkingsverband voor Android: de Open Handset Alliance. Die bedrijven moeten Android-updates altijd zelf verwerken in de software en die dan uitbrengen voor hun klanten.

Android-versies en fragmentatie

Het is in het verleden al meermaals gebleken dat hier veel tijd overheen kan gaan. Bovendien is het niet altijd zo dat updates doorkomen voor alle Android-versies en -apparaten. Soms is dit vanwege prestatieredenen. Hierdoor zijn oude versies nog veel in gebruik, waarbij nieuwere versies met vertraging doorsijpelen naar toestellen. Het niet doordringen van updates betreft ook ook fixes voor securitygaten en kwetsbaarheden, zoals nu het geval is met de encryptiezwakte.