Vi serve il cloud computing? Iniziate subito

La L in Linux indica movimento laterale

Stiv Kupchik

scritto da

Stiv Kupchik

June 28, 2023

Stiv Kupchik

scritto da

Stiv Kupchik

Stiv Kupchik svolge il ruolo di Security Researcher Team Lead in Akamai. I suoi progetti di ricerca ruotano intorno ai componenti interni dei sistemi operativi, alla ricerca sulle vulnerabilità e all'analisi dei malware. Ha presentato la sua ricerca in occasione di conferenze come Black Hat, Hexacon e 44CON. Oltre ad essere un esperto di cybersicurezza, Stiv ha conseguito anche una laurea in fisica.

Un hacker determinato può e troverà i protocolli da violare descritti in questo post senza che noi glielo diciamo: vogliamo che il team blu sia preparato per questo.

Introduzione

Quando si parla di tecniche di movimento laterale che non si basano sullo sfruttamento delle vulnerabilità, ci sono molti protocolli e strumenti legittimi che gli autori di attacchi possono utilizzare: PsExec, RDP, SSH, WMI e molti altri. La maggior parte di essi è generalmente disponibile solo su computer Windows. Quando si tratta di computer Linux, tuttavia, viene in mente solo un protocollo: SSH. In questo post del blog, esamineremo altri protocolli in Linux che possono essere utilizzati per ottenere (o aiutare a raggiungere) il movimento laterale.

Ovviamente Linux non è un sistema operativo; è solo il kernel. Sarebbe più preciso dire che esamineremo i sistemi operativi basati su Linux o le distribuzioni Linux. Cercare di trovare un servizio o un protocollo comune che funzioni su più distribuzioni è praticamente impossibile (nemmeno SSH è installato immediatamente in tutte le distribuzioni). Quindi, ci concentreremo invece sui protocolli e sui servizi più importanti, indipendentemente dalla distribuzione Linux con cui vengono forniti.

Questo post sul blog non vuole essere una guida all'hacking di Linux; ha lo scopo di informare gli addetti alla sicurezza della rete sulle potenziali minacce che possono interessare le proprie reti.

Oltre a SSH, cosa potete fare?

La maggior parte (se non tutti) dei protocolli che tratteremo in questo post non sono disponibili immediatamente, ma devono essere configurati in un modo specifico per ottenere il movimento laterale. Non forniremo guide per abusare dei protocolli descritti in questo post.

Speriamo di aumentare la consapevolezza di altri protocolli che possono essere configurati in modo tale da poter fungere da falla vulnerabile che può essere abusata dagli autori di attacchi. Un hacker determinato può e troverà e abuserà dei protocolli trattati in questo post senza che noi glielo diciamo: vogliamo che il team blu sia preparato per questo.

Per aiutare ulteriormente gli addetti alla sicurezza, abbiamo collaborato con il nostro team Infection Monkey. Infection Monkey è una piattaforma di attacco e violazione automatica open source che mette alla prova la vostra rete contro molte tecniche comuni di movimento laterale e propagazione in rete. 

Il team di sviluppo ha utilizzato i risultati della nostra ricerca e li ha integrati come nuova tecnica di exploit all'interno dello strumento. Gli addetti alla sicurezza possono utilizzare Infection Monkey per testare la propria rete rispetto ad alcune delle tecniche di esecuzione remota menzionate in questo post.

Selezione del candidato

[Nota: questa sezione riguarda il metodo che abbiamo usato per trovare interessanti obiettivi di movimento laterale. Se non siete interessati alla metodologia e preferite passare direttamente all'azione, sentiti libero di passare a protocolli che consentono l'esecuzione immediata del codice.]

Poiché stiamo cercando protocolli e servizi di movimento laterale, possiamo considerare sia l'aspetto del sistema operativo che l'aspetto della rete quando cerchiamo potenziali candidati; vale a dire, possiamo cercare i processi più comuni nei computer Linux o nelle porte di ascolto più comuni. Non dovremmo trascurare l'uno a favore dell'altro poiché possono esserci diverse implementazioni dello stesso protocollo (nome di processo diverso, stessa porta) o un singolo processo con porte multiple o variabili (come le porte effimere in RPC).

