none
Ocultar connectionString en el .exe RRS feed

  • Pregunta

  • Hola, tengo una aplicación antigua de VB.net codificada con Visual Studio 2008 (NET Framework 3.5) que se conecta una base de datos MySQL a través del proveedor para .NET a la aplicación. Estoy poco pez con esto y dicha aplicación está realizada con un DataSet Tipado a través del asistente con sus tableAdapter generados y sus consultas, por lo que la cadena de conexión se ha introducido por medio de menú Proyecto/Propiedades (<<Nombre Proyecto>>)/Configuración.

    Como es una aplicación antigua y no interesa reescribir TOODO el código, me he dado cuenta de que hay un fallo de seguridad y es que la cadena de conexión aparece en el archivo .exe que se genera al compilar la aplicación.  He visto que hay maneras de encriptarla para que no aparezca en dicho archivo con un simple visor de texto.

    Una es instalando una librería ENTERPRISE LIBRARY V5 CONFIGURATION sobre el editor de Visual Studio editando el app.config a través de un asistente, pero por más que hago configuraciones y tanteando no consigo que al compilar el .exe que genera deje de mostrar la cadena de conexión a la BD completa.

    Quisiera saber si alguien sabe como configurarla a través de esta librería para obtener lo que quiero, o hay algún otro método más sencillo y rápido y si este método es seguro, siempre y cuando mantenga el DATASET Tipado ya que no tengo tiempo para revisar este proyecto y no consigo que el fichero objeto que se crea para arrancar la aplicación deje de mostrar la dichosa cadena.


    Rynthbarim. &Si caminas solo puedes ir más rápido, si vas acompañado irás mas lejos&

    miércoles, 24 de abril de 2019 11:35

Respuestas

  • Yo te diría que te olvides del asunto. Incluso aunque apliques criptografía para ocultar la cadena (cosa que requeriría revisar todo el programa y ver todos los sitios donde tus DataAdapters la recuperan y meter una llamada para descifrarla), el problema es que el ejecutable como es lógico tiene que contener en su interior todo lo necesario (claves y algoritmo) para desencriptar la cadena, ya que de lo contrario no podría usarla para nada. Dado lo sencillo que es descompilar un ejecutable de .Net, cualquiera que tenga un mínimo interés en el asunto podrá encontrar cómo desencriptar la cadena.

    La cuestión es que el "no dejarle al usuario ver la cadena" no es un buen mecanismo de seguridad. Lo que hay que hacer es presumir que el usuario siempre va a conocer la cadena (aunque no se lo pongamos fácil, pero hay que pensar en que hay muchas probabilidades de que la conozca), y en su lugar configurar los permisos de la base de datos de manera que esa cuenta de usuario no tenga permiso para realizar ninguna operación que no le corresponda.

    • Propuesto como respuesta Carlos_Ruiz_M miércoles, 24 de abril de 2019 14:47
    • Marcado como respuesta Rynthbarim jueves, 25 de abril de 2019 5:21
    miércoles, 24 de abril de 2019 12:29
  • Hola Rynthbraim.

    Yo para mis aplicaciones en .NET utilizo un xml encriptado.

    <?xml version="1.0" encoding="UTF-8"?>
    <servidor>
      <iphost>gwnkF7gP/nXa2v5mZSp+YA==</iphost>
      <puerto>X/hgYGNwApo=</puerto>
      <usuario>MDk+i9TWf2A=</usuario>
      <password>/fzNk1DhRnhlRMj/v5QC9g==</password>
      <bd>P0lp9/uuJNY8faSXYzautw==</bd>
      <motor>n3XKcReuZkc=</motor>
    </servidor>

    al archivo lo nombro algo como "enlace.xml"

    En mi app, uso encrypt & decript con un hash x. Entónces abro el xml, capturo los datos y armo la cadena de conexión. Esto me permite presindir del archivo de configuración, y modificar la cadena de conexión en tiempo de ejecución para por ejemplo, cambiar el servidor al cual la app se conecta.

    Si es lo que necesitas, chifla y te comparto código.

    • Marcado como respuesta Rynthbarim jueves, 25 de abril de 2019 5:35
    miércoles, 24 de abril de 2019 22:36

Todas las respuestas

  • Yo te diría que te olvides del asunto. Incluso aunque apliques criptografía para ocultar la cadena (cosa que requeriría revisar todo el programa y ver todos los sitios donde tus DataAdapters la recuperan y meter una llamada para descifrarla), el problema es que el ejecutable como es lógico tiene que contener en su interior todo lo necesario (claves y algoritmo) para desencriptar la cadena, ya que de lo contrario no podría usarla para nada. Dado lo sencillo que es descompilar un ejecutable de .Net, cualquiera que tenga un mínimo interés en el asunto podrá encontrar cómo desencriptar la cadena.

    La cuestión es que el "no dejarle al usuario ver la cadena" no es un buen mecanismo de seguridad. Lo que hay que hacer es presumir que el usuario siempre va a conocer la cadena (aunque no se lo pongamos fácil, pero hay que pensar en que hay muchas probabilidades de que la conozca), y en su lugar configurar los permisos de la base de datos de manera que esa cuenta de usuario no tenga permiso para realizar ninguna operación que no le corresponda.

    • Propuesto como respuesta Carlos_Ruiz_M miércoles, 24 de abril de 2019 14:47
    • Marcado como respuesta Rynthbarim jueves, 25 de abril de 2019 5:21
    miércoles, 24 de abril de 2019 12:29
  • Hola Rynthbraim.

    Yo para mis aplicaciones en .NET utilizo un xml encriptado.

    <?xml version="1.0" encoding="UTF-8"?>
    <servidor>
      <iphost>gwnkF7gP/nXa2v5mZSp+YA==</iphost>
      <puerto>X/hgYGNwApo=</puerto>
      <usuario>MDk+i9TWf2A=</usuario>
      <password>/fzNk1DhRnhlRMj/v5QC9g==</password>
      <bd>P0lp9/uuJNY8faSXYzautw==</bd>
      <motor>n3XKcReuZkc=</motor>
    </servidor>

    al archivo lo nombro algo como "enlace.xml"

    En mi app, uso encrypt & decript con un hash x. Entónces abro el xml, capturo los datos y armo la cadena de conexión. Esto me permite presindir del archivo de configuración, y modificar la cadena de conexión en tiempo de ejecución para por ejemplo, cambiar el servidor al cual la app se conecta.

    Si es lo que necesitas, chifla y te comparto código.

    • Marcado como respuesta Rynthbarim jueves, 25 de abril de 2019 5:35
    miércoles, 24 de abril de 2019 22:36
  • Gracias Alberto por responder, como no conocía mucho acerca de ello, me interesaba saber si merecía la pena el esfuerzo o no.

    Lo de los permisos en la BBDD, por supuesto que ya lo he tomado en cuenta y el usuario de la cadena no tiene privilegios, tan sólo para hacer operaciones de lectura y algunas escrituras pero  supervisados con disparadores o TRIGGER, que actúa cuando detecta algún registro sospechoso,  es decir, si alguien inyecta código malicioso en algún INSERT se eliminará.

    Un cordial saludo.


    Rynthbarim. "Si caminas solo puedes ir más rápido, si vas acompañado irás mas lejos"


    • Editado Rynthbarim jueves, 25 de abril de 2019 5:30
    jueves, 25 de abril de 2019 5:28
  • Gracias por compartir, me puede servir para futuras aplicaciones, pero en esto no me lo planteo por lo complejo que es revisar todo el código como me plantea Alberto.

    Un cordial saludo


    Rynthbarim. &Si caminas solo puedes ir más rápido, si vas acompañado irás mas lejos&

    jueves, 25 de abril de 2019 5:34