Linux hacken: zo eenvoudig is het

Afgelopen jaar kwamen talloze bedrijven in de problemen vanwege ransomware. De besmette servers draaiden voornamelijk Windows; Linux-servers kwamen er zonder al te veel kleerscheuren van af. Naar aanleiding van dit incident vragen veel beheerders zich af hoe veilig Linux eigenlijk is.

Door de manier waarop Linux ontworpen is, is het systeem van nature behoorlijk veilig. Dit is voor een groot deel te herleiden tot het gebruik van de execute-permissie. Zonder de execute-permissie kan geen enkel programma automatisch worden uitgevoerd. De beheerder van de betreffende computer zal eerst als bewuste actie de execute-permissie op een script of programmabestand moeten toepassen voordat een programma wordt uitgevoerd.

Bij het aanmaken van een bestand op een systeem zal dat bestand nooit automatisch uitvoerbaar worden gemaakt. Vanwege de manier waarop Linux omgaat met de execute-permissie, krijgen ook virussen op Linux weinig kans. Er zijn dan ook eigenlijk geen bekende virussen, noch zijn er virusscanners die veel meer scannen dan in- en uitgaande mail wanneer Linux gebruikt wordt als mailserver.

Een tweede kernelement is het gebruik van het root-gebruikersaccount. De gebruiker root is de almachtige systeembeheerder voor wie geen enkele beperking geldt. Alle andere gebruikers kunnen alleen bestanden aanmaken in hun eigen home directory of in /tmp. Dat betekent dat de schade, die een gebruiker bewust of onbewust kan uitvoeren, meestal slechts impact heeft op een beperkte omgeving.

Mandatory Access Control

Een ander belangrijk onderdeel van Linux’ beveiliging is Mandatory Access Control (MAC). Er zijn twee belangrijke systemen voor MAC: SELinux en AppArmor. Beide systemen hebben als doel om ervoor te zorgen dat alleen acties die specifiek zijn toegestaan mogen worden uitgevoerd. Hiervoor wordt gewerkt met profielen, die aan toepassingen worden gekoppeld. In deze profielen wordt op system call-niveau bepaald wat is toegestaan. Alles wat niet in zo’n profiel is gedefinieerd, wordt geblokkeerd.

Tot zover lijkt het alsof Linux zijn zaakjes goed voor elkaar heeft en het nagenoeg onmogelijk is om in te breken. Maar schijn bedriegt! Er zijn namelijk enkele precaire zaken die ervoor kunnen zorgen dat een verkeerd beheerde Linux-machine de deur wagenwijd openzet voor ongeoorloofde activiteit. In het vervolg van dit artikel gaan we verder in op aanvallen op het root-wachtwoord, de installatie van onbetrouwbare software, het uitvoeren van instabiele of onbetrouwbare scripts, brute-force attacks op ssh en zero-day-exploits.

Gevaar van root-gebruiker

De grootste zwakke plek in Linux is de root-gebruiker. Bij het ontwerp van het besturingssysteem werd onderscheid gemaakt tussen geprivilegieerde gebruikers en niet-geprivilegieerde gebruikers. Een niet-geprivilegieerde gebruiker is een gebruiker die slechts toegang heeft tot beperkte onderdelen van het besturingssysteem. De root-gebruiker is de geprivilegieerde gebruiker voor wie geen enkele beperking geldt. Je zou kunnen stellen dat de root-gebruiker onbeperkt toegang heeft tot de Linux-kernel. Zodra een aanvaller een root-shell kan openen, is hij dus binnen.

Het spreekt voor zich dat je de root-gebruiker voorziet van een zeer sterk en ingewikkeld wachtwoord. Daarnaast zorg je er als Linux-gebruiker voor om nooit in te loggen als root, want dan wordt elk proces dat je start met root-privileges opgestart. Het zwakke punt blijft echter dat de root-gebruiker überhaupt bestaat en dat het onder bepaalde omstandigheden mogelijk is om in te loggen als root. De enige beperkende factor is dat je hiervoor bij het opstarten wel consoletoegang moet hebben tot het Linux-systeem

Op een modern Linux-systeem geeft de volgende procedure vrijwel altijd toegang tot een root-shell zonder dat een wachtwoord hoeft te worden ingevoerd.

Zorg ervoor dat de doelwitmachine opnieuw wordt opgestart. Zodra je de Grub2 boot-prompt ziet, druk je op e om de editor te openen:

Linux hacken

© PXimport

Eenmaal in de editor zoek je de regel op die begint met linux16. Voeg aan het eind van deze regel de tekst

rd.break

in. Gebruik nu de toetscombinatie Ctrl+X. Het Linux-systeem zal nu opstarten, waarbij alleen een kernel en het initramfs geladen worden. Initramfs is een minimaal besturingssysteem van waaruit je toegang hebt tot je volledige harde schijf, zonder dat je een root-wachtwoord hoeft in te voeren.

Na het opstarten wordt nu een root-shell weergegeven, maar dan ben je er nog niet. Als je het wachtwoord wilt resetten, dien je eerst de volledige toegang tot het root-filesystem op de schijf te herstellen. Hiervoor zijn nog een paar commando’s nodig. Tik eerst

mount

om uit te vinden op welke directory je root-filesystem is gemount. In het onderstaande voorbeeld gaan we uit van CentOS, waar het root-bestandssysteem op /sysroot wordt gemount. Typ nu:

mount -o bind /dev /sysroot/dev

Dit zorgt ervoor dat alle device files beschikbaar zijn. Gebruik nu deze opdracht, zodat ook de belangrijke kernel interface /proc beschikbaar is op het tijdelijke root-mountpunt:

mount -t proc proc /sysroot/proc

Als deze essentiële bestandssystemen zijn gemount, typ je

chroot /sysroot

sysroot om het tijdelijke mountpunt van het root-filesystem om te zetten naar de / directory. Wanneer je tools gebruikt die toegang vereisen tot de / directory op de schijf, zullen die het nu allemaal doen. Je kunt nu

passwd

gebruiken om het root-wachtwoord in te stellen. Tot slot: als je op een distributie werkt waar SELinux is ingeschakeld, moet je ervoor zorgen dat het hele bestandssysteem opnieuw wordt voorzien van SELinux contextlabels. Dat doe je met de opdracht

touch /.autorelabel

Typ nu reboot om opnieuw op te starten en in te loggen met je eigen rootwachtwoord. Veel plezier met de onbeperkte toegang tot het betreffende systeem!

Bescherming

Wellicht vraag je je af of het nu echt zo simpel is. Als je geen tegenmaatregelen getroffen hebt: ja, helaas wel. Gelukkig zijn er maatregelen die je als eigenaar van een Linux-systeem kunt treffen om deze zwakke plek te beschermen. Daarover meer in een later artikel.

Tekst: Sander van Vugt

Deel dit artikel
Voeg toe aan favorieten