Quando abbiamo esaminato le principali porte utilizzate nella comunicazione con i computer Linux, abbiamo osservato che SSH (porta 22) dominava l'elenco, ma c'erano anche altri candidati promettenti per l'indagine: FTP (porta 21), SNMP (porta 161) e Sun RPC (porta 111). 

Ci sono anche alcune porte che sono state gestite da sshd (il processo daemon SSH) anche se non hanno nulla a che fare con SSH. Partiamo dal presupposto che queste sono utilizzati nei tunnel SSH e sono, quindi, al di fuori del nostro ambito di indagine. 

Prendiamo, ad esempio, le porte 135 e 5985, utilizzate rispettivamente in Windows per RPC e WinRM. Non ci aspettiamo quelle porte su computer Linux, soprattutto quando sshd è in ascolto. È più probabile che sia stato aperto un tunnel SSH su un computer Linux disponibile esternamente per consentire l'accesso ai computer interni. Poiché i tunnel SSH reindirizzano solo il traffico verso un altro destinatario, non contano molto quando si considera il movimento laterale nell'host del tunnel.

Tra i nostri risultati, sono emersi due processi interessanti da prendere in considerazione: xinetd ( rpcbind. Non sono praticabile come obiettivi di movimento laterale, in quanto non offrono molte capacità; sono principalmente utilizzati per operazioni di ricerca per mappare la comunicazione e le porte ad altri processi. Invece, possiamo usarli per trovare altri servizi interessanti

xinetd (e il suo predecessore, inetd) viene utilizzato per controllare e gestire daemon. Osservando l'elenco predefinito di daemon che gestisce, possiamo trovare rexece rlogin ( rsh, tutti parte della suite Comandi r di Berkeley . Possiamo anche trovare vari FTP FTP, VNC ( Telnet.

rpcbind è il processo portmapper RPC per Sun RPC. I server RPC si registrano con il portmapper e i client possono interrogare il portmapper per trovare la porta temporanea del server. A differenza di MS-RPC, Sun RPC utilizza i numeri di programma per identificare server RPC specifici e questi sono registrati con l'estensione IANA (Internet Assigned Numbers Authority). Guardando i programmi registrati, possiamo vedere alcuni nomi interessanti, come rexec ( NFS.

Protocolli che consentono l'esecuzione immediata del codice

SNMP

24% dei computer Linux testati

Il protocollo SNMP (Simple Network Monitoring Protocol) viene utilizzato per il monitoraggio. I computer eseguono un processo daemon (solitamente chiamato snmpd) che ascolta le connessioni tramite la porta UDP 161. Sebbene SNMP venga solitamente utilizzato per interrogare parametri e statistiche del computer, è anche possibile impostare alcuni parametri e configurazioni in remoto utilizzando il protocollo. Anche le versioni precedenti di SNMP (v1 e v2) non hanno molta crittografia o autenticazione e richiedono solo una password (chiamata "stringa della community") che può essere rilevata dal traffico di rete o forzata.

A quanto pare, è anche possibile eseguire comandi remoti tramite SNMP, utilizzando il plug-in EXTEND, caricato per impostazione predefinita nelle versioni precedenti dell'agente SNMP. Sebbene questa opzione sia disabilitata nelle versioni più recenti di SNMP (v5.8+), a seguito di una CVEsemi-correlata, abbiamo ancora visto ambienti con la versione vulnerabile di SNMP installata. È anche possibile creare il proprio agente SNMP e abilitare il plug-in EXTEND (Figura 1).

Due finestre di terminale affiancate. Il terminale di sinistra mostra l'output di uno script che esegue uno script remoto su un server utilizzando SNMP EXTEND, quello di sinistra mostra le connessioni in entrata al server di destinazione Figura 1. Esecuzione di uno script remoto utilizzando il plug-in EXTEND SNMP

Indipendentemente dalle funzionalità integrate, anche SNMP è un obiettivo per gli autori di attacchi, con alcuni criminali che utilizzano le vulnerabilità nelle implementazioni SNMP nei router e nei dispositivi IoT per violare le reti. L'abuso di SNMP è arrivato al punto che la CISA (Cybersecurity & Infrastructure Security Agency) ha rilasciato una notifica sul protocollo.

Per aiutare a testare questa minaccia, abbiamo collaborato con il nostro team Infection Monkey per sviluppare un plug-in di exploit per il plug-in EXTEND remoto SNMP. L'esecuzione di Infection Monkey vi consentirà di osservare come sarebbe questo attacco all'interno del vostro ambiente e verificare che la vostra posizione di sicurezza sia sufficiente per respingere l'attacco. L'attacco SNMP è disponibile nell'ultima versione di Infection Monkey, v2.2.1.

Protocolli desktop remoto

10% degli ambienti Linux testati

No, non stiamo parlando specificamente di RDP, il protocollo desktop remoto proprietario di Microsoft (ma apparirà, non preoccupatevi). Esistono altri protocolli di desktop remoto che possono essere eseguiti su computer Linux. Sono molto meno comuni rispetto agli ambienti Windows, poiché sono pensati per condividere desktop grafici e la maggior parte dei server Linux viene installata senza alcun ambiente desktop. 

Tuttavia, abbiamo osservato che quei protocolli sono stati utilizzati in alcune reti, quindi abbiamo stilato un elenco e sono inclusi qui:

  • X Window System è un sistema di finestre desktop disponibile per Unix anche in grado di ascoltare connessioni remote. Utilizza le porte TCP 6000+ (inizia con la porta 6000, ma il numero di porta aumenta successivamente per ogni server desktop in esecuzione).

  • VNC si basa sul protocollo RFB (Remote Framebuffer) e utilizza le porte TCP 5900+ (analogamente a X, il numero di porta aumenta con ogni server desktop in esecuzione).

  • Xrdp è un'implementazione del protocollo Microsoft RDP che può essere utilizzato su computer non Windows. Come implementazione di RDP, utilizza la porta 3389.

Alcuni dei protocolli di desktop remoto sono più sicuri di altri, ma tutti possono potenzialmente essere oggetto di abusi da parte dei criminali. Esistono anche molteplici implementazioni dei protocolli in Linux, motivo per cui abbiamo incluso qui i numeri di porta invece dei nomi dei programmi.

Telnet

4% degli ambienti Linux testati

Proprio come SSH e rlogin, anche Telnet è un protocollo per console e controllo remoti. È anche non sicuro e non crittografato, in modo simile a rlogine vulnerabile ad intercettazioni o attacchi di sniffing di pacchetti. L'abbiamo osservato solo in circa il 4% delle reti che abbiamo esaminato, ma significa che è ancora in uso e potrebbe influire sulla vostra rete. Il protocollo utilizza la porta TCP 23 o 2323.

Comandi r di Berkeley

1% degli ambienti Linux testati

I comandi Berkeley r indicano una suite di programmi che consente di eseguire operazioni remote sui computer in rete. Originariamente sviluppati come parte di BSD, sono stati in gran parte sostituiti da SSH, principalmente a causa dei problemi di sicurezza di quei protocolli (nessuna crittografia e autenticazione minima o inesistente). 

Tuttavia, abbiamo osservato alcuni dei daemon della suite qua e là, quindi è troppo presto per escluderli del tutto. Vorremmo evidenziare in particolare tre daemon:

  1. Rexec: fornisce l'esecuzione di comandi in remoto; utilizza la porta TCP 512

  2. rlogin: fornisce accesso remoto e console; utilizza la porta TCP 513

  3. rsh: simile a rexec, ma non richiede autenticazione; utilizza la porta TCP 514

Lo lascerò qui: protocolli che consentono il trasferimento di file

Anche se non consente direttamente il controllo remoto o l'esecuzione, il solo fatto di poter trasferire i file al computer preso di mira può rivelarsi prezioso per lo sviluppo di un attacco. Diamo un'occhiata, ad esempio, alla comune tecnica (e strumento) di movimento laterale PsExec, anche se è basata su Windows.

Innanzitutto, copia il file binario del servizio sul computer di destinazione tramite SMB e solo successivamente esegue il servizio comunicando con il gestore del servizio in remoto. Ecco perché riteniamo che sia importante mappare anche i vari modi in cui gli strumenti e i file binari degli autori di attacchi possono essere posizionati sui computer di destinazione. Abbiamo anche teorizzato alcuni metodi per abusare del trasferimento di strumenti per ottenere l'esecuzione remota, di cui parleremo in seguito in questo post.

FTP

31% degli ambienti Linux testati

FTP (File Transfer Protocol) è uno dei protocolli più classici (è stato il primo protocollo a livello di applicazione insegnato nel corso di networking). Utilizzato per il trasferimento di file, è un protocollo basato su testo non sicuro, poiché utilizza testo in chiaro.

Samba

20% degli ambienti Linux testati

Samba è una suite di programmi che aiuta con l'interoperabilità di Windows. Implementa il protocollo SMB (porta TCP 445) e può ospitare o interagire con file server e può anche integrarsi con Active Directory o fungere da controller di dominio stesso (Figura 2). 

Mentre SMB di per sé è solo un protocollo di trasferimento dati, l'integrazione con Active Directory significa che potreste trovare più implementazioni di server e client RPC, che possono produrre una cospicua serie di potenziali percorsi di movimento laterale. 

Fortunatamente, non siamo riusciti a trovare un modo chiaro per abusare di Samba per il movimento laterale. Poiché Samba si preoccupa solo di far funzionare le cose, molte logiche e funzionalità RPC non necessarie non sono state implementate, quindi la superficie di attacco è stata limitata. Ci sono anche meno controlli nel codice, come si vede da vari commenti in tutto il codice sorgente. 

Potrebbe essere prudente chiedere a un red team di verificare la sicurezza del controller di dominio quando si utilizza Samba Active Directory, anche in assenza di evidenti percorsi di movimento laterale verso di esso.

Un estratto di codice dall'archivio di Samba, con un commento TODO: "Dovremmo anche verificare che vengano utilizzati solo caratteri del nome netbios validi?" Figura 2. Commento TODO nel codice sorgente di Samba

NFS

18% degli ambienti Linux testati

L'NFS (Network File System) è un altro modo per creare file server. È basato su Sun RPC (porta TCP 111). Ci sono molte funzioni RPC che possiamo esaminare, ma non abbiamo trovato un modo immediato per ottenere l'esecuzione di comandi remoti tramite esso.

rsync

16% degli ambienti Linux testati

rsync è un'utilità per il trasferimento di file e la sincronizzazione tra computer in rete. Può essere eseguito come un servizio o un daemon e può fornire file tramite il suo protocollo dedicato (porta TCP 873), rsh o SSH.

Esecuzione remota tramite trasferimento di file

Possiamo esaminare il trasferimento di file quanto vogliamo, ma non è molto utile a meno che gli autori di attacchi non riescano in qualche modo a eseguire i file trasferiti. Oltre a indurre l'utente a eseguire egli stesso il file, abbiamo pensato a due opzioni per ottenere l'esecuzione: entrambe richiedono una sorta di configurazione errata o un (grave) allentamento delle impostazioni di sicurezza.

Persistenza remota

Esistono molte posizioni legittime nel file system Linux che possono essere utilizzate per installare la persistenza, ma per il movimento laterale ci concentreremo su /etc/cron.hourly. Se un criminale può caricare un file in questa posizione, con i permessi di esecuzione, verrebbe semplicemente eseguito all'ora successiva, ottenendo così il movimento laterale a lungo ambito.

Ma, per fare ciò, un criminale richiederebbe permessi sudo o di root, che non sono facili da ottenere. Purtroppo, è possibile configurare i file server in modo non sicuro, il che consentirebbe esattamente questo scenario (si veda rsync, ad esempio). Perché qualcuno dovrebbe configurare quei servizi con così poca sicurezza? Perché è conveniente e facilita la vita. Per favore, non siate voi quel qualcuno: proteggetevi.

Web shell

Uno scenario molto più plausibile, invece dell'accesso a /etc, sarebbe l'accesso remoto a una cartella radice web di un server web attivo. In tal caso, dovrebbe essere possibile caricare una web shell personalizzata e utilizzarla per eseguire comandi remoti. Ci sono molti esempi di web shell disponibili online, quindi gli autori di attacchi non devono nemmeno inventare la ruota.

I container non dovrebbero perdere, giusto?

Un altro aspetto che sta diventando sempre più popolare negli ultimi anni sono i contenitori. Nella nostra ricerca, abbiamo osservato più istanze di programmi container che ascoltano e accettano connessioni, e sembra che siano anche consentiti per progettazione. Se gli autori di attacchi possono accedere a un gestore di container remoto, possono caricare la propria immagine dannosa e utilizzarla per propagarsi ulteriormente all'interno della rete.

Proteggetevi prima di venire danneggiati

Ora che abbiamo illustrato i potenziali modi a disposizione dei criminali di accedere ai computer, è tempo di discutere su come tenerli fuori.

Visibilità

Come abbiamo già accennato, nessuno dei protocolli qui descritti viene installato e configurato con Linux pronto all'uso. Qualcuno deve installarli appositamente. Pertanto, il primo obiettivo aziendale sarebbe quello di avere una buona visibilità su ciò che è in esecuzione e comunica (o ascolta la comunicazione) in rete: come ha scritto Sun Tsu, "Se non conosci né il nemico né te stesso, soccomberai in ogni battaglia".

Configurazione

Dopo aver fatto l'inventario della vostra rete e identificato uno dei servizi discussi qui, il passaggio successivo è controllare la configurazione di tali servizi. Ad esempio, un agente SNMP aggiornato configurato per utilizzare SNMPv3 con l'autenticazione Kerberos è perfetto. SNMPv2 con una stringa di community facilmente indovinabile? Non proprio.

Sicurezza contro l'oscurità

Altri protocolli o servizi possono forse essere sostituiti con protocolli più nuovi e più sicuri, come l'utilizzo di SSH invece della suite r-command o Telnet. Alcuni protocolli, come FTP o rsync, possono anche essere incapsulati su SSH, per l'ulteriore vantaggio della crittografia fornita da SSH. È ovvio: dovrete assicurarvi che anche SSH sia configurato correttamente, con PKI o password complesse che non siano facilmente decifrabili.

Segmentation

Anche se tutte le comunicazioni sono protette, non significa che tutti dovrebbero essere in grado di accedere a tutto. Una rete semplice consente una facile propagazione agli aggressori; una rete segmentata è un ostacolo molto più grande (Figura 3). 

Se i criminali devono fare i salti mortali e spendere molte risorse per ogni passo percorso nella rete, potrebbero rinunciare all'attacco perché non è conveniente. Inoltre, più azioni devono intraprendere i criminali all'interno della rete, più sono le opportunità di rilevare la violazione e dare l'allarme. Quindi, potete avviare una procedura di risposta agli incidenti per scacciarli e bloccare la violazione.

Un'infografica che illustra l'effetto della segmentazione. A sinistra, c'è una rete senza segmentazione. Il malware può propagarsi da un computer violato al resto della rete senza restrizioni. A destra, la rete ha due segmenti: Finanza e C-suite. Il malware non può propagarsi dal computer violato in nessuno dei segmenti poiché non ne fa parte. Figura 3. La segmentazione come strategia di mitigazione delle violazioni. A sinistra: senza segmentazione; a destra: con segmentazione.

Riepilogo

In questo post del blog, abbiamo evidenziato diversi protocolli e programmi che sono comuni sui computer Linux e possono essere utili agli autori di attacchi mentre tentano di spostarsi lateralmente sulla rete. Abbiamo scelto espressamente di non includere esempi concreti poiché ci rivolgiamo al lato blu dei sistemi di difesa. Desideriamo aumentare la consapevolezza di questi protocolli in modo che le reti non rimangano esposte.

Per quanto riguarda mitigazioni o protezioni, consigliamo di utilizzare le versioni sicure dei protocolli discussi in questo post (SNMPv3, SFTP invece di FTP, ecc.). Inoltre, ove possibile, consigliamo di utilizzare strategie di segmentazione della rete attorno a tali elementi. 

Per la maggior parte dei protocolli qui descritti, di solito c'è un piccolo sottoinsieme di processi client o server, oltre a numeri o intervalli di porta univoci. Pertanto, dovrebbe essere possibile limitare l'accesso alla rete bloccando porte o processi specifici al sottoinsieme di server che lo richiede, senza un grande impatto sulla normale operatività della rete.



Stiv Kupchik

scritto da

Stiv Kupchik

June 28, 2023

Stiv Kupchik

scritto da

Stiv Kupchik

Stiv Kupchik svolge il ruolo di Security Researcher Team Lead in Akamai. I suoi progetti di ricerca ruotano intorno ai componenti interni dei sistemi operativi, alla ricerca sulle vulnerabilità e all'analisi dei malware. Ha presentato la sua ricerca in occasione di conferenze come Black Hat, Hexacon e 44CON. Oltre ad essere un esperto di cybersicurezza, Stiv ha conseguito anche una laurea in fisica.