Procédure de validation de filtre courriel
Dans le cadre d'un de nos mandats nous avons eu à tester un serveur filtre pour courriel.
Ce document contient des informations sur certaines méthodologie de test que vous avons utilisé.
Vérification des virus
Utilisé seulement eicar n'est pas représentatif de la réalité et utilisé de vrai virus dans un environnements non controlé est hors de question. Ainsi pour effectuer cette vérification nous avons programmer un pseudo générateur de virus utililisant la base de signature de l'antivirus ClamAV.
Extraction de la base de donnée
sigtool --unpack=/var/lib/clamav/main.cvd
Un fichier main.db devrait se trouvé le répertoire courant {{ -rw-r--r-- 1 fharvey staff 4170056 mai 18 10:08 ../main.db }}
mkdir ./virus
Fichier Generate_virus_signature.php
<?php
/**
* (C) Francois Harvey - SecuriWeb inc.
* GPL
*/
function hex2asc($myin) {
for ($i=0; $i<strlen($myin)/2; $i++) {
$myout.=chr(base_convert(substr($myin,$i*2,2),16,10));
}
return $myout;
}
$f = file('main.db');
foreach ($f as $virus) {
list($nom, $signature) = split('=', $virus);
$fout = fopen('virus/' . $nom . '.txt', 'w');
fwrite($fout, "......test..........");
fwrite($fout, hex2asc($signature));
fwrite($fout, "......test..........");
fclose($fout);
echo "Ecriture du virus $nom\n";
}
?>
Executer le script
php generate_virus_signature.php Ecriture du virus _0017_0001_000 Ecriture du virus _0017_0001_001 Ecriture du virus _0017_0001_002 Ecriture du virus _0017_0001_003 Ecriture du virus _0017_0001_004 ...
le répertoire devrait contenir des fichier .txt contenant des signatures de virus.
rw-r--r-- 1 fharvey users 79 mai 18 11:55 _0017_0001_000.txt -rw-r--r-- 1 fharvey users 80 mai 18 11:55 _0017_0001_001.txt -rw-r--r-- 1 fharvey users 80 mai 18 11:55 _0017_0001_002.txt
Créer un fichier d'avertissement msg.txt
ceci est un test de virus l'attachement ne contient que du data et la signature mais pas le virus
Script perl qui utilise MIME::Lite pour envoyer un fichier Auteur inconnu, modifier pour mes besoins
#! /usr/bin/perl
use MIME::Lite;
if ($#ARGV < 3) {
print "usage: $0 <to> <subject> <text file> <attachement file>\n";
exit( 1 );
} else {
$to = shift;
$subject= shift;
$text = shift;
$file = shift;
}
$msg = new MIME::Lite(
From => 'test_virus@example.com',
To => $to,
Subject => 'test de virus -' . $file,
Type => 'multipart/related');
$msg->attach(
Type => 'text/plain',
Path => 'msg.txt');
$msg->attach(
Type => 'text/plain',
Encoding => 'base64',
Path => $file);
$msg->send();
exit 0;
find ./virus -iname "*.txt" -ls -exec ./sendmail.pl [Adresse de destination] virus msg.txt {} \;





