Article - Article - Article - Article
   Des limites de la désactivation des contrôles windows...

 

Windows (et plus généralement l'ensemble des systèmes graphiques) repose sur un ensemble de messages que le système envoie en permanence aux différents contrôles ou widgets (bouton, fenêtres, zone d'édition...). Par exemple, lorsque vous cliquez dans la zone d'édition suivante : 

windows lui envoie un message : "l'utilisateur à cliqué avec le bouton gauche de la souris", soit plus exactement le message WM_LBUTTONDOWN. A charge du programme gérant le contrôle edit précédent d'effectuer les actions à entreprendre face à ce message (on parle d'évènement).
Le propos de cet article n'étant pas l'étude de ce mécanisme interne clef de Windows, pour appréhender ce sujet, se reporter à myCatch dont la fonction première est une réalisation didactique visant à creuser le domaine...

De la même manière, chaque fois que dans un programme Delphi vous écrivez une ligne de code du genre :

                        button1.enabled := false

 pour désactiver un contrôle, à l'exécution du programme, en pratique, Windows envoie un message particulier à button1 qui en réponse se désactive. Le principe n'est pas propre à Delphi, mais à l'ensemble des langages de programmation sous Windows.
L'erreur la plus fréquente consiste à penser que cela suffit pour désactiver une fonction d'un programme. En pratique, seule l'interface visuelle a été désactivée et un programme comme myCatch peut la réactivre par un simple "glisser-déplacer"...

Pour exemple, prenons le cas des policies Windows qui permettent de restreindre certaines fonctions aux utilisateurs. Das le cas ou la restriction fait complètement disparaître le contrôle, on ne peut rien faire par cette méthode. Si par contre la restriction se contente de désactiver l'accès graphique à une fonction, alors elle est totalement inutile. C'est le cas de la restriction qui "bloque" la modification du proxy dans les connections internet. Lorsque cette règle de blocage est activée, l'onglet connexions des propriétés d'internet explorer est accessible, mais dans les paramètres réseau :

la zone serveur proxy est désactivée :

La première étape consiste à sélectionner cette zone avec la cible de myCatch, et à la déplacer (les groupBox désactivées masquent les contrôles qu'elles contiennent, mais c'est un autre sujet)

Ensuite, il suffit de sélectionner les éléments que l'on veut activer avec la cible de myCatch, et de choisir "actif" dans la zone action de myCatch :

Dans ce cas par exemple, la modification devenue possible des paramètres du serveur proxy est complètement fonctionnelle.

 

Tout cela ne représente pas réellement une faille de sécurité dans la conception de Windows (et des autres GUI), mais nécessite tout de même que les programmeurs le prenne en compte dans la conception de leur programme.

L'état actif ou désactivé des contrôles graphiques doit être une représentation visuelle d'un état interne du programme. Chaque fois que c'est le contraire qui a été retenu, c'est à dire que l'état interne du programme est le résultat de son aspect visuel, un programme tel que myCatch permettra de passer outre les blocages.
Nombre de programmes (même les meilleurs) comportent des erreurs de conception de ce genre. Imaginons (! dans ce cas, de la fiction à la réalité il n'y a qu'un pas) un programme distribué sous forme "bridée" pour que les utilisateurs puissent le tester. Au démarrage de ce programme, une première fenêtre propose à l'utilisateur un bouton test (exécutant le programme en mode restreint), et une zone d'édition ou l'utilisateur peut saisir un numéro de licence qu'il a par exemple obtenu après achat du logiciel suite à sa période de test. La zone d'édition est "intelligente" et vérifie "à la volée" chaque caractère saisi dans la zone d'édition. Lorsque le numéro de licence saisi est correct, un bouton démarrer s'active automatiquement. Bien sûr, il y a le risque que quelqu'un essaie toute sorte de combinaisons, mais le numéro est si long qu'il vaudrait mieux jouer au loto. Pourtant, si le bouton démarrer ne revérifie pas le numéro saisi, alors myCatch le réactivera et tout fonctionnera comme si le numéro de licence avait été saisi de manière valide. A nouveau, pas vraiment de faille de sécurité...

Les exemples sont innombrables... Un logiciel d'antivirus par exemple bloque certaines modifications de ces paramètres au moyen d'un mot de passe afin que seul une personne habilitée puisse y accéder. Pourtant, une simple "case à cocher" (cf ci-dessous)

permet de définir s'il y a utilisation ou non d'un mot de passe. La case à cocher se désactive une fois le mot de passe saisi, et il faut normalement saisir le mot de passe pour pouvoir y accéder et la "décocher" (ce qui a pour effet de redonner accès aux paramètres). Un simple gliser-déplacer de myCatch permet de réactiver la case à cocher et par la même d'enlever le mot de passe (ou pire d'en saisir un nouveau).

Sous windows 2000, imaginons un poste avec un accès utilisateur et un mot de passe défini. Les policies permettent de bloquer la modification du mot de passe pour éviter qu' un utilisateur le modifie et que le prochain ne puisse plus y accéder. Sur ce poste, l'appui sur les touches CTRL+ALT+DELETE ouvrira la fenêtre habituelle dans un nouveau bureau vide, mais le bouton changer de mot de passe sera désactivé. myCatch à nouveau permettrait de le réactiver et par la même de modifier le mot de passe.  Un blocage important néanmoins freine myCatch, cette fenêtre s'ouvre dans un nouveau bureau (windows NT family gère en réalité plusieurs desktops dont le bureau system utilisé par exemple pour l'économiseur d'écran) dans lequel myCatch n'est pas présent...

Pourtant le puzzle de la connaissance sur les mécanismes de Windows NT s'assemble toujours un peu plus, et on trouve aujourd'hui  sur internet des morceaux de codes permettant de lancer des programmes dans le bureau system... La forteresse NT se fissure très très légèrement...

A suivre...