Etappe 0: De kabel werkt nauwelijks meer
Etappe 1: Installeer de hardware
Etappe 2: De software kant bij Linux (1) - het modem geeft de geest
Etappe 3: De software kant bij de iMac
Etappe 4: Een beetje spelen
Etappe 5: De software kant bij Linux (2)
Snelheid
Veiligheid
Postscript: Een ISA kaart
Twee opmerkingen:
1A. Het pakket bevat een tang om RJ11 stekkertjes te verbinden met een telefoonsnoer. Helaas werkt die tang alleen met een plat snoer, en het snoer in mijn meterkast is rond. Het lijkt erop dat de isolatie van de aders iets te dik is, en deze aders daarom niet in het stekkertje passen. Twee pogingen een stekkertje te bevestigen mislukken, en dit kost twee stekkertjes. Maar de aders ontdaan van isolatie passen wel, en de laatste twee stekkertjes worden succesvol geinstalleerd. (Controle: na monteren van de splitter doet de telefoon het weer.)
1B. In de Primafoonwinkel vraag ik om snoer van splitter naar modem, en krijg een plat snoer (met RJ11 stekkertjes aan de uiteinden). Er was ook ISDN snoer met RJ45 stekkers, kennelijk niet van toepassing. Later, nadat dit snoer allang is gelegd, zegt iemand van een helpdesk: "kabel tussen splitter en modem moet rond zijn, minstens CAT3", en www.mxstream.nl/support zegt dat alleen een CAT5 kabel gebruikt kan worden. Het lijkt erop dat de Primafoonwinkel een verkeerd snoer geleverd heeft (en dat de KPN verzuimd heeft de aan dit snoer te stellen eisen in de meegeleverde documentatie te vermelden). Overigens werkt alles goed.
2A. pppd - was al geinstalleerd.
2B. pptp - installeer ik.
(pptp-linux-1.0.3.tar.gz opgehaald, uitgepakt, vertaald; pptp gecopieerd naar /usr/sbin.)
2C. Met ifconfig het modem via ethernet benaderbaar gemaakt. Het interface is bij mij eth1, bij anderen zal dit vaak eth0 zijn.
ifconfig eth1 down ifconfig eth1 10.0.0.150 netmask 255.255.255.0 broadcast 10.0.0.255 ifconfig eth1 up(De 10.0.0.150 moet vooraan staan, niet achteraan zoals de Xs4all instructies aangeven. Onder Linux 2.0 maakt dit niets uit, onder Linux 2.2 en 2.4 werkt het alleen als het adres eerst gegeven wordt.)
2D. Nu de instellingen van het modem veranderen zoals aangegeven in de KPN documentatie. Het blijkt dat het modem een ingebouwde webserver heeft. Grappig. Instellingen veranderd. Ik kopieer alle web paginas vanaf het modem naar mijn harde schijf (wget -r http:10.0.0.138 -- DOE DIT NIET!). Halverwege het kopieren blijft het modem hangen, reageert niet meer op ping, lampjes zijn niet langer groen. Wat nu weer? Modem uitgezet en aangezet, maar dat helpt niet, het modem komt niet door de POST (Power On Self-Test), en het Power/Alarm lampje blijft oranje branden. De bijgeleverde documentatie zegt niets over de mogelijkheid van een oranje brandend Power lampje. Achterop het modem zit een knop voor "reset to defaults" maar die helpt niet. De KPN helpdesk zegt me het modem terug te sturen.
Ondertussen op het net gezocht naar meer informatie. Op security.sdsc.edu/self-help/alcatel wordt verteld over fouten van dit Alcatel SpeedTouch Home ethernet ADSL modem. Meer in het bijzonder schrijft recover-speedtouch:
If the Power light turns orange, and stays that way, even after a forced restore to defaults, the flash file system may have become corrupted and the device will no longer boot.
Onderzoek van de al door wget gekopieerde paginas suggereert dat de crash optrad na het opvragen van de "Upgrade" pagina. Misschien verwachtte het modem een firmware upgrade? Slordig. Van een apparaat met de mogelijkheid de firmware te vervangen zou je verwachten dat het nieuwe firmware controleert: de eerste 16 bytes een afgesproken code, de laatste 16 bytes een checksum, een time-out tijdens het laden, en pas wegschrijven naar flash als alles in orde is.
Drie dagen later een nieuw modem ontvangen.
Het is een beetje onhandig dat eerst (Afb. 62) wordt vertoond hoe TCP/IP (PPTP) moet staan, en daarna (Afb. 65) het weer veranderd wordt om met het modem te praten. Het is makkelijker om voor het modem een nieuw stel instellingen te maken: TCP/IP (ethernet naar modem). Tenslotte wordt helemaal geen PPTP gebruikt om met het modem te praten.
Bij "service provider username" blijkt niet "naam" maar "naam@xs4all-basic-adsl" te moeten staan, natuurlijk alleen als de service provider Xs4all is.
Dit werkt.
=>help Following command groups are available : config system software ip phonebook pptp bridge td dns dhcp =>help config Following commands are available : save erase load flush reset help exit =>help system Following commands are available : setpassword clearpassword reboot save load help exit =>help software Following commands are available : version setpassive deletepassive cleanup switch help exit =>help ip Following commands are available : apadd apdelete aplist ping sendto iflist ifconfig rtadd rtdelete rtlist arpadd arpdelete arplist config save flush load help exit =>help phonebook Following commands are available : list add delete save flush load autolist help exit =>help pptp Following commands are available : iflist ifconfig ifadd ifdelete save flush load help exit =>help bridge Following commands are available : portadd portlist portdelete portconfig macadd maclist macdelete config save flush load help exit =>help td Following commands are available : call help exit =>help dns Following commands are available : start stop status list add rem delete clear stats clrstats fwdtable toutfwd nslookup domain save flush load fwdadd fwddelete fwdlist tron troff help exit =>help dhcp Following commands are available : start stop config policy spoof status list add delete stats clrstats tron troff client save flush load help exit =>ping 10.0.0.150 Unknown command. =>ip [ip]=>ping 10.0.0.150 Invalid option => 10.0.0.150 [ip]=>help Following commands are available : apadd apdelete aplist ping sendto iflist ifconfig rtadd rtdelete rtlist arpadd arpdelete arplist config save flush load help exit [ip]=>help ping ping : Sends ICMP ECHO_REQUEST packets addr=Ja, het bestand Home.pdf zegt ook dat de verbinding verbroken wordt hetzij door timeout, hetzij door het telnet programma te sluiten. Hier typte ik Ctrl-] gevolgd door quit.[count= ] [size= ] [interval= ] [listen={off|on}] [ip]=>ping addr=10.0.0.150 count=3 9 bytes from 10.0.0.150: icmp_seq=0 9 bytes from 10.0.0.150: icmp_seq=1 9 bytes from 10.0.0.150: icmp_seq=2 [ip]=>exit =>exit =>quit Unknown command. => telnet> quit Connection closed.
OK, dus telnet werkt.
Wat voor poorten zijn er nog meer open?
# nmap -sS -sU -O -v 10.0.0.138 Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Host (10.0.0.138) appears to be up ... good. Initiating SYN half-open stealth scan against (10.0.0.138) Adding TCP port 21 (state open). Adding TCP port 23 (state open). Adding TCP port 1723 (state open). Adding TCP port 80 (state open). The SYN scan took 1 second to scan 1541 ports. Initiating FIN,NULL, UDP, or Xmas stealth scan against (10.0.0.138) The UDP or stealth FIN/NULL/XMAS scan took 4 seconds to scan 1541 ports. For OSScan assuming that port 21 is open and port 1 is closed and neither are firewalled Insufficient responses for TCP sequencing (0), OS detection will be MUCH less reliable Interesting ports on (10.0.0.138): (The 3073 ports scanned but not shown below are in state: closed) Port State Service 7/udp open echo 9/udp open discard 19/udp open chargen 21/tcp open ftp 23/tcp open telnet 53/udp open domain 69/udp open tftp 80/tcp open http 1723/tcp open pptp Remote operating system guess: Alcatel 1000 ADSL (modem) Nmap run completed -- 1 IP address (1 host up) scanned in 32 seconds #Hier schrok ik weer: de groene lampjes waren uitgegaan, en het modem knipperde rood, toen oranje, tenslotte weer groen. Het lijkt op een reboot sequence. Misschien crasht het modem onder deze scan, en herstart het automatisch.
Met ftp ingelogd en filesysteem bekeken.
ftp> ls drwxrwxrwx 1 0 0 176 Jun 29 1971 active drwxrwxrwx 1 0 0 64 Jun 29 1971 dl -rwxrwxrwx 1 0 0 16 Jun 29 1971 startup.cmd -rwxrwxrwx 1 0 0 21215 Jun 29 1971 GV8AAA1.000 -rwxrwxrwx 1 0 0 276 Jun 29 1971 mount.cmd ftp> ls dl -rwxrwxrwx 1 0 0 997001 Jun 29 1971 GV8BAA3.253 -rwxrwxrwx 1 0 0 27 Jun 29 1971 start.cmd ftp> ls active -rwxrwxrwx 1 0 0 997001 Jun 29 1971 GV8BAA3.253 -rwxrwxrwx 1 0 0 27 Jun 29 1971 start.cmd -rwxrwxrwx 1 0 0 0 Jun 29 1971 system.ini -rwxrwxrwx 1 0 0 323 Jun 29 1971 ip.ini -rwxrwxrwx 1 0 0 308 Jun 29 1971 phone.ini -rwxrwxrwx 1 0 0 28 Jun 29 1971 bridge.ini -rwxrwxrwx 1 0 0 92 Jun 29 1971 pptp.ini -rwxrwxrwx 1 0 0 58 Jun 29 1971 dnsd.ini -rwxrwxrwx 1 0 0 217 Jun 29 1971 dhcp.iniEven kijken:
% cat startup.cmd GV8AAA1.000 -t % cat active/start.cmd /active/GV8BAA3.253 dbg_no % file GV8AAA1.000 GV8AAA1.000: MIPSEB COFF executable not stripped - version 0.0 % file GV8BAA3.253 GV8BAA3.253: dataHet bestand GV8BAA3.253 bevat onder andere een tar archief met daarin alle webpaginas. De beide files in dl zijn identiek aan de gelijkgenaamde in active. Kennelijk is dl het download directory, en het switch commando verwisselt active en dl. Het geheel doet wat Unix-achtig aan. Mount wordt gebruikt om de devices /dev/fda1 en /dev/fda2 (flash disk?) op de directories /active en /dl te mounten. Een foutmelding luidt: exit to shell... en er is een commando fscheck. Het systeem wordt OSBA genoemd. De machine is misschien een i960. Mijn objdump werkt alleen op i386. Een nieuwe binutils opgehaald en met ./configure --enable-targets=all geconfigureerd. Segmentation fault Hmm. Hoop hier later verder naar te kijken.
[Later: Ja, objdump kan goed gebruikt worden om de code van GV8AAA1.000 te disassembleren. Hij verwachtte alleen een andere endianness - een klein filtertje repareert dat. Op het net is ook een uitpakker beschikbaar die GV8BAA3.253 omzet in een drietal bestanden GV8BAA3.253.head, GV8BAA3.253.coff, GV8BAA3.253.tar. Dat tar-bestand was al ongecomprimeerd zichtbaar in GV8BAA3.253, maar dit levert de objectcode van de firmware op (ruim 2 MB).
% file GV8BAA3.253.coff GV8BAA3.253.coff: MIPSEL COFF executable not stripped - version 0.0Maar objdump herkent het formaat nog niet.
Het operating system is een versie van pSOS van WindRiver, een Unix-achtig systeem voor embedded toepassingen.]
Er blijkt een backdoor commando EXPERT te zijn, zoals Tsutomu Shimomura en Thomas Perrine ontdekten (en ook eenvoudig zichtbaar is via
% strings GV8BAA3.253.coff ... Invalid Password... No switch to expert Mode. EXPERT ...). Het password volgt via challenge-response waarbij de challenge de vorm 'model (MAC address)' heeft, en het juiste antwoord is op het net te vinden. Het algoritme blijkt heel eenvoudig, een leuk beginnerssommetje voor cryptanalyse. Een reactie van Alcatel. (Grappig detail: het aanvankelijke persbericht van Alcatel was een Word document inclusief revision history waar meer interne zorgen uit bleken dan uit de uiteindelijke versie.)
Sessie:
=>software version Active : GV8BAA3.253 Passive : GV8BAA3.253 =>EXPERT 'SpeedTouch (00-90-D0-31-61-88)' Password : Switch to expert mode. Return to Normal mode by typing <NORMAL> >help Built-in shell commands : cd cleandisk copy df dev dir download dump echo fdisk format fscheck link load mkdir move mount protect pwd remove rmdir sync unmount upload version short Following topics are available : dbg err xapi guard rip ni etha atm atm eth llc atmf iwu sock ipoa ipoa tcp pptp tftp config system softwa phoneb bridge dns dhcp dhcpc sachem eoc aoc hs mlit msit golden tdsl >df Filesystem 512-blocks Used Available Capacity Mounted on /dev/fda0 251 78 173 31% / /dev/fda1 2292 2019 273 88% /active /dev/fda2 2292 2004 288 87% /dl >pwd / >dir Inode dev uid gid link size mode 1 256 0 0 3 112 40777 [.] 1 256 0 0 3 112 40777 [..] 1 257 0 0 1 176 40777 [active] 1 258 0 0 1 64 40777 [dl] 15 256 0 0 1 16 100777 startup.cmd 9 256 0 0 1 21215 100777 GV8AAA1.000 17 256 0 0 1 276 100777 mount.cmd BLOCK: 78 allocated, 173 free, 0 recoverable, 251 total INODE: 7 allocated, 13 free, 0 recoverable, 20 total >fdisk Using /dev/fda0 as default device Command (m for help) : l - List partitions n - Add new partition d - Delete partition w - Write partition table and exit q - Quit m - Print help Command (m for help) : part. noSectors startSector endSector BlockSize noInodes -------------------------------------------------------------- /dev/fda0 3 0 2 512 20 /dev/fda1 19 3 21 512 100 /dev/fda2 19 22 40 512 100 Command (m for help) : >help softwa version : Displays active and passive software versions setpassive : Installs a file as passive software version file=deletepassive : Deletes passive software cleanup : Deletes all unused files on passive software partition switch : Switches active & passive software versions & reboots > NORMAL
Ingelogd als EXPERT kun je een Speed Touch Home omzetten in een Speed Touch Pro, zoals Stefano Chiccarelli ontdekte. (Italiaanse en Engelse instructies.) De reactie van Alcatel suggereert dat dit vermoedelijk echt werkt (maar natuurlijk geheel voor eigen risico is). Zie ook Planet Multimedia en bruring.
Foute commandos veroorzaken vaak een reboot. Bijvoorbeeld:
>rip rip>drv_read 0 20 b the data in hex is : 2d2d24d8860445333143363834304342434135302020202020203130323037523733203720202020 rip>drv_read 0 20 c Connection closed by foreign host.
Nu nog twee configuratiefiles. In /etc/ppp/pap-secrets username en password:
# Authenticatie via PAP # login - server - pass - IP NAAM@xs4all-basic-adsl * PASSWORD *In /etc/ppp/options.adsl:
idle 0 debug noauth user NAAM@xs4all-basic-adsl defaultroute usepeerdns nodetach lcp-echo-interval 10 lcp-echo-failure 3met voor NAAM en PASSWORD loginnaam en password by Xs4all.
Het commando /usr/sbin/pptp 10.0.0.138 file /etc/ppp/options.adsl levert nu als uitvoer: Couldn't set tty to PPP discipline: Invalid argument. Hij probeert vast een modem over een seriële lijn te benaderen. Niet ter zake doende dingen, zoals een oud /etc/ppp/options file opgeruimd, en alle PPP kernel config options aangezet. Ditzelfde pptp commando levert nu als uitvoer: Terminated, en /var/log/messages zegt:
pptp[31940]: log[pptp_dispatch_ctrl_packet:pptp_ctrl.c:548]: Client connection established. pptp[31940]: log[pptp_dispatch_ctrl_packet:pptp_ctrl.c:643]: Error opening call. [callid 0] pptp[31940]: log[call_callback:pptp_callmgr.c:88]: Closing connection pptp[31940]: log[pptp_conn_close:pptp_ctrl.c:285]: Closing PPTP connectionHmm. Is het modem na het spelen nog steeds goed geconfigureerd? Nee, alle instellingen zijn weg, en zelfs de menus om ze te wijzigen zijn weg. Ach. Ga met de browser naar System Setup, click Defaults, OK, Save All. Volg nu weer de door KPN beschreven procedure voor de Macintosh. Probeer bovenstaand commando opnieuw. Alles werkt. Verwijder de debug regel. Alles werkt nog steeds.
Zoals boven al bleek is het makkelijk om in te breken op het modem, en bijvoorbeeld de firmware te vervangen door een programma naar keuze. Dat betekent dat dit modem beschermd moet worden. Om een echo aanval te vermijden moet de echo service in /etc/inetd.conf uitgeschakeld zijn. Als het locale net niet vertrouwd kan worden dan is eenvoudige masquerading met ipchains -A forward -j MASQ -s 192.168.1.0/24 -d 0.0.0.0/0 niet goed genoeg: iedereen kan 10.0.0.138 benaderen. Een regel met iets als ipchains -I forward -j REJECT -d 10.0.0.0/24 is een goed idee.
Het CERT advisory.
Uit Italie wordt gemeld dat de modem firmware vervangen wordt zonder medeweten van de eigenaar. (Onbevestigd.)