Lamp con Hardening a Mysql

John Deivis T abares T obón

Instructor: Fernando Quintero

SENA Centro de Servicios y Gestión Empresarial

Medellín 2012
1

Índice de Contenido
Introducción.............................................................................................................................4 Conceptos ...............................................................................................................................5 Instalación LAMP ....................................................................................................................6 Crear Base de Datos y Usuarios ............................................................................................7 Proceso de Hardening a Mysql...............................................................................................9 Historial de comandos: ........................................................................................................9 Usuario mysql: .....................................................................................................................9 Permisos del Sistema de Archivos. ........................................................................................9 Los datos del directorio: ......................................................................................................9 Binarios: .............................................................................................................................10 Archivos de Configuración: ...............................................................................................11 Archivos de registro: ..........................................................................................................11 Prevenir lectura de archivos locales: ................................................................................11 Registro .................................................................................................................................11 Habilitar el registro de error: ..............................................................................................11 General ..................................................................................................................................12 Eliminar base de datos de prueba: ...................................................................................12 Cambiar nombre de cuenta de administrador: .................................................................12 Contraseñas complejas: ....................................................................................................13 Verificar Hashes de contraseña segura: ...........................................................................13 Cuentas de uso individual: ................................................................................................15 Sin contraseñas en blanco: ...............................................................................................15 Cuenta anónima: ...............................................................................................................15 Borrar usuarios con comodines: .......................................................................................16 Deshabilitar socket de red: ................................................................................................16 No usar el registro de actualización: .................................................................................17 Deshabilitar show databases: ...........................................................................................17 Privilegios en las bases de datos: ....................................................................................17 Instalación de la Aplicación Web Wordpress .......................................................................18 Conclusiones.........................................................................................................................21

2

Índice de Imágenes
Imagen 1. Generar clave para root y crear bases de datos. ...........................................................7 imagen 2. Creando usuario para base de datos. .....................................................................7 imagen 3. Verificando que si se haya creado el usuario. ........................................................8 imagen 4. Dar privilegios al usuario sobre la base de datos. ..................................................8 imagen 5. Deshabilitar historial de comandos de mysql..........................................................9 imagen 6. Establecer usuario mysql a /sbin/nologin. ...............................................................9 imagen 7. Verificando que nada más puedan leer y escribir el usuario mysql. ......................9 imagen 8. Verificando permisos de binarios. .........................................................................10 imagen 9. Permisos del archivo de configuración de mysql. .................................................11 imagen 10. Verificar permisos para el archivo de registros. ..................................................11 imagen 11. Parámetro para deshabilitar la lectura de archivos locales. ...............................11 imagen 12. Registro de error habilitado. ................................................................................11 imagen 13. Eliminar base de datos test. ................................................................................12 imagen 14. Comprobando cambio de nombre del root..........................................................13 imagen 15. Cambiando contraseña al root. ...........................................................................13 imagen 16. Verificar que las contraseñas tengan hash de 41 bytes. ....................................14 imagen 17. Generando hash de 41 bytes. .............................................................................14 imagen 18. Ya no está el password de 16 bytes. ..................................................................14 imagen 19. Hash de 41 bytes listo. ........................................................................................15 imagen 20. Para ver los usuarios y el password....................................................................15 imagen 21. Borrar usuarios anónimos....................................................................................16 imagen 22. Borrando usuario con comodines........................................................................16 imagen 23. Parámetro para deshabilitar el socket de red de mysql.....................................16 imagen 24. Parámetro para deshabilitar show databases. ....................................................17 imagen 25. Verificar privilegios de root y usuarios.................................................................17 imagen 26. Aplicación wordpress descomprimido en en el directorio html. ..........................18 imagen 27. Verificar la version de php. ..................................................................................18 imagen 28. Instalar repositorio para actualizar php. ..............................................................19 imagen 29. Verificando versión php. ......................................................................................19 imagen 31. Habilitando virtualhost. ........................................................................................20 imagen 33. Página de inicio de wordpress.............................................................................20

3

