Una de las mayores preocupaciones de quienes guardan datos sensibles en bases de datos es acerca de la seguridad con que se cuenta para evitar el acceso no autorizado. Entonces ¿qué podemos decir sobre este tema?

Primero, y fundamental, que la seguridad implica tomar muchas medidas de precaución, no solamente una.

La seguridad de una Base de Datos no debe estar basada en nombres de usuarios y en contraseñas. Realmente en Firebird el intruso solamente debe conocer la contraseña del usuario SYSDBA y ya podrá hacer lo que se le antoje.

Creer que la contraseña lo es todo en cuanto a seguridad, es un gran error.

¿Por qué?

Porque el elemento más débil en la seguridad, no es la contraseña sino que es … el usuario humano.

Si el usuario permite que le vean el teclado mientras escribe la contraseña … murió la seguridad

Si el usuario escribe la contraseña en un papel que otros pueden ver … murió la seguridad

Si el usuario le dice a otra persona cual es su contraseña … murió la seguridad

Si el usuario elige una contraseña fácil de descubrir … murió la seguridad

Si el intruso puede copiar la Base de Datos en un pen-drive … murió la seguridad

Explicación:

Si alguien puede ver tu teclado mientras estás escribiendo la contraseña del usuario SYSDBA entonces te puede estar filmando (quizás a una distancia prudencial), con cualquier teléfono celular (móvil) o con esas minicámaras que se disimulan en bolígrafos, relojes, u otros aparatos. Luego, simplemente reproduce la filmación y podrá descubrir cuales teclas presionaste, y en que orden lo hiciste. Y listo, ya conoce la contraseña.

Si escribes la contraseña en un papel, archivo de texto, planilla Excel, o cualquier otro lugar donde alguien más puede leerlo, entonces ya la consiguió. Hay gente que se inventa una contraseña muy complicada, y para no olvidarla, la anota en un papel que deja en el primer cajón de su escritorio. Algo como: “contraseña de SYSDBA = euldlm67”

Mujeres sexies que actuaron de espías hay varias en la Historia, quizás la más conocida haya sido Mata Hari, quien se acostaba con los jefes del ejército enemigo para sacarles información. En una noche de juerga, sexo y borrachera, lo que menos le importará a un fulano es contarle cual es la contraseña del usuario SYSDBA a su amante. Estos casos, aunque no involucren sexo, se conocen como “Ingeniería Social” donde a la víctima se le quita información usando la psicología. Diciéndolo lo importante que es, o algunas otras frases se lo dispone a compartir esa contraseña que debería mantener en secreto.

Hay contraseñas que son muy fáciles de descubrir, entre ellas tenemos a: “123456”, “1234567”, “12345678”, “admin”, “supervisor”, “root” y unas 50 más, que son ampliamente utilizadas por una gran cantidad de personas. Cualquier aprendiz de hacker sabe que debe empezar a intentar acceder con ellas, pues muchas personas las utilizan. Si se conocen algunos datos del usuario eso también puede facilitar la obtención de la contraseña. Por ejemplo, en las mujeres es muy frecuente que usen el nombre del novio, del perro, o del hijo. En los hombres, el club de fútbol, un jugador famoso, un personaje de historieta o de ficción. Entonces, usando “Ingeniería Social” se averiguan esos nombres y listo.

Cambiando la contraseña del usuario

Sabiendo que el eslabón más débil es el usuario porque muchos no entienden la importancia de mantener la contraseña en absoluto secreto, hay que tratar de disminuir la probabilidad de que si la comunican a otra persona, por accidente o por intención, el intruso pueda conectarse a la Base de Datos.

Un método, que no es infalible pero ayuda a aumentar la seguridad es el siguiente:

  • En las aplicaciones (Contabilidad, Ventas, Producción, Sueldos, etc.) jamás se debe permitir que ingrese el usuario SYSDBA
  • En las aplicaciones (Contabilidad, Ventas, Producción, Sueldos, etc.) jamás debe permitirse que ingrese un usuario con el rol RDB$ADMIN, pues en esa Base de Datos tendrá los mismos privilegios que el usuario SYSDBA
  • La aplicación debe verificar que el usuario no sea SYSDBA y que el rol utilizado no sea RDB$ADMIN
  • Las tareas administrativas de la Base de Datos que requieren del usuario SYSDBA o de un usuario con el rol RDB$ADMIN (backup, sweep, etc.) deben realizarse a través de una aplicación diseñada para ese efecto. Nada de hacerlas en la línea de comando.
  • La contraseña que el usuario introduce en esa aplicación jamás debe ser la contraseña verdadera del usuario SYSDBA o del usuario que tiene el rol RDB$ADMIN. La aplicación debe transformar la contraseña introducida por el usuario en otra contraseña, en la verdadera contraseña. Esto es muy fácil de hacer, por ejemplo si se reemplaza cada carácter de la contraseña por el siguiente, se convertirá a “12345678” en “23456789”. La contraseña que introduce el usuario es “12345678”, la verdadera contraseña es “23456789”. Si el idiota del usuario le comunica su contraseña a otra persona, y esta otra persona quiere conectarse desde la línea de comandos como SYSDBA con la contraseña “12345678” (que es la que el usuario conoce y utiliza) no lo conseguirá, porque esa no es la verdadera contraseña. Esa es la contraseña que introduce en la aplicación, pero no es la contraseña requerida para realizar la conexión. Desde luego que el algoritmo utilizado para cambiar la contraseña no debe ser tan simple como el de este ejemplo. Un buen algoritmo puede convertir a “12345678” en algo como “X&9_7sxÇ”

Protegiendo una Base de Datos:

En entornos donde la seguridad es importante, las medidas de protección mínimas son las siguientes:

  1. La computadora donde se encuentra el Servidor no debe tener puertos USB habilitados ni grabador de CD/DVD
  2. La computadora donde se encuentra el Servidor no debe tener acceso directo a Internet
  3. La computadora donde se encuentra el Servidor debe encontrarse en una habitación aparte, la cual normalmente se encuentra cerrada con llave, y esa llave se guarda en un lugar seguro
  4. La conexión a la Base de Datos se hace siempre con alias
  5. Se registra en un archivo de log, que se guarda afuera de la Base de Datos, los datos de cada conexión: usuario, IP de su computadora, fecha de entrada, hora de entrada, fecha de salida, hora de salida
  6. Se restringe el acceso a la Base de Datos fuera de los días y horarios establecidos
  7. La contraseña que escribe el usuario en la aplicación, nunca debe ser la usada para la conexión sino que debe sometérsela a algún algoritmo que la convierta en la contraseña correcta. Un ejemplo muy sencillo: si en la aplicación el usuario escribe la contraseña “12345678” una función debe convertirla en “23456789”, que es la contraseña reconocida por la Base de Datos. De esa manera, si alguien conoce la contraseña del usuario y quiere acceder a la Base de Datos desde afuera de la aplicación no lo conseguirá porque estará intentando la conexión con una contraseña que no es la correcta.

Conclusión:

Si queremos tener bases de datos seguras lo más importante es siempre concientizar a los usuarios sobre la gran importancia de mantener el acceso restringido y que nunca deben comunicar sus contraseñas a otras personas, por ningún motivo.

Pero tipos que no entenderán aunque se les repita mil veces siempre existirán, por lo tanto no debemos confiar en la gente sino que debemos preocuparnos nosotros mismos de ese aspecto.

La seguridad jamás debe estar basada solamente en contraseñas, porque no es el punto más débil. El punto más débil siempre son los usuarios descuidados, negligentes, ignorantes, o indolentes. Ante gente así, ni el mejor algoritmo de encriptación del mundo servirá de algo.

Un método para mejorar la seguridad que proporcionan las contraseñas es convertir la contraseña introducida por el usuario en otra contraseña, que es la correcta para realizar la conexión.

Artículos relacionados:

Una técnica para dificultar el acceso no autorizado

Inferencia de datos

Impidiendo la conexión a una Base de Datos

Atacando a una Base de Datos: SQL injection

Evitando que los mirones averigüen nuestro password en ISQL

El índice del blog Firebird21

El foro del blog Firebird21