
guide
Tutti i linguaggi per diventare uno sviluppatore di app per Android.
Le password dei sistemi Linux possono essere violate in molti modi: dalle debolezze dei boot loader agli attacchi brute force
Le password nell’epoca informatica, sono state tra le prime tecniche ad affacciarsi nell’infinito panorama della sicurezza dei dati. Inizialmente erano pure parole “in chiaro”, usate per proteggere singoli file e magari giochetti dei nostri 486. Con il passare degli anni, e con l’avvento della multiutenza il concetto di password non è cambiato, ma è mutato radicalmente il suo panorama di utilizzo poiché le nostre magiche parole chiavi sono comparse in svariati ambiti tra cui: protezione account, multiutenza, chiavi pubbliche, crittazione ecc.
In Linux, come in ogni altro sistema operativo, le password garantiscono l’accesso al sistema e rappresentano una, spesso unica, barriera fra l’esterno e i dati conservati nel computer. Ma, come vedremo in questo articolo, la loro violazione può essere a volte semplicissima.
La scoperta, anzi, i tentativi di scovare una password in un sistema unix-like, sono svariati e a volte dipendenti dal tipo di distribuzione in uso e soprattutto dai servizi presenti sulla macchina. Per questo bisogna per prima cosa conoscere come Linux memorizza, protegge e usa le password per tutelare gli utenti, e poi, come gli aggressori potrebbero tentare di scovarle.
Dunque: le password in Linux sono memorizzate in file in formato crittografato.
Questo implica che ovviamente una determinata stringa scelta come password è convertita per mezzo di un algoritmo ripetibile per consentire a Linux, quando si accede al sistema, di prendere la vostra password e confrontarla con la password crittografata in suo possesso. L’algoritmo usato da Linux per crittografare le proprie password utente è “a una via”: ciò significa che è possibile crittografare una password, ma teoricamente non è possibile riottenerla dal valore crittografato.
La maggior parte delle prime versioni di Linux, memorizzava le password utente, in formato crittografato, all’interno del file /etc/passwd. Dopo il processo di boot o dopo la chiamata del programma login, il sistema prende il nome utente e cerca il record corrispondente all’interno del file /etc/passwd per ottenerne la password crittografata associata.
Successivamente nome utente e password passano alla funzione crypt()
, che contiene all’interno l’algoritmo di crittografia implementato (DES o MD5 di cui parlerò più avanti) per produrre la password crittografata. Se il risultato corrisponde alla password memorizzata in /etc/passwd, viene consentito l’accesso all’utente.
Ecco un esempio del file /etc/passwd:
Il file /etc/passwd
root:$1$X14/EjGB$daoyy4wCu6ct6VKAXHeil/::0:0:root:/root:/bin/bash
daemon::1:1:daemon:/usr/sbin:/bin/sh
bin::2:2:bin:/bin:/bin/sh
sys::3:3:sys:/dev:/bin/sh
sync::4:65534:sync:/bin:/bin/sync
games::5:60:games:/usr/games:/bin/sh
man::6:12:man:/var/cache/man:/bin/sh
Queste prime distribuzioni Linux come potete vedere (la stringa in rosso), mostravano in chiaro la stringa crittografata. Si doveva cercare una soluzione: l’avvento delle shadow password ha fatto sì che le password crittografate non fossero più visibili, rendendo così più difficili attacchi mediante dizionario. In questo scenario il file /etc/passwd esiste sempre, ma viene creato un altro file, chiamato /etc/shadow che contiene la versione crittografata di tutte le password presenti nel sistema ed è leggibile solo da root. Le shadow password modificano il contenuto del file /etc/passwd in un aspetto. Lo vedremo nella pagina successiva.
Il file /etc/passwd con shadow
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh
Si può osservare che il 2° campo della stringa crittografata, ora è semplicemente “x”. Ecco un esempio di file /etc/shadow:
Il file /etc/shadow
root:$1$X14/EjGB$daoyy4wCu6ct6VKAXHeil/:99999:0:99999:7::: daemon:*:13991:0:99999:7::: matteo:$1$ww21XzQm$KAy5P61X0JilPkEQqoE2g0:14133:0:99999:7::: test:$1$rh2IDIWj$DXdMkLyDOaMdY2W3ZMYjr/:14135:0:99999:7::: test2:$1$HLy1rDzf$HqzzcB94t6abQE8KCy5R8/:14135:0:99999:7:::
I due punti delimitano i campi di /etc/shadow che sono costituiti così:
Le shadow password non sono solo un metodo per celare password, ma è anche una completa suite di cui fanno parte programmi come: useradd, userdel, usermod, ecc. consoni nella normale amministrazione, ma che possono rivelarsi utili in caso di attacchi.
In ambienti Unix / Unix-like, gli algoritmi implementabili dalla funzione crypt()
sono principalmente 2: DES e MD5.
La funzione codifica velocemente stringhe di input ottenendo in output una firma digitale teoricamente univoca e diversa anche quando stringhe di ingresso sono uguali.
A rendere più difficili e complicate le cose, la funzione crypt()
in Linux codifica in MD5 con l’aggiunta di un salt che rende ulteriori 4096 combinazioni per l’aggiunta di una chiave a due caratteri variabile alla stringa MD5 da codificare.
Tenendo presente quanto detto sino ad ora, vediamo le varie tecniche di violazione, creazione e identificazione di password e utenti. Le analizzeremo in modo sintetico, tanto da dare l’idea delle possibili violazioni del nostro sistema.
Se il PC in questione non ha password a livello di BIOS (problema facilmente scavalcabile resettandolo, togliendo la pila o agendo sul jumper flash), Lilo e Grub, i due gestori dell’avvio di Linux, offrono diversi metodi che ci fanno avere il coltello dalla parte del manico.
Il Lilo fermatosi al prompt, ha la possibilità di inserire alcuni parametri:
Il Grub e la sua flessibilità offrono svariati parametri e impostazioni utilizzabili al caso nostro.
Abbiamo quindi già ottenuto l’accesso totale alla macchina! Cosa già anticipata data la potenza di Grub
Sudo è un software molto comune per la distribuzione dell’autorità amministrativa. Con sudo è possibile concedere a determinati utenti la possibilità di eseguire attività amministrative specifiche che normalmente richiedono l’accesso a root. Ampliamente usato nelle distribuzioni Ubuntu o in distribuzioni “user friendly”, sudo può essere usato abbondantemente come arma a doppio taglio.
Negli esempi di attacco proposti, l’aggressore parte sempre da almeno un account utente compromesso carpito attraverso i metodi precedentemente elencati, e poi “crackato” tramite metodi a forza bruta (lo vedremo più avanti). Solitamente gli account utente, rispetto root, sono creati con password più deboli, e quindi più facili da trovare mediante metodi “brute force”.
Ecco elencati, alcuni principali metodi di attacco mediante l’utilizzo volontario, involontario di sudo:
Il password cracking, tra le più vecchie, lunghe ma alla fine efficaci tecniche per violare password, cioè il tentativo di indovinare una password mediante combinazioni incrementali e/o a word list per ottenere l’accesso di un PC.
La maggior parte delle strategie di questo tipo implica la sottrazione di una copia del file /etc/shadow con le tecniche tramite live CD, boot loader, o vulnerabilità nei servizi spiegate nei precedenti paragrafi, per poi eseguire in un secondo momento un programma che “cerca di indovinare” la password corretta, nel tentativo di produrre la forma crittografata memorizzata nel file.
Ricordando la costruzione di una password MD5 un programma di cracking può impiegare anche diverso tempo per scovare la password a seconda della complessità e ovviamente della potenza del PC su cui sta girando il programma. Tra i più efficaci programmi per questo scopo sicuramente merita uno spazio l’ormai storico John the ripper, chiamato anche semplicemente John.
Le principali particolarità di questo programma sono:
crypt()
per essere più veloce e potente.L’esecuzione di John è semplice:
Con -option si può modificare la modalità di esecuzione di John:
Come si nota in figura, John riesce a scovare, su un sistema core 2 duo, una password dopo soli 8 minuti.
In password più complesse però, si consiglia di optare e scrivere moduli C dedicati, poiché nel successivo esempio con password alfanumeriche, dopo più di 17 ore di elaborazione, john non è riuscito a scovare la password.
Girando sul Web e sperimentando alcune idee e tentativi di cracking, ci si può imbattere in alcuni falsi miti che meritano una breve trattazione.
crypt()
non è stupida, verifica questa cosa e questo metodo non funziona tranne probabilmente con vecchissime distribuzioni Linux.crypt()
usa semi diversi per ogni password, rendendo questo metodo non funzionante.Sarebbe stato interessante trattare metodi di sicurezza e offensive contro gli attacchi, magari se sarà possibile, creerò un articolo in futuro. Argomento molto importante giacché la sicurezza con il passare degli anni è, e diventerà, sempre più “sicura”. Ma questo perché? Perché ci saranno sempre di volta in volta metodi per far diventare le regole obsolete. Spetta quindi anche a voi, testare, trovare e scovare nuovi metodi, che intrinsecamente, faranno evolvere garanzie. Quindi usate le nozioni apprese per successivi sviluppi e completamenti; e, buona fusione dei vostri processori con il sempre buon vecchio john the ripper.
Se vuoi aggiornamenti su Come ti violo la password Linux inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
Microsoft Security Essentials è il pacchetto offerto agli utenti Windows per poter difendere il proprio PC da malware e virus. Security Essentials […]
Tutti i linguaggi per diventare uno sviluppatore di app per Android.
Come creare applicazioni per il Web con PHP e MySQL per il DBMS.
Tutte le principali tecnologie per diventare uno sviluppatore mobile per iOS.
I fondamentali per lo sviluppo di applicazioni multi piattaforma con Java.
Diventare degli esperti in tema di sicurezza delle applicazioni Java.
Usare Raspberry Pi e Arduino per avvicinarsi al mondo dei Maker e dell’IoT.
Le principali guide di HTML.it per diventare un esperto dei database NoSQL.
Ecco come i professionisti creano applicazioni per il Cloud con PHP.
Lo sviluppo professionale di applicazioni in PHP alla portata di tutti.
Come sviluppare applicazioni Web dinamiche con PHP e JavaScript.
Fare gli e-commerce developer con Magento, Prestashop e WooCommerce.
Realizzare applicazioni per il Web utilizzando i framework PHP.
Creare applicazioni PHP e gestire l’ambiente di sviluppo come un pro.
Percorso base per avvicinarsi al web design con un occhio al mobile.
Realizzare siti Web e Web application con WordPress a livello professionale.
Lightbox, libreria Javascript della nuova generazione
Inkscape è un software di grafica vettoriale open source che consente di creare file secondo lo standard Svg del W3C. Ricco delle principali funzionalità di un software di grafica.
Le principali novità introdotte dall’XHTML 2.0
Jelastic Cloud è un servizio PaaS (Platform as a Service) offerto da Aruba, e destinato a tutte le aziende e gli sviluppatori interessati al deploy di applicazioni complesse direttamente su un’infrastruttura potente e rodata in Cloud. In questa guida scopriremo le tecnologie supportate (WordPress, Magento, Docker, Kubernetes, PHP, Java, Node.js) e come sfruttarle per un deploy di applicazioni e CMS.