La gestion de la protection dans des applications WinDev
Date de publication : 09 Septembre 2009 , Date de mise à jour : 09 Mai 2009
Par
Emmanuel Lecoester
Francis Morel
I. Les différents niveaux de protection
I-A. Confidentialité des applications et des données
I-B. Protection contre les utilisations illicites
I-C. Intégrité des données
II. Confidentialité des applications et des données
II-A. Historique - Protection des fichiers HF sous Windev 5.5
II-B. Historique - Protection des Exécutables
II-B-1. Windev 7 et suivantes
II-B-2. Depuis WinDev 11
II-C. Protection des fichiers HF avec WinDev
II-C-1. Mot de passe sur l'analyse
II-C-1-a. Synthèse : Mettre un mot de passe sur l'analyse
II-C-2. Mot de passe sur les fichiers HyperFileSQL
II-C-3. Cryptage des fichiers HF
II-C-3-a. Synthèse : Protéger un fichier HyperFileSQL
II-C-3-b. Conseil : Choix des mots de passe
II-C-4. Modification des mots de passe HyperFileSQL
II-C-4-a. Synthèse : Modification du mot de passe par WDOUTILS
III. Vulnérabilité des données et applications
III-A. Les DLL de Windev
III-B. Le point faible : les DLL de Windev
III-C. La suppression des points faibles
III-D. Composant DataProtect
III-D-1. II-D-1. Synthèse : Mise en oeuvre de DataProtect 1.14
I. Les différents niveaux de protection
I-A. Confidentialité des applications et des données
Pour s'assurer de la confidentialité des données, il faut :
-
qu'intrinsèquement le contenu des fichiers HyperFileSQL soit inaccessible, par quelque moyen (WDMAP,
Editeur hexa...) que se soit,
-
que l'application soient suffisamment protégée pour empêcher la découverte du mot de passe utilisé en
interne.
I-B. Protection contre les utilisations illicites
Une application protégée contre des utilisations illicites est caractérisée par une utilisation limitée:
-
à un mode particulier (démonstration par exemple)
-
à un ou plusieurs utilisateurs donnés
-
à un nombre d'exécutions spécifiques
-
à une date limite d'utilisation
-
à une version particulière
-
...
I-C. Intégrité des données
L'intégrité de la base de données, des liaisons... et le respect de ces règles par le développeur, l'utilisateur
et l'application elle-même, bien que liée à la sécurité des données, ne fait pas partie de ce document.
II. Confidentialité des applications et des données
Pour constater les évolutions de Windev 7 et suivant un petit retour en arrière sur Windev 5.5 s'impose.
II-A. Historique - Protection des fichiers HF sous Windev 5.5
Bien que l'aide recommande d'utiliser 4 caractères minimum pour les mots de passes, le stockage dans
le fichier HF est fait sur 2 octets, et encore sur chacun des ces octets seuls les codes 0x00 à
0x7f (127) sont utilisés. Soit au mieux 16129 possibilités.
Dans ces conditions un algorithme simple en recherche par force brute est quasi-instantané.
La protection des fichiers HyperFileSQL sous Windev 5.5 est donc totalement inopérante. L'utilisation
de ces fichiers au format HF5.5 est donc à proscrire pour les données sensibles.
II-B. Historique - Protection des Exécutables
Toujours dans Windev 5.5, un simple éditeur hexadécimal permet de visualiser quantité d'informations
textuelles de la bibliothèque. Tous les objets contenus dans la WDL sont clairement identifiables
et pour chacun, tous les constituants sont aussi visibles.
C'est d'ailleurs ce qui a permis la création d'outils comme WDL.EXE, qui à partir d'une bibliothèque
WDL, reconstituait toutes les fenêtres, images, classes, procédures....
Pour peu que "Supprimer le code source à la compilation" n'ai pas été coché lors de la création, les
objets reconstitués contenaient aussi le code source de l'application, sinon seul le Pcode créé
était présent.
II-B-1. Windev 7 et suivantes
Heureusement depuis Windev 7 les choses ont bien changés.
-
L'entête des fichiers HF n'est plus limitée en taille et les informations de protection (mots de passe
et cryptage), sont stockées cryptées en quasi totalité.
-
La bibliothèque WDL est maintenant cryptée/compactée et même s'il était possible de la décrypter, le
code source n'est plus jamais inclus. Seules quelques images restent accessibles en natif.Toutefois,
dans certaines versions de Windev, l'inclusion des codes nécessaires à l'utilisation de "Etat
et Requêtes" laissait, de façon incompréhensible, quelques informations textuelles dans le code
de la WDL, voire même une partie de code source de l'initialisation du projet.Un exécutable windev
est ainsi comparable à un code obfusqué (impénétrable), même l'utilisation d'un désassembleur
ne permet pas la compréhension du code.En fait comme pour un programme obfusqué, la partie principale
du code doit d'abord passer par une phase de décompression, de décryptage et d'interprétation
avant d'être exécutée. Seule la partie lanceur de Windev est "compréhensible" (en assembleur)
dans un débogueur.
II-B-2. Depuis WinDev 11
On peut ainsi, en première approche, raisonnablement penser que les applications Windev et les fichiers
HyperFileSQL 11, 12 14 sont protégés efficacement, à condition de respecter certaines règles, objet
de ce document.
II-C. Protection des fichiers HF avec WinDev
Actuellement il est possible de définir 3 types de protection dans HyperFileSQL
-
Mot de passe sur l'analyse
-
Mot de passe sur les fichiers HyperfileSQL
-
Cryptage des fichiers HyperFileSQL
II-C-1. Mot de passe sur l'analyse
Cette protection à un double intérêt :
-
Eviter toute modification de l'analyse par une personne non autorisée (mot de passe en édition)
-
Empêcher son utilisation dans une application non autorisée (mot de passe en exécution)
Par contre du fait de l'ouverture automatique de l'analyse associée à une application, elle n'a
aucun intérêt pour assurer la confidentialité des données sans précaution supplémentaire.
Il faudrait ainsi utiliser HfermeAnalyse() ou équivalent puis HouvreAnalyse() dans le projet.
La protection de l'analyse par un mot de passe en exécution peut être fait directement lors de la création
(étape 2) ou après création dans l'onglet "Détail" de sa description.
Pour éviter les demandes systématiques à chaque lancement du mode test ou lors de la génération de l'exécutable,
le mot de passe en exécution peut être renseigné dans l'onglet "Analyse" de la description du projet.
|
En remplissant ce champ le mot de passe de l'analyse ne sera plus demandé ni en mode test, ni EN MODE
EXECUTION. Il est écrit crypté dans l'exécutable.
|
II-C-1-a. Synthèse : Mettre un mot de passe sur l'analyse
-
Projet > Charger l'analyse
-
Analyse > Description de l'analyse... > Onglet Détail
-
Mot de passe éditeur (ouverture de l'analyse sous éditeur)
-
Mot de passe exécution (ouverture de l'analyse en exécution avec HOuvreAnalyse ou WDMAP)
-
Projet > Description du projet > Onglet Analyse
-
Mot de passe (aucun mot de passe ne sera alors demandé lors de l'exécution)
II-C-2. Mot de passe sur les fichiers HyperFileSQL
Le mot de passe d'un fichier HyperFileSQL est défini dans le code par programmation avec les fonctions
HPasse(), HCréation() et HcréationSiInexistant().Il n'est pas possible de définir directement un
mot de passe dans l'éditeur pour un nouveau fichier.
Il n'est pas modifiable par programmation, pour un fichier existant
Le mot de passe est demandé lors de la modification automatique (par WdModfic) ou lors de l'ouverture
par WDMAP.
Utilisé seul (sans cryptage) le mot de passe d'un fichier n'est d'aucun intérêt vis-à-vis d'une protection
des données. En effet le contenu en clair est visualisable avec un simple éditeur hexadécimal.
II-C-3. Cryptage des fichiers HF
-
Le cryptage des fichiers HyperFileSQL est défini dans l'éditeur d'analyse, pour chaque fichier dans l'onglet
détail de la description du fichier lui-même.
Ce cryptage peut être spécifié sur les données elles-mêmes, sur les index et sur les fichiers de mémo.
Trois algorithmes en 128 bits sont proposés :
-
Cryptage rapide optimisé sur 128 bits
-
Cryptage RC5 sur 12 boucles
-
Cryptage RC5 sur 1- boucles
Le cryptage obtenu est natif, indépendant du mot de passe (voir aide HPasse).
Aucune clé n'est demandée pour effectuée ce cryptage (probablement inscrite dans l'entête).
Comme pour le mot de passe, utilisé seul ce cryptage n'est que d'un intérêt limité, le fichier est effectivement
crypté mais visible dans WDMAP (ou tout appli WD pouvant ouvrir le fichier).
Il est donc indispensable pour assurer la confidentialité des données d'activer le cryptage des
données, des index et mémo ET d'ouvrir le fichier à l'aide d'un mot de passe.
Pour permettre la modification automatique des fichiers ainsi protégés, il faut aussi cocher "Activer
la sécurité renforcée".
II-C-3-a. Synthèse : Protéger un fichier HyperFileSQL
-
Projet > Charger l'analyse
-
Structure de fichiers > Description > Onglet Détail
-
Sélectionner le fichier à protéger
-
Protection des données, activer le Cryptage (128 bits, RC5 12 boucles ou RC5 16 boucles)
-
Cocher activer la sécurité renforcée
-
Dans le code (de préférence pas le code du projet) ouvrir les fichiers HyperFileSQL par
-
HcréationSiInexistant("*","motdepasse") ou Hcréation("*","motdepasse") ouutiliser Hpasse("*","motdepasse")
-
Analyse > Génération pour régénérer l'analyse si nécessaire
II-C-3-b. Conseil : Choix des mots de passe
-
Utiliser au minimum 8 caractères.
-
Utiliser des lettres (mots de passe insensibles à la casse) ET chiffres ET caractères spéciaux.Le mieux
consiste même à utiliser des codes non imprimables.
-
Eviter les mots courants issus des dictionnaires, préférer une mini phrase.
-
Construire le mot de passe, plutôt que d'utiliser une chaine constante.En effet après l'interprétation
du Pcode les chaines sont visibles clairement à l'aide d'outils d'exploration de la mémoire.
II-C-4. Modification des mots de passe HyperFileSQL
Il n'existe pas de possibilité directe de modification du mot de passe d'un fichier HF que celui-ci ait
été mis dans le code ou modifié préalablement lors de la modification automatique du fichier.
Dès que le fichier est crée, pour modifier ou supprimer le mot de passe il faut :
-
soit changer le mot de passe lors de la modification automatique des fichiers (comme indiqué dans l'aide
à HPasse)
-
soit utiliser le composant de la LST 64 "WD ChangeMotDePasse"
-
soit écrire une procédure interne ou un composant, qui à l'aide des fonctions HAlias et HCopieEnregistrement
effectue le transfert d'un fichier à un autre
II-C-4-a. Synthèse : Modification du mot de passe par WDOUTILS
-
Projet > Charger l'analyse
-
Structure de fichiers > Rubriques
-
Modifier la taille d'une rubrique existante ou ajouter une rubrique bidon
-
Analyse > Génération pour régénérer l'analyse
-
Lors de la modification Automatique HyperFileSQL (par WDOUTILS)
- Cocher (ou ajouter si besoin) l'emplacement de recherche des fichiers à modifier
- Cocher les fichiers à modifier dans la liste proposée
- Valider éventuellement la sauvegarde proposée
- Indiquer pour chaque fichier l'ancien mot de passe
- Cocher "Je veux saisir ou changer les mots de passe"
- Cocher chaque fichier et indiquer le nouveau mot de passe à utiliser
-
ValiderPenser à changer le mot de passe dans votre code
III. Vulnérabilité des données et applications
Intrinsèquement les fichiers HyperFileSQL peuvent résister correctement à une attaque par force brute,
et disposent ainsi à première vue, d'une sécurité satisfaisante.
Le code généré constitué par la bibliothèque WDL compressé et crypté est difficilement interprétable,
même avec un désassembleur-débogueur.
Le point faible reste cependant les DLL associées indispensables au bon fonctionnement de l'application.
III-A. Les DLL de Windev
L'examen de ces dll, avec un simple éditeur hexadécimal révèle quantités d'informations textuelles interprétables
susceptibles d'être utilisées pour attaquer l'application.
En particulier, comme l'illustre l'image précédente, l'identification des fonctions et des points d'entrée
est rendue aisée par la proximité des noms des fonctions et des adresses mémoires correspondantes.
Muni de ces informations et d'un simple débogueur il est relativement aisé d'obtenir les paramètres des
fonctions de composante (les fonctions du WLangage). En particulier, illustré ici sur la fonction
HPasse() un point d'arrêt placé au bon endroit donne accès immédiatement au mot de passe du fichier
(ici "FMLPASSWD" pour le fichier "FichPass3") quel qu'en soit la complexité.
Il existe même aujourd'hui, au moins une application "Hyper File Password Recovery Tool" (construite
avec Windev) qui automatise tout ce processus et permet de retrouver les mots de passe perdus à
condition de disposer de l'application.
III-B. Le point faible : les DLL de Windev
Comme constat de cette analyse, on s'aperçoit que quelle que soit la base de données utilisée, pour casser
la protection (mot de passe, cryptage...) d'une application Windev et accéder ainsi aux données
sensibles il suffit :
-
d'avoir accès aux fichiers de la base de données
-
d'avoir le fichier EXE ou WDL qui réalise le traitement à intercepter
-
que le mot de passe (ou code de cryptage) soit statique (indépendant du Pc, de l'utilisateur)
-
que l'exécutable ne soit pas protégé du débogage
-
d'avoir la possibilité d'utiliser une session de débogage
Les Dll de Windev 14 semblent déjà un peu mieux protégées et ne permettent pas, simplement, le fonctionnement
en mode pas à pas des décompilateurs / débogueurs.
Toutes les solutions qui permettent de supprimer une ou plusieurs de ces conditions contribueront
à la protection des données sensibles de l'application.
III-C. La suppression des points faibles
Ainsi parmi les solutions disponibles pour assurer la confidentialité des données on pourra donc :
-
utiliser une application client/serveur ou les fichiers HyperFileSQL sont dans des dossiers inaccessibles,
protégés en lecture,
-
protéger l'exécutable contre les utilisations non autorisées,
-
utiliser des mots de passe dynamiques construits à partir d'informations sûres comme les caractéristiques
du PC, de Windows, des disques, de l'adresse MAC...
-
intégrer un dispositif anti-débogage dans l'exécutable, pour empêcher l'utilisation conjointe d'un débogueur
et le lancement par d'autres modules que Windows lui-même.
Pour être efficaces ces solutions doivent faire l'objet d'une attention toute particulière et ne peuvent
aisément être décrites ici.
Aussi le chapitre suivant présente la solution anti-débogage DataProtect.
III-D. Composant DataProtect
Ce composant, intégrable simplement dans les applications Windev 11, 12 ou 14 a pour principal but de
restreindre (ou rendre plus difficile) les sessions de débogage, interdisant ainsi :
-
le lancement de l'application protégée par un autre module exécutable que Windows
-
la pose de point d'arrêt
-
la consultation de la mémoire durant le fonctionnement de l'application
Il a été écrit pour ne consommer que des ressources CPU limitées
-
30 ms en mode rapide
-
300 ms en mode complet
Il dispose aussi d'un générateur de mots de passe dynamiques pour construire une chaine à partir des
caractéristiques du serveur, de l'utilisateur, des disques...
III-D-1. II-D-1. Synthèse : Mise en oeuvre de DataProtect 1.14
-
Télécharger DataProtect (composant, documentation et exemple) et dezipper
-
Dans le projet Windev à protéger : Atelier > Composant > Importer un composant dans le projet >
A partir d'un fichier...Sélectionner DataProtect.wdi et valider
-
Dans l'éditeur, Entourer chaque opération critique par le code suivant :
-
Au besoin créer vos mots de passe dynamiques par le code suivant :
-
Créer l'exécutable en intégrant le composant Déployer
-
D'autres codes plus complets sont disponibles dans l'aide du composant
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2008 Emmanuel Lecoester. Aucune reproduction, même partielle, ne peut être
faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à
trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.