08 Attacchi e software malevolo

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:

_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 1. 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 2;

  • 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:

_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 3 al server obiettivo dell’attacco.

Gli slave server non attendono la risposta del server target al proprio segnale di SYN 4, 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.

_images/29_ddos_2.svg

In questo caso gli slave server inviano delle richieste di echo 5 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.

_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.


1

Ad esempio una data o la presenza di un altro programma o file.

2

Name/Finger è un protocollo per individuare la presenza (login) di un utente Unix in una rete di computer. Finger è il programma client.

3

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.

4

Il protocollo TCP imporrebbe che il richiedente del collegamento attenda la risposta del server prima di proseguire con altre attività di trasmissione dati.

5

È il messaggio IP ICMP, che richiede una risposta dal ricevente allo scopo di controllare la possibilità di trasmissone tra mittente e destinatario.