Introducción
En este tutorial mostrare como hacer hardening a mysql, el cual consiste en endurecer la base de datos y así bajar la vulnerabilidad de la información, en este caso de la aplicación web, que para instalarla tendremos que hacer LAMP. Haremos los pasos correspondientes para llevar a cabo una base de datos segura aunque estos serán medidas basicas, que para otro entorno se deberían de endurecer aun más.

4

Conceptos
Nist: El Instituto Nacional de Normas y Tecnología, es una agencia de la
administración de Tecnología del Departamento de Comercio de los Estados Unidos. La misión de este instituto es promover la innovación y la competencia industrial en Estados Unidos mediante avances en metrología, normas y tecnología de forma que mejoren la estabilidad económica y la calidad de vida. Como parte de esta misión, los científicos e ingenieros del NIST continuamente refinan la ciencia de la medición (metrología) creando una ingeniería precisa y una manufacturación requerida para la mayoría de los avances tecnológicos actuales. También están directamente involucrados en el desarrollo y pruebas de normas hechos por el sector privado y agencias de gobierno. El NIST fue originalmente llamado Oficina Nacional de Normas (NBS por sus siglas en inglés), un nombre que tuvo desde 1901 hasta 1988. El progreso e innovación tecnológica de Estados Unidos dependen de las habilidades del NIST, especialmente si hablamos de cuatro áreas: biotecnología, nanotecnología, tecnologías de la información y fabricación avanzada.

Benchmark: Es una técnica utilizada para medir el rendimiento de un sistema o
componente del mismo, frecuentemente en comparación con el que se refiere específicamente a la acción de ejecutar un benchmark. La palabra benchmark es un anglicismo traducible al español como comparativa. Si bien también puede encontrarse esta palabra haciendo referencia al significado original en la lengua anglosajona, es en el campo informático donde su uso está más ampliamente extendido. Más formalmente puede entenderse que un benchmark es el resultado de la ejecución de un programa informático o un conjunto de programas en una máquina, con el objetivo de estimar el rendimiento de un elemento concreto, y poder comparar los resultados con máquinas similares. En términos de ordenadores, un benchmark podría ser realizado en cualquiera de sus componentes, ya sea CPU, RAM, tarjeta gráfica, etc. También puede ser dirigido específicamente a una función dentro de un componente, por ejemplo, la unidad de coma flotante de la CPU; o incluso a otros programas. CIS: El Center for Internet Security (CIS) es una organización sin fines de lucro enfocada en mejorar la preparación de la seguridad cibernética y la respuesta de las entidades del sector público y privado, en un compromiso con la excelencia mediante la colaboración a través de sus tres divisiones, puntos de referencia de seguridad, ISAC Multi-Estado y desarrollo de personal de seguridad cibernética de la CEI los cuales sirven como un recurso central en el desarrollo y la entrega de alta calidad, productos y servicios oportunos para ayudar a sus socios en el gobierno, la academia, el sector privado y el público en general.

5

Instalación LAMP
Para configurar las aplicaciones web, lo primero que haremos es instalar LAMP que es Linux + apache + mysql + php, y para que podamos ingresar con un nombre a la aplicación configuramos un servidor DNS. Verificamos que este resolviendo bien le DNS.

Ahora instalaremos LAMP. # yum install httpd mysql-server php php-lab php-mysql php-pear php-gd phpmbstring php-pdo php-soap php-xml. Iniciamos el servidor web y la base de datos.

6

Crear Base de Datos y Usuarios
Primero generamos la clave para el root, y después de esto vamos a crear la base de datos para la aplicación web.

Imagen 1. Generar clave para root y crear bases de datos.

Verificamos que si se haya creado la base de datos.

Luego creamos un usuario que será el administrador de la base de datos y verificamos que si se haya creado.

imagen 2. Creando usuario para base de datos.

7

imagen 3. Verificando que si se haya creado el usuario.

Le damos los privilegios al usuario sobre la base de datos y verificamos.

imagen 4. Dar privilegios al usuario sobre la base de datos.

8

Proceso de Hardening a Mysql
Historial de comandos:
Todos los comandos que se ejecutan en la aplicación de consola de MySQL se guardan en un archivo de historial. Desactivar el historial de comandos de MySQL reduce la probabilidad de exponer información confidencial, como contraseñas. Primero borramos el archivo .mysql_history, luego creamos un enlace simbólico para que apunte a /dev/null y verificamos que el archivo este vacío y no haya guardado comandos.

