Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1775 connectés 

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

detection d'attaques

n°642805
nohack
Posté le 28-02-2005 à 14:03:48  profilanswer
 

Salut,je suis en train de faire un detecteur d'attaque de FLOOD Syn,
j'ai utiliser une librairie LibCap ,mais le probleme cest que jarrive pas a filter les packets.J'arrive seulement a lire les packets,ie lentete du packet.
voila mais comment fair epour filtrer les packets?
voila la source
 
#include <stdio.h>
#include <pcap.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/ether.h>
#include <net/ethernet.h>
 
#define IP_LEN 17
 
void callback (u_char *args , const struct pcap_pkthdr *header , const u_char *packet) {
 int type;
 
 char adresse_source[IP_LEN];
 char adresse_destination[IP_LEN];
 
 unsigned short int port_source;
 unsigned short int port_destination;
 
 unsigned int numero_seq;
 unsigned int numero_ack_seq;
 
 const struct ether_header *eth;
 const struct iphdr *ip;
 const struct tcphdr *tcp;
 
 int size_ethernet = sizeof(struct ether_header);
 int size_ip = sizeof(struct iphdr);
 int size_tcp = sizeof(struct tcphdr);
 
 eth = (struct ether_header*) (packet);
 ip = (struct iphdr*) (packet + size_ethernet);
 tcp = (struct tcphdr*) (packet + size_ethernet + size_ip);
 
 type = ntohs(eth->ether_type);
 
 if (type != ETHERTYPE_IP)
  return;
 
 strncpy(adresse_source,(char *)inet_ntoa(ip->saddr),IP_LEN);
 strncpy(adresse_destination,(char *)inet_ntoa(ip->daddr),IP_LEN);
 
 int off;
 off = ntohs(ip->frag_off);
 if (!(off & 0x1fff) && (ip->protocol==IPPROTO_TCP)) {
  int syn = tcp->syn;
  int ack = tcp->ack;
   
  if ((syn) && (!ack)) {
   port_source = ntohs(tcp->source);
   port_destination = ntohs(tcp->dest);
   
        numero_seq = ntohl(tcp->seq);
   numero_ack_seq = ntohl(tcp->ack_seq);
 
   printf("Paquet TCP SYN
    Adresse IP src : %s  
    Adresse IP dest : %s  
    Port Source : %d  
    Port Destination : %d
    SEQ : %lu
    ACK : %lu\n\n"
   ,adresse_source,adresse_destination,port_source,port_destination,
   numero_seq,numero_ack_seq,tcp->syn,tcp->ack);
  }
 }
}
 
int main() {
 char *dev, errbuf[PCAP_ERRBUF_SIZE];
 dev = pcap_lookupdev(errbuf);
 printf("Device : %s\n" , dev);
 pcap_t *handle;
 handle = pcap_open_live(dev , BUFSIZ , 0  , 0 , errbuf);
 u_char *packet;
 pcap_loop (handle,-1,callback,NULL);
 pcap_close(handle);
}
 
 

mood
Publicité
Posté le 28-02-2005 à 14:03:48  profilanswer
 

n°642818
xouille38
Posté le 28-02-2005 à 14:24:32  profilanswer
 

bah faut faire ça dans le noyau!

n°642822
nohack
Posté le 28-02-2005 à 14:32:31  profilanswer
 

cets a dire?

n°642825
l0ky
Posté le 28-02-2005 à 14:38:20  profilanswer
 

C'est à dire que c'a serait plutot un module pour netfilter qu'il faudrait que tu codes

n°642827
Tomate
Posté le 28-02-2005 à 14:52:10  profilanswer
 

et là attention aux conneries :D


---------------
:: Light is Right ::
n°642828
nohack
Posté le 28-02-2005 à 14:54:02  profilanswer
 

uoi...en fait ya pas une ligne de code qui permet au moins  
que si je toruve un flood qui provient dune ip  fixe,je puisse  fermer toute connexion provenant de cette adresse ip.?                                                         ,

n°642831
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 28-02-2005 à 14:57:10  profilanswer
 

iptables -s adresse -j DROP


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°642832
Tomate
Posté le 28-02-2005 à 14:57:13  profilanswer
 

nohack a écrit :

uoi...en fait ya pas une ligne de code qui permet au moins  
que si je toruve un flood qui provient dune ip  fixe,je puisse  fermer toute connexion provenant de cette adresse ip.?                                                         ,


effectivement ça c'est faisable (à coups de iptables et de DROP/REJECT), mais autant le faire en shell


---------------
:: Light is Right ::
n°642846
xouille38
Posté le 28-02-2005 à 15:47:17  profilanswer
 

nan mais un module pour faire ça c'est vite fait...
init_module() ton init, aprés tu pleugue ton callback (qui fait return NF_DROP; ou  return NF_ACCEPT; ) dans netfilter avec nf_register_hook, tu bidouilles ton skbuff et pis cleanup_module() pour finir.


Message édité par xouille38 le 28-02-2005 à 15:48:12
n°642847
Tomate
Posté le 28-02-2005 à 15:49:15  profilanswer
 

xouille38 a écrit :

nan mais un module pour faire ça c'est vite fait...
init_module() ton init, aprés tu pleugue ton callback (qui fait return NF_DROP; ou  return NF_ACCEPT; ) dans netfilter avec nf_register_hook, tu bidouilles ton skbuff et pis cleanup_module() pour finir.


et là t'as un buffer overflow car t'as fait une connerie, et c'est la fête ...
 
alors qu'en shell ce sera bcp plus souple et robuste


---------------
:: Light is Right ::
mood
Publicité
Posté le 28-02-2005 à 15:49:15  profilanswer
 

n°642849
xouille38
Posté le 28-02-2005 à 15:58:00  profilanswer
 

Tomate a écrit :

et là t'as un buffer overflow car t'as fait une connerie, et c'est la fête ...
 
alors qu'en shell ce sera bcp plus souple et robuste


 
Bah y'a qu'un pauvre compteur de syn à implémenter... :p  
D'un autre coté il pourrait trés bien le faire avec "seulement" iptables...
 
Et puis c'est rigolo et un minimum formateur de faire un fois dans sa vie un module noyo!!  :)

n°642852
Tomate
Posté le 28-02-2005 à 16:03:24  profilanswer
 

xouille38 a écrit :

Bah y'a qu'un pauvre compteur de syn à implémenter... :p  
D'un autre coté il pourrait trés bien le faire avec "seulement" iptables...
 
Et puis c'est rigolo et un minimum formateur de faire un fois dans sa vie un module noyo!!  :)


pour en avoir fais quelques uns je peux t'assurer que c'est "bien" pédagogiquement :D


---------------
:: Light is Right ::
n°642858
xouille38
Posté le 28-02-2005 à 16:08:39  profilanswer
 

Tomate a écrit :

pour en avoir fais quelques uns je peux t'assurer que c'est "bien" pédagogiquement :D


 vi c'est vrai :)  
je dirais aussi : c'est "sympa" professionnellement!

n°642864
Tomate
Posté le 28-02-2005 à 16:16:09  profilanswer
 

moue :D


---------------
:: Light is Right ::
n°642891
xouille38
Posté le 28-02-2005 à 16:49:44  profilanswer
 


Ah sisi j'te jure...  :)  
rien qu'expliquer à ton chef qu'on peut pas allouer 512Mo contigües comme ça, c'est "sympa" :D

n°642892
Tomate
Posté le 28-02-2005 à 16:51:00  profilanswer
 

xouille38 a écrit :

Ah sisi j'te jure...  :)  
rien qu'expliquer à ton chef qu'on peut pas allouer 512Mo contigües comme ça, c'est "sympa" :D


et lui : "ah beh bien sûr" (mais qu'est ce qu'il dit lui [:mlc])
 
:D


---------------
:: Light is Right ::
n°643048
nohack
Posté le 28-02-2005 à 22:33:50  profilanswer
 

pour faire le compteur ca a lair facile mais je suis bloquer,jai essayer de faire avec une liste mais ca marche pas;jai essayer avec une liste chaine mais marhce pas

n°643171
xouille38
Posté le 01-03-2005 à 11:32:47  profilanswer
 

nohack a écrit :

