Wednesday, May 19, 2010

Exception Culturelle

La derniere fois que je suis tombe sur du code promouvant l'exception culturelle Francaise, il s'agissait de cles DES specifiees en dur dans le Protected Storage. Cette fois-ci, on va regarder SChannel.

Un utilisateur averti pourra se demander pourquoi dans SChannel v5.1.2600.5834 (XP SP3 US plus ou moins a jour) on trouve la fonction IsSchEncryptionPermitted(), qui contient:

call ds:__imp__GetSystemDefaultLCID@0 ; GetSystemDefaultLCID()
cmp ax, 40Ch
jz short loc_767F41A7
push 0Ah ; cchData
lea ecx, [ebp+LCData]
push ecx ; lpLCData
push 5 ; LCType
push eax ; Locale
call ds:__imp__GetLocaleInfoA@16 ; GetLocaleInfoA(x,x,x,x)
test eax, eax
jz short loc_767F41A7
lea eax, [ebp+LCData]
push eax
call _MyStrToL@4 ; MyStrToL(x)
cmp eax, 21h
jnz short loc_767F41B8
loc_767F41A7: ; CODE XREF: IsSchEncryptionPermitted()+1Aj
; IsSchEncryptionPermitted()+2Dj 
and _g_ProtEnabled, 0FFFFFFFCh
mov _g_fFranceLocale, 1

Sauf que cette fois ci, le resultat n'est pas le meme. Si le Windows est francophone, on enleve les deux bits de poids faible de _g_ProtEnabled et on met a 1 une variable obscure.

Dans le code de SslReadRegOptions(), si _g_fFranceLocale est non 0, on ne prend pas en compte l'activation ou desactivation des protocoles specifies dans la base de registre, decrit dans la KB187498, si les bits de poids faible sont presents.

Les bits utilises pour l'activation des protocoles sont:
  • "Multi-Protocol Unified Hello\\Client": 80000000h
  • "Multi-Protocol Unified Hello\\Server": 40000000h
  • "PCT 1.0\\Client": 2
  • "PCT 1.0\\Server": 1
  • "SSL 2.0\\Client": 8
  • "SSL 2.0\\Server": 4
  • "SSL 3.0\\Client": 20h
  • "SSL 3.0\\Server": 10h
  • "TLS 1.0\\Client": 80h
  • "TLS 1.0\\Server": 40h

En conclusion, si je ne me suis pas plante, pas de drame - a part qu'un Windows francophone ne puisse pas faire de PCT du tout (client ou serveur). Ca m'aurait ete utile de savoir ca en 2004 pour l'exploit PCT Handshake...

Si quelqu'un veut confirmer, amusez-vous, je testerai sans doute dans la semaine pour verifier et mettrai a jour le post. Je n'ai pas d'explication au bannissement de PCT en France.

Et joyeux anniversaire a ma soeur!

2 comments:

Francis said...

Très intéressant ce blogue.
On trouve rarement des articles aussi technique en langue Française.

Bravo!

J'ajoute à mes favoris

sam280 said...

C'est en effet étrange d'interdire PCT 1.0 et en même temps d'autoriser TLS 1.0. Le même test (GetSystemDefaultLCID / GetLocaleInfo) était présent dans le kernel mais il a été désactivé fin '99 après la modification de la loi par Jospin. PCT 1.0 était déja obsolète à cette époque, donc c'est peut-être un simple oubli ?