Categories: ⚔️, Hacking21.2 min read

Linux Privilege Escalation

INTRO

Il Privilege Escalation rappresenta una vera e propria scalata verso un più alto livello di autorizzazioni, all’interno di un dato sistema informatico.

Solitamente, il livello di autorizzazioni ottenuto nella prima fase di accesso al target, non permette di disporre di tutti i dati del sistema. L’attaccante tenterà quindi di sfruttare informazioni sensibili mal custodite, bug, vulnerabilità, servizi mal configurati, errori nella progettazione del Sistema Operativo o del Software stesso, al fine di acquisire il controllo delle risorse e delle informazioni a lui precluse.

Per risalire la china delle autorizzazioni, l’attaccante può intraprendere:

  1. Una scalata verticale, dove un’utenza con bassi privilegi accede a funzioni o informazioni riservate ad utenze con privilegi più alti.
  2. Una scalata orizzontale, dove l’utenza accede a funzioni o informazioni riservate ad altri utenti, aventi i medesimi livelli di autorizzazione.

CONTENUTO

L’escalation dei privilegi si verifica quando un utente o processo riesce ad ottenere privilegi superiori a quelli assegnati, accedendo a funzionalità del sistema che dovrebbero rimanere inaccessibili. Questo può avvenire attraverso varie tecniche e sfruttando diverse vulnerabilità presenti in un sistema operativo.

In questo articolo esploreremo il concetto di escalation dei privilegi in un ambiente Linux, una tematica fondamentale nel campo della cybersecurity.

Discuteremo i diversi tipi di vettori di attacco che possono essere utilizzati per elevare i privilegi, inclusi gli exploit di vulnerabilità note, la configurazione errata dei sistemi, l’abuso di permessi e funzionalità legittime e l’utilizzo di software obsoleto o non aggiornato.

Inoltre, esamineremo i vari path di escalation dei privilegi, delineando come gli attaccanti possano sfruttare specifiche debolezze nei sistemi Linux per passare da utenti con privilegi limitati a utenti con privilegi elevati, spesso puntando al raggiungimento dei privilegi di root. Approfondiremo tecniche comuni come l’abuso di SUID/SGID, l’exploitation di vulnerabilità nei servizi in esecuzione e la manipolazione di task schedulati.

L’articolo fornirà anche una guida su come identificare potenziali vulnerabilità di escalation dei privilegi in un sistema Linux, offrendo insight su come gli amministratori di sistema possono difendere i propri sitemi da tali attacchi. Esploreremo strumenti e pratiche che possono essere utilizzati per rilevare e mitigare le vulnerabilità, contribuendo a creare un ambiente più sicuro.

SCENARIO

Immaginiamo un attaccante che sia riuscito ad infiltrarsi in un sistema Linux, ottenendo un accesso iniziale, con privilegi limitati. Questo scenario rappresenta il punto di partenza per un’impresa intricata nel mondo dell’escalation dei privilegi.

L’obiettivo dell’attaccante è chiaro: acquisire i privilegi di root, il livello di accesso più elevato nel sistema, per ottenere il controllo totale della macchina target. Questa fase iniziale, in cui l’attaccante possiede già un punto d’appoggio ma i suoi privilegi sono circoscritti, è cruciale: è qui che inizia il vero gioco del gatto col topo, dove l’attaccante deve navigare con astuzia attraverso le difese e le configurazioni del sistema, per identificare e sfruttare le vulnerabilità che gli permetteranno di elevare i suoi privilegi. Questo contesto ci farà da sfondo per esplorare le tecniche di escalation.

INTRO – CONCETTI CHIAVE:

