Vorige keer schreef ik over de domheid van ICS. Ik had toen geen ruimte om dat met voorbeelden te documenteren, maar onlangs wilde ik een oude, maar voor mij nog steeds bruikbare smartphone gaan gebruiken.
Henk van de Kamer
Achteraf was het niet slim, maar vlak voor een treinreis – zoals eerder al eens gezegd, is dat voor mij de belangrijkste reden om een mobiel te gebruiken – wilde ik even een nieuwe app installeren om iets te kunnen demonstreren. Dat ging mis [1] en het geheel kwam in een oneindige boot-loop terecht. Gelukkig werkte Arriva mee en was de telefoon op deze reis niet nodig, maar ik zat toch niet echt lekker...
Samsung Galaxy S II
Op 7 juni 2011 – tja, ik bewaar alle mail – wilde mijn toenmalige baas dat ik ook in de trein kon werken. Ofwel een mobiel met internet. Op 11 maart van dat jaar was de Samsung Galaxy S II aan de pers voorgesteld en dat leek een geschikt toestel. Oorspronkelijk [2] met Android Gingerbread en ergens in de eerste helft van 2013 een upgrade naar Android Jelly Bean (4.1.2), wat tevens de laatste update is die ik bij Samsung kan terugvinden [3]. Na het faillissement van de toenmalige uitgever van PC-Active, wilde de curator het geheel niet terug en sindsdien mag ik het mijn bezit noemen. Ik heb het de afgelopen jaren voornamelijk gebruikt om foto’s te nemen tijdens de verbouwing. Dat klinkt gevaarlijk, maar het toestel heeft dit alles overleefd...
Zoals gezegd, is het toestel goed genoeg voor het ontvangen van de SMS-berichten die ICS verplicht gaat stellen. Om te laten zien hoe onveilig dat is, heb ik de Trust Manager van Bluebox [4] geïnstalleerd. Deze controleert voornamelijk de Linux-kernel en drivers die tezamen de basis van een Android ‘distributie’ vormen. Het resultaat van deze scan is het linker deel van figuur 1. Kijk nog even niet naar het rechterdeel, want dat ga ik nu uitleggen.
Figuur 1: Security risks in Android 4.1.2 (links) en Android 4.4.4 (rechts; patchlevel 2018-04)
Consumentenbond
Ik kan niet achterhalen wanneer Samsung gestopt is met het produceren van de Galaxy S II. Gebaseerd op de Pricewatch van Tweakers vermoed ik in het eerste kwartaal van 2014, omdat de rest van de grafiek [5] duidt op de verkoop van restpartijen. Voor veel mensen is de gemiddelde levensduur van hun telefoon hetzelfde als het tweejarig contract, maar dat is eigenlijk een enorm milieuprobleem. Op de onveilige software na, is mijn toestel na bijna zeven jaar nog steeds prima bruikbaar!
Samsung heeft de software voor deze telefoon minder dan twee jaar onderhouden, schandalig! De reden dat de Consumentenbond in 2016 een rechtszaak startte om gedurende een langere tijd updates af te dwingen. Ze verloren het kort geding en de uitspraak in de daarop volgende bodemprocedure is waarschijnlijk bekend rond de tijd dat u deze zin leest. Op dit moment – 7 mei 2018 – draait op 1,5% van de nog in gebruik zijnde apparaten Jelly Bean 4.1.x en op 0,7% draaien nog oudere versies. Ik weet dat veel van de getoonde, ernstige bugs in figuur 1 ook aanwezig zijn in de originele KitKat 4.4.4 of ouder. Dan praten we over 15,3% van de gebruikers.
LineageOS
De broncode van Android is openbaar [7] en daarmee worden meerdere niet-fabrikant-afhankelijke Android-distributies gemaakt. In het verleden installeerde ik het toen bekende CyanogenMod op een Sony Xperia ZR. De opvolger – de source van CyanogenMod is nog beschikbaar, maar veel van de documentatie is verdwenen – is LineageOS [8]. Zij hebben voor heel veel toestellen firmware gemaakt, waaronder de Samsung Galaxy S II [9]. De huidige versie voor dit toestel is volgens hen 14.1 en die is weer gebaseerd op de code van Android 7.1 (Nougat).
Het installeren is ten dele gelukt [10], maar niet dankzij de genoemde handleiding. Die klopt voor geen meter! Het probleem is dat modernere versies van een besturingssysteem meer ruimte nodig hebben. De interne flash is opgedeeld in een serie partities en één daarvan is bedoeld voor de kernel, een ander voor de programma’s exclusief de apps. Nogmaals, Android is gewoon de Linux-kernel waarop uiteindelijk Dalvik of ART draait. Die zorgt ervoor dat we apps kunnen gebruiken waarvan de code onafhankelijk is van de achterliggende processor. Voor KitKat (4.4.4) en eerder is de ooit door Samsung gereserveerde 512 MiB voor de ondersteunende programma’s voldoende, maar dat is veel te weinig voor Nougat (7.1).
Te nieuw
De truc is het herindelen van de flash en dat is potentieel gevaarlijk. Nu had ik weinig te verliezen en heb dus de gok genomen. Helaas was de gevonden instructie veel te summier en waren veel meer stappen nodig. Maar uiteindelijk leek [10] Android Nougat op dit zeven jaar oude toestel te draaien. Leek, want anders dan in de meeste Linux-distributies hebben de LineageOS ontwikkelaars een probleem. Veel van de hardware in telefoons is bedrijfsgeheim, ofwel drivers en documentatie zijn niet of nauwelijks beschikbaar. Met de nodige trucs zijn de door fabrikanten geleverde binaire bestanden te gebruiken, maar dan zitten we meestal vast aan dezelfde kernel als de laatst uitgerolde officiële kernel op dat toestel.
Op zich is dat nog geen echt probleem. De source code van de kernel is gewoon openbaar en kan gepatcht worden zodra security bugs ontdekt worden. Echter missen we dan de functionaliteit die in nieuwere kernels aanwezig is en voor Android Nougat wordt één daarvan gebruikt door de File Manager, die dus meteen crasht na opstarten, waarmee deze versie voor mij onbruikbaar is. Het probleem is bekend [11] en iemand gaat proberen om het missende deel te backporten naar de oudere kernel. Maar tot dat moment moet ik iets anders verzinnen...
Figuur 2: Een kersverse KitKat 4.4.4 |
Security patches
De oplossing is eigenlijk heel simpel. Het gaat mij niet om de nieuwste Android – sterker nog, wat ik draaiend heb gezien vond ik niet bijzonder gebruikersvriendelijk – maar om een versie waarin alle bekende, ernstige bugs zijn opgelost. De kernel en andere onderdelen worden sowieso gepatcht, ofwel ik kan gewoon Kit Kat 4.4.4 installeren. Die moeten we dan wel zelf compileren, maar gelukkig vond ik iemand die dat voor de Samsung Galaxy S II doet [12]. Om het toestel bruikbaar te maken is GApps [13] – Google-apps zoals de Store – nodig en ook die wordt keurig bijgehouden. Vervolgens kwam ik in de problemen vanwege de eerdere poging om Nougat te installeren, maar gelukkig wist ik dat op te lossen [14].
Het resultaat van al deze experimenten is een toestel dat volledig gepatcht is tegen alle bekende bugs zoals het rechter deel van figuur 1 laat zien. In figuur 2 zie je een screendump van de data waarop onderdelen zijn gecompileerd. Als een paar vrijwilligers in staat zijn om een zeven jaar oud toestel van updates te voorzien, zou dat voor een bedrijf als Samsung met een budget van vele miljoenen een eitje moeten zijn. Ik hoop dat de Consumentenbond de rechtszaak gaat winnen, al is dit slechts een eerste stap naar wat er echt nodig is… (de Consumentenbond heeft de zaak verloren – red.).
Tot slot
We leven in een wereld waarin techniek steeds belangrijker wordt. Fabrikanten hopen dat wij elke twee jaar nieuwe spullen kopen, maar dat is in de praktijk anders. We zouden fabrikanten moeten dwingen om minimaal vijf en misschien zelfs wel tien jaar hun spullen van veilige software te blijven voorzien. Als zij daar niet toe in staat zijn, moet op het moment dat zijn in gebreke blijven, verplicht alle broncode en documentatie van de hardware gratis aan de gemeenschap worden gegeven. En nee, argumenten als bedrijfsgeheim of andere onzin tellen niet! Wie niets wil vrijgeven, weet nu wat daarvoor gedaan moet worden: zorgen voor levenslange, regelmatige updates. Helaas zal dit voorlopig nog wel een utopie blijven.
Infolinks
[1] www.hetlab.tk/android/android-crash
[2] https://en.wikipedia.org/wiki/Samsung_Galaxy_S_II
[3] www.hetlab.tk/android/geen-storage
[4] https://play.google.com/store/apps/details?id=com.bluebox.labs.trustmanager
[5] https://tweakers.net/pricewatch/277723/samsung-galaxy-s-ii-i9100-zwart.html
[6] https://developer.android.com/about/dashboards/
[7] https://source.android.com/
[8] https://lineageos.org/
[9] https://wiki.lineageos.org/devices/i9100
[10] www.hetlab.tk/android/te-nieuw
[11] https://jira.lineageos.org/browse/BUGBASH-254#comment-24512
[12] https://forum.xda-developers.com/galaxy-s2/development-derivatives/rom-lineageos-11-0-based-galaxy-s2-gt-t3637142
[13] https://opengapps.org/
[14] www.hetlab.tk/android/geen-storage