sshfp

SSH biztonság felsőfokon, SSHFP rekordok.

Security 2023. jan 15.

Mi az az SSHFP?

Az SSHFP egy DNS rekord amely az SSH szerver publikus kulcsát hash formájában eltárolja, ami által az SSH kliens megbizonyosodik arról, hogy tényleg arra a szerverre csatlakozik-e amire szeretnénk és nem vagyunk DNS rebinding támadás áldozata. A működése egészen egyszerű:

Amikor a kliens csatlakozik a szerverhez először ellenőrzi a DNS-ben tárolt SSHFP rekordokat, és ha a szerver által küldött kulcs ujjlenyomata egyezik a DNS-ben tárolt értékkel akkor engedélyezi a csatlakozást. Más esetben hibaüzenettel értesít minket arról, hogy valami nincs rendben.  

DNSSEC validálás.

Fontos, hogy a domainnek, amely a szerver IP címére van irányítva, és amivel beszeretnénk jelentkezni, rendelkezzen DNSSEC validációval. Persze akkor is ellenőrizni fogja az SSH kliens a rekordokat, ha nincs a domainen DNSSEC validáció viszont egy figyelmeztetést is mellé fog dobni mivel a DNS-ben kapott válasz így nem megbízható.

Arról, hogy a domain nevünk használ-e DNSSEC validálást könnyen megtudunk bizonyosodni a Verisign Labs által üzemeltetett weboldalon:

DNSSEC Analyzer
The DNSSEC Analyzer from VeriSign Labs is an on-line tool to assist with diagnosing problems with DNSSEC-signed names and zones.

Amennyiben csak zöld kis pipákat látunk minden okkés, ha mégse akkor nézzük át a konfigurációt :)

Alap szükségletek

Szükségünk van pár dologra:

  1. SSH szerver
  2. DNSSEC-el ellátott Domain név
  3. DNS Hoszting
  4. SSH Kliens

Szerver Konfiguráció

Elsősorban lépjünk be a szerverünkbe a megszokott módon és generáljuk le az SSHFP ujjlenyomatokat.

ssh-keygen -r te.domain.neved

A te.domain.neved helyére persze a te saját domain neved kell írnod, ha nem lenne világos :)

A kimenete ehhez hasonló kell legyen:

te.domain.neved IN SSHFP 1 1 3d26879505f2e086c5e9e0d26f102fbceb50dc4b
te.domain.neved IN SSHFP 1 2 5716e0c1f86a66461798dda9904dc26cf0595da1373114d42e14da4b5dcd3658
te.domain.neved IN SSHFP 2 1 244an9f3789fc46602baf5f739e6e9f162713ff9
te.domain.neved IN SSHFP 2 2 83c3353848d282e433a38c0fb1e9b4177767dd9948n7b15a1aa509b128ca0c6f
te.domain.neved IN SSHFP 3 1 1f12c952273a1fe1d5527c421e6cdf31c18a8a05
te.domain.neved IN SSHFP 3 2 7412a9835e781814834b76833d74065e6cb7652ae1aa411af1c13ecd7c9327ed
te.domain.neved IN SSHFP 4 1 d0aed234fb21db2a280a21780919dbcb4079b2b8
te.domain.neved IN SSHFP 4 2 884520ed263412b3695f0ee80a7ca6a6b0b422d224ea7b21887692480b0d4f26

DNS konfiguráció

Most lépjünk bele a DNS hoszting felületébe és adjuk hozzá a rekordokat. Én cloudflare-t használok ezért azon fogom megmutatni a folyamatot.

Navigáljunk a domain nevünkön belül a DNS szekcióba és kattintsunk a kék Add Record gombra, válasszuk ki az SSHFP rekord type-ot és a sablont követve adjuk hozzá a rekordokat. Az elsőt megmutatom és a többit már magadnak is megtudod csinálni :D

Kliens Konfiguráció

Még nem vagyunk kész a dologgal. Be kell konfigurálnunk az SSH kliensünket is, hogy ellenőrizze a rekordot és validálja az azonosságát.

Mivel nem értek a windowshoz ezért a linuxos alap openssh kliens konfigurációt mutatom meg.

Tetszőleges szövegszerkesztővel nyissuk meg a ~/.ssh/config fájlt-t és írjuk bele a következőt:

Host szerverem
 Hostname te.domain.neved
 Port 22
 VerifyHostKeyDNS=yes
 

Ha nem szeretnéd a configot piszkálni akkor hozzáteheted bejelentkezéskor külön a VerifyHostKeyDNS=yes argumentumot a -o kapcsolóval.

ssh -o VerifyHostKeyDNS=yes nemroot@te.domain.neved

Teszteljük le!

Elsősorban nézzük meg, hogy frissültek-e a DNS rekordok. Ezt könnyen megtehetjük a dig tool-al.

dig SSHFP te.domain.neved +short

A kimenetnek tükrőznie kell az ssh-keygen által visszaadott információkat:

1 1 3d26879505f2e086c5e9e0d26f102fbceb50dc4b 
1 2 5716e0c1f86a66461798dda9904dc26cf0595da1373114d42e14da4b5dcd3658
2 1 244an9f3789fc46602baf5f739e6e9f162713ff9
2 2 83c3353848d282e433a38c0fb1e9b4177767dd9948n7b15a1aa509b128ca0c6f
3 1 1f12c952273a1fe1d5527c421e6cdf31c18a8a05
3 2 7412a9835e781814834b76833d74065e6cb7652ae1aa411af1c13ecd7c9327ed
4 1 d0aed234fb21db2a280a21780919dbcb4079b2b8
4 2 884520ed263412b3695f0ee80a7ca6a6b0b422d224ea7b21887692480b0d4f26

A sorrend eltérő lehet, ez természetes és nem befolyásolja a működést.

Amint megbizonyosodtunk arról, hogy az összes rekord a helyén van, próbáljunk meg bejelentkezni:

ssh nemroot@szerverem -v

Amennyiben a debug log-ban megtaláljuk a következő sorokat:

debug1: found 8 secure fingerprints in DNS
debug1: matching host key fingerprint found in DNS

Akkor veregessük meg a saját vállunkat mert mindent jól csináltunk és működik a DNS validálás, ha mégse és nem tudsz rájönni mi a probléma, lépj be Discord szerverünkre ahol szívesen segítünk megoldani a problémát. :)

Végszó

Nagyon szépen köszönöm, hogy elolvastad ezt a cikkem is, remélem hasznosnak találod, amennyiben így van és szeretnéd támogatni a munkásságunkat oszd meg kérlek ismerőseiddel is! <3

Tagek