Prima di addentrarci nelle tecniche di escalation, dobbiamo aver chiari alcuni aspetti dei Sistemi Operativi con Kernel Linux.

  • Kernel Linux: il cuore del sistema operativo, responsabile della gestione delle risorse hardware e della comunicazione tra il software e l’hardware. Il kernel funge da ponte tra le applicazioni e i dati di elaborazione fisici, gestendo processi, memoria, file e periferiche.
  • Utenti e Gruppi: Linux è un sistema multiutente, dove ogni utente può avere permessi e accessi specifici. Gli utenti possono appartenere a gruppi, che hanno anch’essi permessi definiti su file e processi, facilitando la gestione degli accessi.
  • Permessi e Proprietà dei File: ogni file e directory in Linux ha un proprietario e un gruppo associato, oltre ad un insieme di permessi che determinano chi può leggere, scrivere o eseguire il file. Questi permessi sono cruciali per la sicurezza del sistema.
  • SUID e SGID: sono permessi speciali che, se impostati su un file eseguibile, permettono al file di essere eseguito con i privilegi del proprietario o del gruppo del file, indipendentemente dall’utente che lo esegue.
  • Processi e PID: in Linux, ogni applicazione o servizio in esecuzione è considerato un processo, ognuno con un ID unico, noto come PID. I processi possono avere vari livelli di privilegi, e la loro gestione è essenziale per la sicurezza del sistema.
  • Interfaccia di comando (Shell): la shell è un’interfaccia utente che permette di interagire con il sistema operativo tramite comandi. Gli utenti possono eseguire script, lanciare applicazioni e gestire i file attraverso la shell.
  • Daemon: sono servizi o processi che vengono eseguiti in background e svolgono funzioni specifiche. Possono avere vulnerabilità che, se sfruttate, potrebbero permettere un’escalation dei privilegi.
  • / (Root): la directory radice è il livello più alto nella gerarchia del filesystem di Linux. Tutte le altre directory sono sotto-directory di questa.
  • /bin: contiene file eseguibili (binari) essenziali per il funzionamento del sistema, disponibili per tutti gli utenti. Qui si trovano comandi fondamentali come ls, cp, o mv.
  • /sbin: simile a /bin, ma contenente binari essenziali per l’avvio del sistema, il ripristino e la riparazione. Generalmente, è destinato all’uso da parte dell’amministratore del sistema.

 

Struttura delle Directory:

Linux Struttura Directory

  • /etc: ospita file di configurazione del sistema. Qui si trovano i file che controllano il comportamento di molti programmi, servizi e aspetti del sistema.
  • /home: la directory in cui si trovano le sottodirectory personali degli utenti. Ogni utente ha una directory in /home con il proprio nome, dove può memorizzare file personali, configurazioni specifiche, ecc.
  • /usr: contiene applicazioni e file che sono di uso generale nel sistema. È suddivisa in sottodirectory come /usr/bin per i programmi utente e /usr/local per il software installato localmente.
  • /var: destinata a contenere file i cui contenuti sono mutevoli nel tempo, come log di sistema, database, siti web ospitati e così via.
  • /tmp: directory temporanea utilizzata da sistemi e applicazioni per memorizzare file temporanei. I file in /tmp possono essere cancellati senza preavviso al riavvio del sistema o dopo un certo periodo di tempo.
  • /dev: contiene file speciali o nodi di dispositivo che rappresentano e permettono l’interazione con hardware o driver del sistema.
  • /lib: contiene le librerie condivise e i moduli del kernel necessari per i binari in /bin e /sbin per funzionare.
  • /opt: utilizzata per installare software “opzionale” o software di terze parti che non fa parte del sistema operativo standard.
  • /boot: contiene i file necessari per l’avvio del sistema, inclusi il kernel di Linux e il bootloader.
  • /proc: un sistema di file virtuale che fornisce un’interfaccia al kernel e ai parametri del kernel. Non contiene file reali, ma punti di accesso alle strutture dati interne del kernel.

 

 

Permessi File e Directory:

I permessi su un file in Linux determinano chi può leggere, scrivere o eseguire quel file. Ci sono tre tipi di permessi:

  1. Lettura (r): consente di visualizzare il contenuto del file
  2. Scrittura (w): consente di modificare il contenuto del file
  3. Esecuzione (x): consente di eseguire il file come un programma

Questi permessi possono essere assegnati a tre diversi gruppi di utenti:

  1. Proprietario: l’utente che possiede il file.
  2. Gruppo: gli utenti che fanno parte del gruppo a cui il file appartiene.
  3. Altri: Tutti gli altri utenti sul sistema.

Quando visualizzi i permessi di un file con un comando come ls -l, vedrai una stringa simile a questa:

- rwx r-x r-- .

Ecco come leggerla:

  • Il primo carattere indica il tipo di file (ad esempio, – per un file normale, d per una directory).
  • I successivi tre caratteri (rwx) mostrano i permessi del proprietario (lettura, scrittura, esecuzione).
  • I tre caratteri dopo (r-x) indicano i permessi del gruppo (lettura, nessuna scrittura, esecuzione).
  • Gli ultimi tre caratteri (r–) rappresentano i permessi degli altri utenti (solo lettura).