imagen 5. Deshabilitar historial de comandos de mysql.

Usuario mysql:
Evitar el inicio de sesión del usuario de MySQL puede reducir el impacto de una cuenta local que comprometa MySQL, establecemos el usuario correspondiente a /sbin/nologin.

imagen 6. Establecer usuario mysql a /sbin/nologin.

Permisos del Sistema de Archivos.
Los datos del directorio:
Verificar que en el directorio de archivos donde se encuentran las bases de datos Mysql nada mas pueda Leer y escribir por el usuario de MySQL solamente.

imagen 7. Verificando que nada más puedan leer y escribir el usuario mysql.

9

Binarios:
Verificar los permisos de los binarios que sean accesibles únicamente por el administrador y el usuario de la bases de datos.

imagen 8. Verificando permisos de binarios.

10

Archivos de Configuración:
Establecer los permisos para que el archivo de configuración sea legible por el administrador y usuarios de la bases de datos.

imagen 9. Permisos del archivo de configuración de mysql.

Archivos de registro:
Estos archivos de registro deben tener permisos de lectura y escritura para el administrador de MySQL.

imagen 10. Verificar permisos para el archivo de registros.

Prevenir lectura de archivos locales:
Para deshabilitar la lectura de archivos usamos el parámetro de load data local infile en el archivo de configuración.
imagen 11. Parámetro para deshabilitar la lectura de archivos locales.

Registro
Habilitar el registro de error:
Nos fijamos que este habilitado el registro de errores, que se encuentra en /etc/my.cnf porque este puede aumentar la capacidad para detectar intentos maliciosos contra MySQL.

imagen 12. Registro de error habilitado.

11

General
Eliminar base de datos de prueba:
La instalación predeterminada de MySQL viene con una base de datos que se llama prueba (test), y la eliminación de componentes no utilizados eliminará una capacidad ataques para aprovecharlas.

imagen 13. Eliminar base de datos test.

Cambiar nombre de cuenta de administrador:
Esto limitará el uso de esta cuenta para fines administrativos que no sean del sistema operativo. Además, evitando la cuenta de root para las interacciones de MySQL reducirá la posibilidad de poner en peligro el sistema a través de una vulnerabilidad.

12

Cambiar nombre de root.

imagen 14. Comprobando cambio de nombre del root.

Si deseamos cambiar la contraseña lo haremos de la siguiente manera.

imagen 15. Cambiando contraseña al root.

Contraseñas complejas:
Debe usar una política para requerir contraseñas complejas de todas las cuentas de la base de datos. Por que esto ayuda a mitigar ataques de diccionario, fuerza bruta y otros ataques de contraseña.

Verificar Hashes de contraseña segura:
Debemos de verificar que tenemos un hash de contraseña fuerte como la versión 4.1 que es de 41 bytes, porque los hash anteriores fueron solo de 16 bytes. Si utilizamos el hash mas fuerte garantizamos la confidencialidad de los datos y las credenciales de autenticación.
13

imagen 16. Verificar que las contraseñas tengan hash de 41 bytes.

Como vemos tenemos un hash de 16 bytes para cambiar esto nos vamos al archivo my.cnf y cambiamos la opción old_password=1, cambiamos el 0 por el 1.

Luego cambiamos el password y verificamos que ya tengamos una contraseña de 41 bytes.

imagen 17. Generando hash de 41 bytes.

Comprobamos si todavía este el password de 16 bytes.

imagen 18. Ya no está el password de 16 bytes.

Verificamos los usuarios con el password, como vemos ha cambiado hacemos lo mismo con el usuario john.
14

imagen 19. Hash de 41 bytes listo.

Cuentas de uso individual:
Las cuentas de usuario de la base de datos no deben ser reutilizadas para varias aplicaciones. Si utilizamos una sola cuenta de base de datos para la aplicación esto hace que este menos comprometido MySQL.

Sin contraseñas en blanco:
Las contraseñas en blanco permiten a un usuario cualquiera iniciar sesión. Verificamos y si las hay les asignamos una, por que las contraseñas en blanco niegan los beneficios proporcionados por mecanismos de autenticación.

