01net    Web


Actuellement en ligne : 1171 Utilisateurs dont 44 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> Module de reaction face a une intrusion
Passionné(e) d'internet, de logiciels, de forums ? 01net recrute...
Auteur
Message
 
<     1       >
mrgrieves
  
   
      ?   @     Posté le 16/04/2003 14:41:42  
Voter pour ce message
Bonjour!

Je travaille sur une application de reaction face aux intrusions en parallele avec un IDS et j'ai quelques problemes à rendre efficace mes paquets rst (flag = 0x4)

J'utilise libpcap, libnet 1.1 et snort

J'ai teste mon programme (que vous pouvez voir en bas du mail) avec un script qui execute une boucle infinie de rlogins, mount, rpcinfo sur une machine distante. En fait, je veux pouvoir envoyer des packets tcp rst pour que mon script soit bloque (pas arrete mais que l'on recoive un message du genre "Connection reset by peer")

J'ai pu voir que mon programme marchait juste au niveau des rlogins (je peux voir le message "Connection reset by peer" seulement quand le script essaie de faire un rlogin.

De plus, ne parlant que des rlogins en question, ca marche seulement 90% du temps et je ne sais vraiment pas pourquoi. Generalement quand je lance ma reaction, si la 1ere fois ca passe apres c'est bon mais parfois ca n'a aucun effet sur le script la 1ere fois et apres ca ne marche pas non plus .

J'ai alors regarde Couic

(http://michel.arboi.free.fr/UKUSA/couic.html) et j'ai vu que ca marchait tres bien sur mon script.celui ci est bloque a chaque commande (pas seulement les rlogins)par mes paquets tcp rst et ca fonctionne a chaque fois.

Comme couic est ecrit avec libnet1.0.2 j'ai essayer de le modifier en utilisant libnet 1.1 car je suis oblige de l'utiliser mais il y a pas mal de differences entre les 2 versions et pour l'instant j'ai laisse tomber.

J'ai modifie mon code pour le rendre similaire a couic (notamment au niveau des parametres) mais ca ne marche pas.



Voila les parties interessantes de mon code par rapport a mon probleme



---------------------------------------------------------------------------

case 6: /* Ici je decide d'envoyer des paquets TCP RST */



for (d=0;d<numOfPackets;d++){

while (test== 0) {

pcap_loop(descr, 1, got_packet, NULL);

if (!tsyn & !trst){

test = 1;

for (i =1;i<4;i++){

/* Paquet TCP RST : victim --> attacker */

if (TCPRST(d_add.s_addr,s_add.s_addr,

ntohs(d_port),ntohs(s_port),

ntohl(ack)+i,

ntohl(seq)+i)<0)

{

NOTICE2("TCPACK %s %s KO\n",inet_ntoa

(d_add),inet_ntoa(s_add));

exit(1);

}

NOTICE21("Sent TCP RST from %s:%d to",inet_ntoa

(d_add),ntohs(d_port));

NOTICE21("%s:%d\n",inet_ntoa(s_add),ntohs

(s_port));

/* Paquet TCP RST : attacker --> victim */

if TCPRST(s_add.s_addr,d_add.s_addr,

ntohs(s_port),ntohs(d_port),

nohl(seq)+i,ntohl(ack)+i)<0)

{

NOTICE2("TCPACK %s %s KO\n",inet_ntoa

(s_add),inet_ntoa(d_add));

exit(1);

}

NOTICE21("Sent TCP RST from %s:%d to

",inet_ntoa(s_add),ntohs(s_port));

NOTICE21("%s:%d\n",inet_ntoa(d_add),ntohs

(d_port));

}

}

}

}

break;



---------------------------------------------------------------------------



et enfin le code de ma fonction TCPRST :

je ne sais pas trop quoi utiliser comme mode (LIBNET_LINK ou LIBNET_RAW4). Vu que je lance mon appli de reaction depuis un autre poste via ssh le mode LIBNET_LINK ne marche pas.



---------------------------------------------------------------------------

//Tcp reset function ******************************************



static int TCPRST(u_long saddr, u_long daddr, u_short sport, u_short

dport, int t_seq, int t_ack)

{

int c;

libnet_t *l;

libnet_ptag_t ip_tag, tcp_tag,eth_tag;



fprintf(stderr, "seq : %x, ack : %x ", t_seq, t_ack);



l = libnet_init(LIBNET_LINK,dev,errlbuf);



if (l == NULL)

{

fprintf(stderr, "libnet_init failed: %s\n", errlbuf);

exit(EXIT_FAILURE);

}



tcp_tag = libnet_build_tcp(sport,dport,t_seq,t_ack,0x14,5555,0,

0,LIBNET_TCP_H,NULL,0,l,0);

if (tcp_tag == -1)

{

fprintf(stderr,"libnet_build_tcp failed: %s\n", libnet_geterror

(l));

goto bad;

}



//fprintf(stderr,"build_tcp ok\n");



ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H,

0xF4/*IPTOS_LOWDELAY*/,

rand() & 0xFFFF,

0,64,IPPROTO_TCP,0,saddr,daddr,NULL,0,l,0);



if (ip_tag == -1)

{

fprintf(stderr,"libnet_build_ipv4 failed: %s\n",

libnet_geterror(l));

goto bad;

}



//fprintf(stderr,"build_ipv4 ok\n");



eth_tag =

libnet_build_ethernet(ether_dest,ether_src,htons(t),NULL,0,l,0);



if (eth_tag == -1)

{

fprintf(stderr,"libnet_build_ethernet failed: %s\n",

libnet_geterror(l));

goto bad;

}



//fprintf(stderr,"build_ethernet ok\n");



c = libnet_write(l);



if (c == -1)

{

fprintf(stderr,"libnet_write failed: %s\n",libnet_geterror(l));

goto bad;

}

else fprintf(stderr,"Wrote %d byte(s) TCP packet; check the

wire.\n",c);



libnet_destroy(l);

return (EXIT_SUCCESS);

bad:

libnet_destroy(l);

return(EXIT_FAILURE);



}



---------------------------------------------------------------------------



voila merci d'avance, au moins pour avoir eu le courage de lire jusqu'ici.
Gautier
  2008, ...
  :-)
      ?   @     Posté le 16/04/2003 17:33:54  
Voter pour ce message
mé bien sur :sarcastic:



la moindre des choses c'est qu'il soit en Français

on va pas s'amuser à traduire non plus.
-------
[Chaque minute qui passe est une occasion de changer le cours de sa vie]
[Les préjugés sont les ennemis du bon sens]
mrgrieves
  
   
      ?   @     Posté le 17/04/2003 10:10:57  
Voter pour ce message
voila c'est en francais. :na:
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> Module de reaction face a une intrusion

Aller à :

Page générée en : 1.607s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Automobile
Découvrez l'essai vidéo de la nouvelle Renault Koleos : un monospace vraiment tout terrain.
Salaires
Roumanie, Inde, Vietnam, Chine, Maroc,... découvrez les salaires des informaticiens à l'étranger