Ogni file e directory ha un set di questi permessi che determinano chi può fare cosa con il file o la directory.

RICOGNIZIONE

Prima di passare nel vivo dell’azione, ci sarà di aiuto fare una panoramica sui comandi più comuni che ci torneranno utili per portare assegno l’attacco.

Informazioni di Sistema

  1. id: Mostra l’ID utente e i gruppi dell’utente corrente.
  2. uname -a: Mostra tutte le informazioni del sistema operativo.
  3. cat /etc/*-release: Mostra informazioni sulla versione del sistema operativo.
  4. arch: Mostra l’architettura della macchina.
  5. hostname: Mostra il nome dell’host del sistema.
  6. dmesg | grep Linux: Mostra informazioni sul kernel dai messaggi del sistema.

Informazioni sugli Utenti e Gruppi

  1. cat /etc/passwd: Visualizza il file delle informazioni sugli utenti.
  2. cat /etc/group: Visualizza il file delle informazioni sui gruppi.
  3. groups [nomeutente]: Elenca i gruppi a cui appartiene l’utente specificato.
  4. whoami: Mostra il nome dell’utente corrente.

Informazioni sui Processi

  1. ps aux: Elenca tutti i processi in esecuzione.
  2. top: Mostra i processi attivi in tempo reale.
  3. pstree: Mostra una vista ad albero dei processi.

Informazioni di Rete

  1. ip a: Mostra tutte le interfacce di rete e gli indirizzi IP.
  2. ip route: Mostra la tabella di routing.
  3. ss -tuln: Mostra le porte TCP e UDP in ascolto.
  4. netstat -antup: Elenca tutte le connessioni di rete e le porte in ascolto.
  5. cat /etc/hosts: Visualizza il file degli host.

Configurazioni di Sicurezza

  1. sudo -l: Elenca i comandi sudo che l’utente corrente può eseguire.
  2. ls -la /etc/sudoers: Mostra i permessi del file sudoers.
  3. cat /etc/sudoers: Visualizza il file sudoers.
  4. getenforce: Mostra lo stato di SELinux.
  5. sestatus: Mostra la configurazione di SELinux.

File e Permessi

  1. find / -type f -perm -4000 2>/dev/null: Trova tutti i file con il bit SUID impostato.
  2. find / -perm -u=s -type f 2>/dev/null: Trova file con permessi SUID.
  3. find / -perm -g=s -type f 2>/dev/null: Trova file con permessi SGID.
  4. find / -writable -type f 2>/dev/null: Trova file scrivibili.
  5. find / -writable -type d 2>/dev/null: Trova directory scrivibili.

Informazioni sui Pacchetti

  1. dpkg -l: Elenca tutti i pacchetti installati (Debian/Ubuntu).
  2. rpm -qa: Elenca tutti i pacchetti installati (Red Hat/CentOS).
  3. yum list installed: Elenca tutti i pacchetti installati (Red Hat/CentOS).

Informazioni sui Servizi

  1. systemctl list-units –type=service: Elenca tutti i servizi di sistema.
  2. service –status-all: Mostra lo stato di tutti i servizi.
  3. chkconfig –list: Elenca tutti i servizi di sistema e il loro stato (Red Hat/CentOS).

Informazioni sui Dischi e File System

  1. df -h: Mostra l’uso del disco in formato leggibile.
  2. lsblk: Elenca tutti i dispositivi a blocchi.
  3. cat /etc/fstab: Visualizza il file delle partizioni montate e delle loro opzioni.

Cron Jobs

  1. ls -lah /etc/cron*: Elenca i file di cron con dettagli e dimensioni.
  2. cat /etc/crontab: Mostra il file di configurazione principale di cron.
  3. crontab -l: Elenca i job cron dell’utente corrente.
  4. sudo crontab -l: Elenca i job cron dell’utente root.

Moduli del Kernel

  1. lsmod: Mostra tutti i moduli del kernel caricati.
  2. modinfo [nome_modulo]: Mostra informazioni su un modulo del kernel.

Logs di Sistema

  1. cat /var/log/auth.log: Visualizza i log di autenticazione (Debian/Ubuntu).
  2. cat /var/log/secure: Visualizza i log di autenticazione (Red Hat/CentOS).
  3. cat /var/log/syslog: Visualizza i log di sistema generali.

Altri Comandi Utili

  1. history: Visualizza la cronologia dei comandi eseguiti.
  2. env: Mostra le variabili d’ambiente.
  3. alias: Mostra gli alias di comando definiti.
  4. ls -la ~/.ssh/: Visualizza i file e le chiavi SSH dell’utente corrente.

 

 

TECNICHE e PATH di ESCALATION

Una volta che abbiamo appreso i concetti base dei sistemi Linux, vediamo quali sono le tecniche comuni di Privilege Escalation sui sistemi Linux.

La seguente mappa mentale offre una panoramica delle tecniche escalation per il sistema Linux.

Linux Privilege Escalation Path

  1. Stabilizziamo la Shell
  • python3 -c ‘import pty; pty.spawn(“/bin/bash”)’: stabilizzare la shell ci permette di avere un ambiente più interattivo e funzionale, simile a una console direttamente sul sistema, facilitando (ed in alcuni casi, permettendo) l’esecuzione dei comandi.
  1. Identità Utente e Gruppo
  • id: verifichiamo il nostro ID utente (uid) e il nostro gruppo principale (gid), insieme ai gruppi secondari a cui apparteniamo. Questo ci aiuta a capire il nostro livello di accesso attuale.
  1. Versione del Kernel e Distribuzione
  • uname -a: controlliamo le informazioni dettagliate sul kernel e sul sistema operativo. Questo può rivelarci vulnerabilità note specifiche per quella versione.
  1. Utenti Presenti nel Sistema
  • cat /etc/passwd: visualizziamo tutti gli utenti registrati nel sistema, al fine di identificare account privilegiati o potenzialmente vulnerabili.
  1. Enumerazione delle Directory
  • /home, /var/tmp, /dev/shm, /opt, /srv, /var/mail, /var/spool/mail, /etc:
    • esploriamo queste directory per trovare file di configurazione, chiavi SSH, cron job e altre informazioni sensibili che potrebbero essere utili.
  1. Permessi dei File
  • ls -la /etc/passwd, ls -la /root/:
    • verifichiamo i permessi dei file critici come /etc/passwd e la directory root. File o directory con permessi configurati in modo errato possono essere sfruttati per ottenere accessi non autorizzati.
  1. Connessioni Attive
  • ss -tlp, ss -anp:
    • controlliamo le connessioni di rete attive e le porte in ascolto. Questo ci aiuta a identificare servizi vulnerabili o mal configurati che possiamo sfruttare.
  1. Processi che Girano come Root
  • ps aux | grep -i ‘root’ –color=auto:
    • identifichiamo i processi eseguiti dall’utente root. Attaccando questi processi, possiamo ottenere privilegi più elevati.
  1. Cronjob
  • ls -lsaht /etc/cron*, **cd /etc/cron.d && ls -lsa && cat ***:
    • analizziamo i cron job configurati. Se possiamo modificarli, possiamo eseguire comandi con privilegi elevati. Anche cron job amministrativi mal configurati possono essere sfruttati.
  1. Local Sudo Rights
  • sudo -l:
    • Verifichiamo quali comandi possiamo eseguire con sudo. Se troviamo configurazioni deboli, possiamo eseguire comandi come root.
  1. SUID & GUID
  • find / -perm -u=s -type f 2>/dev/null, find / -perm -g=s -type f 2>/dev/null:
    • Cerchiamo file con bit SUID (Set User ID) o SGID (Set Group ID). Questi file possono essere eseguiti rispettivamente, con i privilegi dell’utente proprietario o del gruppo proprietario. Se questi file hanno vulnerabilità, possiamo sfruttarli per eseguire comandi come root.
  1. Kernel Exploitation
  • uname -r, arch:
    • conoscere la versione del kernel e l’architettura del sistema. Ci permette di identificare e sfruttare vulnerabilità specifiche del kernel.
  1. Password Reuse
  • [username] :: [username]:
    • Potrebbe accadere che un utente ri-utilizzi una password che abbiamo già individuato anche per il suo account di sistema
  1. Password Guessing
  • Password Guessing:
    • Tentiamo di indovinare le password degli utenti. Se le password sono deboli o prevedibili, possiamo ottenere accesso non autorizzato.
  1. Processi in Memoria
  • pspy64:
    • Utilizziamo uno strumento come pspy64 per monitorare i processi in esecuzione. Questo ci aiuta a identificare comandi o processi che trattano informazioni sensibili o non correttamente protetti.

 

 

 

SORCERER PRIVILEGE ESCALATION:

Con queste nozioni a mente, affrontiamo adesso, assieme, l’escalation della macchina Sorcerer.

Disclaimer: La macchina che ho utilizzato in questo articolo fa parte del laboratorio chiamato “Proving Ground” di Offensive Security.

Non sono inclusi script dettagliati, soluzioni specifiche o qualsiasi altro materiale che potrebbe compromettere l’integrità del processo educativo per altri studenti. Le discussioni si concentrano su tecniche generali, approcci e metodologie, senza rivelare dettagli specifici delle soluzioni adottate nei laboratori.

 

NOTA: la macchina Sorcerer prevede un foothold iniziale, che non sarà argomento di questo articolo. Ci contreremo invece sulla seconda fase: l’acquisizione di un livello di accesso con privilegi elevati.

Abbiamo quindi una shell interattiva sulla macchina vittima. Cominciamo la nostra ricognizione, verificando l’identità del nostro utente e i gruppi a cui appartiene:

id

  • uid=1003(max): L’ID utente di “max” è 1003.
  • gid=1003(max): L’ID del gruppo principale di “max” è 1003.
  • groups=1003(max): “max” appartiene al gruppo con ID 1003, che è anche il suo gruppo principale.

id

Come possiamo notare l’utente, non appartiene a gruppi particolari di sistema, come ad esempio (sudo, adm, wheel, etc…). Possiamo averne ulteriore riscontro utilizzando il comando:

grep max /etc/group

group

È un utente “reale” creato sul sistema, quindi ragionevolmente potrebbe avere permessi sudo che gli sono stati assegnati. Verifichiamolo con il comando:

sudo -l

sfortunatamente il comando sudo non è disponibile sul sistema.

sudo -l

La domanda adesso è: max è l’unico utente del sistema o ne esistono altri?

cat /etc/passwd

Come possiamo vedere dall’output del comando esistono diversi utenti di sistema. Ma max non è l’unico utente “reale” creato sulla macchina, difatti ne esistono sei:

francis:x:1000:1000::/home/francis:/bin/bash

sofia:x:1001:1001::/home/sofia:/bin/bash

miriam:x:1002:1002::/home/miriam:/bin/bash

max:x:1003:1003::/home/max:/bin/bash

dennis:x:1004:1004::/home/dennis:/bin/bash

tomcat è un “ibrido” utente di sistema che è stato creato per eseguire un servizio specifico, in questo caso il server Tomcat.

tomcat:x:1005:1005::/opt/tomcat:/bin/fals

utenti

Prima di addentrarci ulteriormente nell’enumerazione legata agli utenti, terminiamo di enumerare il sistema operativo su cui siamo, tramite i comandi:

arch

uname

uname -a

Il sistema operativo è Linux (come ci aspettavamo). Siamo su una distribuzione Debian, versione del Kernel  4.19.132-1, con un architettura a 64 bit. Queste informazioni potrebbero rivelarsi molto utili in futuro se avessimo bisogno di capire se esiste una vulnerabilità per questa versione specifica del Kernel e di conseguenza un Exploit.

kernel

Preso nota del contesto in cui stiamo operando, possiamo addentrarci ulteriormente sugli utenti presenti nel sistema. Questi utenti operano sulla macchina ed avranno quindi uno “spazio” a loro riservato, una propria cartella /home/ .

Dato la nostra shell è con l’utente Max, cominciamo proprio da lui l’enumerazione. L’utente max presenta all’ interno della sua home folder diversi file. Generalmente nella cartella di home potremmo trovare di tutto da file di configurazioni contenenti informazioni sensibili a chiavi ssh. E’ opportuno oltretutto soffermarci su file come: .cache , .bash_history :

.cache

  • Contenuto: Il file .cache (o più comunemente, la directory .cache) contiene dati temporanei e di cache utilizzati dalle applicazioni per migliorare le prestazioni e ridurre il tempo di caricamento.

.bash_history

  • Contenuto: Il file .bash_history contiene un elenco dei comandi recentemente eseguiti dall’utente nella shell Bash.

home folders

Nel caso ci trovassimo all’interno di una cartella con molti file ed altrettanti corposi file di testo, potremmo voler utilizzare un comando che possa automaticamente mettere in risalto eventuali informazioni sensibili all’interno della carella. Ad esempio utilizzando “grep”:

grep –color=auto -rnw -iIe “PASSW\|PASSWD\|PASSWORD\|PWD” –color=always 2>/dev/null

grep: È un comando di ricerca che trova e stampa le linee dei file che corrispondono a un pattern specificato.

–color=auto: Evidenzia le corrispondenze nel colore specificato. auto usa il colore solo quando l’output è su un terminale.

-r: Esegue la ricerca ricorsivamente nelle directory.

-n: Mostra i numeri di linea per ogni corrispondenza trovata.

-w: Cerca solo parole intere. Una parola è una sequenza di caratteri alfanumerici delimitati da caratteri non alfanumerici.

-i: Esegue una ricerca case-insensitive, ovvero non fa distinzione tra maiuscole e minuscole.

-E: Usa espressioni regolari estese (equivalente a egrep).

“PASSW|PASSWD|PASSWORD|PWD”: Questo è il pattern di ricerca. Il simbolo \| è l’operatore OR nelle espressioni regolari estese, quindi grep cerca qualsiasi occorrenza di “PASSW”, “PASSWD”, “PASSWORD” o “PWD”.

–color=always: Forza sempre l’uso del colore per evidenziare le corrispondenze.

2>/dev/null: Reindirizza i messaggi di errore (file descriptor 2) a /dev/null, quindi non vengono visualizzati.

file sensibili

Se fossimo in possesso di una password che ci permettesse di connetterci con un altro utente del sistema ci basterebbe utilizzare il comando:

su [nome_utente]

e successivamente immettere la password.

Inoltre, potrebbe valere la pena tentare un password guessing, provando combinazioni semplici come:

[nome_utente] :: [nome_utente]

Proseguiamo adesso la nostra enumerazione cercando vulnerabilità nei file SUID. Il bit SUID (Set User ID) è un permesso speciale su file eseguibili che permette a un utente di eseguire il file con i privilegi del proprietario del file, piuttosto che con i privilegi dell’utente che esegue il file.

Utilizzando il commando find per cercare all’interno del sistema questi file, procediamo con la nostra enumerazione sulla macchina vittima.

find / -perm -u=s -type f 2>/dev/null

Per sapere come eventualmente sfruttare questi file è possibile trovare l’escalation sul sito: https://gtfobins.github.io/#

SUID

Difatti stando all’output del comando, /usr/sbin/start-stop-daemon potrebbe essere utilizzato come SUID per scalare i Privilegi.

start-stop-daemon è utilizzato nei sistemi Unix-like, particolarmente nelle distribuzioni basate su Debian, per gestire l’avvio e l’arresto dei processi daemon. Un daemon è un programma che gira in background, generalmente per fornire servizi di sistema come un server web, un server di posta, ecc.

Come abbiamo potuto notare durante l’analisi dell’architettura del File System Linux, ci sono molteplici directory a cui vale la pena dare un’occhiata. Utilizziamo quindi il comando:

ls -al /home/ /var/tmp /dev/shm /opt/ /srv/ /var/mail /var/spool/mail

Directory

E’ possibile imbattersi in miss-configurazioni sui permessi di alcuni file, come /etc/passwd , se fossimo in grado di scrivere su questo file potremmo creare un altro utente a sistema come root.

Sfortunatamente per noi, solo l’utente root ha permessi di scrittura sul file passwd e non max.

Directory 1

Passiamo adesso all’ analisi dei Crono Job.

I cron job sono attività pianificate che vengono eseguite automaticamente a intervalli regolari in un sistema Unix o Linux. Questi processi sono configurati tramite il file crontab e possono essere utilizzati per eseguire script o comandi.

Come Funziona il Privilege Escalation tramite Cron Job

La privilege escalation tramite cron job si verifica quando un cron job è configurato in modo insicuro, permettendo a un utente con pochi privilegi di eseguire comandi con privilegi elevati (ad esempio, come root). Questo può accadere in diversi modi:

  1. Script Modificabili da Utenti Non Privilegiati:
    • Se uno script eseguito da un cron job è scrivibile da un utente normale, l’utente può modificare lo script per eseguire comandi arbitrari con i privilegi del cron job.
  2. File di Output:
    • Se un cron job scrive l’output in un file in una directory scrivibile, un utente normale potrebbe sostituire quel file con un link simbolico a un file di sistema, causando la sovrascrittura del file di sistema.
  3. Configurazioni di Cron Inadeguate:
    • Configurazioni di cron mal gestite o cron job aggiunti senza considerare le implicazioni di sicurezza possono introdurre vulnerabilità.

Enumeriamo quindi i cronojob presenti sulla macchina, attraverso i comandi:

Utilizzando questi comandi, possiamo identificare i cron job configurati sul sistema e capire quali script o comandi vengono eseguiti automaticamente con privilegi elevati, consentendoci di verificare eventuali vulnerabilità o configurazioni errate che potrebbero essere sfruttate per elevare i nostri permessi.

ls -lsaht /etc/cron*

e

cat /etc/crontab

Processi in Running

Vediamo adesso quali processi sono in running sulla macchina e monitoriamoli. Per farlo possiamo utilizzare il tool: pspy64 https://github.com/DominicBreuker/pspy

Dopo aver trasferito lo script sulla macchina vittima, assegniamoli permessi di esecuzione e lanciamolo:

./pspy64

Pspy

Sulla macchina vittima potrebbe esserci in ascolto un servizio o un database che vogliamo raggiungere. Per farlo enumeriamo prima di tutto le connessioni sulla macchina, utilizzando il comando:

ss -tlp

Connections

Sulla macchina target gira un servizio, in locale sulla porta 8005. Se volessimo raggiungere quel servizio dalla nostra macchina vittima, dovremmo forwardare tutto il traffico, utilizzando and esempio ssh, oppure tools come chiesel: https://github.com/jpillora/chisel .

CONCLUSIONI

L’escalation dei privilegi è una componente cruciale della sicurezza informatica, che permette a un attaccante di ottenere livelli di autorizzazione più elevati all’interno di un sistema informatico. In questo articolo, abbiamo esplorato come un attaccante, partendo da un accesso con privilegi limitati, può sfruttare vulnerabilità, configurazioni errate e permessi speciali su un sistema Linux per ottenere privilegi superiori, spesso con l’obiettivo finale di acquisire i privilegi di root.

Punti Chiave

  1. Tipi di Escalation:
    • Scalata Verticale: Passaggio da un utente con bassi privilegi a uno con privilegi più alti.
    • Scalata Orizzontale: Accesso a funzioni o informazioni riservate ad altri utenti con lo stesso livello di autorizzazioni.
  2. Tecniche di Escalation:
    • Abuso di SUID/SGID: Utilizzo di eseguibili con permessi speciali per ottenere privilegi elevati.
    • Vulnerabilità del Kernel: Sfruttamento di bug noti nel kernel per eseguire codice con privilegi elevati.
    • Cron Job Mal Configurati: Manipolazione di cron job per eseguire comandi con privilegi elevati.
    • Ricerca di Informazioni Sensibili: Utilizzo di file come .bash_history o .cache per trovare credenziali o comandi utili.
  3. Strumenti Utilizzati:
    • pspy64: Monitoraggio dei processi in esecuzione per identificare potenziali punti di escalation.
    • grep: Ricerca di informazioni sensibili all’interno dei file di sistema.
    • find: Identificazione di file con permessi SUID o SGID.
  4. Considerazioni di Sicurezza:
    • Gestione dei Permessi: Assegnare permessi adeguati ai file e alle directory per limitare le possibilità di escalation.
    • Aggiornamento del Sistema: Mantenere il sistema e i pacchetti aggiornati per proteggersi dalle vulnerabilità note.
    • Monitoraggio e Auditing: Implementare strumenti di monitoraggio per rilevare attività sospette e auditing regolare per verificare la sicurezza del sistema.

Conclusione

L’articolo ha delineato una panoramica sulle tecniche di escalation dei privilegi in ambienti Linux, mettendo in luce le tecniche utilizzate dagli attaccanti e le misure di sicurezza che gli amministratori di sistema possono adottare per proteggere i loro sistemi. Attraverso una comprensione approfondita delle vulnerabilità e delle metodologie di attacco, è possibile migliorare significativamente la sicurezza e la resilienza dei sistemi informatici.

Proteggere un sistema richiede una continua vigilanza e un approccio proattivo alla sicurezza, monitorando costantemente le configurazioni e aggiornando regolarmente i sistemi per mitigare le nuove minacce emergenti.

Go to Top