Tegenwoordig veroudert hardware enorm snel – vaak kunstmatig – en verdwijnt vervolgens op de schroothoop. Zonde! Met wat kennis van zaken kunnen veel van deze apparaten weer nuttig en zonder beveiligingsproblemen worden ingezet. In deze aflevering begin ik met een exemplaar uit de categorie Network-attached storage (nas).

hetlab logo
Henk van de Kamer

 

Wie het afgelopen jaar mijn online labjournaal (www.hetlab.tk) heeft bezocht, weet dat ik een hele serie nassen uit de periode 2006 t/m 2015 heb verzameld. De meeste hebben geen updates voor bijvoorbeeld de SambaCry-bug en kunnen dus niet meer veilig gebruikt worden. Desondanks worden regelmatig fikse bedragen gevraagd of geboden. Persoonlijk zie ik geen enkele verzamelwaarde, ofwel veel (ver)kopers doen geen onderzoek of zo’n oudje de hoge vraagprijs wel waard is.

Harddisk

Ook de staat waarin ze worden verkocht is vaak twijfelachtig. Bijvoorbeeld een ontbrekende voeding. Afhankelijk van de ouderdom vraagt een 3,5 inch harddisk grofweg een ampère bij twaalf volt. Als de nas ruimte heeft voor twee harddisks, komen we al snel op een minimaal 36 watt voeding. En dat kost je al snel dertig euro of meer.

Nog erger zijn ontbrekende harddisks. Nu is alles ouder dan zeg zeven jaar niet aan te raden voor het archiveren van belangrijke data. Wat is dan het probleem? Heel simpel, de meeste fabrikanten gebruiken een minimaal besturingssysteem in een NAND-flashchip om daarmee een partitie op de harddisk van een veel uitgebreider besturingssysteem te voorzien. Ik heb nu meerdere nassen onderzocht waarbij het vinden van de laatste firmware mij meerdere uren tot zelfs dagen heeft gekost. En daarmee ben je er nog niet! Vaak wordt de firmware gedownload vanaf een website die niet langer bestaat. Of de firmware kan alleen worden doorgevoerd als de harddisk reeds een oudere versie bevat. Dit alles is meestal oplosbaar, maar ik denk niet dat veel kopers daar toe in staat zijn...

Synology

Dit merk was de Ferrari onder de nassen. Was? Tja, de laatste jaren is Synology de weg kwijt. Zo beweren ze dat vanwege ‘licentieproblemen’ alle oude DSM-versies van hun site verwijderd moesten worden. Persoonlijk geloof ik daar niets van. Hoe dan ook, firmware voor versies van 2013 en eerder zijn niet meer te downloaden. Omdat iedereen meent dat Synology een goed merk is, zijn de vraagprijzen astronomisch hoog (zie afbeelding, exemplaar uit 2011). Tenzij je regelmatig vele pagina’s in Google zoekresultaten doorworstelt voor een antwoord, koop je effectief een apparaat dat niet werkt. En zelfs als je eindelijk de oude firmware vindt, ontdek je ook hier dat de tijd niet stil heeft gestaan.

335 marktplaats 2

Een flink bedrag voor “zo goed als nieuw”?

Schroothoop

Wie het hiervoor benoemde doorleest, zal zich afvragen waarom ik dan dit soort oudjes koop. Heel simpel: wie graag experimenteert met embedded systemen, zal ontdekken dat een nas dankzij de aanwezige SATA- en soms USB 3.0-aansluiting ideaal is. Als een exemplaar na een maand nog niet is verkocht, stuur ik meestal een bericht waarin ik bovenstaande kort uitleg met vervolgens mijn standaard bod van tien euro. Tezamen met de verzendkosten en Marktplaatscommissie is de uiteindelijke prijs dan net onder de vijftien euro. En dat is een heel stuk minder dan een Raspberry Pi. Met als extra argument dat ik een leuke puzzel van de schroothoop red.

Puzzel? Zoals gezegd, is het in originele staat herstellen al een flinke uitdaging. Daarna volgt het uitzoeken hoe we de firmware kunnen vervangen door iets wat volledig up-to-date is. Bedenk dat de meeste nassen draaien op een Linux kernel, de GNU -oftware en tot slot een aantal programma’s die de fabrikant zelf in elkaar knutselt. Niets weerhoudt ons om uit te zoeken of we het geheel kunnen vervangen door een moderne Linux-distributie als Debian, Arch Linux of OpenWrt. Die laatste is ooit ontstaan voor routers, maar tegenwoordig worden ook nassen ondersteund.

Zyxel NSA310

Om duidelijk te maken waarom dit soort oudjes een interessante uitdaging zijn, wil ik mijn onderzoek naar de Zyxel NSA310 met je delen (www.hetlab.tk/?s=Zyxel+NSA310). Het modelnummer is geen tikfout en – zoals je in de volgende aflevering zult ontdekken – wellicht een verborgen hint.

De NAND-flashchip is één gigabit – ofwel 128 megabyte – groot. Dat is veel meer dan gebruikelijk. Zyxel gebruikt dit naast de bootloader voor een tweetal installaties. Eén bevat de versie die gestart wordt en de ander wordt vervangen zodra we een nieuwere firmware doorvoeren. Als dat lukt, wordt dat de versie die voortaan gestart wordt. En mocht er iets fout gaan, dan wordt de vorige versie gebruikt voor een nieuwe upgrade poging.

In principe is de harddisk niet nodig, maar zodra een leeg exemplaar beschikbaar is, wordt die bij de volgende start voorzien van een partitie met daarin een uitgepakte versie die aanwezig is in de NAND flashchip. Vervolgens moet het systeem nog een keer herstart worden voor het omschakelen naar opstarten van de harddisk.

Seriële verbinding

De meeste nassen hebben geen videokaart. In theorie kan een aanwezige usb-poort voor een toetsenbord gebruikt worden, maar zonder uitvoer heeft dat weinig nut. Kortom, we moeten op een andere manier de uit- en invoer regelen en dat is bijna altijd de ouderwetse seriële verbinding. Met de Zyxel NSA310 hebben we geluk omdat deze aansluiting op het moederbord reeds van een header is voorzien. Dat scheelt solderen, iets waar ik niet goed in ben...

Om de uit- en invoer via de seriële verbinding zichtbaar te maken, gebruik ik een USB-naar-UART-adapter. Deze zijn voor een paar euro in China te koop. Vervolgens moeten we op de computer een programma hebben dat overweg kan met zo’n seriële verbinding. Persoonlijk gebruik ik daarvoor Putty onder Linux. De nassen uit de genoemde periode gebruiken bijna altijd 115.200 baud, 8 bits, geen pariteit en één stopbit: 115200,8N1 in een meer compacte notatie. Een link naar de eerste bootlog is te vinden in dit bericht (www.hetlab.tk/embedded/zyxel-nsa310-firmware). Daarin lees je ook dat de vorige eigenaar het apparaat niet heeft gereset, ofwel het standaard wachtwoord werkte niet. Nu is dat vrij simpel op te lossen.

Upgraden

Via de seriële verbinding hebben we volledige controle over het apparaat en kunnen we bestuderen hoe alles werkt. Dat is voor elke fabrikant anders en kan ook in de loop der jaren veranderen.

Persoonlijk vind ik het upgradeproces de meest interessante puzzel. Want als we deze tot in detail begrijpen, is het mogelijk om een eigen firmware te maken en door te voeren via de webinterface. Dat is veel simpeler dan toegang te krijgen via de seriële verbinding en geeft zo een route waarmee de meeste gebruikers het apparaat gemakkelijk naar een moderne omgeving kunnen upgraden.

Binwalk

Voor de Zyxel NSA310 is de hoogste versie van de firmware die ik nog kon downloaden 470AFK4C0. Volgens berichten op het internet zijn er nieuwere versies, maar voor die kan ik geen werkende download vinden. Of beter: die ik vind, linken onderhuids door naar de FTP-server van Zyxel. Omdat browsers dat protocol standaard niet meer ondersteunen, is die machine leeggemaakt. Firmware van recente hardware is overgezet naar een webserver en blijkbaar vond Zyxel dat niet nodig voor de rest. Zucht...

De eerste stap in het uitzoeken van firmware is wat mij betreft een binwalk:

hvdkamer@obelix:~/temp$ binwalk 470AFK4C0.bin                                                      
DECIMAL    HEXADECIMAL 
DESCRIPTION                                                
317 0x13D   uImage header, header size: 64 bytes,
381 0x17D Linux kernel ARM boot executable zImage
5697077 0x56EE35 gzip compressed data, maximum compression
47387156 0x2D31214 Executable script, shebang: "/bin/sh"
47389467 0x2D31B1B Executable script, shebang: "/bin/sh"

Er was nog meer uitvoer, maar bovenstaande zijn de belangrijkste regels. De eerste is een 64 bytes U-Boot header voor de Linux-kernel. In deze zit voor de kenners een initrd verstopt! De derde is namelijk een bestandssysteem zoals eerder uitgelegd. Deze wordt door scripts in de initrd gemount en indien mogelijk naar de harddisk gekopieerd. De laatste twee zijn een pre- en post-install-script die extra zaken regelen. De eerste 317 bytes – we tellen vanaf nul – blijken een header te zijn met informatie waar de genoemde vier onderdelen starten.

Tot slot

Helaas moet ik op dit punt stoppen. In de volgende aflevering gaan we de genoemde header ontleden en ontdekken we hoe de checksum wordt berekend. Als die namelijk niet correct is, wordt de firmware geweigerd.