Apparaat

Op veel plaatsen in de wereld, en ook in Nederland, gebruiken mensen een ADSL internetverbinding, waarbij de hardware voornamelijk uit een Alcatel SpeedTouch "modem" bestaat.

Puzzel

Zo'n modem is een snelle computer, met ingebouwde http, telnet en ftp servers (en nog veel meer). In principe doet dit apparaat alleen wat in de firmware is voorgeprogrammeerd, maar je kunt "inbreken" en de inhoud van geheugen en flash naar hartelust wijzigen, als je tenminste vertrouwenwekkend overkomt. Het apparaat werkt met een challenge / response protocol, waarbij het jou een vraag stelt (van de vorm 'MODEL (ETHERNETADRES)') en gelooft dat je een Alcatel expert bent als je het goede antwoord weet.

Hier is een script te vinden, dat, als je belooft de makers niet juridisch aansprakelijk te stellen voor al het onheil dat er uit zou kunnen voortkomen, bereid is om bij gegeven challenge (uitdaging, vraag) de bijbehorende response (reactie, antwoord) te berekenen.

Bijvoorbeeld, bij de vraag

'SpeedTouch (00-90-D0-00-00-00)'
luidt het antwoord
For challenge string 'SpeedTouch (00-90-D0-00-00-00)'
the response is 1552815226

De puzzel is nu: Wat is het algoritme? Op welke manier wordt het antwoord berekend?


Oplossing

Ondertussen is de inzendingstermijn verstreken en de prijzen zijn toegekend. Hier een C programmaatje dat bij gegeven "challenge" de juiste reactie berekent:
/* compute response to Alcatel challenge */
#include <stdio.h>

#define M       0x5c22db93
#define BIT31   (1<<31)
#define MASK    0xffffffff


unsigned int image(char *s) {
        int i, j, b = ~0;

        for (i = 0; s[i]; i++) {
                for (j = 7; j >= 0; j--) {
                        b = ((b & BIT31) ? ((b<<1)^M) : (b<<1));
                        if (s[i] & (1<<j))
                                b ^= M;
                }
        }
        return ~b & MASK;
}

int main(int argc, char **argv) {
        if (argc == 2)
                printf("%s: %u\n", argv[1], image(argv[1]));
        return 0;
}

Veiligheid

Volledig niet ter zake doende informatie: Zoals uit inspectie van het inwendige blijkt bevat dit apparaat een Intel i960 processor. Dus, bij het patchen van de machinecode moet Intel i960 assembler gebruikt worden.

In Nederland breken veel eigenaren in hun eigen modem (een SpeedTouch Home) in, teneinde het te vertellen dat het zich moet gedragen als zijn grote broer (de SpeedTouch Pro), die enkele honderden guldens duurder is. Hoe dit gedaan moet worden is in April 2001 door Stefano Chiccarelli in Italië ontdekt. Dit blijkt buitengewoon succesvol.

De reden dat Shimomura en Perrine de code kraakten is een geheel andere: met behulp van kleine wijzigingen kun je het modem veel veiliger maken, zodat inbreken van buiten af onmogelijk of in elk geval veel moeilijker wordt.