Proteggere le sessioni RDP con un tunnel SSH (Putty + XRDP)

Proteggere le sessioni RDP con un tunnel SSH (Putty + XRDP)

Dopo aver cambiato la porta del servizio SSH, mi sono voluto occupare del servizio RDP.
Non fondamentale, certo, ma mi è stato utile in certe situazioni.

Mi sono quindi detto:
Come posso assicurarmi che il traffico RDP sia il più sicuro possibile?

Che si tratti di un sistema Windows o Linux, il funzionamento sarà uguale per entrambi, in quanto non saranno apportate modifiche ai sistemi, ma alle applicazioni utilizzate per il controllo remoto.

Nella mia situazione, si hanno:

  • Un sistema da controllare con distribuzione Linux (in rete, questa macchina assume il ruolo di “server”);
  • Un sistema che controlla da remoto, nel mio caso Windows 10, ma anche un ulteriore sistema Linux è utilizzabile (il “client”);
  • Putty installato sulla macchina client;
  • XRDP installato sulla macchina server (ne ho già parlato qui);

La soluzione: un Tunnel SSH

I motivi per cui si debba decidere di impostare un tunnel SSH sono diversi:

  • La soluzione di rete (firewall client, firewall perimetrale, switch layer 3…) non permette il transito di pacchetti su protocollo RDP (porta 3389) o, nel caso si volesse bypassare un qualsiasi controllo, le connessioni sono loggate verbosamente.
  • Per non esporre ad internet una porta sensibile e vulnerabile come la 3389 (dovete sapere che il servizio Shodan ha rilevato, nel 2018, quasi 2 milioni e mezzo di sistemi con porta RDP aperta, permettendo ad un eventuale attore di tentare un attacco login, o peggio, attacchi analoghi allo sfruttamento della CVE-2018-0976 (nota vulnerabilità che ha permesso l’iniezione di ransomware all’interno di sistemi vulnerabili anche se “protetti” da password).
  • Anche se il protocollo RDP è cifrato con TLS, prima dello scambio delle chiavi c’è la possibilità che un attaccante possa effettuare un attacco Man-In-The-Middle e “sniffare” le chiavi scambiate, rendendo la sicurezza totalmente inefficace.
    Con un tunnel SSH, invece, la connessione sarebbe già cifrata prima dello scambio delle chiavi RDP, eludendo qualsiasi tentativo di intercettazione.

Sì, ok, ma come si fa?

Configurazione client

Sul programma di accesso remoto Putty è possibile configurare i tunnel SSH nella sezione apposita del pannello configurazione della sessione.

All’interno del menu di configurazione del tunnel, le impostazioni che andranno configurate saranno:

  • Source port
  • Destination

Per “source port” si intende la porta che il sistema che controlla chiamerà per la connessione remota, mentre per “destination” si intende l’indirizzo che si dovrebbe controllare da remoto (che esso sia nella propria rete o remoto).

La porta che il sistema chiamerà può essere una qualsiasi porta non utilizzata dal sistema client. Io ho usato la 5555 per comodità.

Salvate la configurazione, nel caso prevediate di utilizzare il tunnel SSH-RDP in futuro.

Configurazione server

Ora che si è configurato il client, bisogna dire al server di chiudere la porta 3389 e di accettare solo connessioni provenienti da “sé stesso”, ossia localhost/127.0.0.1.

Nello scenario che ho io, ossia con il pacchetto XRDP, si dovrà andare a riconfigurare il file /etc/xrdp/xrdp.ini e farlo assomigliare all’esempio in figura.

Terminata la configurazione client e server, basterà far partire una connessione remota all’indirizzo localhost:5555 per aprire una sessione di desktop remoto sicura e protetta da SSH.

Mostra i Commenti