[Articolo] Cancellazione sicura dei file in Linux

Approfondiamo oggi il tema della cancellazione dei file su Linux, e in particolare vedremo come è possibile rimuovere definitivamente e in modo sicuro i propri dati. Questo può essere utile se dobbiamo cancellare dati sensibili, ad esempio se vogliamo cedere un disco o una chiavetta USB ad un nostro amico o conoscente.

Difficoltà articolo (0->10): 5

Approfondiamo oggi il tema della cancellazione dei file su Linux, e in particolare vedremo come è possibile rimuovere definitivamente e in modo sicuro i propri dati. Questo può essere utile se dobbiamo cancellare dati sensibili, ad esempio se vogliamo cedere un disco o una chiavetta USB ad un nostro amico o conoscente.

Quali metodi conoscete per rimuovere i file su Linux? rm? rmdir? La formattazione completa dell’intero disco? Ecco, tutti questi strumenti non sono sufficienti per la cancellazione definitiva di un file, anche se possono andare bene per la quotidianità. Ad esempio il comando rm non elimina realmente, ma solo l’indice che punta a quel file, rendendo impossibile il suo recupero, ma solo apparentemente! Con questi metodi infatti il sistema non elimina fisicamente i file, ma modifica solamente le coordinate dei file rimossi in maniera tale da poter essere riscritti successivamente. E’ possibile quindi recuperare in un secondo momento file e directory rimossi in questo modo con semplici programmi anche gratuiti, come ad esempio con PhotoRec o con Recuva, e non servono aziende specializzate per farlo.

Esaminiamo in dettaglio due strumenti che possiamo usare per rimuovere definitivamente file e directory:

  • shred
  • srm

Il comando shred, presente solitamente di default tra le utility di sistema, permette di sovrascrivere X volte (3 di default) un file in modo tale da rendere impossibile recuperarne il reale contenuto.

# shred -vu prova.txt
shred: prova.txt: pass 1/3 (random)...
shred: prova.txt: pass 2/3 (random)...
shred: prova.txt: pass 3/3 (random)...
shred: prova.txt: removing
shred: prova.txt: renamed to 000000000000
shred: 000000000000: renamed to 00000000000
shred: 00000000000: renamed to 0000000000
shred: 0000000000: renamed to 000000000
shred: 000000000: renamed to 00000000
shred: 00000000: renamed to 0000000
shred: 0000000: renamed to 000000
shred: 000000: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: prova.txt: removed

Alcuni esempi di utilizzo sono:

$ shred -zu file.pdf$ shred -vun 15 file.pdf

$ shred -v /dev/hda1

$ shred -v -u -z -n 5 file.txt

Dove:

  • l’opzione z specifica che dopo l’eliminazione del file vengono scritti tutti 0, per cercare di nascondere ad altri tool il fatto che è stato usato un comando per l’eliminazione di dati;
  • l’opzione v serve per la modalità verbose;
  • l’opzione u per eliminare anche il puntatore al file;
  • l’opzione n XXX (con XXX numero) indica quante volte deve essere sovrascritto il file da eliminare.

Attenzione: il comando non funziona con tutti i tipi di file system, ad esempio non funziona con sistemi RAID che scrivono dati in modo ridondato!

Il comando shred ha però i suoi limiti. Cosa succede se vogliamo eliminare tutte le sottodirectory di una determinata directory? Dovrebbe essere sufficiente usare l’asterisco:

shred -uv *

E invece no! Il comando precedente eliminerà tutti i file contenuti nella directory di lavoro corrente, ma non le sottodirectory. Per risolvere possiamo usare un altro strumento: srm (Secure Remove).

Con srm il processo di cancellazione dei dati è il seguente:

  1. 1 passaggio con 0xff
  2. 5 passaggi casuali. /dev/urandom è utilizzato se disponibile come fonte RNG sicura.
  3. 27 passaggi con valori speciali definiti da Peter Gutmann.
  4. 5 passaggi casuali. /dev/urandom è utilizzato se disponibile come fonte RNG sicura.
  5. Troncamento del file

srm scrive blocchi a 32k allo scopo di avere una maggiore velocità, di riempire i buffer di cache del disco per costringerli a svuotarsi e sovrascrivere i dati vecchi che appartenevano al file.

Le opzioni di srm sono:

  • -d ignora i due file speciali costituiti con i punti . e .. dalla linea di comando. (così si può eseguirlo come “srm -d .* *”)
  • -f fast (ed insicuro): no viene usato /dev/urandom, e non viene utilizzato il modo sincronizzato.
  • -l diminuisce la sicurezza. Solo due passaggi sono scritti: uno con 0xff ed i valori in modalità casuale.
  • -l -l per una seconda volta per abbassare ulteriormanete la sicurezza: viene fatto solo un passaggio casuale.
  • -r modalità ricursiva, cancella le sottodirectory.
  • -v modalità dettagliata
  • -z pulisce l’ultima scrittura con zeri invece che con dati casuali

Come ho già scritto nel corso dell’articolo, con i normali strumenti di recupero file (Recuva per esempio) non è possibile recuperare i file cancellati con gli strumenti visti fino ad ora, mentre si possono recuperare file rimossi con i comandi “semplici” del sistema (es. rm). Tuttavia, in ambito professionale e forense esistono programmi particolari e molto costosi che sono in grado di leggere le impronte magnetiche (nel caso degli HDD) o elettriche (nel caso degli SSD) lasciate da un singolo bit eradicato con la formattazione a basso livello, rendendo possibile il recupero del bit (e del file finale). Tale percentuale si abbassa notevolmente se il processo di formattazione viene ripetuto numerose volte: si consiglia di utilizzare almeno 7 passaggi di dd per cancellare hard disk da ogni traccia di file o dati sensibili; ma se non avete segreti militari da nascondere, un passaggio di dd è più che sufficiente, specie se il disco verrà subito riutilizzato (verranno progressivamente sovra-scritte le impronte ancora presenti).

roghan

[Pillola] Controllare se una partizione usa LVM

In Linux possiamo verificare se una partizione del sistema è fisica oppure se usa LVM in 3 modi diversi, vediamoli.

Il primo è quello di verificare il file fstab, contenente le configurazioni delle partizioni montate al momento del boot del sistema:

# cat /etc/fstab

In particolare, dobbiamo osservare l’inizio di ogni riga nel file e controllare:

  • Se inizia con UUID=abc, la partizione è fisica.
  • Se inizia con /dev/sdaX, la partizione è fisica.
  • Se inizia con /dev/mapper/abx, allora la partizione usa LVM.

Il secondo modo è di usare il comando pvdisplay, che riporterà un risultato simile al seguente:

# pvdisplay
--- Physical volume ---
PV Name /dev/sdc1
VG Name new_vg
PV Size 17.14 GB / not usable 3.40 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 4388
Free PE 4375
Allocated PE 13
PV UUID Joqlch-yWSj-kuEn-IdwM-01S9-XO8M-mcpsVe
Similmente al primo metodo, se il nome della partizione (PV Name in grassetto) indica una partizione reale fisica, tipo /dev/sdaX oppure /dev/sdbX, la partizione sarà ovviamente fisica, altrimenti nel caso in cui sia presente il nome mapper userà LVM, tipo /dev/mapper/abx.
Il terzo modo è di utilizzare il comando pvs, che indicherà o meno l’utilizzo di LVM nel campo con etichetta “Fmt”. Vediamo un output di esempio:
# pvs
 PV               VG        Fmt  Attr PSize   PFree 
 /dev/mapper/sdb3 ubuntu-vg lvm2 a--  446,15g 52,00m
Qui posiamo vedere che il campo “Fmt” riporta “lvm2”, ed è chiaro pertanto che in questo caso la partizione è configurata facendo uso appunto di LVM.
roghan

[Pillola] Calcolatrice con la shell in Linux

Vi è mai capitato di aver bisogno di fare qualche conteggio non proprio banale ma con la “fatica” di cercare e aprire la calcolatrice? Con Linux possiamo usare due semplici comandi per ottenere tutto ciò: echo e bc.

Vi è mai capitato di aver bisogno di fare qualche conteggio non proprio banale ma con la “fatica” di cercare e aprire la calcolatrice? Oppure se siete collegati ad un server Linux a riga di comando, e volete fare dei conti al volo? Con Linux possiamo usare due semplici comandi per ottenere tutto ciò ;-): echo e bc: il primo comando serve per la stampa a video del risultato mentre il secondo è un vero e proprio linguaggio che permette di effettuare calcoli matematici anche complessi. In teoria potrebbe essere usato anche solamente il comando bc per entrare nella modalità di calcolo della calcolatrice, ma unito ad echo è tutto più pratico.

Vediamo alcuni semplici esempi:

$ echo "2+1" | bc

$ echo "(2+1)/3" | bc

$ echo "5.3-1.1"  | bc

$ echo 3^3 | bc

ed alcuni più complessi:

$ echo "(3465.34/23)+23.6" | bc -l

$ echo "scale=4; (3465.34/23)+23.6" | bc

$ echo 3^3 | bc

$ echo "ibase=10; obase=2; 32" | bc

Facciamo attenzione che per calcolare numeri in virgola mobile è necessario usare l’opzione e/o scale, il quale specificherà le cifre significative usate con il decimale (di default scale=20).
L’ultimo esempio permette di convertire un numero da una base ad un’altra, in questo caso da base 10 a base binaria.

Gli esempi visti illustrano solo una minima parte delle funzionalità di bc, per le restanti rimando alla man page ufficiale o a guide più dettagliate tipo questa.

roghan

[Articolo] Facciamo un tuffo nel dark-web: cosa c’è oltre il tunnel?

Parliamo oggi di dark-web, quella parte poco conosciuta e usata del web, che spesso viene citata in articoli, trasmissioni televisive e libri, e negli ultimi anni è sempre più in voga. Ne sono esempio serie come Mr. Robot e CSI Cyber, dove si sprecano citazioni e riferimenti più o meno veritieri.

