Perché l'accesso root tramite SSH è così grave che tutti consigliano di disabilitarlo?


83

Tutti su Internet consigliano di disabilitare il login root tramite SSH poiché è una cattiva pratica e una falla nella sicurezza del sistema, ma nessuno spiega perché sia ​​così.

Cosa c'è di così pericoloso nell'abilitare l'accesso root (specialmente con l'accesso con password disabilitata)?

E qual è la differenza tra nome utente simbolo X e password simbolo Y o nome utente root e password simbolo X + Y dal punto di vista della sicurezza nel caso in cui sia consentita l'autenticazione password?


2
Avere un utente root nella maggior parte dei sistemi è di per sé un male, per non parlare dell'abilitazione di un accesso SSH per detto utente!
Suman,

1
L'accesso root tramite ssh è necessario per ehealth-aussie.blogspot.com/2012/01/… . Tutto è un compromesso.
emory

2
Umm ... dovremmo spostare questa domanda in sicurezza? Dal momento che l'argomento tende più alla sicurezza dei sistemi * nix.
Braiam,

1
C'è un motivo amministrativo per disabilitare root. Sui server commerciali vuoi sempre controllare l'accesso per persona. root non è mai una persona. Anche se si consente ad alcuni utenti di accedere come root, è necessario forzarli ad accedere tramite il proprio utente e quindi su -o sudo -icosì in modo che il loro accesso effettivo possa essere registrato. Questo rende molto più semplice revocare l'accesso a un individuo in modo che anche se hanno la password di root non possono farci nulla.
Philip Couling,

Risposte:


62

Perché root su SSH è male

Ci sono molti robot là fuori che provano ad accedere al tuo computer tramite SSH. Questi robot funzionano nel modo seguente.

Eseguono qualcosa del genere ssh root@$IPe poi provano password standard come "root" o "password123". Lo fanno il più a lungo possibile, fino a quando non trovano la password giusta. Su un server accessibile in tutto il mondo è possibile visualizzare molte voci di registro nei file di registro. Posso andare fino a 20 al minuto o più.

Quando gli attaccanti hanno fortuna (o abbastanza tempo) e trovano una password, avrebbero accesso alla radice e ciò significherebbe che sei nei guai.

Ma quando si impedisce a root di accedere tramite SSH, il bot deve prima indovinare un nome utente e quindi la password corrispondente. Supponiamo quindi che l'elenco di password plausibili contenga Nvoci e che l'elenco di utenti plausibili sia Mcomposto da voci di grandi dimensioni. Il bot ha una serie di N*Mvoci da testare, quindi questo rende un po 'più difficile per il bot rispetto al caso radice in cui è solo una serie di dimensioni N.

Alcune persone diranno che questo ulteriore Mnon è un vero guadagno in termini di sicurezza e sono d'accordo che si tratta solo di un piccolo miglioramento della sicurezza. Ma penso a questo più come questi piccoli lucchetti che di per sé non sono sicuri, ma impediscono a molte persone di accedere facilmente. Questo ovviamente è valido solo se la tua macchina non ha altri nomi utente standard, come tor o apache.

Il motivo migliore per non consentire il root è che root può fare molti più danni sulla macchina di quanto un utente standard possa fare. Quindi, se per fortuna trovano la tua password, l'intero sistema viene perso mentre con un account utente standard puoi solo manipolare i file di quell'utente (che è ancora molto male).

Nei commenti è stato menzionato che un utente normale potrebbe avere il diritto di utilizzare sudoe se si indovinasse la password di questo utente, anche il sistema andrebbe completamente perso.

In sintesi, direi che non importa quale password dell'utente ottiene un utente malintenzionato. Quando indovinano una password non puoi più fidarti del sistema. Un utente malintenzionato può utilizzare i diritti di quell'utente per eseguire comandi sudo, l'attaccante può anche sfruttare una debolezza del sistema e ottenere i privilegi di root. Se un attaccante ha avuto accesso al tuo sistema non puoi più fidarti di esso.

