Sebek e la cattura di informazioni all’interno di un honeypot

Sebek e la cattura di informazioni all’interno di un honeypot

Sebek nasce come tool di cattura delle informazioni con il preciso obiettivo di ricostruire gli eventi accaduti sull’honeypot ed è basato sul paradigma client/server: l’honeypot esegue la componente client che acquisisce i dati in modo trasparente, sostituendo la classica chiamata di sistema read() con una propria versione che copia tutti i dati letti mediante tale primitiva in un buffer specifico, inviandoli  successivamente ad un server di raccolta, generalmente una macchina dedicata allo scopo, per le successive analisi. Il server è costituito a sua volta da tre componenti utilizzate per la cattura dei dati. Il primo sbk_extract è un programma C che acquisisce i pacchetti a partire da un file in formato tcpdump o direttamente in modalità live.

Gli altri due sono script Perl: sbk_ks_log.pl estrae le sequenze di caratteri digitati dall’intruso inviandole allo standard output mentre sbk_upload.pl importa i pacchetti in un database per consentire ulteriori elaborazioni. In assenza di cifratura è possibile acquisire tutta l’attività di rete in forma di pacchetti da esaminare con appositi tool  come Ethereal, recuperando il contenuto di un’intera sessione e di fatto visualizzando non solo l’input digitato dall’attacker ma anche le risposte del sistema. Il vero problema riguarda le comunicazioni cifrate per le quali è necessario recuperare il contenuto in chiaro. Piuttosto che impiegare ingenti risorse, talvolta inutilmente, per spezzare la chiave sono stati ricercati metodi alternativi per eludere la cifratura. La soluzione adottata consiste nell’acquisire i dati direttamente dal kernel del sistema operativo dopo la regolare fase di decrittazione.

Il server Sebek può acquisire i dati in modalità live oppure partendo da un file in formato tcpdump. Lo scambio dei dati avviene utilizzando il protocollo UDP che, non essendo orientato alla connessione, ne rende più difficile l’individuazione. Il client risiede nello spazio di memoria riservato al kernel sull’honeypot e registra tutti i dati a cui un utente ha accesso tramite la system call read(). Per sortire questo effetto Sebek sostituisce il puntatore alla funzione all’interno della Tabella delle System Call in modo che faccia riferimento ad una nuova funzione appositamente predisposta. Quest’ultima provvede a chiamare quella originale, ne copia il contenuto in uno specifico buffer, aggiunge un header e invia il pacchetto al server.

A questo punto Sebek dispone di una visione completa di tutti i dati letti tramite la chiamata di sistema read(). La stessa tecnica si potrebbe utilizzare per qualunque altra funzione da monitorare. Per nascondere la sua presenza Sebek sfrutta le tecniche utilizzate dai comuni rootkit riuscendo a sparire dalla lista dei moduli installati e quindi rendendo difficile la sua individuazione.

Sebek e la cattura di informazioni all'interno di un honeypot - Architettura di Sebek
Sebek e la cattura di informazioni all’interno di un honeypot – Architettura di Sebek
Precedente Honeynet: rilevare la presenza di un honeywall Successivo Informatica forense e analisi forense di un attacco

Lascia un commento

*