Tips en Trucs 2022

Linux beveiliging verbeteren met Lynis

Lynis is een open source programma om zwakke punten in een Linux systeem op te sporen. Je krijgt daarbij een gedetailleerd rapport. Lynis bestaat uit een groot aantal scripts die elk een specifiek onderdeel van het Linux systeem onderzoekt. Bijv. de minimum en maximum toegestane wachtwoord ouderdom.

Na het uitvoeren van Lynis, gebruik je het rapport om te achterhalen welk script er gebruikt werd om het probleem te checken en te rapporteren. Je kunt de zo verkregen informatie daarna gebruiken om een oplossing te automatiseren.

Lynis installeren

Aangezien Lynis bestaat uit een verzameling scripts, kan je de meest recente versie downloaden met de volgende opdracht:

dany@pindabook:~> wget https://github.com/CISOfy/lynis/archive/refs/heads/master.zip
--2022-03-01 13:38:11--  https://github.com/CISOfy/lynis/archive/refs/heads/master.zip
Herleiden van github.com (github.com)... 140.82.121.4
Verbinding maken met github.com (github.com)|140.82.121.4|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 302 Found
Locatie: https://codeload.github.com/CISOfy/lynis/zip/refs/heads/master [volgen...]
--2022-03-01 13:38:11--  https://codeload.github.com/CISOfy/lynis/zip/refs/heads/master
Herleiden van codeload.github.com (codeload.github.com)... 140.82.121.9
Verbinding maken met codeload.github.com (codeload.github.com)|140.82.121.9|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: niet-opgegeven [application/zip]
Wordt opgeslagen als: ‘master.zip’

master.zip                            [ <=>                                                       ] 420,15K  --.-KB/s    in 0,1s    

2022-03-01 13:38:11 (4,08 MB/s) - '‘master.zip’' opgeslagen [430233]

Daarna pak je Lynis uit met de opdracht:

dany@pindabook:~> unzip master.zip 
Archive:  master.zip
4f382331b3d7d141c49a971050d3a9b61a94c511
   creating: lynis-master/
   creating: lynis-master/.github/
   creating: lynis-master/.github/ISSUE_TEMPLATE/
  inflating: lynis-master/.github/ISSUE_TEMPLATE/bug_report.md  
  inflating: lynis-master/.github/ISSUE_TEMPLATE/feature_request.md  
 extracting: lynis-master/.gitignore  
...
  inflating: lynis-master/plugins/plugin_systemd_phase1  
finishing deferred symbolic links:
  lynis-master/db/languages/br -> pt
  lynis-master/db/languages/de-AT -> de
  lynis-master/db/languages/en-GB -> en
  lynis-master/db/languages/en-US -> en
  lynis-master/db/languages/nl-BE -> nl
  lynis-master/db/languages/nl-NL -> nl

Om alle zwakheden van een Linux systeem te achterhalen zijn root rechten nodig. Root rechten zorgen echter ook voor gevaar, zo kunnen de scripts fouten bevatten, door hackers aangepast worden, enz. waardoor ze schade kunnen veroorzaken. Om een zo volledig mogelijk rapport te bekomen, geef je met de volgende opdracht root rechten aan Lynis:

dany@pindabook:~> sudo chown -R root:root lynis-master/
[sudo] wachtwoord voor root:

Lynis rapporten aanmaken en lezen

Open de map met de Lynis scripts en voer voor een volledig rapport Lynis als root uit met de twee volgende opdrachten:

dany@pindabook:~> cd lynis-master/
dany@pindabook:~/lynis-master> sudo ./lynis audit system

Dit geeft dan bij mij het volgende resultaat. De scripts hebben soms wat tijd nodig om afgewerkt te worden, wees geduldig.
Lynis

Op het einde van het rapport staan waarschuwingen en suggesties in de secties Warnings en Suggestions met tussen haakjes telkens het aantal. Elk item in deze lijsten bevat een beschrijving en op het einde een TEST-ID. Zo bevat mijn systeem de volgende suggestie:

  * Check 10 files in /tmp which are older than 90 days [FILE-6354] 
      https://cisofy.com/lynis/controls/FILE-6354/

Blijkbaar bevat de map /tmp/ bestanden ouder dan 90 dagen, of met andere woorden niet zo tijdelijk. Met de volgende opdracht kunnen we meer details opvragen over het item met het TEST-ID FILE-6354:

dany@pindabook:~/lynis-master> sudo ./lynis show details FILE-6354
[sudo] wachtwoord voor root: 
2022-03-02 16:17:22 Performing test ID FILE-6354 (Searching for old files in /tmp)
2022-03-02 16:17:22 Test: Searching for old files in /tmp
2022-03-02 16:17:22 Old temporary file: /tmp/kconf_update.BWykPe
2022-03-02 16:17:22 Old temporary file: /tmp/tmpaddon-7591b3
2022-03-02 16:17:22 Old temporary file: /tmp/kconf_update.RNHphj
2022-03-02 16:17:22 Old temporary file: /tmp/kconf_update.liaHvq
2022-03-02 16:17:22 Old temporary file: /tmp/kconf_update.kUdgic
2022-03-02 16:17:22 Old temporary file: /tmp/xauth-0-_0
2022-03-02 16:17:22 Old temporary file: /tmp/tmpaddon-278c6e
2022-03-02 16:17:22 Old temporary file: /tmp/kconf_update.SfBeAA
2022-03-02 16:17:22 Old temporary file: /tmp/kconf_update.QpXkdK
2022-03-02 16:17:22 Old temporary file: /tmp/tmpaddon
2022-03-02 16:17:22 Result: found old files in /tmp, which were not modified in the last 90 days
2022-03-02 16:17:22 Advice: check and clean up unused files in /tmp. Old files can fill up a disk or contain
2022-03-02 16:17:22 private information and should be deleted it not being used actively. Use a tool like lsof to
2022-03-02 16:17:22 see which programs possibly are using a particular file. Some systems can cleanup temporary
2022-03-02 16:17:22 directories by setting a boot option.
2022-03-02 16:17:22 Suggestion: Check 10 files in /tmp which are older than 90 days [test:FILE-6354] [details:-] [solution:-]
2022-03-02 16:17:22 ====

Zo nu weten we over welke bestanden het gaat en kan je op zoek gaan of deze bestanden nog nodig of nuttig zijn. Indien ze niet storen (bijv. veel ruimte innemen), kan je ze beter laten staan. M.a.w. wees voorzichtig met al te snelle ondoordachte maatregelen.

Verder onderzoeken

Veel Lynis suggesties zijn niet zo vanzelfsprekend als bovenstaand voorbeeld. Als je niet zeker bent waar een suggestie naar verwijst, wordt het moeilijk om het probleem te verhelpen. Indien je SSH (Secure SHell) activeerde, krijg je hoogstwaarschijnlijk de volgende suggestie:

  * Consider hardening SSH configuration [SSH-7408] 
    - Details  : MaxAuthTries (set 6 to 3)
      https://cisofy.com/lynis/controls/SSH-7408/

Om dit op te lossen, moet je de locatie van de SSH configuratiebestanden achterhalen. Lynis heeft ze gevonden, dus op zoek naar het script waarmee Lynis het probleem detecteerde.

Locatie Lynis test scripts

De Lynis scripts zijn uitgepakt in de map ~/lynis-master. Als deze map actief is, kan je de test script locatie achterhalen met een grep opdracht waarbij je zoekt naar de TEST-ID:

dany@pindabook:~/lynis-master> grep SSH-7408 include/*
include/tests_ssh:    # Test        : SSH-7408
include/tests_ssh:    Register --test-no SSH-7408 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check SSH specific defined options"

Het resultaat is een lijst met test scripts en hun locatie.

SSH suggestie aanpakken

Het bestand tests_ssh bevat het TEST-ID SSH-7408, m.a.w. daar kunnen we de SSH scan functies terugvinden. Open dit bestand om de door Lynis gebruikte scan functies te onderzoeken. De eerste sectie definieert een lijst met mappen in de variabele SSH_DAEMON_CONFIG_LOCS. De daarop volgende secties zijn verantwoordelijk voor het controleren van de SSH daemon status, het localiseren van de configuratiebestanden en het identificeren van de versie. De code om de SSH configuratiebestanden op te sporen, kan je vinden in de Test sectie SSH-7404 met de beschrijving Determine SSH daemon configuration file location. Deze code bevat een lus die de locaties in de lijst doorzoekt naar een bestand met de naam sshd_config. Je kunt dit in de volgende opdracht samenvatten:

dany@pindabook:~/lynis-master> sudo find /etc /etc/ssh /usr/local/etc/ssh /opt/csw/etc/ssh -name sshd_config
[sudo] wachtwoord voor root: 
/etc/ssh/sshd_config
/etc/ssh/sshd_config
find: ‘/usr/local/etc/ssh’: Bestand of map bestaat niet
find: ‘/opt/csw/etc/ssh’: Bestand of map bestaat niet

Verder onderzoek van dit bestand onthult de code voor SSH-7408. Deze test onderzoekt de instelling MaxAuthTries en nog een pak andere SSH instellingen. Nu kan je variabele in het SSH configuratiebestand opzoeken:

dany@pindabook:~/lynis-master> sudo grep MaxAuthTries /etc/ssh/sshd_config
[sudo] wachtwoord voor root: 
#MaxAuthTries 6

Inlogmelding aanpassen

Lynis rapporteert een bevinding in verband met een juridische banner bij het inloggen op het systeem. Voor thuisgebruikers is dit niet zo belangrijk. Voor bedrijven en overheden waarschuwt zo'n juridische banner bij het aanmelden dat hun activiteiten gevolgd en opgeslagen worden. Lynis rapporteert dit met BANN-7126:

  * Add a legal banner to /etc/issue, to warn unauthorized users [BANN-7126] 
      https://cisofy.com/lynis/controls/BANN-7126/

OpenSUSE Leap 15.3 toont de volgende melding:

dany@pindabook:~/lynis-master> sudo cat /etc/issue
Welcome to \S - Kernel \r (\l).

eth0: \4{eth0} \6{eth0}

Je kunt iets toevoegen als Geen toegang of Wees voorzichtig, maar dit zorgt niet dat Lynis dit niet meer meldt. Weer gaan we op zoek naar het betreffende Lynis script.

dany@pindabook:~/lynis-master> grep BANN-7126 include/*
include/tests_banners:    # Test        : BANN-7126
include/tests_banners:    Register --test-no BANN-7126 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue banner file contents"

Bij het bekijken van de code in het test bestand, vindt je een lus waarbij de inlogmelding wordt doorzocht op een aantal voorgedefinieerde juridische termen:

        for ITEM in ${LEGAL_BANNER_STRINGS}; do

De juridische termen zijn opgeslagen in de variabele LEGAL_BANNER_STRINGS in het begin van het bestand:

    LEGAL_BANNER_STRINGS="audit access authori condition connect consent continu criminal enforce evidence forbidden intrusion law legal legislat log monitor owner penal policy policies privacy private prohibited record restricted secure subject system terms warning"

Mijn Nederlandstalige toevoegingen beïnvloeden de test niet, want geen enkele voorgedefinieerde juridische term komt er in voor.

De volgende tekst bevat wel verschillende verplichte juridische termen en zal door Lynis wel goedgekeurd worden.

Attention, by continuing to connect to this system, you consent to the owner storing a log of all activity. Unauthorized access is prohibited.

Deze tekst moet je dus toevoegen aan het bestand /etc/issue.

Automatiseer

Je kunt de aanpassingen manueel uitvoeren, maar overweeg automatisering. Vanaf het ogenblik dat je meerdere systemen moet configureren, je de configuratie later nog wilt aanpassen of bekijken, loont het de moeite. Een configuratiescript is dus een goede manier om dit proces te stroomlijnen. Voor de SSH configuratie gebruiken we sed opdrachten en met een echo opdracht voegen we de legale banner toe:

dany@pindabook:~/lynis-master> sudo sed -i.ori '/MaxAuthTries/s/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config

De sed -i.ori zorgt voor de aanpassing en slaat als backup het originele configuratiebestand op als /etc/ssh/sshd_config.ori. Zo zorg je dat je steeds kunt terugvallen op de originele configuratie.

dany@pindabook:~/lynis-master> echo "Attention, by continuing to connect to this system, you consent to the owner storing a log of all activity. Unauthorized access is prohibited." | sudo tee -a /etc/issue

Door achteraan gebruik te maken van | sudo tee -a /etc/issue kunnen we als root gebruiker met de echo opdracht de juridische melding toevoegen aan het bestand /etc/issue.

Automatisatie laat je toe om een script te schrijven waarmee je een bepaalde taak zoals het versterken van de systeemveiligheid verschillende malen kunt uitvoeren op verschillende systemen. Het resultaat is een constante kwaliteit. Door het open source karakter van Lynis kan je zelf nagaan wat het rapport juist bedoeld en de nodige stappen ondernemen.

Lynis verwijderen

Lynis verwijder je volledig van de computer met de volgende opdracht:

dany@pindabook:~> sudo rm -r lynis-master/
[sudo] wachtwoord voor root:

Het gedownloade Lynis archief verwijder je met:

dany@pindabook:~> rm master.zip