La cosa da ricordare qui è che ogni utente nel tuo sistema a cui è consentito accedere tramite SSH è un ulteriore punto debole. Disabilitando root si rimuove un'ovvia debolezza.

Perché le password su SSH sono sbagliate

Il motivo per disabilitare le password è davvero semplice.

  • Gli utenti scelgono password errate!

L'intera idea di provare le password funziona solo quando le password sono indovinabili. Quindi quando un utente ha la password "pw123" il tuo sistema diventa insicuro. Un altro problema con le password scelte dalle persone è che le loro password non sono mai veramente casuali perché sarebbe difficile da ricordare.

Inoltre, gli utenti tendono a riutilizzare le proprie password, utilizzandole per accedere a Facebook o ai loro account Gmail e per il proprio server. Quindi, quando un hacker ottiene la password dell'account Facebook di questo utente, potrebbe accedere al tuo server. L'utente potrebbe facilmente perderlo a causa del phishing o il server di Facebook potrebbe essere violato.

Ma quando si utilizza un certificato per accedere, l'utente non sceglie la sua password. Il certificato si basa su una stringa casuale che è molto lunga da 1024 bit fino a 4096 bit (~ 128 - 512 caratteri password). Inoltre, questo certificato è lì solo per accedere al tuo server e non viene utilizzato con alcun servizio esterno.

link

http://bsdly.blogspot.de/2013/10/the-hail-mary-cloud-and-lessons-learned.html

Questo articolo proviene dai commenti e volevo dargli una posizione un po 'più prominente, poiché va un po' più a fondo nella questione delle botnet che provano ad accedere tramite SSH, come lo fanno, come appaiono i file di registro e cosa si può fare per fermarli. È stato scritto da Peter Hansteen.


10
Buon riassunto. Ma anche le chiavi private ssh possono essere rubate.
Faheem Mitha,

16
@Faheem Mitha Sì, ma rubato è diverso dall'ipotesi, cosa che fanno i robot. Inoltre, la tua chiave privata è solo nelle tue mani (o disco rigido) e non nelle mani di terze parti come Stack Exchange o Google.
Raphael Ahrens,

2
+1. Questa risposta potrebbe effettivamente ridursi a semplicemente N*M > N. Poiché la maggior parte degli host * nix ha un rootutente, se si consente a root di accedere direttamente da un host remoto, la dimensione della matrice di test è il numero di password da provare; disabilitando gli accessi root diretti, il numero di possibili combinazioni si moltiplica con il numero di nomi utente che si desidera testare (e non è ancora garantito che si testeranno nomi utente validi!).
un CVn

3
@ MichaelKjörling Aggiungerei che non è difficile ottenere il nome utente, poiché normalmente il nome utente non è un segreto e probabilmente potrei chiedere a chiunque di ottenerlo. Ma aiuta contro robot e tentativi semplici.
Raphael Ahrens,

2
@Tutti, se il nome utente ha simboli X e la password Y ci sono # of X length words* # of Y length wordspossibili combinazioni da provare. Quando il nome utente è fisso (ad es. Root) ma la password è lunga X + Y, ci sono # of X+Y length wordspossibili password. E # of X+Y length words=# of X length words * # of Y length words
skarap

10

Questi potrebbero essere alcuni dei motivi per cui l'accesso al root diretto non dovrebbe essere consentito.

  • Tentativi di forza bruta. L'accesso diretto alla radice potrebbe causare più danni in caso di attacco bruteforce riuscito.
  • La mancata configurazione su chiavi SSH "senza password" (si verifica un errore umano) potrebbe esporre la macchina a Internet

