Index

Vue d'ensemble

À partir de la version 3.6.0 du Wrapper, les éditions Standard et Professional permettent d'obfusquer les mots de passe ou les données sensibles afin de les stocker de manière plus sécurisée dans vos fichiers de configuration. L'obfuscation doit être distinguée du véritable chiffrement, mais elle offre un certain niveau de sécurité en masquant le texte ou le mot de passe réel et en rendant très difficile, pour un observateur occasionnel, de mémoriser la valeur encodée.

Lors du chargement de la configuration, le Wrapper décodera tous les jetons obfusqués et marquera comme sensibles les valeurs de propriétés où ils sont référencés. Une valeur de propriété marquée comme sensible sera traitée avec des précautions supplémentaires, d'une part en s'assurant qu'elle a été chargée depuis un fichier sécurisé, et d'autre part en s'assurant qu'elle n'est utilisée que pour l'usage auquel elle est destinée, sans divulgation en clair.

Afin d'exclure l'utilisation de propriétés dont les valeurs peuvent apparaître dans la console, les e-mails, les journaux, la ligne de commande, etc., seul un ensemble limité de propriétés est autorisé à contenir des jetons obfusqués dans leurs valeurs. L'utilisation dans les définitions de variables est également interdite afin d'éviter toute fuite vers l'environnement.

NOTE

Les propriétés autorisées à contenir des jetons obfusqués dans leurs valeurs sont limitées aux suivantes :

Une valeur de propriété contenant des données sensibles sera traitée avec les précautions de sécurité suivantes :

  • Les permissions du fichier contenant le texte sensible seront vérifiées et un accès en lecture restreint sera requis pour charger le fichier. Veuillez consulter cette page pour plus de détails.

  • Tout texte sensible sera masqué dans les journaux et remplacé par un masque composé d'un nombre fixe de caractères '*'.

  • La valeur de la propriété ne pourra pas être référencée dans la ligne de commande Java afin d'éviter une exposition en clair dans les outils de listage des processus tels que « Gestionnaire des tâches » (sous Windows) ou « ps » (sous Unix). Notez que wrapper.app.parameter.backend doit être défini à TRUE pour permettre aux données sensibles des paramètres d'application d'être transmises via le canal backend plutôt que par la ligne de commande.

Plusieurs méthodes sont disponibles pour encoder/obfusquer vos mots de passe. Pour certaines d'entre elles, une clé privée peut être utilisée. Le Wrapper fournit des commandes pour encoder vos données et générer des clés privées. Cette page décrit les options de chaque commande.

AVERTISSEMENT

Les méthodes d'obfuscation proposées par le Wrapper, ainsi que les mesures de sécurité associées décrites ci-dessus, sont principalement conçues pour empêcher la fuite de données sensibles en clair en dehors de l'application Java. En utilisant les propriétés wrapper.app.property.<n> ou en définissant wrapper.app.parameter.backend à TRUE, il est possible de transmettre en toute sécurité les propriétés système et les paramètres d'application à votre application Java. Cependant, gardez à l'esprit qu'une fois reçues par le code Java, ces valeurs seront stockées en clair dans les propriétés système ou dans un tableau de chaînes.

Veuillez prendre en compte les points suivants :

- Une personne qui entrerait en possession de vos secrets obfusqués (ou de vos fichiers de configuration) pourrait créer une simple application Java pour extraire les propriétés système, utiliser le Wrapper pour la lancer, et ainsi découvrir facilement vos mots de passe. Il est donc important que les fichiers de configuration du Wrapper contenant des données sensibles ne soient toujours accessibles qu'aux utilisateurs autorisés. C'est pourquoi le Wrapper vérifie les permissions des fichiers sensibles à chaque démarrage et fournit des indications sur la manière de les ajuster, mais c'est à vous de modifier effectivement les permissions des fichiers. Il est également recommandé d'utiliser un fichier de clé privée avec des permissions aussi restrictives que possible.

- Une personne ayant accès à votre machine pourrait utiliser un débogueur pour tracer la mémoire de votre application Java et découvrir les valeurs String où les mots de passe en clair sont stockés. Veillez toujours à exécuter votre application Java dans un environnement sécurisé.

Obfusquer les données

Compatibilité :3.6.0
Éditions :Édition ProfessionnelleÉdition StandardÉdition Community (non prise en charge)
Plateformes :WindowsMac OSXLinuxAlpine LinuxFreeBSDSolarisIBM z/Linux

La commande --cipher peut être utilisée pour encoder des mots de passe ou des données sensibles avec le Wrapper et générer la configuration « cipher » associée.

Pour spécifier exactement comment encoder vos valeurs, plusieurs paramètres sont nécessaires lors de l'utilisation de la commande --cipher. La section ci-dessous décrit comment configurer chaque paramètre, mais commençons par examiner l'apparence des valeurs encodées dans votre fichier de configuration. La syntaxe suivante est utilisée :

%zrmVK5-Zp7qHptL9Yu66qr|<cipher_name>%

  • « % % » sont les délimiteurs du jeton encodé,

  • « zrmVK5-Zp7qHptL9Yu66qr » est la valeur encodée,

  • <cipher_name> est un identifiant de la configuration utilisée pour encoder la valeur (voir ci-dessous).

L'encodage de la ou des valeurs peut être configuré avec l'ensemble de propriétés suivant.

  • wrapper.cipher.<n>.name : identifiant de la configuration d'encodage d'index <n>,

  • wrapper.cipher.<n>.method : méthode d'encodage (voir ci-dessous),

  • wrapper.cipher.<n>.private_keyfile : chemin vers la clé privée.

Certaines méthodes définissent une configuration par défaut, auquel cas les propriétés ci-dessus peuvent être omises. Ces configurations par défaut n'utilisent pas de clé privée personnalisée et <cipher_name> est identique au nom de la méthode.


Entrons maintenant dans le détail de l'utilisation de la commande --cipher.

« wrapper --help » affichera la sortie suivante, que nous expliquerons plus en détail ci-dessous :

  --cipher Obfuscate a password and generate a token along with wrapper.cipher.*
    properties that can then be used in the configuration file for added safety.
    The value to be encoded can be piped to Stdin of the Wrapper.  Otherwise, it
    will be prompted.
    The following arguments are available:
      --method <method name> One of the following methods:
          base64   : to encode in Base64
          base64url: to encode in the modified Base64 for URLs
          obf      : to generate a fixed obfuscated string
          robf     : to generate a random obfuscated string
      --name <cipher name> Optional cipher name. This argument is required when
        '--private_keyfile' is specified.
      --private_keyfile <file path> Optional path to a private key file
        (available for method 'obf' and 'robf').
      --encoding <utf8 or utf-8> Encoding to use when reading Stdin.
      --echo Echo the input to debug encoding issues (do not use with real
        passwords).
      --simple If specified, the output will only contain the obfuscated string.

Méthodes

Le paramètre --method est utilisé pour spécifier la méthode d'encodage.

Les méthodes suivantes sont disponibles :

  • base64 : encodage base64 standard

  • base64url : Base64 modifié pour les URL ('+' remplacé par '-', '/' remplacé par '_')

  • obf : méthode d'obfuscation propriétaire (la même entrée générera toujours la même sortie)

  • robf : méthode d'obfuscation propriétaire randomisée (la même entrée générera des sorties aléatoires, ce qui la rend plus résistante à la cryptanalyse)

NOTE

« base64 » et « base64url » sont des méthodes d'encodage publiquement connues. La valeur encodée est plus longue et plus difficile à mémoriser que le texte en clair correspondant. Cependant, une personne en possession de la chaîne encodée pourrait la décoder très facilement.

« obf » et « robf » ne peuvent pas être facilement décodés car les algorithmes utilisés ne sont pas publiquement connus. Pour une sécurité renforcée, une clé privée stockée dans un fichier sécurisé distinct peut également être spécifiée lors de l'encodage. Sans prétendre atteindre le même niveau de sécurité que les méthodes de chiffrement les plus robustes (AES, RSA, etc.), l'utilisation de « obf » ou « robf » en combinaison avec une clé privée offre une assez bonne protection de vos données.

Nom du cipher

Le paramètre --name est facultatif. Lorsqu'il est utilisé, il doit être suivi d'un identifiant de la configuration utilisée pour encoder les valeurs.

Ce paramètre est obligatoire si « --private_keyfile » est spécifié.

La valeur spécifiée sera utilisée pour définir la propriété wrapper.cipher.<n>.name. Par exemple, si --name obf1 est spécifié, la configuration suivante sera générée :

wrapper.cipher.1.name=obf1

Fichier de clé privée

Le paramètre --private_keyfile est facultatif. Lorsqu'il est utilisé, il doit être suivi du chemin vers un fichier de clé privée.

Ce paramètre ne peut être utilisé que si la méthode d'encodage est « obf » ou « robf » et si le paramètre --name est également spécifié.

Sans clé privée, l'encodage spécifié n'agit que comme une obfuscation, ce qui rend simplement difficile pour des observateurs indésirables de mémoriser les valeurs. Bien que l'obfuscation puisse suffire si votre fichier de configuration est bien protégé et édité de manière privée, la spécification d'un fichier de clé privée offre une sécurité supplémentaire. Le décodage nécessite alors ce fichier distinct dont le seul objet est de contenir la clé privée et qui n'a donc jamais besoin d'être ouvert ni modifié. Le fichier de clé doit toujours être stocké dans un emplacement sûr avec des permissions restreintes. Quiconque obtiendrait l'accès à votre clé pourrait facilement décoder vos mots de passe.

La valeur spécifiée sera utilisée pour définir la propriété wrapper.cipher.<n>.private_keyfile. Par exemple, « wrapper --cipher --method obf --name obf1 --private_keyfile ../conf/my_private_key » générera la configuration suivante :

wrapper.cipher.1.name=obf1
wrapper.cipher.1.method=obf
wrapper.cipher.1.private_keyfile=../conf/my_private_key

Sortie simple

Le paramètre --simple est un indicateur unique (sans valeur) utilisé pour générer une sortie contenant uniquement la valeur encodée.

Sans le paramètre --simple, la sortie ressemblera à ceci :

Encoded Token:
    %K401JeI7GaHRplWDz15c6hmXkKM_9CoFrAo8P|r1%

Configuration:
    wrapper.cipher.1.name=r1
    wrapper.cipher.1.method=obf
    wrapper.cipher.1.private_keyfile=mykey

Avec le paramètre --simple, la sortie ressemblera à ceci :

%K401JeI7GaHRplWDz15c6hmXkKM_9CoFrAo8P|r1%

L'utilisation du paramètre --simple est utile lorsque la sortie doit être utilisée par un processus automatisé ou transmise à une autre commande.

Par exemple, la commande ci-dessous encodera la valeur « mypassword » avec la méthode « obf ». La sortie du Wrapper sera transmise à la commande sed, qui remplaçera le ou les jetons « @pw1@ » par la valeur encodée.

Exemple : (sous Unix)

cat file_containing_password | ./wrapper --cipher --method obf --simple | sed -i "s/@pw1@/$(cat)/g" ../conf/wrapper-private.conf

Encodage

Le paramètre --encoding est facultatif. Il spécifie l'encodage à utiliser lors de la lecture de Stdin.

Si cette option n'est pas spécifiée, la page de codes ANSI sera utilisée sous Windows et l'encodage de la locale de la session en cours sera utilisé sous Unix.

Actuellement, seules les valeurs suivantes sont prises en charge :

  • default

  • utf8 ou utf-8

Exemple : (avec cmd.exe : lire la première ligne de input.txt en utf-8)

type input.txt | wrapper.exe --cipher --method obf --encoding utf8

NOTE

Dans les consoles PowerShell, la variable $OutputEncoding détermine l'encodage à utiliser lors de l'acheminement de données par tube vers des applications natives. Dans certains environnements, la valeur par défaut peut être ASCII, ce qui remplacerait tous les caractères non ASCII par des points d'interrogation. Lors de la lecture du contenu d'un fichier contenant des caractères UTF-8, assurez-vous que $OutputEncoding est correctement défini à « [System.Text.Encoding]::UTF8 ».

Exemple : (avec PowerShell : lire la première ligne de input.txt en utf-8)

