Tips en Trucs 2017

SSH nog veiliger maken

SSH is een veel gebruikte manier om een systeem op afstand te beheren. M.a.w. een toegangspoort tot een computersysteem. Deze poort is handig om uw eigen systeem te beheren, maar ook aantrekkelijk voor personen die uw systeem willen misbruiken. Je kunt de reeds beveiligde SSH toegang tot uw systeem met een paar simpele tips en trucs nog beter beveiligen.

Gebruik sterke wachtwoorden

Je aanmelden met een wachtwoord is gemakkelijk. Je hebt enkel het wachtwoord nodig om vanaf om het even welke computer toegang tot uw systeem te krijgen. De keerzijde is echter dat men je wachtwoord kan proberen te achterhalen met brute-force aanvallen. Hoe sterker uw wachtwoord, hoe langer het duurt om uw wachtwoord via een brute-force aanval te achterhalen.

Gebruik Public Key Authentification

Public Key Authentification is veel robuster dan wachtwoord authentification. Public Key Authentificatie is bestand tegen brute-force aanvallen, maar is door het gebruik van RSA key pairs (sleutelparen) niet zo gebruiksvriendelijk. Je begint dus met het aanmaken van een publieke/private sleutelpaar. De private sleutel gaat naar het systeem waarvan je wilt aanmelden, de publieke sleutel kopieer je naar het systeem waarop je wilt aanmelden. Je kunt dus enkel aanmelden vanaf computers waarop uw private sleutel staat. Uw private sleutel is dus even belangrijk als uw huissleutel, iedereen die de private sleutel bezit, kan zich op uw systeem aanmelden.

RSA sleutelparen zijn ook handig bij het beheren van veel gebruikers. Wanneer een gebruiker vertrekt, verwijder je de gebruikers publieke sleutel van de server waardoor deze gebruiker zich niet meer kan aanmelden.

Met de volgende opdracht creëer je een nieuw sleutelpaar met een 3072 bit sterkte, wat sterker is dan de standaard 2048:

dany@main:~> ssh-keygen -t rsa -b 3072
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dany/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/dany/.ssh/id_rsa.
Your public key has been saved in /home/dany/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+WVj5Y598ui2QmvcnqbrXZAo5piR8BB1x2vpITCi/SE dany@main
The key's randomart image is:
+---[RSA 3072]----+
|      ... ...    |
|      ..o. ..    |
|     oo. o   o.  |
|    . E+.o. =+ . |
|       oS.o+*.+  |
|        .B =o= . |
|        o oo.o+ o|
|            =.+B |
|           o+OB..|
+----[SHA256]-----+

Deze opdracht creëert in de map /home/dany/.ssh/ twee nieuwe sleutels, id_rsa en id_rsa.pub. id_rsa is uw private sleutel - hou die voor jezelf! Kopieer met de opdracht ssh-copy-id uw publieke sleutel versleuteld naar de server waarop je je wilt aanmelden. Daarvoor moet de server al een werkende SSH verbinding kunnen opbouwen:

dany@main:~> ssh-copy-id -i ~/.ssh/id_rsa.pub dany@pindabook.local
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/dany/.ssh/id_rsa.pub"
The authenticity of host 'pindabook.local (192.168.1.6)' can't be established.
ECDSA key fingerprint is SHA256:unpcDR96wzAEaKLFH26YPfY0UUacZOHdfthntVWhFmU.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'dany@pindabook.local'"
and check to make sure that only the key(s) you wanted were added.

ssh-copy-id controleert daarbij de sleutel, zodat je niet per ongeluk uw private sleutel kopieert. Test uw nieuwe sleutel door de opdracht in de uitvoer van de ssh-copy-id opdracht uit te voeren:

dany@main:~> ssh 'dany@pindabook.local'
Last failed login: Sat Sep 23 12:56:53 CEST 2017 from 192.168.1.4 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sat Sep 23 12:33:20 2017 from 192.168.1.4
Have a lot of fun...
dany@pindabook:~> exit
uitgelogd
Connection to pindabook.local closed.
dany@main:~>

Je zou nu met de nieuwe sleutel moeten kunnen aanmelden. Mocht je een sleutel gebruiken met een wachtzin (passphrase) dan moet je deze ingeven.

Schakel wachtwoordgebruik uit

Als je het aanmelden met uw sleutelpaar lukt, kan je het aanmelden met wachtwoorden uitschakelen. De server is dan niet meer vatbaar voor brute-force aanvallen. Pas daarvoor de SSH server configuratie aan door de eigenschap PasswordAuthentication op no te zetten:

dany@main:~> ssh 'dany@pindabook.local'
Last login: Sat Sep 23 15:06:06 2017 from 192.168.1.4
Have a lot of fun...
dany@pindabook:~> sudo joe /etc/ssh/sshd_config       
[sudo] wachtwoord voor root:

SSHd configuratie

Daarna herstart je de SSH server met de opdracht:

dany@pindabook:~> sudo systemctl restart sshd.service
dany@pindabook:~> exit
uitgelogd
Connection to pindabook.local closed.
dany@main:~>

Maak het je gemakkelijk met aliassen

Aliassen gebruik je om moeilijk te onthouden opdrachten (of namen) een kortere en vooral gemakkelijk te onthouden naam te geven. In plaats van aan te melden met de opdracht ssh -l dany -p 22 pindabook.local gebruik je de opdracht ssh pindabook. Daarvoor pas je het ~/.ssh/config configuratiebestand aan met de opdracht:

dany@main:~> joe ~/.ssh/config

En voeg je de volgende inhoud toe:

Host pindabook
  HostName pindabook.local           
  Port 22  
  User dany

Sla deze nieuwe configuratie op en test deze met de opdracht:

dany@main:~> ssh pindabook
Last login: Sat Sep 23 15:38:06 2017 from 192.168.1.4
Have a lot of fun...
dany@pindabook:~> exit
uitgelogd
Connection to pindabook.local closed.
dany@main:~> 

PS

notty

Mocht je ooit een melding krijgen waarin ssh:notty voorkomt, dan is deze afkomstig van een aanmelding via een FISH (SFTP) client waarmee je bestanden uitwisselt. Een voorbeeld:

Last failed login: Sat Sep 23 12:56:53 CEST 2017 from 192.168.1.4 on ssh:notty

Je hebt dus geen aanval te verwerken als je op het vermelde ogenblik bezig was bestanden uit te wisselen vanaf een computer op hetzelfde netwerk (192.168.1.4). notty staat voor no tty (geen tekstomgeving of TeleTypeWriter).

Offending key for IP

In thuisnetwerken wordt meestal gebruik gemaakt van een DHCP server om IP adressen aan de apparaten uit te delen. Apparaten krijgen zo geen vast IP adres, maar regelmatig een ander IP adres. Als je in een SSH verbinding opbouwt met een apparaat dat een ander IP adres kreeg dan bij een vorige SSH verbinding, krijg je een waarschuwing:

dany@main:~> ssh 'dany@pindabook.local'
Warning: the ECDSA host key for 'pindabook.local' differs from the key for the IP address '192.168.1.6'
Offending key for IP in /home/dany/.ssh/known_hosts:6
Matching host key in /home/dany/.ssh/known_hosts:2
Are you sure you want to continue connecting (yes/no)? yes
Last login: Sat Sep 23 15:53:13 2017 from 192.168.1.4
Have a lot of fun...
dany@pindabook:~> exit
uitgelogd
Connection to pindabook.local closed.
dany@main:~>

Deze waarschuwing is een veiligheidsmaatregel om DNS spoofing aanvallen op te merken. Deze waarschuwingen kan je negeren door in uw ~/.ssh/config configuratiebestand de volgende regels toe te voegen:

Host pindabook.local
  Hostname pindabook.local
  CheckHostIP no

De aanmelding verloopt nu als volgt:

dany@main:~> ssh 'dany@pindabook.local'
Last login: Sat Sep 23 15:54:56 2017 from 192.168.1.4
Have a lot of fun...
dany@pindabook:~> exit
uitgelogd
Connection to pindabook.local closed.
dany@main:~>

Handleidingen

De OpenSSH handleidingen zijn uitgebreid en gedetailleerd, maar eenmaal je de basis kent, zijn de handleidingen nuttig en bevatten ze veel te ontdekken extra's.