Ma questo è solo il SUGGERIMENTO dell'iceberg. Devi configurare altre restrizioni e configurazioni come:

  • Cambia la porta predefinita (22)
  • Password complesse e passphrase
  • Disabilita autenticazione basata su host
  • Crea un elenco di utenti consentiti
  • Configurare il timeout di inattività
  • Forza il protocollo SSHv2
  • Disabilita password vuote
  • Usa fail2ban come misura ancora bruteforce
  • Registra tutto
  • Configura le chiavi SSH e affidati solo alle chiavi pubbliche su .ssh / authorized_keys

5
"L'accesso diretto alla radice potrebbe provocare più danni in caso di attacco bruteforce riuscito." Non proprio, se confrontato con un'impostazione predefinita sudo. Il vero killer è l'effetto moltiplicativo quando non hai un nome utente su cui puoi contare per essere valido su un determinato host.
un CVn

@ MichaelKjörling - Sì, certo che sudo incasinato potrebbe essere dannoso come PermitRoot;)


1
La modifica della porta è in realtà dannosa in molti scenari in sé. E non è altro che sicurezza dall'oscurità.
0xC0000022L

+1 per menzionare fail2ban, poiché gli attacchi di forza bruta non sono solo una preoccupazione per SSH, ma per qualsiasi altra cosa sulla macchina. Non è necessario ottenere ovunque i permessi di root o di sistema per "rilevare" una macchina a scopi pratici (accedere a dati privati, utilizzare come dump di file, utilizzare per phishing, ecc.).
Eric Grange,

8

Hai ragione che il nome utente di root e la password del simbolo X + Y sono crittograficamente sicuri almeno quanto il nome utente del simbolo X + la password del simbolo Y. In effetti è ancora più sicuro, perché i nomi delle persone sono facili da indovinare (i robot possono semplicemente provare john, mike, bill, ecc ... e btw: questo è quello che fanno molti di loro invece di provare root). E sei particolarmente sfortunato se si tratta di un attacco mirato, perché se qualcuno vuole rompere il server di un'azienda non sarebbe un problema scoprire il nome (nick) dell'amministratore di sistema.

E non appena l'attaccante ha accesso all'account utilizzato da sysadmin per gli accessi ssh (e quindi utilizza suo sudoper svolgere le sue attività) può infettare la sessione dell'utente con un programma che invierà la password di root dell'attaccante quando il sysadmin digita quello successivo tempo.

È qualsiasi tipo di login root che sono (o dovrebbero essere) considerati cattive pratiche dal punto di vista della sicurezza. Il login "normale" dell'utente -> catena su / sudo aggiunge una traccia di controllo. In parole povere: permette di scoprire chi ha fatto cosa.

Un caso speciale può essere quello in cui solo una persona ha accesso come root. In tal caso l'utilizzo dell'utente "normale" aggiuntivo non aggiungerà molto valore (almeno non ho mai visto quel valore). Ma comunque - dovresti comunque avere un semplice utente sul sistema (per attività non amministrative, eseguire wget, ecc ;-)).


4

Cosa c'è di così pericoloso nell'abilitare l'accesso root (specialmente con l'accesso con password disabilitata)?

L'attaccante (bot / botnet / hacker) deve solo indovinare la password e ha il controllo completo sul sistema, se si è aperti a Internet. Inoltre, nessuno degli account di sistema (dati www, proxy, ecc.) Dovrebbe essere in grado di accedere tramite SSH, per gli stessi motivi.

Se hai disabilitato l'accesso con la password (usando la chiave pubblica, ad esempio), tieni presente che chiunque ottiene la chiave privata ottiene il controllo completo sul tuo sistema. Scopri perché usare la chiave pubblica con un utente è meglio sotto.

E qual è la differenza tra nome utente simbolo X e password simbolo Y o nome utente root e password simbolo X + Y dal punto di vista della sicurezza nel caso in cui sia consentita l'autenticazione password?

