I. Présentation
Tbvirus est
entiérement écris en Perl. Son utilisation se limite aux 5 boutons de l'interface. Ces boutons, et
les fonctions qu'ils lancent, seront décris plus en
détails dans la section 3.
L'application doit être lancée par un double clic sur le
fichier "TBvirus.pl". Vérifiez au préalable que les
composants décris dans la section 2 "installation" sont bien
présents. En cas de test, il est possible de lancer l'application en mode
console. Pour celà, il faut se placer dans le répertoire
contenant l'application et lancer la commande "tbvirus.pl" (il est indispensable de lancer l'application DANS son répertoire car elle utilise des chemins relatifs).
Au lancement, il est préférable de
cliquer sur "Rapatrier les logs vers secsi" qui va
récupérer tous les fichiers manquants et les placer dans \\M001700\Secsi\Virus\Archivage\. Les logs ne seront jamais plus récent que J-1, c'est le fonctionnement normal de l'application.
Ensuite, il suffit de choisir le type d'exploitation, de renseigner les
champs de dates et de cliquer sur "Lancer".
L'utilisateur doit vérifier qu'il possède bien tous les
logs pour la période exploitée car, pour ce type
d'exploitation, l'application n'affichera pas d'erreur si des logs sont
manquants. Cette limitation permet en fait de choisir une
période très large pour exploiter toutes les
données disponibles sans en connaitre les limites de dates.
Chaque mois, il est possible de cliquer sur "Export automatique
mensuel" pour remplir automatiquement le Tableau de Bord Annuel.
Attention toutefois, cette fonction ne rapatrie pas les logs
automatiquement mais, à l'inverse de la fonction "Lancer", affiche une erreur si des fichiers de logs sont manquants.
Voici l'interface de TBvirus :
[1] Les champs de dates acceptent des dates au format JJ/MM/AAAA allant
du 1er janvier 2000 au 31 décembre 2025. En cas de mauvaise
saisie dans cette zone, un popup d'erreur s'affiche. Le popup est
toujours le même quelque soit l'erreur.
[2] Les trois boutons radio permettent de choisir le type de
données que l'on souhaite exporter. A noter que les listes de
virus sont liés soit à l'exploitation de la messagerie
soit à l'exploitation de Norton. Lancer une exploitation
uniquement sur les listes de virus produira une erreur.
[3] Le mode Debug permet de stocker un grand nombre d'information
relatives à l'exploitation des données dans un fichier
"debug_TBvir.txt" stocké dans le répertoire "logs" de
l'application.
[4] Les boutons de lancement sont décris dans la section 3 "détail des boutons".
[5] Cette liste contient les résultats de la messagerie MAAF
pour la période. Les boutons d'entete sont
cliquables mais les tris fonctionnent mal.
[6] Cette zone contient les totaux de la messagerie pour la période.
[7] Idem que 5 mais pour Norton (Données provenant de SAV Reporter)
[8] Idem que 6 mais pour Norton
Attention aux critères
d'exploitation de Norton : les lignes de type "Defwatch" ne sont pas
considérés, les doublons produits par SAV Reporter sont
détruits et le classement des machines infectées (agence,
siége et serveur) est fait sur l'adresse IP. Tous ces
paramètres sont gérés par le script sub_norton.pl
[9] Liste des virus provenant de la messagerie basée sur les
virus WebWasher (97% des infections) et sur Antigen quand la syntaxe le
permet.
[10] Liste des virus provenant de Norton.
[11] Fenetre d'information du status de l'application et des erreurs eventuelles.
II. Installation
Les pré-requis au fonctionnement de TBvirus.pl sont :
* Perl ActiveState
* Gtk2
* Glib
* Excel
Si l'application est portée sur un autre système que
Microsoft Windows, les exports vers les fichiers Excel ne
fonctionnerons plus car ceux-ci sont fait en utilisant les composants Object Linking and Embedding (WIN32::OLE).
Les fichiers nécessaires à l'installation sur un poste Windows sont disponibles dans \\M001700\Secsi\Virus\Script\Perl. Ils sont numérotés de 1 à 5 et il faut les installer dans l'ordre puis redémarrer le poste.
Le dernier fichier d'installation permet de
choisir le thème graphique des applications Gtk2. Outre les
aspects esthétiques, il permet de choisir les paramètres
de la police. Pour y accèder il faut aller dans "Démarrer->Programmes->Gtk2 Runtime->Change Gtk2 Appearance"
Le
Thème "Bluecurve-Blue" avec une police Arial 8 permet une bonne
lecture à l'écran en résolution 1280*1024.
III. Détail des boutons
Dans cette section, je vais décrire le fonctionnement de chacun
des boutons du point de vue du script, ceci afin d'en faciliter la
maintenance.
III.1 "Lancer"
La fonction "Lancer" est
décrite dans le script TBvirus.pl, comme toutes les autres
fonctions du niveau de l'interface, et est appelée par le bouton
"Lancer" à la ligne 222.
La fonction commence à la ligne 780. Voici les étapes qu'elle suit :
Si le mode "Debug" est activé, la fonction écrira un grand nombre d'informations dans le fichier Debug_TBvir.txt.
Les scripts sont tous présents dans le dossiers "sub". Leurs fonctionnement est relativement simple :
Nom du script |
Objectif |
Données en entrée |
Données en sortie |
Commentaire |
sub_antigen |
Calcul du nombre de mails infectés détectés par Antigen sur le serveur Lotus Notes; |
Tous les fichiers du répertoire \M001700\Secsi\Virus\Archivage\Antigen\ |
Production dans le répertoire ./logs des fichiers :
* ANTIGEN_log_date.txt (contenant le nombre de mails infectés par jour)
* ANTIGEN_log_sortie.txt (contenant la liste des virus) |
Fichiers sources journaliers, choix des fichiers à exploiter en fonction de la date contenue dans leurs noms |
sub_webwasher |
Calcul du nombre de mails
infectés détectés par Webwasher sur les proxy SMTP
192.168.237.13 et 192.168.237.3;
Listage des virus et du nombre de mails que chacun d'eux infecte |
Tous les fichiers du répertoire \M001700\Secsi\Virus\Archivage\Webwasher\ |
Production dans le répertoire ./logs des fichiers :
* WW_comptage_journalier_virus.txt (contenant le nombre de mails infectés par jour)
* WW_occurence_virus.txt (contenant la liste des virus et leurs occurences) |
Fichiers sources journaliers, choix
des fichiers à exploiter en fonction de la date contenue dans
leurs noms. Comme les fichiers sont datés à J+1, le
script inclus une manipulation des dates. |
sub_norton |
Calcul du nombre de fichiers infectés;
Calcul du nombre de postes infectés,
Classement géographiques des postes par leur @ IP;
Listage des virus et du nombre de fichiers que chacun d'eux infecte |
Tous les fichiers du répertoire \M001700\Secsi\Virus\Archivage\Norton\ |
Production dans le répertoire ./logs des fichiers :
* result_fichiers.csv (contenant le nombre d'infections par jours et le classement géographique)
* NORTON_detail.csv (contenant le détail des infections) |
Fichiers sources couvrant une
période. Il est possible qu'une journée ne soit pas
présente car aucun virus n'a été
détecté.
Le script manipule des donnés de SAV reporter en supprimant un certain nombre d'informations.
Il effectue un classement sur l'adresse IP de la machine infectée |
sub_result_mail |
Corrélation
journaliére des mails entrants, sortants, détectés
par WW et détectés par Antigen;
Calcul des totaux de la messagerie; |
* Tous les fichiers du répertoire \M001700\Secsi\Virus\Archivage\Report\
* Les résultats Antigen produit dans le fichier ".\\logs\\ANTIGEN_log_date.txt";
* Les résultats Webwasher produits dans le fichier ".\\logs\\WW_comptage_journalier_virus.txt"; |
Production dans le répertoire ./logs du fichier result_mail.csv |
Les fichiers Report contiennent une
ligne par jours. Pour chaque ligne du fichier on récupére
les résultats Antigen et WW correspondant. |
sub_listvirus |
Crée la liste des virus de la messagerie;
Crée la liste des virus Norton;
Crée les TOP5 des virus de la messagerie et des fichiers |
* Les résultats Antigen produit dans le fichier ".\\logs\\ANTIGEN_log_sortie.txt";
* Les résultats Webwasher produits dans le fichier ".\\logs\\WW_occurence_virus.txt";
* Les résultats Norton produits dans le fichier ".\\logs\\NORTON_detail.csv"; |
Production dans le répertoire ./logs des fichiers :
* liste_virus_mail.csv
* liste_virus_fichiers.csv |
Parcours du fichier WW et recherche
dans le fichier Antigen les mêmes virus. Ne prend pas les virus
Antigen non présents dans WW (Antigen a une syntaxe trop
aléatoire).
Pour Norton, c'est trivial. On parcours et on crée la liste. |
C'est script sont
exécutés dans l'ordre, les deux derniers étant
dépendants des résultats des trois premiers.
En cas de disfonctionnement, il faut exécuter l'application en
ligne de commande pour récupérer dans la fenêtre
DOS les messages d'erreurs. Le mode Debug permet également de
voir à quel moment s'arrête l'application.
La plupart du temps les erreurs sont
dues à une impossibilité d'accèder à un
fichier ou un répertoire !
La dernière étape
de la fonction "Lancer" est l'affichage des résultats dans la
fenetre de l'application. Cet affichage est effectué via une
simple lecture des fichiers produits par les scripts
détaillés ci-dessus.
Les fichiers
"result_mail.csv", "result_fichiers.csv", "liste_virus_mail.csv" et
"liste_virus_fichiers.csv", sont lues et les données
qu'ils contiennent sont stockées dans les variables tableaux (respectivement)
@DonneesMail, @DonneesFichiers, @DonneesVirusMail et
@DonneesVirusFichiers. Ces tableaux sont ensuite affichés dans
les zones correspondantes soit, toujours dans le meme ordre, [5], [7],
[9] et [10].
Les totaux de la messagerie sont récupérés à la fin du fichier "result_mail.csv"
(ils sont précédés de diézes). Les totaux
des fichiers sont calculés dans la fonction afficher_fichier().
Les résultats affichés
dans l'application permettent une visualisation pratique mais
imparfaite. Les tris fonctionnent mal et les copiés
collés sont impossibles. Toutefois les manipulations faites dans
l'interface n'influent pas sur l'export excel donc même une liste
mal triés sera exportée correctement.
III.2 "Rapatrier les logs"
Ce bouton appel une fonction
unique contenue dans le fichier
sub_rapatriement_logs.pl.
Cette fonction renvoie 0 si tout s'est bien passé et -1 en cas
de problème, ce qui permet d'afficher un status dans l'interface.
Ce script récupère les logs en différents points du réseau (
chemins UNC dans le code du script) et les ramènent dans le dossier Archivage de Secsi.
*Pour WW et Antigen, il ne raméne que les fichiers absent du dossier Archivage.
*Pour Report, il ramène un fichier si celui-ci est absent ou
s'il est plus gros que la version présente dans Archivage
*Pour Norton, c'est un peu plus complexe :
1. Recherche dans Archivage
qu'elle est la date des derniers logs récupérés
(appelée $last_date)
2. Se prépare a exploiter
le jour suivant $last_date jusqu'à J-1 (si $last_date n'est pas égal à J-1)
3. Effectue une requête
HTTP d'authentification sur
http://msus01.resmaaf.fr:8081/SAV%20Reporter
4. Requête GET pour la
génération d'un fichier "events.csv" sur la
période voulue
5. Troisième et
dernière requête : récupère le fichier
"events.csv" et le nomme
savreporter_<DEBUT>_a_<FIN>.csv
/!\ ATTENTION /!\
Le compte utilisé
pour se connecter à SAV Reporter est renseigné dans les
variables globales du script TBvirus.pl. Ce compte n'a accès
qu'à SAV Reporter et le script est stocké sur Secsi (donc
accès controlé) mais par principe c'est une faille et il
faut y faire attention !
Par chance, il est possible d'interroger directement SAV Reporter car
toute l'interface Web du logiciel est basée sur la
méthode GET, ainsi les requêtes sont codées
directement dans les URL. D'autres informations peuvent être
récupérées si besoin. La méthode que j'ai
utilisée pour effectuer cette exploitation est simple : surf
avec un navigateur tout en sniffant avec ethereal. Ainsi ethereal
récupère toutes les informations désirées
et en particulier les GET.
III.3 "Exporter les résultats"
Lorsqu'une
période à été exploitée, il est
possible d'exporter ces résultats vers un fichier Excel. Cette
fonction propose tout d'abord de choisir un emplacement pour le fichier
(c'est un peu buggé), puis propose d'exporter les graphiques au format PNG à coté du fichier Excel et appel ensuite le script sub_excel.pl.
Ce script prend en arguments toutes les informations nécessaires
au remplissage du fichier Excel. De fait, le passage de
paramètres est un peu brutal mais celà évite
d'avoir a re-parcourir l'ensemble des fichiers de résultats et
donc de perdre en temps d'exécution.
La génération du fichier Excel se fait grâce au module perl WIN32::OLE (déclaré au début de tbvirus.pl)
qui à l'avantage d'être simple et l'inconvénient
d'être très mal documenté... La principale source
d'information étant la documentation MSDN pour VB ! Il faut
ensuite transcrire la syntaxe VB en Perl, et donc faire beaucoup de
tentative infructueuses...
Au final, le script n'est pas très complexe.On crée un
objet d'application Excel qui sers à créer une variable
représentant le fichier Excel. Puis on spécifie le nombre
de feuille que contient le fichier (en l'occurence 3) et on nomme
chaque feuille. C'est ce qui est fait dans les lignes 30 à
43 du script.
Ensuite dans chaque feuille, on sélectionne des zones de
cellules et on copie des données à l'intérieur.
Pour générer un graphique on sélectionne une zone
de cellules et on passe à Excel les paramètres du
graphique... Tout cela est commenté dans le code.
Une limitation importante est que lorsqu'une feuille contient plusieurs graphiques (comme la feuille 3 des listes de virus),
ces graphiques sont superposés à la
génération et il faut donc les déplacer
manuellement pour pouvoir tous les visualiser.
III.4 "Export automatique mensuel"
"L'homme n'est pas fait pour
travailler, la preuve c'est que cela le fatigue"
... et pour limiter les risques
de fatigue prématurée, cette fonction est parfaite !
Chaque mois, elle stocke automatiquement dans un fichier annuel les
résultats du mois précédent, met à jour la
synthèse annuelle et les graphiques et génère les
TOP 5 des virus.
Comment ça marche ?
Le bouton "Export automatique mensuel" appel la fonction "export_auto"
à la ligne 1049 de TBvirus.pl. Les logs sont
systèmatiquement exploité à M-1, l'application
contrôle que le tableau de bord n'est remplie qu'une seule fois
par mois et produit une erreur dans le cas contraire (fonction "test_dejafait" du script "sub_export_mensuel.pl").
Afin de s'assurer que l'exploitation est correctement effectuée,
un contrôle de présence des fichiers de logs est
réalisé. La fonction "test_presencelogs" (toujours dans le même script) vérifie qu'il ne manque pas de fichiers pour le mois précédent, ce qui implique :
* Que les logs Norton, Antigen, Report et WW (pour 192.168.237.3
seulement) doivent être présent pour toute la
période du mois
* Que le contrôle n'est pas effectué pour le serveur WW
192.168.237.13 car ce serveur n'est pas systèmatiquement
solicité et ne produit pas forcément de logs.
En cas de fichier manquants, la liste est affichée dans l'interface (cela peut agrandir la fenêtre au delà des limites de l'écran) et est également présente dans le fichier DEBUG_Export_Auto_Mensuel.txt.
Si ce cas se produit, il faut rapatrier les logs et recommencer. Si
celà se produit toujours, c'est qu'il manque des logs et dans ce
cas il faut gérer la récupération des logs
manuellement (voir contacter les admins dans certains cas...).
Si tous les logs sont présents et que la période n'est
pas déjà exploitée, voici ce que fait le script :
Admettons que nous soyons en
février, il va falloir créer un nouveau tableau de bord.
La fonction qui fait cela est "new_TB" et est présente dans le script "sub_export_mensuel.pl".
Je ne détaille pas son fonctionnement car elle reprend les
commandes OLE de l'export excel classique et est clairement
commentée.
Elle crée un nouveau répertoire dans \\M001700\Secsi\Virus\ qui sera nommé Suivi_Virus_<année> et initialise dans ce répertoire un nouveau fichier Tableau_Bord_Virus_<année>.xls
qui est constitué de 13 feuilles: une feuille de synthèse
et 12 feuilles mensuelles. Tous les champs sont mis à blanc
(dates renseignées, valeurs a zéro).
Ensuite, le script appel simplement les mêmes fonctions que ce
que fait la fonction "Lancer". Les données exploitées
sont envoyés vers un fichier excel temporaire (via la fonction sub_excel), puis la fonction "sub_stocktb" ouvre ce fichier excel temporaire et copie les informations dans le tableau de bord annuel.
Les données sont copiés
dans la feuille correspondant au mois exploité puis la feuille
de synthèse est mise à jour. Cette mise à jour
implique un certain nombre de calcul pour la génération
des TOP 5 et la copie des informations dans les cases vides.
Les graphiques du tableau de bord étant créés
à l'initialisation du fichier, aucune mise à jour n'est
nécessaire. Celle-ci se fait automatiquement.
IIII. Configuration et maintenance
Chemin réseau
La principale tâche de configuration du logiciel est la
maintenance des chemins d'accès. Ceux-ci sont utilisés
directement dans les scripts, généralement dans les
premières lignes, et seront à éditer à
chaque évolution de l'architecture réseau. Comme il n'y a
pas non plus énormement de scripts, les modifications sont
rapides à reporter : une simple recherche sur le nom
réseau à modifier devrait suffir.
Un problème qui peut survenir concerne les droits d'accès.
Pour le rapatriement des logs, il faut avoir accès aux logs Antigen,
aux logs Webwasher et Report (à l'heure actuelle, ils sont au même endroit)
et à SAV Reporter. Comme les ressources réseaux sont amenées à bouger,
les problèmes de droits risques de survenir et dans ce cas,
l'application affichera dans la console un message du type "IMPOSSIBLE
D'OUVRIR LE REPERTOIRE XYZ".
Excel
L'export excel a été
testé sur Office XP et il fonctionne. Pour les versions
suivantes, je ne peux rien prédire.... A terme, une
intégration au format XML serait vraiment interessante.
Evolutions des applications
Si un format de log change suite a
l'évolution ou le remplacement d'un outil, il est possible
d'intégrer ces modifications simplement. Par exemple si McAfee
est remplacé par Sophos sur le serveur WebWasher, il y a de
grandes chances pour que le format des logs de WebWasher change. Dans
ce cas, il suffit d'adapter le script WebWasher pour s'assurer qu'il
produira toujours le même format de fichier de sortie. Il faut
faire attention à tout, y compris les séparateurs et la
syntaxe des noms de virus (je fais des découpages sur le point pour le TOP5).
Je reste disponible pour donner un coup de main si besoin ;=)
D'ailleurs, à ce sujet, je suis joignable par mail à l'adresse julien@linuxwall.info.
Comme je risque de bouger réguliérement, le meilleur
moyen de me contacter autrement que par mail est de
téléphoner au 02-47-29-60-10 chez Mr et Mme Alain VEHENT.