TBvirus - 1.0






Documentation utilisateur et développeur


Julien VEHENT pour MAAF/DIT/PSQ/Securité
Juin - Août 2006



I. Présentation
II. Installation
III. Détail des boutons
    III.1    "Lancer"
    III.2    "Rapatrier les logs"
    III.3    "Exporter les résultats"
    III.4    "Export automatique mensuel"
IIII. Configuration et maintenance





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" (Voltaire)

                    ... 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.