# Morris-worm

De Morris-worm was een van de eerste computerwormen die via het internet werd verspreid en kreeg behoorlijk veel media-aandacht. De worm werd geschreven door Robert Tappan Morris, een student van Cornell University. De worm werd vanuit het Massachusetts Institute of Technology losgelaten op 2 november 1988 om te maskeren dat de worm oorspronkelijk afkomstig was van Cornell. Morris is thans professor aan het MIT.

## Het doel van de worm

De worm was oorspronkelijk geprogrammeerd als een mechanisme om data te delen tussen zo veel mogelijk Sun3-werksystemen en VAX-computers die varianten van versie 4 BSD UNIX draaiden. Dit lukte te goed, want de worm verspreidde zich razendsnel en door een kleine onderschatting van een van de kernwaarden groeide de worm te snel en maakte veel te veel kopijen van zichzelf en werd een DDOS . Binnen een zeer korte tijd, slaagde de worm erin zich over een zeer grote afstand te verplaatsen. Zo had de worm na enkele uren genoeg systeembronnen in beslag genomen om de geïnfecteerde computers plat te leggen. Hoewel Morris de worm zo had ontwikkeld zodat deze zich razendsnel kon verspreiden, werd de verspreiding ervan nog wat in de hand gewerkt door enkele eigenschappen van de netwerkomgeving van UNIX. Zo baande de worm zich nog sneller dan verwacht een weg door een groot aantal systemen. Waarschijnlijk had Morris de host, waar hij het worm-programma verspreidde ook zodanig gekozen, dat dit een host was die open lag voor gebruikers van buitenaf. Hieruit kon de worm fouten in de beveiligingsroutines van UNIX uitbuiten en zijn voordeel doen met de UNIX-hulpmiddelen voor het delen van bronnen in lokale netwerken. Door deze actie kreeg hij toegang tot duizenden andere sites. De manier waarop de worm zich verspreidde wordt hieronder uitgelegd.

## De manier waarop de worm zich verspreidde

De worm bestond uit twee verschillende programma’s. Het eerste deel ervan was de grappling hook (ook bekend als vector of bootstrap) en het hoofdprogramma. De grappling hook was een programma in C dat uit 99 regels bestond. Het werd gecompileerd en uitgevoerd op elke machine waar toegang tot werd verkregen. Het programma zette een verbinding op met de computer waar het vandaan kwam, en haalde een kopie van het hoofdprogramma naar het geïnfecteerde systeem. ( Zie figuur hieronder) Om nog meer schade te berokkenen zocht het programma verder naar andere computers waar gemakkelijk een verbinding mee kon worden gemaakt.

### Rsh

Morris gebruikte het netwerkprogramma van UNIX, rsh, om zo makkelijk de nodige taken van op afstand uit te kunnen voeren. Mede dankzij bestanden waar de gebruikersnamen en wachtwoord in stonden kon de worm zich verder verspreiden. De worm zocht in deze bestanden naar sites waar men makkelijk zonder het gebruik van een wachtwoord binnen kon dringen en zo makkelijk opdrachten kon uitvoeren. Waar men externe shells had gestart, werd het wormprogramma geüpload en begon de uitvoering ervan opnieuw. Een aanval maakte gebruik van bugs in de UNIX-programma’s finger en sendmail. De derde manier van infectie was via externe toegang.

### Finger

De finger-opdracht heeft de functie van een soort elektronisch telefoonboek. De opdracht finger user-name@hostname geeft als uitvoer de gebruikersnaam van een persoon weer, samen met andere informatie die is opgegeven door die gebruiker, zoals privé-adres, telefoonnummer of zelfs een leuk citaat. De opdracht finger is als daemon op de achtergrond van elke BSD-site actief en reageert op query’s vanaf internet. De worm maakte ook gebruik van het zwakke punt van het finger programma. Namelijk het inlezen van invoer zonder te controleren op de grenzen voor overflow. De worm voerde daarom een buffer overflow uit. Er werd een query uitgevoerd van 536 bytes, wat meer dan de toegestane buffer is voor invoer en zo werd het stack frame overschreven. In plaats van terug te keren naar de routine ‘Main’, zoals gewoonlijk werd de daemon finger doorgestuurd met een nieuwe string van 536 bytes die zich nu in de stack bevond. Deze nieuwe procedure voerden /bin/sh uit; wanneer dit lukte, had de worm een externe shell gestart.

### Sendmail

De andere manier via sendmail had ook te maken met een daemon die ervoor zorgde dat er onrechtmatige toegang werd verkregen. Sendmail wordt gebruikt voor het routeren van e-mail in een netwerkomgeving. Omdat testers via foutopsporing de status van het mailsysteem controleren, is dit proces vaak actief op de achtergrond. Morris had in zijn arsenaal een aanroep naar debug, die geen gebruikersadres opgaf, zoals meestal, maar een groep opdrachten uitvoerde die een kopie van de grappling hook mailde en uitvoerde. Het doel van de hoofdworm was het systematisch proberen achterhalen van zo veel mogelijk gebruikersnamen en bijhorende wachtwoorden. Eerst zocht de worm naar accounts zonder wachtwoord. Of accounts met makkelijk te achterhalen wachtwoord. Hiervoor zocht het programma in een woordenboek met favoriete wachtwoorden en ten slotte elk woord in het standaard online woordenboek van UNIX. Dit uitgebreid en driedelige kraakalgoritme gaf de worm toegang tot de andere gebruikersaccounts op het besmette systeem. Hierna zocht de worm naar rsh-bestanden in deze gekraakte accounts en zocht met deze informatie toegang tot de gebruikersaccounts op externe systemen, zoals hiervoor werd uitgelegd.
Telkens als het programma erin slaagde toegang te verkrijgen, zocht het naar actieve kopieën van zichzelf. Als deze aanwezig waren, werden de nieuwe kopieën afgesloten, behalve elke zevende keer. Door elk zevende duplicaat van zichzelf actief te houden, veroorzaakte Morris het vastlopen van verscheidene VAX- en SUN-systemen op internet. De onderdelen van de netwerkomgeving van UNIX die het verspreiden van de worm een feit maakten, zorgden ook voor het stoppen ervan. Door de goede communicatie en het makkelijk en snel verspreiden van gegevens naar externe computers werd ervoor gezorgd dat de samenwerking om de worm tegen te gaan snel tot ontwikkeling kwam. De avond van de volgende dag, 3 november 1988, circuleerden er al methoden en patches om de worm onschadelijk te maken.

## Motief

Het is eigenlijk niet meer dan een uit de hand gelopen grap. Morris' programma werkte ook vele malen sneller dan hij zelf had verwacht. Maar door de omvang van de besmetting spreken we wel degelijk van een misdaad. Het programma deed ook uitzonderlijk goed zijn best om geen enkel spoor achter te laten. Toch bevat het programma geen code om een besmet systeem te beschadigen of vernietigen. Hij wilde vooral de wachtwoorden te weten komen. De auteur had zeker de mogelijkheid om zulke schadelijke opdrachten in het programma toe te voegen, maar deed het dus niet. Robert Morris werd wel veroordeeld. Hij kreeg maar liefst drie jaar proeftijd, taakstraf van 400 uur en een boete van 10000 dollar. Later werd er door de toenmalige regering een raming gemaakt van de schade die de worm in dollars had aangericht. Na wat rekenen kwamen ze uit tussen 200 en 53.000 dollar per systeem.