par
cruzy83 » 19 déc. 2012, 09:09
je reviens vers vous après avoir un peu galéré, on l'a fait a plusieurs mais le prof le veut sous perl de ce que je vois c'est très proche du php.
Nous avons mis en place des VM (Virtualbox) un client (sous Ubuntu) un WEB-server (Ubuntu) ou j'ai mis le script et parfeu (IPtable)
Enfin pour le dernier TP nous avons mis en place "metasploit" sur le client et nous avons fait un scan de port vers le serveur personne ne sais faire dans la classe.....
et je dois scripter la détection d'une expression régulière de scan de port et là je ne sais pas le faire
faille dans java...
je vous mets le script :
Code : Tout sélectionner
#!/usr/bin/perl -w
use Time::Local;
#Tableau de date
my %Tdate=("Jan"=>0,"Feb"=>1,"Mar"=>2,"Apr"=>3,"May"=>4,"Jun"=>5, "Jul"=>6,"Aug"=>7,"Sep"=>8,"Oct"=>9,"Nov"=>10,"Dec"=>11);
############################ DECLARATION DES VARIABLES ###########################
$compt_ligne_second=0; #déclaration variable Cmpt ligne second
$num_ligne=0;#déclaration variable num_ligne
@liste_ip_bloquee=(); #déclaration tableau vide (@)
$date_new=0; ##déclaration date new
$date_old=0; #déclaration date old
$seuil_log_alert=200; #déclaration d'un Seuil d'alerte du log à partir de 200 lignes
$seuil_log_defense=200; #déclaration d'une reaction du log à partir de 200 lignes
$resultat=""; #déclaration variable scalaire et affectation à vide
@interdit_jours=(0,6); #jours où il ne doit pas y avoir de l'activité
@interdit_heures=(21,22,23,0,1,2,3,4,5,6); # heures où il ne doit pas y avoir de l'activité
############################ DECLARATION DES FONCTIONS ############################
sub DateLogToTimestamp{ #FONCTION qui recupere la date et l'affiche
my ($Sdate)=@_; # crée une variable de type tableau
my $M=substr($Sdate,0,3);
my $D=substr($Sdate,4,2);
my $h=substr($Sdate,7,2);
my $m=substr($Sdate,10,2);
my $s=substr($Sdate,13,2);
$date_new=timelocal($s,$m,$h,$D,$Tdate{$M},2012); #formate la date sous la forme seconde/minutes/Heures/...
}
sub VerifOrderDate{ #verifie que la date new est plus recente que la date old
if($date_new<$date_old){# si date_new inférieur à date_old, on affiche : erreur
$resultat.="\n!!erreur chronologie date ligne ".$num_ligne;
}
}
sub BloquerSrcAttaque{ #Blocage d'une attaque
if($ligne=~ /SRC=(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/){ #Recherche de l'adresse IP SRC
my $ip=$1.".".$2.".".$3.".".$4; #Recuperer les blocs de adresse
if(!grep {$ip} @liste_ip_bloquee)#Verifie si l'IP a deja ete bloque
{
unshift(@liste_ip_bloquee,$ip);
$resultat.= "\nIP DROPEE:".$ip;
system "iptables -A INPUT -s ".$ip." -j DROP"; #Ajout d'une ligne au parefeu
}
}
}
#compte le nombre log par second et suivant 1 seuil, alerte d'un problème et d'un autre, bloque l'adresse IP SRC
sub VerifierMoyenneLog{
if($date_new==$date_old){
$compt_ligne_second++;#on incrémente le compteur de lignes
}else{
$compt_ligne_second=0;
}
if($compt_ligne_second>$seuil_log_alert){
$resultat.="!!genration de log important ".$compt_ligne_second." la second a: ".$num_ligne."\n";
if($compt_ligne_second>$seuil_log_defense){
BloquerSrcAttaque(); #on appelle la fonction de blocage d'attaque.
}
}
}
#alerte en cas de connexion à des heures interdites
sub VerifierPlageConnexion{
my ($s,$m,$h,$j,$M,$A,$j_se,$j_an,$h_hiver)=localtime($date_new); #Verification des jours de connexion
if(grep {$j_se} @interdit_jours){
$resultat.="\nconnexion jour interdit ligne: ".$num_ligne;
}
if(grep {$h} @interdit_heures){#Verification des heures de connexion
$resultat.="\nconnexion heure ligne: ".$num_ligne;
}
}
#########################################- Début du script principal -########################################
#ouverture du fichier de log
open(file_log,"/var/log/syslog") or die ("impossible d'ouvrir le fichier");
#parcour du fichier
while(defined($ligne=<file_log>)){
$num_ligne++;
#supprimer le retour à la ligne en fin de ligne
chomp $ligne;
DateLogToTimestamp($ligne);#recuperation de la date en timestamp
my @mots=split(/ /,$ligne);#decoupage de ligne
VerifOrderDate($ligne);#Verifie que le evenement sont bien dans l'ordre chonologique
VerifierMoyenneLog();#alerte si le nombre de log genere ne depasse pas une limite
VerifierPlageConnexion();#repère les connexion hors plage horaire/journalière
$date_old=$date_new;#à la fin de la ligne, affecte à $date_old la valeur de $date_new
}
#########################################- Affichage du résultat -#########################################
print $resultat;
merci d'avance
je reviens vers vous après avoir un peu galéré, on l'a fait a plusieurs mais le prof le veut sous perl de ce que je vois c'est très proche du php.
Nous avons mis en place des VM (Virtualbox) un client (sous Ubuntu) un WEB-server (Ubuntu) ou j'ai mis le script et parfeu (IPtable)
Enfin pour le dernier TP nous avons mis en place "metasploit" sur le client et nous avons fait un scan de port vers le serveur personne ne sais faire dans la classe.....
[u]et je dois scripter la détection d'une expression régulière de scan de port et [/u][b]là je ne sais pas le faire [/b]
faille dans java...
[u]je vous mets le script :[/u]
[code]#!/usr/bin/perl -w
use Time::Local;
#Tableau de date
my %Tdate=("Jan"=>0,"Feb"=>1,"Mar"=>2,"Apr"=>3,"May"=>4,"Jun"=>5, "Jul"=>6,"Aug"=>7,"Sep"=>8,"Oct"=>9,"Nov"=>10,"Dec"=>11);
############################ DECLARATION DES VARIABLES ###########################
$compt_ligne_second=0; #déclaration variable Cmpt ligne second
$num_ligne=0;#déclaration variable num_ligne
@liste_ip_bloquee=(); #déclaration tableau vide (@)
$date_new=0; ##déclaration date new
$date_old=0; #déclaration date old
$seuil_log_alert=200; #déclaration d'un Seuil d'alerte du log à partir de 200 lignes
$seuil_log_defense=200; #déclaration d'une reaction du log à partir de 200 lignes
$resultat=""; #déclaration variable scalaire et affectation à vide
@interdit_jours=(0,6); #jours où il ne doit pas y avoir de l'activité
@interdit_heures=(21,22,23,0,1,2,3,4,5,6); # heures où il ne doit pas y avoir de l'activité
############################ DECLARATION DES FONCTIONS ############################
sub DateLogToTimestamp{ #FONCTION qui recupere la date et l'affiche
my ($Sdate)=@_; # crée une variable de type tableau
my $M=substr($Sdate,0,3);
my $D=substr($Sdate,4,2);
my $h=substr($Sdate,7,2);
my $m=substr($Sdate,10,2);
my $s=substr($Sdate,13,2);
$date_new=timelocal($s,$m,$h,$D,$Tdate{$M},2012); #formate la date sous la forme seconde/minutes/Heures/...
}
sub VerifOrderDate{ #verifie que la date new est plus recente que la date old
if($date_new<$date_old){# si date_new inférieur à date_old, on affiche : erreur
$resultat.="\n!!erreur chronologie date ligne ".$num_ligne;
}
}
sub BloquerSrcAttaque{ #Blocage d'une attaque
if($ligne=~ /SRC=(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/){ #Recherche de l'adresse IP SRC
my $ip=$1.".".$2.".".$3.".".$4; #Recuperer les blocs de adresse
if(!grep {$ip} @liste_ip_bloquee)#Verifie si l'IP a deja ete bloque
{
unshift(@liste_ip_bloquee,$ip);
$resultat.= "\nIP DROPEE:".$ip;
system "iptables -A INPUT -s ".$ip." -j DROP"; #Ajout d'une ligne au parefeu
}
}
}
#compte le nombre log par second et suivant 1 seuil, alerte d'un problème et d'un autre, bloque l'adresse IP SRC
sub VerifierMoyenneLog{
if($date_new==$date_old){
$compt_ligne_second++;#on incrémente le compteur de lignes
}else{
$compt_ligne_second=0;
}
if($compt_ligne_second>$seuil_log_alert){
$resultat.="!!genration de log important ".$compt_ligne_second." la second a: ".$num_ligne."\n";
if($compt_ligne_second>$seuil_log_defense){
BloquerSrcAttaque(); #on appelle la fonction de blocage d'attaque.
}
}
}
#alerte en cas de connexion à des heures interdites
sub VerifierPlageConnexion{
my ($s,$m,$h,$j,$M,$A,$j_se,$j_an,$h_hiver)=localtime($date_new); #Verification des jours de connexion
if(grep {$j_se} @interdit_jours){
$resultat.="\nconnexion jour interdit ligne: ".$num_ligne;
}
if(grep {$h} @interdit_heures){#Verification des heures de connexion
$resultat.="\nconnexion heure ligne: ".$num_ligne;
}
}
#########################################- Début du script principal -########################################
#ouverture du fichier de log
open(file_log,"/var/log/syslog") or die ("impossible d'ouvrir le fichier");
#parcour du fichier
while(defined($ligne=<file_log>)){
$num_ligne++;
#supprimer le retour à la ligne en fin de ligne
chomp $ligne;
DateLogToTimestamp($ligne);#recuperation de la date en timestamp
my @mots=split(/ /,$ligne);#decoupage de ligne
VerifOrderDate($ligne);#Verifie que le evenement sont bien dans l'ordre chonologique
VerifierMoyenneLog();#alerte si le nombre de log genere ne depasse pas une limite
VerifierPlageConnexion();#repère les connexion hors plage horaire/journalière
$date_old=$date_new;#à la fin de la ligne, affecte à $date_old la valeur de $date_new
}
#########################################- Affichage du résultat -#########################################
print $resultat;
[/code]
merci d'avance