Índice

Descripción

A partir de la versión 3.6.0 del Wrapper, las Ediciones Estándar y Profesional permiten ofuscar contraseñas o datos sensibles para almacenarlos de forma más segura en sus archivos de configuración. La ofuscación debe distinguirse del cifrado verdadero, pero proporciona cierto nivel de seguridad al ocultar el texto real o la contraseña y hacer que sea muy difícil para un observador casual recordar el valor codificado.

Al cargar la configuración, el Wrapper decodificará cualquier token ofuscado y marcará como sensibles los valores de las propiedades donde se haga referencia a ellos. Un valor de propiedad marcado como confidencial se tratará con precauciones adicionales, en primer lugar, asegurándose de que se ha cargado desde un archivo seguro y, en segundo lugar, asegurándose de que solo se utiliza para los fines previstos sin revelar el texto sin cifrar.

Para evitar el uso de propiedades cuyos valores puedan aparecer en la consola, emails, registros, línea de comandos, etc., solo se permite que un conjunto limitado de propiedades contenga tokens ofuscados en sus valores. Su uso en definiciones de variables también está prohibido para prevenir fugas de información al entorno.

NOTA

Las propiedades permitidas para contener tokens ofuscados en sus valores se limitan a las siguientes:

Un valor de propiedad que contenga datos sensibles se manejará con las siguientes precauciones de seguridad:

  • Se comprobarán los permisos del archivo que contiene el texto sensible y se requerirá un acceso de lectura restringido para cargar el archivo. Por favor, lea esta página para obtener más detalles.

  • Cualquier texto sensible se enmascarará en los registros y se reemplazará por una máscara compuesta por un número fijo de caracteres '*'.

  • No se permitirá hacer referencia al valor de la propiedad en la línea de comandos de Java para evitar la exposición de texto sin cifrar en herramientas de listado de procesos como "Administrador de tareas" (Task Manager) (en Windows) o "ps" (en Unix). Tenga en cuenta que wrapper.app.parameter.backend debe establecerse en TRUE para permitir que los datos sensibles en los parámetros de la aplicación se pasen a través del canal backend, en lugar de la línea de comandos.

Hay varios métodos disponibles para codificar/ofuscar sus contraseñas. Es posible utilizar una clave privada palgunos de ellos. El Wrapper ofrece comandos para codificar sus datos y generar claves privadas. Esta página describirá las opciones para cada comando.

ADVERTENCIA

Los métodos de ofuscación ofrecidos por el Wrapper, junto con las medidas de seguridad asociadas descritas anteriormente, están diseñados principalmente para evitar la fuga de datos sensibles en texto sin cifrar fuera de la aplicación Java. Al usar las propiedades wrapper.app.property.<n> o establecer wrapper.app.parameter.backend en TRUE, es posible pasar las propiedades del sistema y los parámetros de la aplicación de forma segura a su aplicación Java. Sin embargo, tenga en cuenta que, una vez recibidos por el código Java, estos valores se almacenarán como texto sin cifrar en las propiedades del sistema o en una matriz de cadenas.

Tenga en cuenta los siguientes problemas:

- Alguien que obtuviera posesión de sus secretos ofuscados (o archivos de configuración) podría crear una aplicación Java simple para volcar las propiedades del sistema, usar el Wrapper para ejecutarla, y así descubrir fácilmente sus contraseñas. Por lo tanto, es fundamental que los archivos de configuración del Wrapper que contienen datos sensibles sean siempre accesibles únicamente para usuarios autorizados. Por este motivo, el Wrapper comprueba los permisos de los archivos sensibles cada vez que se inicia y ofrece instrucciones para ajustarlos, pero la modificación de dichos permisos es su responsabilidad. También se recomienda usar un archivo de clave privada con permisos de archivo lo más restringidos posible.

- Alguien con acceso a su máquina podría usar un depurador para rastrear la memoria de su aplicación Java y descubrir los valores de String donde se almacenan las contraseñas en texto sin cifrar. Asegúrese siempre de ejecutar su aplicación Java en un entorno seguro.

Ofuscar Datos

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad (No Compatible)
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

El comando --cipher se puede utilizar para codificar contraseñas o datos sensibles con el Wrapper y generar la configuración "cipher" asociada.

Para especificar exactamente cómo codificar los valores, se necesitan varios parámetros al utilizar el comando --cipher. La sección siguiente describirá cómo configurar cada parámetro, pero primero veamos cómo se verán los valores codificados en su archivo de configuración. Se utiliza la siguiente sintaxis:

%zrmVK5-Zp7qHptL9Yu66qr|<cipher_name>%

  • '% %' son delimitadores para el token codificado,

  • 'zrmVK5-Zp7qHptL9Yu66qr' es el valor codificado,

  • <cipher_name> es un identificador para la configuración utilizada para codificar el valor (ver más abajo).

La codificación del (de los) valor(es) se puede configurar con el siguiente conjunto de propiedades.

  • wrapper.cipher.<n>.name: identificador para la configuración de codificación del índice <n>,

  • wrapper.cipher.<n>.method: método de codificación (ver más abajo),

  • wrapper.cipher.<n>.private_keyfile: ruta al archivo de clave privada.

Algunos métodos definen una configuración predeterminada, en cuyo caso se pueden omitir las propiedades anteriores. Dichas configuraciones predeterminadas no utilizan una clave privada personalizada y el <cipher_name> (nombre del cifrado) es el mismo que el nombre del método.


Ahora veamos los detalles del uso del comando --cipher.

'wrapper --help' imprimirá la siguiente salida, que explicaremos más a fondo a continuación:

  --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étodos

El parámetro --method se utiliza para especificar el método de codificación.

Los siguientes métodos están disponibles:

  • base64: codificación base64 estándar

  • base64url: Base64 modificado para URLs ('+' reemplazada por '-', '/' reemplazada por '_')

  • obf: método propietario de ofuscación (la misma entrada siempre generará la misma salida)

  • robf: método propietario de ofuscación aleatoria (la misma entrada generará salidas aleatorias, lo que lo hace más resistente al criptoanálisis)

NOTA

'base64' y 'base64url' son métodos de codificación conocidos públicamente. El valor codificado es más largo y más difícil de recordar que el texto sin formato correspondiente. Sin embargo, alguien en posesión de la cadena codificada la decodificaría muy fácilmente.

'obf' y 'robf' no se pueden decodificar fácilmente porque los algoritmos utilizados no son conocidos públicamente. Para una seguridad mejorada, también se puede especificar una clave privada almacenada en un archivo seguro separado durante la codificación. Sin pretender alcanzar el mismo nivel de seguridad que los métodos de cifrado más fuertes (AES, RSA, etc.), el uso de 'obf' o 'robf' en combinación con una clave privada ofrece una protección bastante buena de sus datos.

Nombre del Cifrado

El parámetro --name es opcional. Cuando se utiliza, debe ir seguido de un identificador para la configuración utilizada para codificar valores.

Este parámetro es obligatorio si se especifica '--private_keyfile'.

El valor especificado se utilizará para establecer la propiedad wrapper.cipher.<n>.name. Por ejemplo, si se especifica --name obf1, se generará la siguiente configuración:

wrapper.cipher.1.name=obf1

Archivo de Clave Privada

El parámetro --private_keyfile es opcional. Cuando se utiliza, debe ir seguido de la ruta a un archivo de clave privada.

Este parámetro solo se puede utilizar si el método de codificación es 'obf' o 'robf' y si también se especifica el parámetro --name.

Sin una clave privada especificada, la codificación solo actúa como ofuscación, lo que simplemente dificulta que los observadores no deseados recuerden los valores. Si bien la ofuscación puede ser suficiente si su archivo de configuración está bien protegido y se edita de forma privada, especificar un archivo de clave privada proporciona seguridad adicional. La decodificación requiere entonces este archivo separado cuyo único propósito es contener la clave privada y, por lo tanto, nunca es necesario abrirlo ni editarlo. El archivo de clave debe almacenarse siempre en una ubicación segura con permisos restringidos. Cualquiera que obtenga acceso a su clave podría decodificar fácilmente sus contraseñas.

El valor especificado se utilizará para establecer la propiedad wrapper.cipher.<n>.private_keyfile. Por ejemplo, 'wrapper --cipher --method obf --name obf1 --private_keyfile ../conf/my_private_key' generará la siguiente configuración:

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

Salida Simple

El parámetro --simple es un indicador opcional (sin valor) que se puede usar para generar una salida solo con el valor codificado.

Sin el parámetro --simple, la salida se verá así:

Encoded Token:
    %K401JeI7GaHRplWDz15c6hmXkKM_9CoFrAo8P|r1%

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

Con el parámetro --simple, la salida se verá así:

%K401JeI7GaHRplWDz15c6hmXkKM_9CoFrAo8P|r1%