Difficoltà articolo (0->10): 4

Requisiti: conoscenza e utilizzo di Tor.

Parliamo oggi di dark-web, quella parte poco conosciuta e usata del web, che spesso viene citata in articoli, trasmissioni televisive e libri, e negli ultimi anni è sempre più in voga. Ne sono esempio serie come Mr. Robot e CSI Cyber, dove si sprecano citazioni e riferimenti più o meno veritieri.

In questo articolo non prenderemo in analisi come ci possiamo collegare al dark-web, che cos’è Tor, quali sono le configurazioni corrette e cosa è possibile fare, ma piuttosto vedremo cosa c’è oltre questo famoso tunnel oscuro, quali informazioni possiamo trovare e come, e soprattutto se è un luogo veramente oscuro come viene descritto.

Se non siete pratici con il software Tor, rimando ad infiniti articoli presenti in rete, altrimenti ci dilunghiamo troppo ;-), ad esempio potete consultare uno dei seguenti link per approfondire l’argomento:

Detto ciò, passiamo subito all’azione, e colleghiamoci a Tor usando il relativo browser integrato. Bastano pochi secondi per stabilire la connessione, et voilà, siamo già all’interno del tunnel e ci viene dato anche il benvenuto!

Dunque, tutto carino per ora, tutto figo, ok, ma adesso cosa possiamo fare? Che cosa posso trovare davvero nel dark-web e come? Dove andiamo? Queste infatti sono le domande cruciali che tipicamente si pone chi per la prima volta si affaccia a questo nuovo mondo, perché a differenza del web classico, qui le informazioni non sono tipicamente indicizzate e la difficoltà più grande è riuscire a capire come muoversi. Sul web in chiaro, basta aprire la pagina di un motore di ricerca per sbizzarrirsi, e cercare tutto quello che desideriamo, ma qui è ben diverso.

Prima di iniziare ricordo che tutti i siti/servizi all’interno del dark-web riportano l’estensione .onion, a differenza delle canoniche it, com, …, del web classico. Ricordiamoci sempre che questi servizi (.onion appunto) non saranno visibili dal web classico (con qualche eccezione che poi vedremo :-)), mentre al contrario dall’interno di Tor sarà sempre possibile accedere al web classico.

Un buon punto di inizio all’interno della rete Tor sono i seguenti servizi (i link sono tutti attivi nel momento della stesura dell’articolo, ma cercherò di mantenere aggiornata la lista):

Passando alla pratica, prendiamo uno tra i più grandi black market, traderoute, e colleghiamoci al sito dopo esserci registrati. Facciamo attenzione che praticamente ogni black market, così come moltissimi altri servizi su Tor (forum, …), richiede una registrazione, la quale è spesso articolata in più fasi: la scelta di una password e/o di un PIN, captcha, fino ad arrivare alla richiesta di presentazione da parte di uno dei membri già attivi del servizio (in genere per siti contenenti materiale illegale, o forum di hacking). In questo modo, viene concesso l’accesso ad un servizio solo ad un utente realmente interessato a quell’argomento, o che ha dimostrato di avere un amico nella community (appunto forum).

Una volta collegati a traderoute, possiamo vedere la schermata del market, come fossimo tranquillamente su amazon o su ebay, e ogni oggetto in vendita ha associato un relativo venditore con tanto di feedback degli altri acquirenti.

Come possiamo vedere, la maggior parte del materiale è illegale, ad esempio possiamo acquistare account falsi o rubati, che con pochi euro ci restituiscono credenziali di accesso a servizi ben più costosi (es. Netflix):

Sul dark-web ogni forma di acquisto e pagamento viene fatta tramite monete virtuali (bitcoin, etherum, …) che permettono di mantenere la transazione completamente anonima.

Oltre ai black market, possiamo trovare “servizi” professionali di vario tipo, e di dubbia legalità, come ad esempio servizio hacking:

Una nota importante, e da non dimenticarsi mai, è che sul dark-web le frodi sono all’ordine del giorno, e sono molto più frequenti che sul web in chiaro, dunque dobbiamo prestare la massima attenzione a qualunque cosa facciamo. La motivazione è semplice: il grado di anonimità è tale che frodi e inganni di piccola entità resteranno con buona probabilità impuniti, e questo permette il dilagare di piccoli hacker in erba. Il motto “fidarsi è bene, ma non fidarsi è meglio” è più che azzeccato in questo caso :-).

Oltre a quello che abbiamo appena visto, non è troppo difficile reperire materiale che dovrebbe senza ombra di dubbio essere censurato, di tutto e di più. Se sul web classico padroneggia la pornografia, con numeri da capogiro in quanto a guadagni, sul dark-web troviamo la sua controparte del lato oscuro, la pedo-pornografia. A quest’ultima si affiancano siti, foto, e video di violenze, di gruppi estremisti, e tutto ciò che non può trovare posto sul web in chiaro. Cambiate canale prima di finire su pagine che “voi umani non potreste nemmeno immaginare”!

Volete un piccolo assaggio che posso pubblicare qui? Eccolo, un semplice forum Q&A, dove viene chiesto come potersi suicidare, con risposte serie e precise, come se si parlasse di argomenti scientifici e assolutamente normali. Da restare senza parole…

In definitiva cosa offre il dark-web e cosa non offre? Vediamo di trarre le nostre conclusioni:

  • per l’utente alle prime armi: niente, tranne la curiosità iniziale. Se sei in questa categoria, fatti pure un giro nel “tunnel” ma poi chiudi tutto e dimenticati della sua esistenza. Potresti finire in siti veramente pericolosi, o che non avresti voluto vedere. Potresti perdere il sonno per giorni, o potresti molto più facilmente perdere soldi con la speranza di fare qualche affare.
  • per l’utente medio: puoi trovare qualcosa di interessante, ma devi imparare a conoscere bene tutta la rete, come funzionano le criptovalute (Bitcoin, …), e come/dove è possibile fare qualche affare. Serve tempo da dedicarci, e voglia.
  • per l’utente esperto: avrai già voltato pagina e chiuso l’articolo, perché saprai già dove reperire le informazioni, e come muoverti. Sai già cosa cerchi ;-).

In definitiva, non usate Tor, a meno che non vi troviate in nazioni dove la libertà di navigazione è bloccata, e dove il dark-web può costituire non una rete dove reperire materiale illegale, ma una nuova frontiera per poter accedere al web classico, altrimenti bloccato senza l’uso di strumenti come Tor.

Il mio punto di vista…

roghan

[Articolo] La guida definitiva per verificare se un server Linux è stato violato e metterlo in sicurezza

Sospettiamo che il nostro server Linux sia stato violato? Abbiamo notato processi o attività strane? Vediamo in questo primo articolo come identificare un server Linux che è stato compromesso, e come cercare di ripristinare la situazione e chiudere fuori gli intrusi.

Difficoltà articolo (0->10): 8

Requisiti: conoscenza intermedia della shell di Linux, e hardening di un sistema.

Sospettiamo che il nostro server Linux sia stato violato? Abbiamo notato processi o attività strane? Vediamo in questo primo articolo come identificare un server Linux che è stato compromesso, e come cercare di ripristinare la situazione e chiudere fuori gli intrusi.

Partiamo dal presupposto che ad essere esposti a questo problema sono soprattutto i server che pubblicano servizi e applicazioni all’esterno (server web, ftp, …), e ancora più presi di mira sono i server messi a disposizioni dai principali provider del settore (Aruba, Register, OVH, …). I server di questi provider sono infatti presi di mira in modo massivo, e quotidianamente sono soggetti a tentativi di attacco su tutti i servizi e porte standard (ssh, http, …). Il motivo è semplice: ogni provider ha a disposizione determinati range di IP, dunque per un attaccante, chiunque esso sia (persona fisica o bot) è sufficiente eseguire degli scan e attacchi su questi range selezionati. Ad esempio, questi sono alcuni range che appartengono al noto OVH:

  • 142.4.192.0/19
  • 149.56.0.0/16
  • 158.69.0.0/16

Inoltre, preciso che buona norma per un server compromesso, sarebbe quello di radere tutto al suolo, reinstallato da zero sistema operativo e servizi. Questa pratica non è tuttavia sempre praticabile, poiché spesso sul server sono eseguiti applicativi fondamentali aziendali o per clienti, e la prima soluzione è invece quella di cercare di ripristinare il sistema ad uno stato consistente e sicuro.

Dunque, veniamo in dettaglio ai controlli da effettuare su un server che ipotizziamo essere stato compromesso.


1. Servizi in ascolto e porte aperte

Controlliamo i servizi attivi e le porte sui quali sono in ascolto:

# netstat -tulpn
# ss -nap

Devono indurre sospetto servizi in ascolto su porte non standard e soprattutto porte alte, tipicamente dalla 40000 in su, ad esempio:

# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
[...]
tcp 0 0 100.100.100.100:51553 0.0.0.0:* LISTEN 410/theerhd
[...]

Per controllare che non ci siano eventuali servizi nascosti usare poi il seguente tool:

# unhide-tcp
Unhide-tcp 20121229
Copyright © 2012 Yago Jesus & Patrick Gouin
License GPLv3+ : GNU GPL version 3 or later
http://www.unhide-forensics.info
Used options: use_fuser
[*]Starting TCP checking
[*]Starting UDP checking

Nel caso sopra, l’output è normale, nel senso che non sono stati rilevati servizi nascosti in ascolto, quindi possiamo stare tranquilli.


2. Processi attivi

Controlliamo tutti i processi in esecuzione:

# ps -ef

e l’albero dei processi attivi con relativi pid:

# pstree -pa

Il comando seguente, come nel punto precedente, può rilevare eventuali processi malevoli nascosti:

# unhide proc
# unhide sys
# unhide brute

Devono indurre sospetto eventuali processi con nomi strani (thweih43, lpevntw, 6oetheq, …), processi di cui non riconosciamo l’origine, o processi nascosti, come:

# unhide sys
[...]
Found HIDDEN PID: 256 Wchan: "[34ljyjil]"

3. Scansioni alla ricerca di malware

Installiamo il software rkhunter, per trovare eventuali trojan o malware in esecuzione.

Possiamo trovare una guida completa e ben fatta a questo link, perché la spiegazione di utilizzo del tool richiederebbe un intero articolo…


4. Ultimi accessi al sistema e utenti collegati

Facciamo un controllo sugli ultimi utenti che si sono collegati al sistema:

# last

e quali sono gli utenti attualmente collegati:

# who

Ovviamente, in questo caso dovrebbero far pensare eventuali connessioni di utenti non riconosciuti, oppure connessioni che sappiamo per certo non essere state fatte da noi.


5. Utenti attivi nel sistema

Controlliamo tutti gli utenti definiti all’interno del sistema:

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
admin:x:1000:1000:,,,:/home/admin/:/bin/bash
[...]

Indice di sospetto dovrebbe essere la presenza di utenti nuovi non noti, o con nomi sospetti (come ad esempio l’utente admin nell’output precedente). Facciamo attenzione però, perché l’output del comando precedente può essere più o meno lungo, e può contenere anche molti utenti che potrebbero destare sospetti ma che in realtà sono utenti di sistema! Tipicamente, gli ultimi utenti ad essere stati creati sono aggiunti alla fine del file, quindi dobbiamo concentrarci su quelli.


6. Ultimi reboot del sistema

Controlliamo da quanto tempo è in esecuzione il server:

# uptime
 15:47:02 up 143 days, 12:07, 1 user, load average: 0,00, 0,00, 0,00

quando è stato fatto l’ultimo reboot:

# who -b
 system boot 2016-12-15 02:40

e il momento esatto di tutti gli ultimi reboot:

# last reboot
reboot system boot 2.6.15.4 Sun Apr 30 15:08 - 16:22 (01:13)
[...]

7. File modificati recentemente

Verifichiamo quali file sono stati modificati negli ultimi giorni (7-10 giorni):

find / -mtime -7

Facciamo attenzione che l’output del comando seguente potrebbe essere lungo e potrebbe impiegare tempo a essere visualizzato interamente. Eventualmente possiamo diminuire il numero di giorni, se si sospetta che l’attacco sia stato fatto da pochi giorni.


8. Analisi dei file di log

Esaminiamo i principali file di log (come sempre importantissimi), e in particolare i messaggi del kernel:

# dmesg

e gli ultimi log di sistema:

# cat /var/log/syslog

Controlliamo gli accessi falliti su SSH, soprattutto nel caso in cui il server sia esposto direttamente su Internet, verificando il file /var/log/auth.log in Debian e derivate, e /var/log/secure in Red Hat e derivate.

(Debian e derivate)
# cat /var/log/auth.log

(Red Hat e derivate)
# cat /var/log/secure

Potrebbe essere importante esaminare anche i log di eventuali servizi in ascolto, qualora presenti, tipo quelli dei server web (/var/log/apache/error.log e /var/log/apache/access.log per Apache, …).


9. Tool di auditing

Lanciamo un tool completo di auditing, come sysdig, seguendo le istruzioni di una delle seguenti guide:


10. Dump della memoria e analisi approfondita del sistema

Qualora nei punti precedenti avessimo rilevato la presenza reale di una minaccia, o di qualche intrusione, è bene approfondire l’analisi con tool specifici, come ad esempio volatility.

Possiamo trovare una guida ben fatta al seguente link:


11. Controllare cron e crontab

E’ importante controllare che non siano presenti script o comandi non noti schedulati all’interno del sistema tramite il servizio crond. Pertanto, è necessario verificare sia il file crontab, per tutti gli utenti di sistema, non solo per root, con il seguente comando:

# crontab -l

Il comando mostrerà eventuali comandi o script schedulati a giorni oppure ore particolari. Prestare dunque attenzione alla presenza di tutto ciò che non abbiamo apertamente configurato.

Analogamente, sarà necessario controllare all’interno di tutti gli altri percorsi usati dal demone crond, tra cui:

  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.weekly
  • /etc/cron.monthly
  • /etc/cron.hourly

roghan

[aggiornamento 16/09/2020]

[News] CVE-2015-0235 – esecuzione di codice remoto con glibc in Linux

Difficoltà articolo (0->10): 6

L’ultimo bug uscito in ambiente Linux riguarda la libreria GNU C (glibc), che permette ad un attaccante di eseguire codice remoto sfruttando un buffer overflow delle funzioni gethostbyname o gethostbyname2 della libreria di sistema. Un attaccante potrebbe essere in grado di eseguire codice da remoto o eseguire un blocco dell’applicazione (DoS).

Sono affette tutte le distribuzioni che hanno una versione della libreria precedente alla glibc-2.18, come dichiarato:

https://www.us-cert.gov/ncas/current-activity/2015/01/27/Linux-Ghost-Remote-Code-Execution-Vulnerability

http://www.openwall.com/lists/oss-security/2015/01/27/9

Per verificare la versione della libreria presente nel sistema i comandi da eseguire sono i seguenti:

  • per le distribuzioni RedHat like:
# rpm -q glibc
  • per quelle Debian like:
# dpkg -l libc6
  • in alternativa è possibile controllare direttamente la libreria (potrebbe essere posizionata in un path differente come /lib/x86_64-linux-gnu):
# /lib/libc<tab><invio>

Ad esempio il seguente sistema risulta vulnerabile:

# dpkg -l libc6
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Nome Versione Descrizione
+++-==========================================================================
ii libc6 2.15-0ubuntu10.3 Embedded GNU C Library: Shared libraries

Dunque è necessario aggiornare la libreria libc6 secondo le istruzioni della propria distribuzione, qualora sia precedente alla versione 2.18.

roghan

Trucchi per scaricare i video da youtube in Linux

L’argomento di oggi è youtube: vedremo come è possibile scaricare i video con Linux, e quali sono le principali opzioni. Il programma di cui abbiamo bisogno per scaricare i video è youtube-dl, il quale è disponibile nei repository delle principali distribuzioni Linux. Questo software funziona unicamente da linea di comando, e il suo utilizzo è semplice se conosciamo le opzioni giuste da usare ;-), anzi secondo me è anche più semplice di altri software con GUI analoghi! […]

L’argomento di oggi è youtube: vedremo come è possibile scaricare i video con Linux, e quali sono le principali opzioni. Il programma di cui abbiamo bisogno per scaricare i video è youtube-dl, il quale è disponibile nei repository delle principali distribuzioni Linux. Questo software funziona unicamente da linea di comando, e il suo utilizzo è semplice se conosciamo le opzioni giuste da usare ;-), anzi secondo me è anche più semplice di altri software con GUI analoghi!

YouTube-Logo

1 – Scaricare un video da youtube

Il primo passo sarà quello di installare youtube-dl, o tramite repository, oppure scaricando il software dal sito ufficiale.

Dopo averlo installato, al primo avvio occupiamoci di aggiornare il programma alla versione più recente con l’opzione U:

# youtube-dl -U
Updating to latest version...
Updated youtube-dl. Restart youtube-dl to use the new version.

Passiamo subito a vedere come è possibile scaricare i video inclusi di audio.

Scelto il video da scaricare, prima di tutto controlliamo con quali formati è disponibile, in modo da scegliere quello riteniamo più adatto:

$ youtube-dl -F video_da_scaricare

Il comando restituisce un elenco dei formati disponibili, con annessa risoluzione grafica. Vediamo un esempio:

$ youtube-dl -F http://www.youtube.com/watch?v=oyauS1x54hM&feature=fvwrel
Setting language
oyauS1x54hM: Downloading video webpage
oyauS1x54hM: Downloading video info webpage
oyauS1x54hM: Extracting video information
Available formats:
37 : mp4 [1080x1920]
45 : webm [720x1280]
22 : mp4 [720x1280]
35 : flv [480x854]
43 : webm [360x640]
34 : flv [360x640]
18 : mp4 [360x640]
5 : flv [240x400]
17 : mp4 [144x176]

E’ possibile osservare sulla sinistra una serie di numeri, mentre sulla destra vengono mostrati il formato (mp4, webm, …) e la risoluzione. La risoluzione e il formato decretano la qualità generale del video. Nella seguente tabella di wikipedia sono messi a confronto i formati:

http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs

Nel caso in cui siano disponibili più formati (come nell’esempio precedente),è possibile scegliere quello più adatto alle proprie necessità. Se dobbiamo scaricare una grande quantità di video, o se la qualità non è l’elemento principale, possiamo scegliere una risoluzione media, tipo 360×640. Se dobbiamo invece scaricare pochi video e ci interessa l’alta definizione, possiamo optare anche per una risoluzione alta, come 1080×1920. Dobbiamo ricordare che ad una maggior qualità audio/video corrisponde in genere un file di dimensioni maggiori. Nel caso dell’esempio la qualità massima è quella del formato mp4 con numero 37. Laddove possibile, personalmente preferisco il formato mp4 per avere una maggiore portabilità, rispetto ad esempio a flv.

Dunque, dopo aver scelto la qualità procediamo a scaricare il video con questo comando:

$ youtube-dl -t -f formato video_da_scaricare

Tornando all’esempio precedente abbiamo:

$ youtube-dl -t -f 37 http://www.youtube.com/watch?v=oyauS1x54hM&feature=fvwrel

Le opzioni usate in questo comando sono t, che imposta il nome del file scaricato uguale a quello del video youtube, e l’opzione f per specificare il formato da scaricare.

