.. meta:: :language: it :description language=it: Attacchi e software malevolo :description language=en: Attacks and Malicious Software :keywords: IT Security, Attacks, Malicious Software :author: Luciano De Falco Alfano 08 Attacchi e software malevolo ================================ .. contents:: :local: Definizioni ------------------ **Software malevolo**. Software che viene intenzionalmente incluso o inserito in un sistema con lo scopo di danneggiarlo. Un attacco **denial of service** (DoS) tenta di impedire agli utenti legittimi l'uso di un servizio. Un attacco **distributed denial of service** è un DoS lanciato da più sorgenti coordinate. Programmi malevoli -------------------- ======================== ========================================================= tipo descrizione ======================== ========================================================= Virus si attacca ad un programma e propaga copie di se stesso ad altri programmi Worm propaga copie di se stesso ad altri computer logic bomb esegue delle azioni in determinate condizioni Trojan horse contiene funzionalità addizionali non attese Backdoor (Trapdoor) modifica che permette accesso non autorizzato a funzionalità Exploits codice specifico per una singola vulnerabilità o un insieme di vulnerabilità Downloaders installa altri item nella macchina sotto attacco. di solito è inviato via e-amil Auto-rooter Strumenti hacker malevoli usati per irrompere in nuove macchine remote Kit (virus generator) insieme di strumenti per generare nuovi virus automaticamente Spammer programs usati per inviare grandi quantità di e-mail non richieste Flooders usati per attaccare sistemi di computer in rete con una grande quantità di traffico generato con un attacco denial of service Keyloggers cattura le digitazioni dell'utente nel sistema compromesso Rootkit Insieme di strumenti hacker utilizzati dopo che l'attaccante è riuscito ad entrare in un computer Zombie Programma installato su una macchina infetta, che viene attivato per lanciare attacchi su altre macchine ======================== ========================================================= Qui di seguito una possibile classificazione di programmi malevoli: .. image:: ./images/27_classification.svg Backdoor ------------- Una **backdoor**, detta anche **trapdoor**, è un punto d'ingresso segreto in un programma che evita i controlli di sicurezza a fronte di una sequenza di input speciale. Sono state utilizzate in passato per effettuare test e debug di programmi, ma diventano una minaccia perché un programmatore le può usare per scopi malevoli. Logic bomb ----------- Questo è stato uno dei primi tipi di software malevolo sviluppato. È codice inserito in un programma che ha altri obiettivi. E viene attivato quando avvengono delle specifiche condizioni. Ad esempio: * presenza/assenza di alcuni file; * date ed orari definiti; * particolari utenti. Quando sono attivati, usualmente danneggiano il sistema, ad esempio modificando/cancellando file su disco. Trojan horse --------------- Questi sono programmi con effetti collaterali nascosti, usualmente attraativi per qualche motivo, ad esempio: giochi, upgrade software ... Quando girano eseguono delle attività addizionali. Ad esempio permettono all'attaccante di avere un accesso indiretto là dove non è possibile ottenere un accesso diretto. Sono usati spesso per propagare virus o wormm, o per installare una backdoor. Oppure possono effettuare azioni distruttive sul computer ospite. Zombie --------- Programma che segretamente si installa su un altro computer tramite la rete. Dopo di che usa l'ospite per lanciare attacchi. Utilizzato spesso per lanciare attacchi di tipo distriuited denial of service (DDoS). Utilizza (Exploits) una qualche forma conosciuta di debolezza del network. Virus ----------- È un pezzo di software che può "*infettare*" altri programmi modificandoli. L'infezione consiste nel modificare il progrmma ospite per: * trasmettere copie del virus; * una qualunque altra funzione, come ad es. cancellare file e programmi. Durante la propria vita, un virus tipicamnete attraversa le seguenti fasi: * dormiente; * di propagazione; * di attivazione; * di esecuzione. Nella **fase dormiente** il virus è inerte, in attesa di essere eventualmente attivato da un qualche evento [#]_. Non tutti i virus hanno questa fase. Nella **fase di propagazione** il virus inserisce proprie copie identiche in altri programmi o in alcune aree di sistema nel disco. Nella **fase di attivazione** il virus si prepara ad eseguire le attività per cui è stato progettato. Analogamente alla fase dormiente, questa fase può essere attivata da un determinato evento, incluso il conteggio del numero di volte che il virus è riuscito a replicarsi. Nella **fase di esecuzione**, il virus esegue l'azione per cui è progettato. Usualmente si tratta di qualche tipo di danneggiamento, come la distruzione di programmi e file di dati. In generale un virus ha la seguente struttura logica:: program V := { goto main; 1234567; subroutine infect-executable := { loop: file:= get-random-executable-file; if (first-line-of-file == 1234567) then goto loop; else prepend V to file; } subroutine do-damage := {whatever damage is to be done} subroutine trigger-pulled := {return true if some condition holds} main: main-program := { infect-executable; if trigger-pulled then do-damage; goto next; } next: } Questa struttura impone che il programma originale e quello infettato hanno dimensioni diverse. Tipi di virus --------------- I **virus parassiti** sono la forma tradizionale, e più comune. Si attacca ad un file eseguibile e, quando il file viene eseguito, si replica trovando altri file eseguibili da infettare. I **virus residenti in memoria** si installano nella RAM del computer nella forma di programma di sistema residente. Raggiunto questo stato, un virus di questo tipo infetta qualunque programma che viene eseguito. I **virus del boot sector** il boot record (o il master boot record) del media di avvio del computer. Dopo di che e si replica su qualunque sistema venga avviato con il media infetto. Gli **stealth virus** sono progettati per evitare il rilevamento da parte del software antivirus. I **virus polimorfici** mutano forma ad ogni infezione, rendendo impossibile il loro rilevamento tramite la presenza di una *firma*. Anche i **virus metamorfici** mutano forma ad ogni infezione. A differenza dei virus polimorfici, questi mutano in forma estesa: si riscrivono completamente, e possono cambiare anche comportamento oltre il modo in cui appaiono. Worms ----------- I **worm** sono programmi in grado di replicarsi, ma, a differenza dei virus, sono autonomi; non hanno necessità di infettare altri programmi per diffondersi. Tipicamente usano le reti dati come mezzi di diffusione. Un primo esempio di worm fu sviluppato e lanciato da R. T. Morris nel 1988 (si veda [WIKI2019b]_). Proprio il successo della diffusione di questo worm, convinsero i responsabili di DARPA ad allocare i fondi necessari allo studio dei certificati. I worm sono stati utilizzati dagli hacker per creare *PC zombie* al fine di eseguire successivi attacchi, in particolare attacchi DoS. Il terreno fertile per la diffusione dei worm è la presenza in rete di PC senza adeguati sistemi di protezione. **L'operatività** dei worm è analoga a quella dei virus; hanno le seguenti fasi: * dormiente; * propagazione: * con ricerca di altri sistemi da infettare; * effettuare la connessione con i sistemi bersaglio scoperti; * replica del worm sul sistema target; * attivazione; * esecuzione. Il **Morris Worm**, conosciuto anche come il **worm classico**, è stato rilasciato da Robert Morris nel 1988. I suoi sistemi target sono sistemi Unix e sua varie tecniche per propagarsi: * algoritmi semplici di crack delle password locali; * uso (exploit) di bug del demone *finger* [#]_; * uso di trapdoor del demone *sendmail*. Se il programma ha successo nell'attaccare il target, replica se stesso nel sistema sotto attacco. Contromisure ai virus ------------------------- Gli attacchi dei virus utilizzano la mancanza del controllo di integrità nei sistemi. La difesa consiste nell'aggiungere questo tipo di controllo. Tipicamente è necessario utilizzare uno o più dei seguenti meccanismi: * **prevenzione** - blocca il meccanismo di diffusione dei virus; * **rilevamento** - individua i virus presenti nel sistema; * **reazione** -- riporta il sistema nello stato precedente l'infezione. I **software antivirus** attuano i meccanismi predetti. La *prima generazione* di questi software cerca la presenza di virus verificando la presenza della sua *firma* nei programmi infettati, oppure verificando la lunghezza dei programmi. La *seconda generazione* degli antivirus utilizzava tecniche euristiche per individuare infezioni virali, o programmi di checksum per individuare variazioni ai programmi. La *terza generazione* era costituita da programmi residenti in RAM che identificavano i virus tramite l'individuazione delle loro attività. Attualmente (*quarta generazione*) vi sono pacchetti che utilizzano contemporaneamente varie tecniche di individuazione. Ad esempio possono effettuare contemporaneamente lo scanning, monitorare le attività e verificare gli accessi alle risorse del sistema. DDoS ------ Gli attacchi DDoS rendono inaccessibili i sistemi inondando i server di richieste. In tal modo gli utenti legittimi non possono accedere alle loro risorse. In un tipico attacco DDoS un gran numero di host vengono compromessi in modo di formare un gruppo di sistemi coordinato che invia ai server attaccati richieste inutili. Recentemente i metodi di attacco e i relativi tool sono divenuti più sofisticati, efficienti e più difficili da analizzare per risalire agli attaccanti reali. Le tecnologie per la difesa non si sono dimostrate capaci di contrastare attacchi su larga scala. Il seguente diagramma mostra l'organizzazione di un *distributed SYN flood attack*: .. image:: ./images/28_ddos_1.svg L'attaccante organiza un pool di slave servers che ad una stessa ora, e per una congrua quantità di tempo, invieranno richieste di collegamento tramite TCP [#]_ al server obiettivo dell'attacco. Gli slave server non attendono la risposta del server target al proprio segnale di SYN [#]_, ma continuano ad inviare nuovi segnali di SYN, ovvero nuove richieste di collegamento. In tal modo *inondano* il server target di richieste di colegamento, esaurendo rapidamente le sue risorse di rete ed impedendo ad utenti legittimi di utilizzare il server target. Un altro tipo di DDoS è il *distributed ICMP attack*, illustrato qui di seguito. .. image:: ./images/29_ddos_2.svg In questo caso gli slave server inviano delle richieste di ``echo`` [#]_ in cui il campo del mittente riporta (artificiosamente) l'indirizzo del server sotto attacco. Le macchine *specchio* ricevono le richieste di ``echo``, e rispondono con il ``reply`` inviato alla macchina sotto attacco, che va in saturazione. Se nello scenario precedente le richieste di ICMP echo sono fatte verso indirizzi broadcast, allora si parla di **smarf attack**. Un ulteriore DDoS è il**ping of death**. In questo caso vengono inviati pacchetti ICMP con pyload maggiori di 64 Kbyte. Un payload di queste dimensioni mandava in crash macchine con versioni vecchie di Windows. Nel caso di **direct DDoS attack**, gli slave server posono essere organizzati gerarchicamente su livelli multipli, come ilustrato qui di seguito. .. image:: ./images/30_ddos_3.svg Contromisure ai DDoS ----------------------- Sono di tre tipi. * **prevenzione dell'attacco** - queste vengono messe in atto prima che l'attacco venga eseguito; hanno lo scopo di metere in grado il server di sopportare un eventuale attacco senza che venga mno il servizio agli utenti legittimi; usualmente si ricorre all'uso di repliche; * **rilevameto dell'attacco e filtraggio** - queste tecniche sono attuate durante l'attacco; il rilevamento avviene cercando pattern di comportamento sospetti, e la risposta consiste nell'escludere pachetti di rete che probabilmente partecipano all'attacco; * **identificazione della sorgente dell'attacco** - avviene durante e dopo l'attacco; lo scopo consiste nell'idenificare la sorgente dell'attacco per poter prevenire ulteriori attacchi futuri. ---------------- .. [#] Ad esempio una data o la presenza di un altro programma o file. .. [#] Name/Finger è un protocollo per individuare la presenza (login) di un utente Unix in una rete di computer. Finger è il programma client. .. [#] La richiesta di collegamento tramite TCP avviene inviando un pacchetto TCP nel cui header il bit SYN è impostato ad 1. Il server che riceve questa richiesta deve rispondere con un pacchetto TCP nel cui header soo impostati ad 1 i bit SYN e ACK. .. [#] Il protocollo TCP imporrebbe che il richiedente del collegamento attenda la risposta del server prima di proseguire con altre attività di trasmissione dati. .. [#] È il messaggio IP ICMP, che richiede una risposta dal ricevente allo scopo di controllare la possibilità di trasmissone tra mittente e destinatario.