Usar el parámetro --simple es útil cuando la salida debe ser utilizada por un proceso automatizado o pasada a otro comando.

Por ejemplo, el siguiente comando codificará el valor "mypassword" con el método 'obf'. La salida del Wrapper se pasará al comando sed que reemplazará el(los) token(s) '@pw1@' con el valor codificado.

Ejemplo: (En Unix)

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

Codificación

El parámetro --encoding es opcional, y especifica la codificación a usar al leer Stdin.

Si no se especifica esta opción, se utilizará la página de códigos ANSI en Windows y la codificación de la configuración regional de la sesión actual en Unix.

Actualmente, solo se admiten los siguientes valores:

  • default

  • utf8 o utf-8

Ejemplo: (Con cmd.exe: Leer la primera línea de input.txt en utf-8)

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

NOTA

En las consolas de PowerShell, la variable $OutputEncoding determina la codificación a usar al canalizar datos a aplicaciones nativas. En algunos entornos, el valor predeterminado puede ser ASCII, lo que reemplazaría todos los caracteres no ASCII con signos de interrogación. Al leer el contenido de un archivo que contiene caracteres UTF-8, asegúrese de que $OutputEncoding esté configurado correctamente en '[System.Text.Encoding]::UTF8'.

Ejemplo: (Con PowerShell: Leer la primera línea de input.txt en utf-8)

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

Eco

El parámetro --echo es un indicador opcional (sin valor) que se puede usar para imprimir los datos de entrada recibidos por el Wrapper antes de ofuscarlos. Esto resulta útil para detectar problemas de codificación.

ADVERTENCIA

IMPORTANTE: Esta opción solo está disponible para fines de depuración. Nunca debe usarse con contraseñas reales, ya que muestra la información introducida en texto plano en la terminal. Si imprimió datos sensibles por error, borre la información de la terminal.

NOTA

Las opciones --echo y --simple no se pueden usar juntas.

Explicación

Cuando el Wrapper lee su flujo de entrada estándar, lo interpreta con su propia codificación o con el valor de la opción --encoding si se especifica. En la mayoría de los casos, no tiene forma de determinar si la codificación utilizada es correcta o no, y ofuscará los datos en cualquier caso. Solo con la salida ofuscada, puede ser muy difícil notar problemas de codificación en la cadena de entrada. Al agregar la opción --echo, el usuario puede confirmar si la entrada se ha recibido correctamente por el Wrapper.

Ejemplo: (codificación incorrecta)
type inpututf8.txt | wrapper.exe --cipher --method obf --echo

...

Input data: 'Niño'

Encoded Token:
    %59qW5A=k2naYbzKiXOUcGc5OA598K0Kq6|obf%

Ejemplo: (codificación correcta)
type input.txt | wrapper.exe --cipher --method obf --echo --encoding utf8

...

Input data: 'Niño'

Encoded Token:
    %_G2moKq5aFVvtwAn6pyk5MS4G6Hm4mR|obf%

Generar Claves Privadas

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad (No Compatible)
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

El Wrapper proporciona el comando --keygen para generar claves privadas que son utilizadas por ciertos métodos de codificación.

ADVERTENCIA

Por defecto, el Wrapper generará una clave con permisos de lectura y escritura otorgados solo al usuario que ejecuta el Wrapper. En los sistemas Unix, este usuario será el "propietario" del archivo y solo el propietario tendrá permisos de lectura-escritura. Estos permisos se pueden cambiar posteriormente, pero tenga en cuenta que deben otorgarse al mínimo. Por lo general, solo el usuario que ejecuta el Wrapper debería tener permiso de acceder a la clave privada.

Por favor, lea esta página para aprender cómo ajustar los permisos de su clave privada.

'wrapper --help' imprimirá la siguiente salida, que explicaremos más a fondo a continuación:

  --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étodos

Actualmente, solo los métodos 'obf' y 'robf' pueden usar una clave privada. Además, ambos usan el mismo formato de clave, por lo que una clave generada al especificar el método 'obf' se puede usar para el método 'robf' y viceversa.

El parámetro --method existe para compatibilidad con futuras versiones del Wrapper que agregarán nuevos métodos de codificación o cifrado que usan diferentes formatos de clave.

Archivo de Clave Privada

El parámetro --private_keyfile se utiliza para especificar la ruta a un archivo donde se escribirá la clave generada.

Referencia: Seguridad

Configuración de Cifrado:

Archivos Seguros:

Comandos: