jeudi 29 décembre 2011

Les jeux sont faits

Depuis le 16 décembre 2011 est en ligne la version 1.0 du Référentiel d’exigences pour la labellisation des prestataires d’audit SSI - qui font partie des PSCO (Prestataires de Services de COnfiance, une notion introduite par le RGS). D’ailleurs l’article de l’ANSSI précise que le document actuel sera intégré à la prochaine version du RGS.

Ce document - qui avait déjà fait parler de lui - n’est pas applicable en l’état : on peut lire page 7 que: « La procédure d’évaluation de la conformité des prestataires d’audit aux règles du Référentiel qui leur sont applicables fera l’objet de documents complémentaires ».

Néanmoins le document existant mérite d’être étudié, car il est appelé à devenir une référence dans les futurs appels d’offres de l’administration – du moins si un nombre suffisant d’acteurs jouent le jeu, puisqu’on peut lire sur le site de l’ANSSI que : « Les autorités administratives peuvent utiliser ce référentiel, en totalité ou en partie, dans les cahiers[1] des charges de leurs appels d’offres de prestations d’audit. Une fois le nombre de qualification de prestataire d’audit suffisant, elles pourront également requérir que l’audit soit réalisé par un prestataire qualifié ».

Que le lecteur se rassure : je ne vais pas me lancer dans une analyse différentielle ligne à ligne des versions 0.9 et 1.0 du même document, mais plutôt jeter quelques bouteilles dans l’océan qui me sépare de l’administration.

Premier point qui me fait chaud au cœur : la page 10. Oui, vous ne rêvez pas, le terme « ingénierie inverse » fait partie des compétences nécessaires au pentester. C’est une révolution de palais – ou une facétie de l’éditeur, car ce terme n’apparaît plus en page 21 (tous les audits applicatifs nécessitent d’avoir accès au code source) ni en Annexe B (dans la liste des compétences techniques).

Deuxième point notable : il n’est plus nécessaire de savoir tout faire. Un prestataire peut être certifié sur tout ou partie des périmètres suivants :
•    Audit d’architecture
•    Audit de configuration
•    Audit de code source
•    Test d’intrusion
•    Audit organisationnel

Il est précisé toutefois page 7 qu’un prestataire ne peut pas être certifié uniquement sur le test d’intrusion ou l’audit organisationnel : « une telle activité étant jugée insuffisante si elle est menée seule ». Voilà qui risque d’éliminer un certain nombre de micro-entreprises … a contrario, j’en connais d’autres qui doivent jubiler devant une définition aussi proche de leur activité – il ne manque qu’une exigence sur les compétences juridiques et/ou CNIL pour éliminer le peu de concurrents encore en lice.

Le document se prononce également sur le délicat sujet du social engineering : on peut lire page 14 que les tests doivent être conduits « dans le respect des personnels ». Ce sujet épineux avait déjà beaucoup agité la Fédération des Professionnels du Test d’Intrusion – lorsqu’elle existait.

Enfin le document donne en page 12 la réponse à la sempiternelle question : « qu’est-ce qu’un ancien hacker » ? Dormez tranquilles : « Le prestataire d’audit peut également demander au candidat une copie du bulletin n° 3 de son casier judiciaire ». Le principe de bon sens « pas vu – pas pris » continue donc de s’appliquer. Désolé pour les « hackers repentis » … Il faut dire que les prestataires de services auraient été victimes de concurrence déloyale s’ils ne pouvaient pas recruter d’anciens hackers comme l’ANSSI ;)

Pour finir, une nouvelle compétence a fait son apparition en page 10 : « L’auditeur doit disposer de qualités rédactionnelles et de synthèse et savoir s’exprimer à l’oral de façon claire et compréhensible, en langue française ». Moi qui était déjà favorable à la dictée lors des entretiens d’embauche, voilà désormais qu’il va falloir introduire le PowerPoint Karaoké … ce qui risque d’être autrement plus sélectif que le challenge SSTIC !

Pour conclure, il est encore difficile de dire où tout cela va nous mener. Quels vont être les critères techniques d’évaluation des prestataires, particulièrement dans des sciences molles comme l’audit organisationnel ? Qui va faire passer les certifications ? Des sociétés privées mandatées par l’ANSSI ? Y aura-t-il un QCM ? Sera-t-il possible de tricher ? Et surtout : est-ce que les prestataires vont se ruer vers la certification ?

L’expérience de la CSPN semble montrer que le ratio complexité/intérêt s’est avéré trop élevé pour les prestataires d’audit comme pour les éditeurs de logiciels.

Même si ce référentiel va s’imposer de lui-même pour la prestation de service aux administrations, il n’est pas dit qu’il connaisse le même succès dans le domaine des prestations privées … surtout si un standard ou une norme - américaine ou internationale - apparaît d’ici là !

PS. Bonne année à tous ! Et oui, j’ai pris la résolution de bloguer plus en 2012 :)

[1] Je me suis permis de corriger une typo ici, car les correcteurs orthographiques Microsoft sont notoirement meilleurs que leurs équivalents Open Source ;)

jeudi 9 juin 2011

Yahoo! (ou Android ?) #fail

Un micro-post pour faire suite à mon intervention au SSTIC (et dissiper les malentendus lus sur Twitter).

L'application "officielle" Yahoo! Mail pour Android communique périodiquement en HTTP avec "controller.php" ... et fait fuir le cookie de session au passage.

A ne jamais utiliser sur un WiFi non protégé, donc.

vendredi 3 juin 2011

Challenge #fail

Je ne parle pas du Challenge SSTIC évidemment, qui était encore une fois de très bonne facture (félicitations aux gagnants … et aux organisateurs).

Je parle plutôt du Challenge iAWACS/RSSIL. Enfin le challenge officiel, pas celui qui consiste à pirater des sites Internet en live et pouvoir rentrer chez soi tranquillement.

Le principe de ce challenge est simple: deux fichiers chiffrés avec un algorithme “maison” sont publiés. La première personne capable de produire les fichiers source gagne 3000€.

Bien entendu, afin de respecter le principe de Kerckhoffs, l’algorithme utilisé a également été publié. Le challenge consiste donc à cryptanalyser cet algorithme. Ou plutôt devrait consister.

En effet, une lecture attentive des sources permet d’identifier la séquence de code suivante:

PUNCT_CONC_CODE * generateCode()
{
(...)
  now = time(NULL);
  while(now == (time_t)(-1)) now = time(NULL);
  srand(now);

(...)

 

Et dans le programme de test:

aKey->INIT1 = (unsigned long int)((float)(0xFFFFFFFFL) * alea());
aKey->INIT2 = (unsigned long int)((float)(0xFFFFFFFFL) * alea());
aKey->INIT3 = (unsigned long int)((float)(0xFFFFFFFFL) * alea());
aKey->INIT4 = (unsigned long int)((float)(0xFFFFFFFFL) * alea());

 

Sachant que la définition de la macro alea() est plutôt simple:

/* alea(): a random float in [0, 1]      */
#define alea() (rand()/(RAND_MAX + 1.0))

 

Le lecteur averti aura remarqué que la simple connaissance du time() – en secondes - à l’instant de la génération du fichier permet de casser entièrement le challenge. Même en visant large - disons 1 an – la complexité calculatoire reste donc inférieure à 225.

Je ne cours pas après l’argent, mais 3000€ en 10 minutes reste une affaire rentable :) Toutefois les deux fichiers fournis présentent un entête qui ne semble pas provenir de la librairie fournie par l’auteur.

$ xxd -l 64 challenge_lipperseus1
0000000: 4631 3232 3938 4630 3030 0067 51b3 df01  F12298F000.gQ...
0000010: b663 4b33 4565 0637 0c1f 7912 4e39 64e5  .cK3Ee.7..y.N9d.
0000020: 7f71 3678 5438 2276 3c34 4726 13b8 6b37  .q6xT8"v<4G&..k7
0000030: 3a4a d9c5 3f9c 6d43 ccc6 37f8 59ec 33df  :J..?.mC..7.Y.3.
$ xxd -l 64 challenge_lipperseus2
0000000: 4638 3230 3946 3030 3030 ad94 31b0 1ec1  F8209F0000..1...
0000010: 82c1 4de0 9c97 2797 52f1 458a 5b40 2fe7  ..M...'.R.E.[@/.
0000020: 09b8 fe85 2ea7 2f7a 186b 277f 65a4 5275  ....../z.k'.e.Ru
0000030: 6cfb 845d c6a7 32b3 9141 db25 3526 456b  l..]..2..A.%5&Ek

D’ailleurs, la librairie disponible en ligne ne compile même pas à cause d’une typo. Il est donc difficile de croire que les fichiers aient été “produit directement à partir de ce code source” ;)

Je m’enquière donc du programme original (principe de Kerckhoffs, toujours). Et visiblement je ne suis pas le seul à avoir remarqué le problème.

L’affaire aurait pu en rester là, mais l’auteur a cru bon de répondre. Et là, à défaut d’un gros chèque, je tenais un solide blogpost ;)

Je vous laisse lire la réponse en question, car chaque ligne est délectable. Vraiment. Tenter de la résumer en quelques lignes serait risquer d’en perdre le substantifique fiel. Sans parler du blogpost d’origine qui a lui aussi été édité (oh la vilaine pratique).

Dans tous les cas, en ce qui me concerne, je vais continuer à penser “que les attaquants feront toujours des erreurs exploitables”, puisque l’usage de rand() pose toujours autant de problèmes en 2011 qu’en 2008 … ou qu’en 2003.