Il nome utente extra può aggiungere un livello di sicurezza poiché: a) un utente malintenzionato deve conoscere sia coppia, nome utente e password; b) nel caso in cui un utente malintenzionato violi il sistema non avrebbe accesso immediato a un account privilegiato aggiungendo un po 'di sfumatura per l'utente malintenzionato.

In questo caso la chiave pubblica è anche un vantaggio, poiché:

  1. L'attaccante ha bisogno della tua chiave pubblica
  2. L'attaccante ha bisogno della password (o del metodo di autenticazione) per ottenere privilegi elevati

1
Pochissime delle password che uso sono meno di circa 20 caratteri alfanumerici casuali (impostare [A-Za-z0-9] più alcuni caratteri speciali). 20 personaggi del genere (quindi lunghezza 20 di un set di caratteri di 40) ti danno nell'ordine di 10 ^ 32 combinazioni. 128 bit di entropia sono nell'ordine di 10 ^ 38. Non è una grande differenza, tutto sommato, e il server SSH è libero di implementare qualsiasi tipo di limite che gli piace, quindi non è che tu stia facendo un attacco di forza bruta offline in quel caso. Non c'è niente di sbagliato nelle password, se riesci a convivere con loro è difficile da ricordare come una chiave a 128 bit.
un CVn

@michael shh ... non dare spazio, ora gli hacker sanno che dovrebbero usare tabelle arcobaleno dell'ordine di 20 caratteri di lunghezza ...?
Braiam,

6
Le tabelle @Braiam Rainbow sono utili solo se l'attaccante ha accesso agli hash per effettuare una ricerca offline. Nel caso qui, l'attaccante ha solo la risposta del server da verificare, il che è probabilmente limitato a tanti tentativi - e molto più lento.
Peter,

@Peter up, ho incasinato sia il dizionario che gli hash, ma in ogni caso l'OP ha chiesto perché non dovrebbe usare password deboli o vuote, la strega è ridicola, quindi sono venuto con situazioni ridicole perché non dovrebbe. Scusa se non sono stato interpretato in quel modo ed è stato preso come FUD.
Braiam,

2
Se hai voglia di provare alcune password 1,8 * 10 ^ 35 (e questo è solo per l'intervallo 18-22 caratteri casuali su un set di 40 e non sai quali caratteri al di fuori del set [A-Za-z0- 9] Io uso), ho quasi detto divertiti. Sono circa 117,1 bit di equivalente entropico (2 ^ 117,1 ~ 1,78 * 10 ^ 35) e come ha sottolineato @Peter, molto probabilmente avresti bisogno di eseguire un attacco online . Memorizzare tutte quelle password (senza ricorrere alla compressione) risulta avere bisogno di circa 3,6 * 10 ^ 36 byte o 3 * 10 ^ 24 TiB (e se quella cifra è sbagliata di alcuni ordini di grandezza, chi se ne frega? ). Parola chiave casuale .
un CVn del

1

Non è esattamente male finché si prendono precauzioni di sicurezza. Ad esempio, è possibile installare CSF (Configure Server Firewall) e impostare il numero di tentativi di errore consentiti, quindi se qualcuno ha provato, diciamo più di 5 tentativi di errore ?, vengono automaticamente bloccati. Quindi l'intera prima parte del miglior risponditore non sarà affatto un problema. Questo mi è successo molte volte e fortunatamente tutti gli introduttori sono stati bloccati in modo permanente. Immagino che per un server non sia un grosso problema se sei l'unica persona che gestisce il server, ma ovviamente se ci sono molti amministratori di sistema o se lavori in un'organizzazione, ovviamente non usare radice. Anche per un PC desktop, suppongo che utilizzare un altro account sia migliore in quanto esiste un rischio per la sicurezza poiché si utilizza un sacco di software, ma in un server non si ' Scegli un software casuale di cui non ti fidi, assicurati di mantenerli il più bassi possibile. Quindi la conclusione è che No non è davvero dannoso se sai come gestire correttamente un server.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.