L’autore ha selezionato il Fondo per il Software Libero e Open Source per ricevere una donazione come parte del programma Scrivi per le Donazioni.
Introduzione
Quando si esaminano i log di autenticazione, è possibile vedere diversi tentativi di accesso falliti da vari indirizzi IP. Questi tentativi di accesso falliti provengono spesso da un nodo di una botnet che scansiona l’intera rete alla ricerca di server vulnerabili con credenziali predefinite. Sebbene la maggior parte delle persone abbia una password sicura o chiavi SSH che impediscono agli attaccanti di accedere al proprio server, alcuni server potrebbero essere vulnerabili a questa scansione. Anche se potresti non essere in grado di fermare questi attacchi, puoi rallentarli con tarpits.
In questo tutorial, installerai e configurerai Endlessh, una trappola che invia lentamente un banner infinitamente lungo a qualsiasi utente che tenta di accedere. Configurerai anche il servizio SSH per funzionare su una porta diversa, il che renderà i tuoi log di autenticazione più leggibili.
Dopo aver completato questo tutorial, sarai in grado di connetterti al tuo server su una porta non standard, mentre qualsiasi bot che scansiona il tuo server troverà che il loro tempo è sprecato bussando a una porta che non si aprirà mai.
Prerequisiti
Per completare questo tutorial, avrai bisogno dei seguenti elementi:
- Un server Ubuntu con un utente non-root sudo, un firewall e almeno 1GB di RAM, che puoi configurare seguendo il Setup Iniziale del Server con Ubuntu 22.04.
- Git installato sul tuo server, che puoi completare con il Tutorial di Installazione di Git.
Passaggio 1 – Spostare SSH su una Porta Non-Standard
In questo passaggio, sposterai SSH su una porta non standard per liberare una porta per Endlessh. Poiché i botnet non hanno risorse infinite, di solito scansionano solo la porta SSH predefinita (22
). Spostando il tuo SSH su una porta non standard, puoi intrappolare il bot nella trappola Endlessh.
Per iniziare, fai un backup del file di configurazione SSH dal tuo server con il seguente comando:
Questo file può essere usato per ripristinare le impostazioni originali se qualcosa non funziona o se decidi di riportare SSH alla porta predefinita.
Apri il file di configurazione SSH /etc/ssh/sshd_config
usando nano o il tuo editor di testo preferito:
Trova la riga #Port 22
. Rimuovi il commento da questa riga eliminando il #
, e quindi cambia la porta con una porta non utilizzata sul tuo server:
...
Port 2222
...
Un esempio di porta normalmente non utilizzata è 2222
. Puoi selezionare qualsiasi porta desideri utilizzare per le tue connessioni SSH ricorrenti. Salva e chiudi il file.
Se il tuo server sta utilizzando un firewall, come ufw
, sarà necessario consentire il traffico alla nuova porta:
Successivamente, riavvia il servizio SSH:
In una sessione terminale separata, tenta di connetterti al tuo server utilizzando la nuova porta:
Avviso: Non chiudere la tua sessione SSH attiva a meno che tu non abbia confermato di poter utilizzare SSH sulla nuova porta. Se non riesci a connetterti tramite la nuova porta, rischi di perdere l’accesso al tuo server chiudendo la sessione. Se non riesci a connetterti al tuo server in una sessione terminale separata, puoi ripristinare le impostazioni SSH originali eseguendo i seguenti comandi:
Se incontri ulteriori problemi, verifica che sshd
sia stato riavviato con successo e rivedi le impostazioni del firewall per assicurarti che la porta 2222
accetti il traffico tcp.
Una volta verificato di poter effettuare una nuova connessione alla porta 2222
, puoi chiudere in modo sicuro il tuo terminale originale. Quando ti connetterai al tuo server in futuro, dovrai sempre specificare la nuova porta, come segue:
Ora che hai spostato con successo SSH su una porta non standard, è il momento di configurare Endlessh.
Passaggio 2 – Installazione di Endlessh
Endlessh non ha un pacchetto ufficiale, quindi clonerai il repository per compilarlo manualmente. Utilizzerai Git per clonare il repository, il pacchetto build-essential
(per compilare il progetto) e il pacchetto libc6-dev
.
Installa i pacchetti necessari utilizzando il gestore di pacchetti apt:
Conferma l’installazione con y
quando richiesto.
Quindi clona il repository di Endlessh da GitHub nella tua directory home:
Sposta nella directory del progetto e utilizza il comando make
per compilare Endlessh:
Ora puoi avviare Endlessh con il seguente comando:
Per verificare che Endlessh funzioni, puoi tentare di effettuare una connessione SSH alla porta 22
con il flag dettagliato -v
, che mostrerà il banner infinito trasmesso. In una nuova finestra del terminale, effettua una connessione SSH alla porta 22
con uno dei seguenti comandi:
Quando la tua nuova sessione SSH tenta di connettersi alla porta 22
, vedrai apparire una stringa di caratteri casuali nel terminale di connessione ogni 10 secondi fino a quando la sessione non verrà chiusa, come nell’output seguente:
Outputdebug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
Una volta confermato il corretto funzionamento tentando di connetterti con una nuova sessione, puoi chiudere il nuovo terminale e arrestare Endlessh usando Ctrl+C
nella tua sessione terminale originale.
In questo passaggio, hai scaricato e compilato Endlessh dalla sorgente. Successivamente, lo configurerai e lo distribuirai come servizio per renderlo persistente durante il logout e il riavvio del server.
Passaggio 3 – Configurazione di Endlessh
In questo passaggio, configurerai Endlessh come servizio che persiste dopo la chiusura della sessione e durante i riavvii di sistema.
Sposta il file binario compilato nella directory /usr/local/bin
:
Inserisci la tua password se richiesto.
Copia il file del servizio dal progetto nella directory /etc/systemd/system
:
Modificherai leggermente il file di servizio per eseguire Endlessh su porte sotto 1024
. Apri il file di servizio in nano o nel tuo editor di testo preferito:
Trova la sezione riguardante l’esecuzione di Endlessh su porte sotto 1024
.
Aggiorna il file rimuovendo #
dall’inizio della riga con AmbientCapabilities=CAP_NET_BIND_SERVICE
e aggiungendo #
all’inizio della riga PrivateUsers=true
, così:
...
## Se desideri che Endlessh si leghi alle porte < 1024
## 1) esegui:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) decommenta la seguente riga
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) commenta la riga seguente
#PrivateUsers=true
...
Salva ed esci dal file.
Successivamente, consentirai a Endlessh di eseguirsi su porte inferiori a 1024
, anche indicate come porte privilegiate del dominio internet. Imposta questa capacità per il binario di Endlessh con il comando setcap
:
Dovrai definire un file di configurazione per Endlessh per indicargli quale porta utilizzare. Crea e apri un file di configurazione chiamato /etc/endlessh/config
:
Nel file di configurazione, definisci la porta da utilizzare come 22
:
Port 22
Salva e chiudi il file.
Ora puoi avviare il servizio Endlessh in modo persistente:
Includere --now enable
renderà il servizio persistente dopo il riavvio del server.
Per verificare che il servizio sia stato avviato correttamente, puoi utilizzare il comando systemctl status
:
Se avviato correttamente, vedrai un output simile a questo:
Output● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
Se è in esecuzione, puoi tentare di connetterti alla porta 22
in una nuova sessione terminale:
Poiché il tuo tarpit è in esecuzione, la nuova sessione terminale non sarà in grado di connettersi e continuerà ad essere in esecuzione in perpetuo fino a quando non verrà interrotta manualmente con Ctrl+C
nel terminale di connessione.
Se desideri interrompere il servizio in esecuzione, puoi utilizzare il seguente comando:
Dopo aver interrotto il servizio, puoi utilizzare le istruzioni di ripristino SSH nel messaggio di avvertimento del Passaggio 1 per ripristinare la configurazione originale del tuo server. Puoi riattivare il servizio con sudo systemctl --now enable endlessh
senza dover ripetere il processo di configurazione, ma assicurati che SSH non sia in esecuzione sulla porta 22
quando lo fai.
Conclusione
Hai installato e configurato con successo Endlessh, hai aiutato a pulire i tuoi registri di autenticazione e ti sei preparato a perdere tempo con i bot SSH casuali.
Dopo aver impostato la tua trappola Endlessh, dai un’occhiata alle altre Misure di Sicurezza Consigliate per Proteggere i Tuoi Server.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04