[gl-como] rtcp: Reverse TCP

Pietro Bertera dr.iggy@iol.it
Ven 4 Lug 2003 03:15:03 CEST


questa sera un'idea piuttosto malata mi ha preso alla testa:
TCP usa i flag SYN e FIN per gestire l'apertura e la 
chiusura di connessioni.
Molte implemetazioni di firewall e Indrusion Detection 
System quardano molto di sospetto pacchetti con il flag SYN 
settato (v. SYN flood apertura di connessioni etc...).
Una cosa piuttosto divertente sarebbe quella di scambiare i 
SYN con i FIN ovvero:

Alice vuole stabilire una connessione copn Bob:

1) TCP "normale"

ALICE -----[SYN]----> BOB
BOB   -----[SYN ACK]----> ALICE
ALICE -----[ACK]-----> BOB

è la banale procedura del 3-way handshake

2) TCP spippolato
Se io sovverto lo stack TCP di Alice e BOb in modo che per 
stabilire una connessione debbano fare:

ALICE -----[FIN]----> BOB
BOB   -----[FIN ACK]----> ALICE
ALICE -----[ACK]-----> BOB

e ovviamente quando viene chiusa la connessione verrà usato 
il SYN al posto del FIN

Alice e Bob, comunicando in questo modo rendono la vita 
piuttosto difficile a un ipotetico firewall o IDS tra loro due.

Per fare questo ho scritto un modulo in kernel space che 
inverte i syn con i fin di tutti i pacchetti provenienti o 
uscenti verso un certo ip.
Il modulo è molto semplice, si appoggia netfilter per 
piazzare 2 hook (ingresso e uscita) e quando trova una 
corrispondenza con l'ip desiderato inverte syn con fin:

	if (addr == magic){
	  [...]
		flag = tcph->fin;
		tcph->fin = tcph->syn;
		tcph->syn = flag;
    	  [...]
	}


se bob ha ip 192.168.2.2 e alice 192.168.2.100

Alice si installa sulla sua linux box il modulo indicando 
l'ip di bob:

insmod rtcp ip=192.168.2.2

la stessa cosa la fa bob:
insmod rtcp ip=192.168.2.100

ora, da alice e da bob usciranno pacchetti tcp con i syn e i 
fin invertiti mantre i software in userspace di alice e bob 
riceveranno i pacchetti con i flag "normali"

     ALICE                BOB
-------------       -------------
| userspace |       | userspace | <-- qui sono normali
-------------       -------------
       |                  |
-------------       -------------
|  KERNEL   |       |  KERNEL   | <- qui vengon inverti
-------------       -------------
       |                  |
       +------------------+    <- qui sono invertiti

Si potrebbero anche invertire le porte TCP ma adesso è 
troppo tardi e domani ho un esame !!!
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        rtcp.c
Tipo:        text/x-csrc
Dimensione:  5939 bytes
Descrizione: non disponibile
Url:         /pipermail/attachments/20030704/83a550d3/rtcp.bin


Maggiori informazioni sulla lista gl-como