imagen 20. Para ver los usuarios y el password.

Para asignar contraseñas.

Cuenta anónima:
Las cuentas anónimas son usuarios sin nombre, y esto permiten inicios de sesión predeterminados y sus permisos a veces pueden ser utilizados por otros usuarios.

Ver si hay usuarios anónimos.

15

imagen 21. Borrar usuarios anónimos.

Borrar usuarios con comodines:
Verificar si hay usuarios con comodines y borrarlos porque así aseguramos que solo los usuarios de confianza puedan interactuar con MySQL.

imagen 22. Borrando usuario con comodines.

Deshabilitar socket de red:
El primer cambio se aplica al puerto 3306/tcp, en el que escucha por defecto MySQL. La base de datos será utilizada sólo por las aplicaciones PHP instalados localmente, así que deshabilitaremos el listening del puerto. Esto limitará las posibilidades de atacar la base de datos MySQL por contacto directo de las conexiones TCP / IP de otros hosts. Con el fin de desactivar la escucha en el puerto mencionado, el siguiente parámetro debe ser añadido al archivo my.cnf.
imagen 23. Parámetro para deshabilitar el socket de red de mysql.

16

No usar el registro de actualización: Verificamos si el parámetro log-update está en el archivo de configuración, si es
así lo quitamos o deshabilitamos porque esto ya no se usa y es insegura, en su lugar se utiliza el registro binario.

Deshabilitar show databases:
Al deshabilitar este comando no podrá ver información de nuestras bases de datos y es quitarles recursos a los atacantes, esto lo hacemos insertando la siguiente parámetro en el archivo my.cnf.
imagen 24. Parámetro para deshabilitar show databases.

Privilegios en las bases de datos:
Lo más recomendable es que sólo usted, como administrador del sistema pueda tener todos los privilegios de archivos y de la base de datos mysql. En los demás usuarios se deben verificar y disminuir los privilegios para aumentar la seguridad.

imagen 25. Verificar privilegios de root y usuarios.

17

Instalación de la Aplicación Web Wordpress
Lo primero descargaremos la aplicación de la página oficial.

Después se descomprime y ubicamos la carpeta /var/www/html/

imagen 26. Aplicación wordpress descomprimido en en el directorio html.

La última versión de wordpress 3.3.1 funciona con php 5.2 y la versión que tengo es la 5.1 necesitamos actualizar la versión del php si no sabemos qué versión tenemos podemos ejecutar el siguiente comando.

imagen 27. Verificar la version de php.

Ya verificado la versión procederemos a instalar un repositorio para actualizar a la versión php 5.2.10.

18

imagen 28. Instalar repositorio para actualizar php.

Después actualizamos.

Verificamos si la versión ha cambiado.

imagen 29. Verificando versión php.

Antes de iniciar la instalación hay que editar el archivo wp-config-sample.php que está dentro de la carpeta de wordpress, para poner cual es nuestra base de datos, el usuario, el password y hostname. ( ‘DB_NAME’ , ‘wordpress’ ) ; ( ‘DB_USER’ , ‘john’ ) ;
19

( ‘DB_PASSWORD’ , ‘REDES12345’ ) ; ( ‘DB_HOST’ , ‘LOCALHOST’ ) ; Luego renombramos el archivo a wp-config.php. Ahora editamos el archivo httpd.conf para habilitar los virtualhost desomentamos y cambiamos según nuestra configuración.

imagen 30. Habilitando virtualhost.

Ahora vamos al explorador web y wordpress.john.com y nos deberá cargar la aplicación.

imagen 31. Página de inicio de wordpress.

20

Conclusiones
Al terminar esta instalación se pude ver como es de accesible nuestros datos o información para un ataque, por eso es de vital importancia asegurar nuestro sistema y bases de datos. Este proceso no lleva mucho tiempo y además no es difícil teniendo claro que no están todos los pasos para un endurecimiento más efectivo. Con esto podremos evitar perdidas grandísimas a una empresa por que en la base de datos podría irse información que la podría destruir o acabar.

21

Sign up to vote on this title
UsefulNot useful