mercredi 6 juillet 2011

L'ESIEA présente deux équipes au concours SAUC-E 2011

Cette année à nouveau, le laboratoire ATIS participe au concours européen SAUC-E avec cette fois-ci deux robots aux concepts très différents : Aquatis (déjà venu l'année précédente) et Ryujin (le petit nouveau). Ce concours qui se déroule depuis l'année dernière sur une base de l'OTAN a pour but de concevoir des solutions de robots sous-marins automatisés (AUV) dans le but d'effectuer des missions diverses et variées comme le suivi d'une cible ou l'inspection d'éléments immergés.

Vous pouvez suivre la suite de leurs aventures sur le (tout nouveau) blog dédié au pôle ATIS : http://www.atis-lab.fr



Port où sont situées les petites tentes abritant les 10 équipes européennes

mardi 17 mai 2011

Specialized master in cyberwarfare

Hi

You are interested in pentesting or want to become a cyber warrior. Our specialized master is for you. Visit this link, read and enlist.

E. F.

mercredi 16 février 2011

Rapport d'Activité 2010

Bonjour,

le rapport d'activité de la partie Recherche du groupe ESIEA pour l'année 2010, est disponible en version pdf.

jeudi 18 novembre 2010

Vidéos Hack.lu 2010

Les vidéos des démos faites lors de la conférence Hack.lu 2010 au Luxembourg sont disponibles.

L'article technique et les slides de cette présentation sont sur le


Vidéo 1 (attaque via un document bureautique sur une clef USB)




Vidéo 2 (installation d'un cheval de Troie via un document bureautique)




E.F.

lundi 4 octobre 2010

Projet SECLamav


La première étape dans le projet SEClamav est achevée. La sécurisation du code source, l'ajout de certaines fonctionnalités sont achevées. Tout est décrit dans l'article de Linux Magazine numéro 131 (octobre 2010). Nous avons mis en ligne les données sur le lien. SEClamav devrait prochainement, dans une deuxième étape, incorporer de nouvelles fonctionnalités antivirales plus puissantes et inédites.

Ce post souhaite juste ajouter un nouvel élément de la première étape qui n'a pu faute de temps, être ajouté à l'article de Linux Mag. Nous avons identifié deux
nouvelles vulnérabilités qui ont fait de notre part, l'objet d'une remontée sur le site Bugzilla (alerte ici)

Le premier concerne la récupération des informations concernant le réseau (en fait au moment où on crée le serveur Clamd). ClamAV ne contrôle pas la valeur maximale du port pouvant être utilisée par un socket, de ce fait il est possible d'attribuer un port supérieur à 65535. Dans ce cas, ClamAV échoue sur l'ouverture du socket, mais ne le signale pas, ni par une erreur ou même un simple warning. De plus, le processus clamd reste actif mais on ne peut plus y accéder (visible par la commande: pidof clamd). Il peut même être exécuté plusieurs fois sans en avertir l'utilisateur. Cela permet donc une attaque par déni de service en utilisant volontairement une adresse hors limites des valeurs permises. Nous l’avons corrigé de la manière suivante en ajoutant dans le fichier clamd/tcpserver.c, la vérification suivante :

if(((unsigned int) optget(opts, "TCPSocket")->numarg <>
||((unsigned int) optget(opts, "TCPSocket")->numarg > 0xFFFF))
{
logg("!TCP: socket() error: invalid port\n");
return -1;
}

Toujours concernant la connexion au serveur clamd, dans le cas où une adresse IP est invalide (et non pas incorrecte), le serveur se lance quand même sans le signaler à l'utilisateur. Le problème redevient le même que pour le cas où le port est invalide. Nous avons donc modifié le fichier /clamd/tcpserver.c et ajouté un contrôle de validité des adresses IP :

/*** Socket modifications */
char * pch;
pch = strtok (optget(opts, "TCPAddr")->strarg,".");
while(pch != NULL)
{
if((int)strnlen(pch,4) == 4 )
{
logg("!TCP: socket() error: invalid address\n");
return -1;
}
if((atoi(pch) <> 255))
{
logg("!TCP: socket() error: invalid address\n");
return -1;
}
pch = strtok (NULL, ".");
}


if(((unsigned int) optget(opts, "TCPSocket")->numarg <>
|| ((unsigned int) optget(opts, "TCPSocket")->numarg > 0xFFFF))
{
logg("!TCP: socket() error: invalid port\n");
return -1;
}

/*** End of Socket modifications */

That's all folks (selon la formule désormais célèbre). Ces vulnérabilités ne seront corrigées que dans la version 0.96.4 de Clamav. SEClamav est donc en avance. Dans quelques jours, nous mettrons sous une forme plus accessible tous les codes sur code.google, projet SEClamav

E.F.

lundi 28 juin 2010

Crack-me ESET

La société ESET a récemment mis en ligne un concours à destination des étudiants (en vue d'un recrutement ou de l'implantation d'un labo en France ?).

Être l'un des premiers à résoudre le crack-me publié permettait de gagner un voyage dans le laboratoire de ESET, des chèques cadeaux ainsi que des abonnements d'un an à NOD32.


Pour résoudre le crack-me, il fallait retrouver 3 messages cachés dans l'exécutable, le dernier message donnant l'url permettant de valider les réponses trouvées.

Maintenant que le décor est planté, parlons de l'organisation de ce challenge et de l'épreuve en elle même.

Plutôt que de fournir une adresse à laquelle aurait été disponible le crack-me en temps voulu, ESET a fait le choix d'envoyer le lien ainsi que l'heure de début du challenge par mail.

Ainsi un mail reçu le 24 Juin nous informe que :

"L'heure exacte de lancement du concours te sera signalée par courrier électronique le 25 juin 2010."

Or aucun mail n'est envoyé le 25 ...

De plus l'équipe n'a pas répondu au mail que je leur ai envoyé pour changer mes informations personnelles.


Un lien a pourtant été donné sur twitter ainsi que facebook, hélas n'étant abonné à aucun des deux services, j'ai raté le début de l'épreuve. Il aurait été de bon alois d'envoyer l'heure de commencement comme prévu par mail ce qui m'aurait évité une heure de retard ...

Parlons maintenant de l'épreuve.

Le crack-me est compressé avec upx, aucune difficulté donc pour atteindre le code intéressant de l'épreuve en elle même.

Nous sommes ensuite accueillis par un message nous rappelant le but de ce concours ainsi que ses objectifs.


******************************************************************************
* ESET_crackme.exe - Concours *
* --------------------------- *
* *
* NOUS VOUS RAPPELONS QUE LE CONCOURS ESET N'A UNIQUEMENT POUR BUT DE : *
* *
* ■ DIVERTIR LES ETUDIANTS *
* ■ SUSCITER LEUR ESPRIT DE COMPETITION *
* ■ DEVELOPPER LEURS CAPACITES EN INFORMATIQUE *
* ■ EVALUER LEUR VITESSE DE REFLEXION ET D'EXECUTION FACE A UN PROBLEME *
* DONNE *
* ■ OPTIMISER LA NOTORIETE DE LEUR ETABLISSEMENT *
* ■ UTILISER CE CONCOURS COMME REFERENCE DE QUALITE POUR L'ETUDIANT *
* *
* Le Jeu " Crackme " est un concours dont l'objectif est d'analyser le code *
* source du programme " ESET_crackme.exe " afin de trouver les 3 messages *
* caches. Ce test d'entree est initialement soumis aux candidats qui *
* postulent au poste de developpeur chez l'editeur antivirus ESET. *
* *
* Soyez le plus rapide a analyser le code, reussissez a dejouer les pieges *
* et decodez l'ultime message ! *
* *
* Bonne chance ! *
******************************************************************************
Appuyez sur [ENTREE] pour continuer.


Une fois ce message passé on entre dans le "vif" du sujet.

Le crack-me contient trois petits anti-debuggers :
  • IsDebuggerPresent (émulé ou non) : ca se passe de commentaire,
  • OutPutDebugStringA("%s%s%s...") : faille du type format string bien connue qui permet de crasher ollydbg,
  • GetTickCount : permet de vérifier qu'aucun debugger ne tourne en vérifiant que le temps d'exécution ne dépasse pas une certaine limite hardcodée.
La vérification, elle se déroule en 3 étapes :

- Le crack-me compare la date courante avec une date inatteignable (33ème jour du 200ème mois de l'année 2077 ...) à l'aide l'API GetSystemTime et de 3 comparaisons :
00405CCE 66:813D 7076400>CMP WORD PTR DS:[407670],81D
00405CD7 0F85 44010000 JNZ
00405CDD 66:813D 7276400>CMP WORD PTR DS:[407672],0C8
00405CE6 0F85 35010000 JNZ
00405CEC 66:833D 7676400>CMP WORD PTR DS:[407676],21
00405CF4 0F85 27010000 JNZ

Si la date correspond bien, le premier message est déchiffré à l'aide de la chaine de caractères GetCommandLineA (c'est un bête vigenère qui est utilisé)

- L'heure courante est comparée à 12, (toujours à l'aide des informations récupérées à l'aide du premier appel à GetSystemTime) si elle correspond le second message est lui aussi déchiffré (à l'aide de la même fonction mais avec une clef différente : RegQueryValueExA)

- Enfin le crack-me vérifie que l'ordinateur est lancé depuis plus de 2 heures en comparant la valeur retournée par GetTickCount à 0x6DDD00 = 2*60*60*1000 et vérifie que la minute courante est égale à 30. Si ces conditions sont vérifiées, le dernier message est déchiffré, toujours de la même façon et à l'aide de la chaine CloseHandle.

Les messages déchiffrés sont alors affichés par le crack-me et le dernier nous donne l'url où entrer nos résultats.

Ce crack-me ne posait donc aucune difficulté pour qui avait déjà fait un minimum de reverse et s'apparente à un crack-me de niveau 1.5 (en étant gentil).

Les niveaux n'étaient absolument pas évolutifs, la difficulté pour trouver le premier message est strictement la même que pour les 2 autres messages.

De plus je fournis ici une description détaillée du crack-me mais il n'était absolument pas nécessaire de le faire, en traçant le crack-me et en forçant les sauts qui devaient l'être (et qui sautaient aux yeux) on arrivait très rapidement aux trois messages ...

La seule réjouissance de ce crack-me sont les petits easter egg qui sont présent un peu partout dans le code (BAD_FOOD-BAD_FOOD dans du junk, leet speak dans la pile, lien vers un fichier EICAR, fausses signatures de virus (pour bien montrer la supériorité de NOD32 qui ne fait pas de faux positifs contrairement aux autres "mauvais antivirus concurrents" ?)).

Ayant déjà eu l'occasion d'étudier un crack-me ESET bien plus amusant et résistant, je ne critique pas ici les compétences des développeurs ESET mais plutôt le fait qu'ils aient proposé un crack-me de très bas niveau en prenant les étudiants pour des incapables.

Ce qui devait être un concours, une série d'épreuves de difficulté croissante récompensant les meilleurs s'est révélé être une bête course de rapidité où la vitesse de téléchargement et la possession d'un compte twitter ont surement plus joué que les compétences en reverse.

Et ça, c'est dommage ...

Ce qui pose la question du but de ce challenge, s'agissait-il de trouver des personnes compétentes afin de leur proposer un travail, un stage ou plutôt de se faire une publicité facile auprès des futurs ingénieurs chargés de la sécurité des entreprises et donc de l'achat de solutions anti-virales ?

Au vu du ton utilisé ("NOD32 fait ami-ami avec les étudiants en sécu"), de la difficulté de l'épreuve, des fausses signatures virales et de la publicité qui a été faite autour de ce concours, il semble que ESET ait plus besoin d'ambassadeurs que de reverse engineers.

[ATIS] L’équipe Aquatis à la SAUC-E 2010


Après une inscription réussie au concours SAUC-E 2010, l’équipe Aquatis en a profité pour se réunir et arborer fièrement les couleurs de l’école ESIEA. A ce stade de l’avancement du projet, l’équipe fait un point sur les fonctionnalités et les moyens disponibles.


Du côté de l’électronique, le système de détection de l’inclinaison du sous-marin est au point et peut en donner un aperçu à l’aide d’une représentation 3D sur PC tandis que le bus CAN en est aux finitions. Alors que le pôle mécanique a réceptionné le tube central de la structure du sous-marin, qui était au coeur des préoccupations de l’équipe du projet depuis le début de l’année, le pôle informatique a pu en conséquence confirmer les dimensions du PC à intégrer dans le sous-marin. Pour ce dernier pôle, l’heure est à l’optimisation des algorithmes du chemin que le sous-marin devra prendre. Pendant ce temps, les membres du pôle électrotechnique dimensionnent les batteries et fabriquent la carte d’alimentation associée.

Vous pouvez suivre les aventures de l'équipe durant la semaine de concours à l'adresse : http://aquatis.esiea.fr.


L'équipe aquatis 2010 de gauche à droite et de haut en bas : Robin Vaquette, Laurent Morillon, Guillaume Darriet, Sébastien Vigo, Geoffrey Lafon, Nicolas Rousseau, Alexis Kolodziej, François Hoehl, David Leblanc, William Lourenco, Thomas Nokhamzon, Aymeric Barthaux-Palvin et Laurent Dupessey