pour faire le compteur ca a lair facile mais je suis bloquer,jai essayer de faire avec une liste mais ca marche pas;jai essayer avec une liste chaine mais marhce pas


tu fais un module, du coup?

n°643276
lukefab
Posté le 01-03-2005 à 16:47:11  profilanswer
 

xouille38 a écrit :

nan mais un module pour faire ça c'est vite fait...
init_module() ton init, aprés tu pleugue ton callback (qui fait return NF_DROP; ou  return NF_ACCEPT; ) dans netfilter avec nf_register_hook, tu bidouilles ton skbuff et pis cleanup_module() pour finir.


 
Voilà, quoi, finger in the noze, mouaaaahhahahaha  :lol:  :lol:  
Je suis le seul à avoir rit devant autant de débauches techniques? :D

n°643291
xouille38
Posté le 01-03-2005 à 17:21:49  profilanswer
 

lukefab a écrit :

Voilà, quoi, finger in the noze, mouaaaahhahahaha  :lol:  :lol:  
Je suis le seul à avoir rit devant autant de débauches techniques? :D


 
pas gentil ça! :(
 
Tu le prends comme tu veux, mais c'est plutôt plus simple techniquement de faire un kernel module qu'une appli en userspace. T'as déjà pas à t'emmerder à te farcir la doc de 25 libs, ce que t'as le droit d'utiliser c'est dans les .h de /usr/src/linux/include point barre. Nivo déboguage ca va bien avec une vm...
 
Pis bon "débauches techniques" si c'est parce que j'écris trois noms de fonctions et deux #define... t'as peut être jamais rien codé de ta vie??? :??:


Message édité par xouille38 le 01-03-2005 à 17:29:26
n°645822
nohack
Posté le 06-03-2005 à 17:03:09  profilanswer
 

Bon,jai reussit a faire le code qui "detecte" une attaque,
L'algorithme va consister a enregistrer les adresse ip ainsi que la date de reception des paquets arrivant sur la carte reseaux dans un tableau de structure.
Ce tableau sera gérée commme une file circulaire.
 
A chaque nouveau paquet(donc a chaque nouvelle ip),on execute une procedure qui va rechercher le nombre d'adresse ip identique a celle nouvellement recus,et si le nombre ces adresse ip est superieur a un certain nbre, de plus,si et ce si l'intervalle de temps entre le dernier paquet recus  
et le paquet en cours est inferieur a un certain nombre,alors on considere qu'il y a une attaque.
 
 
voila,mais si le paquet est spoofer,comment faire?
Est quil faut verifier la validite de l'adresse ip du client,et apres decider?(mais on aura jamais le temps de verfier).

n°645836
Tomate
Posté le 06-03-2005 à 17:33:13  profilanswer
 

nohack a écrit :

Bon,jai reussit a faire le code qui "detecte" une attaque,
L'algorithme va consister a enregistrer les adresse ip ainsi que la date de reception des paquets arrivant sur la carte reseaux dans un tableau de structure.
Ce tableau sera gérée commme une file circulaire.
 
A chaque nouveau paquet(donc a chaque nouvelle ip),on execute une procedure qui va rechercher le nombre d'adresse ip identique a celle nouvellement recus,et si le nombre ces adresse ip est superieur a un certain nbre, de plus,si et ce si l'intervalle de temps entre le dernier paquet recus  
et le paquet en cours est inferieur a un certain nombre,alors on considere qu'il y a une attaque.
 
 
voila,mais si le paquet est spoofer,comment faire?
Est quil faut verifier la validite de l'adresse ip du client,et apres decider?(mais on aura jamais le temps de verfier).

le spoof sur le net tu peux oublier ;)


---------------
:: Light is Right ::
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
 

Sujets relatifs
[debian/udev] ordre de detection de chip sonAttaques DDos super fréquentes..
[gnomemeeting] detection des peripheriques audio seulement en rootOrdre de détection des cartes réseaux
Pb de détection de la ramattaques brute force sur sshd, que faire ?
Detection PCI express (1x)Synaptics détection du touchpad
detection automatique + rajout iconedetection auto disque firewire sous knoppix
Plus de sujets relatifs à : detection d'attaques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR