Je weet dat je altijd de nieuwste updates dient te installeren om je Linux-systemen veilig houden, maar waar moet je nog meer op te letten? Lynis helpt je hierbij: het script scant de veiligheid van je configuratie en geeft je suggesties om je beveiliging te verbeteren.

Auteur: Koen Vervloesem

De beveiliging van je Linux-machines hangt van allerlei factoren af. Zelfs voor een doorgewinterde beveiligingsexpert is het moeilijk om dat allemaal handmatig te controleren, zeker als je meerdere systemen beheert. Gelukkig bestaan er programma’s die je systeemconfiguratie controleren op potentieel onveilige configuraties.

Eén van die programma’s is Lynis (https://cisofy.com/lynis/). Dit is het geesteskind van de Nederlandse beveiligingsspecialist Michael Boelen. Hij startte Lynis in 2007. Het is ondertussen uitgegroeid tot een uitgebreide collectie shellscripts die een beveiligingsscan van je Linux-systeem uitvoeren om je erop te wijzen waar je je systemen nog wat dient dicht te timmeren. Een lijst van alle controles die Lynis uitvoert, vind je op de website (https://cisofy.com/lynis/controls/).

Andere beveiligingstools

Er zijn nog heel wat andere tools om je Linux-systemen te beveiligen. Zo is OpenVAS (http://www.openvas.org/) een bekende tool. Daar ligt de nadruk eerder op het vinden van kwetsbaarheden door alle systemen in je netwerk te scannen op aanwezige diensten. Lynis daarentegen draai je op je systeem zelf en Lynis zoekt vooral naar onveilige configuraties. OpenVAS en Lynis zullen dus andere zaken opmerken en kunnen elkaar dus perfect aanvullen. Een bekend alternatief voor Lynis is OpenSCAP (https://www.open-scap.org/), dat aan de hand van een profiel test of een systeem voldoet aan gestelde veiligheidseisen.

Systeemvereisten

Lynis is niet specifiek voor Linux gebouwd: het ondersteunt een heleboel UNIX-gebaseerde systemen, inclusief FreeBSD, NetBSD, OpenBSD, macOS (dat immers ook een UNIX-onderlaag heeft), Solaris, AIX en HP-UX. Het is ook niet beperkt tot Intel-processoren: het draait perfect op Raspberry Pi’s, QNAP NAS-apparaten en andere IoT-apparaten.

Dat komt, omdat Lynis eigenlijk bestaat uit een uitgebreide collectie van shellscripts. Dat betekent dat je Lynis zelfs kunt draaien op een systeem waarop je geen software kunt installeren: download de code gewoon van GitHub of download de tarball en pak ze uit. Uiteraard vind je Lynis ook in de repository’s van vele distributies, in de ports-collectie van FreeBSD en in Homebrew voor macOS.

Lynis kun je als ongeprivilegieerde gebruiker draaien of als root. In het eerste geval (bijvoorbeeld op systemen waar je geen rootrechten hebt) zal Lynis sommige tests overslaan. De resultaten van de audit zullen dan ook minder uitgebreid zijn en misschien zelfs afwijken van de resultaten die je als root krijgt. Het is dan ook aan te raden om Lynis altijd als root te draaien. Als je toch verkiest om het programma niet als root te draaien, dien je wel schrijfrechten in /tmp te hebben.

Installatie en updates

Wil je altijd de nieuwste versie van Lynis (en Michael Boelen voegt echt regelmatig nieuwe functies of verbeteringen toe), download de code dan van GitHub:

# cd /usr/local

# git clone https://github.com/CISOfy/lynis.git

# cd lynis

Je hoeft Lynis verder niet te installeren. Je draait het programma rechtstreeks uit deze directory.

Wil je Lynis updaten, dan ga je simpelweg naar de directory /usr/local/lynis en haal je de nieuwste commits via GitHub binnen met:

# git pull

Als je liever met je pakketbeheerder werkt, maar je distributie een te oude versie van Lynis in zijn repository heeft, dan kun je de repository van CISOfy toevoegen (https://packages.cisofy.com/).

Aan de slag

Lynis hoef je helemaal niet te configureren voor een bruikbaar resultaat. Start het programma gewoon met:

# ./lynis audit system

En dan is het wachten. Lynis doet zijn werk (meer dan 300 beveiligingscontroles) en toont ondertussen al de resultaten van zijn analyse in je terminal. Daarbij wordt ook kleur gebruikt (tenzij je Lynis met de optie –no-colors opgestart hebt). Groen betekent in orde, geel is een suggestie en rood een waarschuwing. Zo krijg je onmiddellijk tijdens de tests een eerste idee hoe veilig je systeem is. Uiteindelijk krijg je een samenvatting te zien van alle resultaten, met daarbij een lijst van waarschuwingen en suggesties. Bij elke waarschuwing en suggestie staat een URL vermeld met meer informatie die je kunt lezen als je meer wilt weten.

Tot slot krijg je ook een cijfer tussen 0 en 100 dat de veiligheid van je systeem voorstelt: de hardening index. Hoe hoger dit is, hoe veiliger je systeem. Het wordt berekend als de verhouding tussen het aantal tests waarop je systeem voldoende scoort en het aantal uitgevoerde tests, waarbij niet alle tests even veel doorwegen. Een out-of-the-box Linux-distributie zonder speciale veiligheidsmaatregelen haalt een score van in de 60 of in de 70. Door enkele suggesties te volgen, haalt je systeem al snel een hardening index van in de 80.

 

Minutieus test Lynis de configuratie van je hele systeem.

 

Deze waarschuwingen en suggesties gaan ons even bezighouden…

 

Waarschuwingen en suggesties

Het eerste wat je na de tests van Lynis doet, is de lijst met waarschuwingen en suggesties doorlopen om een inschatting te maken van de ernst van de situatie. Elke test in de lijst met resultaten eindigt met een code tussen vierkante haken, zoals SSH-7408 voor een ssh-configuratie die gerust wat veiliger mag. Meer details over die test krijg je te zien met:

# ./lynis show details SSH-7408

Bij elk resultaat staat ook een URL, zoals https://cisofy.com/lynis/controls/SSH-7408/. Daar krijg je wat meer informatie over het probleem, suggesties om dit probleem aan te pakken en eventueel wat links naar webpagina’s met meer achtergrond. Lees dit alles grondig en pak dan het probleem aan als je het ermee eens bent dat het je systeem veiliger maakt.

Je begint het beste bij de waarschuwingen, omdat die het meeste impact hebben. Soms kan de oplossing overigens heel eenvoudig zijn, bijvoorbeeld dat je je systeem dient te herstarten om een bijgewerkte kernel te draaien. Nadat je de wijzigingen hebt aangebracht, kun je overigens lynis opnieuw uitvoeren om te zien of hij nu nog de waarschuwing of suggestie toont.

Je vraagt Lynis eenvoudig meer details over de resultaten op een test.

 

Dieper in de details duiken

Vaak kom je er wel met de online documentatie, maar soms begrijp je misschien niet waarom Lynis een waarschuwing of suggestie geeft. Dan komt het logbestand van pas. De locatie ervan krijg je op het einde van de scanresultaten te zien. Afhankelijk van hoe je Lynis uitvoert, is het vaak /var/log/lynis.log of /tmp/lynis.log.

In het logbestand krijg je exact te zien waarom je systeem niet aan een test voldeed en de impact die dat op de hardening index heeft, maar ook meer details over de suggestie om de veiligheid te verbeteren. Het logbestand wordt overigens bij elke scan overschreven. Als je de resultaten met vorige scans wilt vergelijken, zorg dan voor logrotatie of maak een back-up van het logbestand voordat je Lynis opnieuw draait.

Lynis integreren met andere tools

Als je Lynis wilt integreren met andere tools en bijvoorbeeld notificaties wilt sturen bij specifieke testresultaten, dan is het handig om te weten dat na een analyse de resultaten ook in een machineleesbare vorm worden opgeslagen, namelijk in een report file. De locatie daarvan is afhankelijk van hoe je Lynis uitvoert vaak /var/log/lynis-report.dat of /tmp/lynis-report.dat.

Het rapport bevat allerlei gegevens die elk op een regel staan. Die kun je dus eenvoudig met tools als grep en awk eruit halen en dan in je eigen scripts verwerken. We tonen hier enkele mogelijkheden.

 

Bepaal de hardening index:

# grep hardening_index /var/log/lynis-report.dat | cut -d = -f 2

Toon alle waarschuwingen:

# grep "warning\[\]=" /var/log/lynis-report.dat

Toon het aantal suggesties:

# grep -c "suggestion\[\]=" /var/log/lynis-report.dat

Sommige tests plaatsen nog extra informatie in het rapport. Als je bijvoorbeeld pakketten met bekende kwetsbaarheden geïnstalleerd hebt, kun je die pakketten opvragen met:

# grep "vulnerable_package\[\]=" /var/log/lynis-report.dat | cut -d = -f 2

Het rapport bevat ook twee unieke getallen voor elke host: hostid en hostid2. Het eerste bestaat uit 40 hexadecimale cijfers en is afgeleid van het mac-adres van de computer. Het tweede bestaat uit 64 hexadecimale cijfers en is afgeleid van de ssh-sleutel van de computer. Beide kun je gebruiken om naar je computer te verwijzen als je informatie uit het rapport wilt verwerken in andere software.

We raden je aan om zeker eens de inhoud van het rapportbestand uitgebreid te bekijken voor de mogelijkheden.

Extra opties

Lynis ondersteunt heel wat opties om de werking ervan aan te passen. Meer informatie over de mogelijke opdrachten en opties krijg je als je gewoon lynis uitvoert. We bespreken er hier enkele van die in sommige situaties interessant kunnen zijn.

Waarschijnlijk vind je Lynis nadat je het enkele keren hebt uitgeprobeerd zo interessant, dat je het automatisch dagelijks wilt uitvoeren in een cronjob. Dan krijg je dagelijks de uitvoer van Lynis doorgemaild en hoef je maar even door de resultaten te gaan. Speciaal voor die situatie kent Lynis de optie –cronjob. Met die optie wacht Lynis nooit op gebruikersinvoer en gebruikt het programma geen kleur in de uitvoer.

Michael Boelen suggereert in de documentatie van Lynis het volgende script dat je in een cronjob kunt uitvoeren:

#!/bin/sh


set -u

DATE=$(date +%Y%m%d)

HOST=$(hostname)

LOG_DIR="/var/log/lynis"

REPORT="$LOG_DIR/report-${HOST}.${DATE}"

DATA="$LOG_DIR/report-data-${HOST}.${DATE}.txt"


cd /usr/local/lynis


# Run Lynis

./lynis audit system --cronjob > ${REPORT}


# Optional step: Move report file if it exists

if [ -f /var/log/lynis-report.dat ]; then

    mv /var/log/lynis-report.dat ${DATA}

fi

Maak eerst de directory /var/log/lynis aan en plaats dit script dan in /etc/cron.daily/lynis en maak het uitvoerbaar met sudo chmod +x /etc/cron.daily/lynis.

Dat Lynis uit de auditwereld komt, zie je nog aan enkele opties van het programma, zoals –auditor waarmee je de naam van de auditor (jij dus) aan de uitvoer en het rapport van Lynis toevoegt. Dat is voornamelijk interessante in bedrijfsomgevingen, maar voor je thuisnetwerk kun je er ook gebruik van maken. Als je Lynis bijvoorbeeld in een cronjob opstart, zorg dan dat het programma wordt uitgevoerd als lynis audit system –cronjob –auditor “Cron”. Zo kun je later altijd in het gegenereerde rapport zien dat de test door je cronjob is uitgevoerd en niet door jou manueel.

Lynis Enterprise

Michael Boelen heeft ook een enterpriseversie van Lynis, met extra plug-ins en ondersteuning voor meerdere systemen. Daarin zit bijvoorbeeld Lynis Collector, dat rapporten van meerdere systemen verzamelt en uploadt naar een centrale server. Lynis Enterprise bevat ook ondersteuning voor compliance audits volgens PCI-DSS, HIPAA of eigen policy’s, dashboards en hardening scripts die klaar voor gebruik zijn.

Profielen

Lynis maakt gebruik van profielen om allerlei opties in te stellen. Het standaardprofiel is gedefinieerd in het bestand default.prf in de directory van Lynis. Bekijk dit bestand maar eens om te zien wat de standaardinstellingen zijn. Uiteraard kun je ook een eigen profiel aanmaken als je voor een specifieke machine andere instellingen wilt. Met de optie –profile duid je het profiel aan dat Lynis dient te gebruiken.

Maar je hoeft die optie niet op te geven. Lynis haalt zijn instellingen immers niet alleen uit default.prf, maar ook uit custom.prf. Als je in dit laatste bestand de instellingen zet die je wilt aanpassen, vergeleken met de standaardinstellingen, overschrijven die de instellingen uit default.prf wanneer Lynis ze inleest. Zo kun je op elke machine een bestand custom.prf plaatsen met specifieke instellingen voor die machine.

Zo merkten we dat we op Raspbian de waarschuwing kregen dat geen security repository gedefinieerd was. Maar in tegenstelling tot Debian komen security updates bij Raspbian niet in een afzonderlijke repository, maar in de hoofdrepository. Die onterechte waarschuwing konden we uitschakelen met de volgende regel in custom.prf:

debian-skip-security-repository=yes

Als je een specifieke test wilt uitschakelen, bijvoorbeeld die voor de ssh-configuratie, dan voeg je een regel zoals de volgende toe met de code voor de test:

skip-test=SSH-7408

Sommige tests laten ook nog opties toe die je elk afzonderlijk kunt uitschakelen. Bijvoorbeeld om voor een specifieke machine niet te waarschuwen als root logins mogelijk zijn:

skip-test=SSH-7408:permitrootlogin

Uiteraard documenteer je dit soort aanpassingen het beste in je profiel met commentaarregels, zodat je later nog weet waarom je een specifieke test uitgeschakeld hebt. Zo kun je niet alleen voor specifieke besturingssystemen een eigen profiel aanmaken, maar ook voor specifieke rollen (webserver, mailserver, desktopsysteem) of je kunt zelfs verschillende beveiligingsniveaus in profielen definiëren als je niet al je machines even streng wilt aanpakken.

Met de volgende opdracht toon je overigens welke profielbestanden Lynis detecteert:

# ./lynis show profiles

In het begin van de uitvoer van een audit toont Lynis dat ook. En op de volgende manier kun je de actieve instellingen opvragen die Lynis uit de gevonden profielbestanden haalt:

# ./lynis show settings
Documenteer je aangepaste profielen, zodat je later nog weet waarom je specifieke tests uitgeschakeld hebt.

 

En verder

Lynis geeft je heel wat informatie en door de aangeboden links te lezen, leer je enorm veel bij over beveiliging. Je krijgt er wel heel wat werk bij, want de suggesties moet je zelf nog implementeren. Maar al dat werk is het zeker waard: je systemen worden er veiliger door en je wordt zelf een beveiligingsexpert!

Zelf plug-ins schrijven

De architectuur van Lynis is volledig modulair. Je kunt zelf je plug-ins schrijven met extra tests die je op je machines wilt uitvoeren. De online documentatie helpt je daarmee verder (https://cisofy.com/documentation/lynis/plugins/development/). Er is zelfs een heuse Lynis Software Development Kit (SDK).