2 – Estrarre l’audio di un video come mp3

Una particolare funzionalità di youtube-dl è quella che permette di estrarre da un video solo la componente audio, ed in formato mp3. Per fare ciò, è necessario avere installato nel sistema ffmpeg, aggiornato all’ultima versione disponibile. Per estrarre l’audio in mp3 il comando da dare è il seguente:

# youtube-dl -t -f formato --extract-audio --audio-format mp3 --audio-quality 256k video_di_youtube

Con un esempio, il comando precedente diventerebbe:

# youtube-dl -t --max-quality 37 --extract-audio --audio-format mp3 --audio-quality 256k http://www.youtube.com/watch?v=mqVMZB5KPjY

3 – Ottenere informazioni audio/video di un file

Un software molto utile è Mediainfo, installabile sia con GUI che senza e in grado di fornire dettagliatissime informazioni audio e video di un file. Se il software non dovesse essere presente all’interno dei repository è possibile recuperarlo, per la maggior parte delle distribuzioni (anche per Windows e Mac OS X), a questo link:

http://mediainfo.sourceforge.net/it

Un esempio di utilizzo di Mediainfo è:

$ mediainfo Loca_Shakira-G5Q9vSXoKQ8.mp4
General
Complete name : Loca_Shakira-G5Q9vSXoKQ8.mp4
Format : MPEG-4
Format profile : Base Media / Version 2
Codec ID : mp42
File size : 14.1 MiB
Duration : 3mn 7s
Overall bit rate mode : Variable
Overall bit rate : 634 Kbps
Encoded date : UTC 2011-07-17 07:38:03
Tagged date : UTC 2011-07-17 07:38:03
gsst : 0
gstd : 187120
gssd : BADC202E5HH1342530140109985
gshh : o-o.preferred.mil01s12.v15.nonxt8.c.youtube.com
----------------------------
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Baseline@L1.3
Format settings, CABAC : No
Format settings, ReFrames : 1 frame
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 3mn 7s
Bit rate : 534 Kbps
Maximum bit rate : 762 Kbps
Width : 400 pixels
Height : 226 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.236
Stream size : 11.9 MiB (84%)
Tagged date : UTC 2011-07-17 07:38:03
----------------------------
Audio
ID : 2
Format : AAC
Format/Info : Advanced Audio Codec
Format profile : LC
Codec ID : 40
...

Buon download a tutti!!

roghan

GPG parte 3 – Importare/esportare chiavi

Ho in mente di scrivere una serie di articoli sul funzionamento di GPG (GNU Privacy Guard), per poi raccoglierli all’interno di una guida (magari anche in inglese). Sul web si trovano facilmente guide e howto su GPG e su come usarlo da shell, ma ho la necessità di creare la mia propria documentazione, da usare come punto di riferimento anche in futuro.

Per ora vediamo come fare il backup e il ripristino di una chiave GPG . Tale necessità può esserci se vogliamo usare GPG su sistemi diversi usando ovviamente le stesse chiavi di cifratura, come ad esempio se cifriamo un messaggio con il pc dell’ufficio e dobbiamo decifrarlo con il pc di casa. […]

Ho in mente di scrivere una serie di articoli sul funzionamento di GPG (GNU Privacy Guard), per poi raccoglierli all’interno di una guida (magari anche in inglese). Sul web si trovano facilmente guide e howto su GPG e su come usarlo da shell, ma ho la necessità di creare la mia propria documentazione, da usare come punto di riferimento anche in futuro.

Per ora vediamo come fare il backup e il ripristino di una chiave GPG . Tale necessità può esserci se vogliamo usare GPG su sistemi diversi usando ovviamente le stesse chiavi di cifratura, come ad esempio se cifriamo un messaggio con il pc dell’ufficio e dobbiamo decifrarlo con il pc di casa.

Backup/esportazione di una chiave GPG

Per prima cosa controlliamo le chiavi installate all’interno del sistema:

# gpg --list-keys
/root/.gnupg/pubring.gpg
-------------------------------
pub 2048R/9F508959 2012-07-03
uid Paolino Paperino <paolino.paperino@paperopoli.com>
sub 2048R/2C98FA15 2012-07-03
-------------------------------
pub 2048R/AB2C995F 2012-07-03
uid Zio Paperone <zio.paperone@paperopoli.com>
sub 2048R/D643E356 2012-07-03

Dunque dobbiamo scegliere la chiave di cui vogliamo fare il backup, per poi fare la copia della chiave pubblica e di quella privata. Nell’esempio le chiavi installate sono due: 9F508959 e DC2C775F. Per fare la copia rispettivamente della chiave pubblica e di quella privata la sintassi è la seguente (per maggior chiarezza userò i nomi completi delle opzioni, almeno dove possibile):

# gpg --armor --output <filename> --export <keyname>
# gpg --armor --output <filename> --export-secret-keys <keyname>

L’opzione armor permette di creare un output in caratteri ASCII, simile a questo

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)mQENBE/1likBCACUfcgaiMfznrEQKXV4x0rPpixqEW+m8vXBF5I2BPuzeKUrB9Ot
YZhuZujuheLjj+Quh5rBFntGoPW3rO430Voq5/PJew54P5Smx6K09paB6pGbzmgk
...
INmtEZwlEvYMrINVOKbKXRk=
=8NiR
-----END PGP PUBLIC KEY BLOCK-----

Se l’opzione armor viene invece omessa, l’output prodotto sarà binario.

Supponendo di voler fare il backup della chiave 9F508959 dell’esempio, i comandi sono:

# gpg --armor --output GPG_public_key --export 9F508959
# gpg --armor --output GPG_secret_key --export-secret-keys 9F508959

Infine, per completare la fase di backup è consigliabile generare anche una chiave di revoca con questo comando:

# gpg --output <filename> --gen-revoke <keyname>

Nel caso dell’esempio, il comando precedente diventerebbe:

# gpg --output GPG_revoke_key --gen-revoke 9F508959

Dopo che le chiavi sono state salvate memorizziamo i relativi file in un supporto sicuro, e possibilmente mobile (CD, DVD, …) anziché all’interno dello stesso sistema in cui è installato GPG!

Ripristino/importazione di una chiave GPG

Se vogliamo ripristinare una chiave GPG, o ad esempio importarla su un nuovo sistema (dal pc dell’ufficio a quello di casa), il comando è il seguente:

# gpg --import <filename>

dove <filename> rappresenta il file contenente la chiave (pubblica o privata) precedentemente esportata. Riprendendo l’esempio precedente, i comandi necessari per importare le chiavi sono questi:

# gpg --import GPG_public_key
# gpg --import GPG_secret_key

roghan

Come nascondere in Linux l’output di un comando nella shell

E’ possibile nascondere l’output di un comando o di un’applicazione della shell in questo modo: […]

E’ possibile nascondere l’output di un comando o di un’applicazione della shell in questo modo:

$ command > /dev/null

Ossia l’output del comando non verrà mostrato nella console, ma sarà rediretto a /dev/null e quindi risulterà non visibile. Il comando viene comunque sempre eseguito.

Per nascondere tutto l’output del comando, compresi gli errori, il comando è invece il seguente:

$ command &> /dev/null

roghan

Configurare un proxy da shell in Linux

Oggi vedremo come configurare il sistema per permettere alle applicazioni da linea di comando di utilizzare un proxy. Le applicazioni da linea di comando molto spesso non hanno infatti nativamente l’opzione per veicolare le trasmissioni verso un proxy, diversamente dalle applicazioni grafiche (ad esempio i browser hanno sempre le opzioni per la configurazione di eventuali proxy). Dunque, la soluzione per la linea di comando è quella di configurare i parametri del proxy come variabile d’ambiente, e costringere in questo modo l’applicazione a passare dal proxy. Tramite la shell sono supportati i proxy con protocollo HTTP, HTTPS, e FTP. Vediamo adesso in dettaglio come fare. […]

Oggi vedremo come configurare il sistema per permettere alle applicazioni da linea di comando di utilizzare un proxy. Le applicazioni da linea di comando molto spesso non hanno infatti nativamente l’opzione per veicolare le trasmissioni verso un proxy, diversamente dalle applicazioni grafiche (ad esempio i browser hanno sempre le opzioni per la configurazione di eventuali proxy). Dunque, la soluzione per la linea di comando è quella di configurare i parametri del proxy come variabile d’ambiente, e costringere in questo modo l’applicazione a passare dal proxy. Tramite la shell sono supportati i proxy con protocollo HTTP, HTTPS, e FTP. Vediamo adesso in dettaglio come fare.

Prima di tutto controlliamo tra le variabili d’ambiente che non siano già impostati proxy:

# ENV | grep -i proxy

Se non viene ritornato niente possiamo procedere a configurare il/i proxy:

# export http_proxy=http://<proxy-server-ip>:<port>
# export https_proxy=http://<proxy-server-ip>:<port>
# export ftp_proxy=http://<proxy-server-ip>:<port>

Nel caso in cui ci siano già state definite variabili proxy, è possibile eliminarle e definirle nuovamente:

# unset http_proxy
# export http_proxy=”http://<proxy-server-ip>:<port>”

Ricordo che le variabili d’ambiente definite con i comandi precedenti risultano temporanee, mentre per renderle permanenti è necessario modificare i file .bash_profile o .bashrc, come ho scritto dettagliatamente in questo post:

[GNU/Linux] Come configurare le variabili d’ambiente

Nel caso in cui il proxy richieda l’autenticazione è necessario invece configurare le variabili d’ambiente in questo modo:

# export http_proxy=<username>:<password>@http://<proxy-server-ip>:<port>/

Infine controlliamo di aver correttamente definito le variabili, osservando l’output dei comandi:

# echo $http_proxy
# echo $https_proxy
# echo $ftp_proxy

Ulteriori risorse sui proxy in Linux:

roghan