$OutputEncoding = [System.Text.Encoding]::UTF8
Get-Content .\input.txt -Encoding UTF8 | .\wrapper.exe --cipher --method obf --encoding utf8

Écho

Le paramètre --echo est un indicateur unique facultatif (sans valeur) qui peut être utilisé pour afficher les données d'entrée reçues par le Wrapper avant qu'elles ne soient obfusquées. Cela est utile pour détecter les problèmes d'encodage.

AVERTISSEMENT

IMPORTANT : Cette option est disponible uniquement à des fins de débogage. Elle ne doit jamais être utilisée avec de vrais mots de passe, car elle provoque l'affichage de l'entrée en clair dans le terminal. Veuillez effacer votre terminal si vous avez affiché des données sensibles par erreur.

NOTE

Les options --echo et --simple ne peuvent pas être utilisées ensemble.

Explication

Lorsque le Wrapper lit son flux d'entrée standard, il l'interprète avec son propre encodage ou avec la valeur de l'option --encoding, si elle est spécifiée. Dans la plupart des cas, il n'a aucun moyen de déterminer si l'encodage utilisé est correct ou non, et obfusquera les données dans tous les cas. Avec uniquement la sortie obfusquée, il peut être très difficile de remarquer des problèmes d'encodage sur la chaîne d'entrée. En ajoutant l'option --echo, l'utilisateur peut confirmer si l'entrée a été correctement reçue par le Wrapper.

Exemple : (encodage incorrect)
type inpututf8.txt | wrapper.exe --cipher --method obf --echo

...

Input data: 'Niño'

Encoded Token:
    %59qW5A=k2naYbzKiXOUcGc5OA598K0Kq6|obf%

Exemple : (encodage correct)
type input.txt | wrapper.exe --cipher --method obf --echo --encoding utf8

...

Input data: 'Niño'

Encoded Token:
    %_G2moKq5aFVvtwAn6pyk5MS4G6Hm4mR|obf%

Générer des clés privées

Compatibilité :3.6.0
Éditions :Édition ProfessionnelleÉdition StandardÉdition Community (non prise en charge)
Plateformes :WindowsMac OSXLinuxAlpine LinuxFreeBSDSolarisIBM z/Linux

Le Wrapper fournit la commande --keygen pour générer des clés privées utilisées par certaines méthodes d'encodage.

AVERTISSEMENT

Par défaut, le Wrapper générera une clé avec des permissions de lecture et d'écriture accordées uniquement à l'utilisateur exécutant le Wrapper. Sur les systèmes Unix, cet utilisateur sera le « propriétaire » du fichier et seul le propriétaire aura les permissions de lecture-écriture. Ces permissions peuvent être modifiées par la suite, mais veuillez garder à l'esprit qu'elles doivent être accordées au strict minimum. En général, seul l'utilisateur exécutant le Wrapper devrait être autorisé à accéder à la clé privée.

Veuillez consulter cette page pour savoir comment ajuster les permissions de votre clé privée.

« wrapper --help » affichera la sortie suivante, que nous expliquerons plus en détail ci-dessous :

  --keygen Generate a private key file to be used when obfuscating passwords.
    The following arguments are available:
      --method <method name> Obfuscation method for which the private key is
        intended to be used:
          obf : to generate a key for fixed obfuscation
          robf: to generate a key for random obfuscation
      --private_keyfile <file path> Specifies the filename of the key file.

Méthodes

Actuellement, seules les méthodes « obf » et « robf » peuvent utiliser une clé privée. De plus, elles utilisent toutes deux le même format de clé, de sorte qu'une clé générée en spécifiant la méthode « obf » peut être utilisée pour la méthode « robf » et vice versa.

Le paramètre --method existe pour la compatibilité avec les futures versions du Wrapper qui ajouteront de nouvelles méthodes d'encodage ou de chiffrement utilisant des formats de clé différents.

Fichier de clé privée

Le paramètre --private_keyfile est utilisé pour spécifier le chemin vers un fichier dans lequel la clé générée sera écrite.

Référence : Sécurité

Configuration du chiffrement :

Fichiers sécurisés :

Commandes :