Loading
Apuntes
Study Reminders
Support
Text Version

Bases de datos PostgreSQL

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

En esta sección vamos a centrarnos en postgresql vamos a hablar de la arquitectura postgresql, así como de cómo comprometer la postgresql y cómo asegurar la plataforma así que primero vamos a sumergirnos en la arquitectura de modo que la arquitectura de postgresql incluye al cliente un componente llamado el postmaster que es como el oyente fue cuando hablamos de la base de datos de oracle y entonces usted tiene el backend tenemos archivos de configuración y luego los archivos de datos reales que componen la base de datos en sí, así como los archivos de registro que están asociados con él ahora el puerto predeterminado para postgresql ql es 5432 ahora que no significa que cada base de datos postgresql estará a la escucha en ese puerto, pero es el puerto predeterminado por lo que es el primero en comprobar primero así que hice un telnet rápido se puede ver que en realidad estamos escuchando en ese puerto que tengo una instalación de postgresql ya en el lugar como una cuestión de hecho está en el lugar porque está sirviendo como la base de datos para mi openvas de instalación de openvas sólo como una nota lateral es una herramienta de exploración de vulnerabilidad de código abierto y pasa a utilizar postgresql todo el derecho por lo que vamos a navegar a través de algunas de las estructuras de directorio aquí y usted mira a través de la carpeta base estos son en realidad registros de base de datos archivos de base de datos mismos y miramos a través de otras estructuras podemos ver los archivos de configuración reales ahora los archivos de configuración son en realidad almacenados en el directorio etsy mientras que los archivos de base de datos etc al menos en ubuntu y la instalación de ubuntu están en var lib postgresql y luego el número de versión así que vamos a navegar a la carpeta etsy y vamos a echar un vistazo a los archivos de configuración por lo que me acordé de que ya hemos dicho que vale aquí están los componentes que componen la base de datos esencialmente que es la configuración de los archivos de base de datos y los oyentes y el cliente de modo que la configuración Los archivos están aquí bajo etsy postgresql slash version slash main usted puede ver que tenemos postgres control postgres hba ident postgresql.com y vamos a caminar a través de todo esto en detalle a medida que vamos a lo largo de esta sección, pero seguimos adelante y voy a abrir postgresql.conf y se puede ver que hay referencias a otros archivos y archivos de configuración y uno de ellos es hba los postgres subrayado hba que es el archivo de autenticación basado en host y que es donde we'l configurar la configuración de autenticación, pero se nota que acabamos de pasar a través de algunos de los ajustes de configuración y ssl y así configurar una ssl enable postgresql parte de esa configuración se llevará a cabo aquí en el archivo postgresql.conf ahora, además de que para ssl necesitaremos configurar los certificados así que aquí hay otro vistazo a los archivos conf también hay un ident.conf y luego tenemos el archivo de configuración de inicio, pero vamos a ver en el archivo de autenticación basado en host así es donde se lleva a cabo una gran parte de nuestra configuración de seguridad y aquí es donde configuramos la seguridad para el escucha o en la terminología postgresql el postmaster para que pueda ver que hay varios tipos diferentes de autenticación que tiene md5 tenemos autenticación basada en pares autenticación basada en host y aviso de que puede configurar varios parámetros en términos de direcciones de red ips individuales y subredes de acuerdo por lo que cuando se trata de métodos de autenticación hay ocho métodos de autenticación que son soportados por postgresql y el primero es la confianza y esencialmente eso significa que no hay seguridad en la que confiar en la conexión un rechazo sería rechazar la conexión directamente ident y lo que significa es que estamos mapeando la autenticación a un usuario o ldap que vamos a hablar de la autenticación basada en contraseña que es texto claro de forma predeterminada por el camino y la contraseña de cript con el asalto md5 es la sal y la combinación de nombre de usuario usted puede utilizar kerberos también para autenticar a postgresql así que lo que estoy haciendo aquí es que voy a entrar y vamos a echar un vistazo a la instalación base ahora he abierto los postgres hba el archivo de autenticación basado en el host y se puede ver las opciones arriba que acabo de recorrer y lo que me gustaría hacer es a medida que vamos a través de la lección modificar el mecanismo de autenticación y cambiarlo a md5 por lo que cualquier cliente que trate de autenticar de forma remota o incluso local para ese asunto debe ser necesario para autenticar con una contraseña y además de que La contraseña será hash correctamente porque si simplemente elegimos la opción de contraseña sí que se nos solicitará una contraseña sí habría un nombre de usuario y contraseña configurados para una conexión de escucha pero que estaría en texto claro por lo que ahora que hemos habilitado la contraseña para el escucha de barra de escucha post-maestro vamos adelante y tratar de autenticar así psql es el comando que vamos a utilizar para autenticar en la línea de comandos para obtener nuestra interfaz postgresql todo el derecho para que usted pueda ver que nos autenticamos y se nos pide una contraseña y estamos en una solicitud de postgres así que cuando se instala postgresql por defecto no hay realmente una base de datos que no sea algunos de los catálogos del sistema que existen por lo que el comando create db nos permitirá crear una base de datos y usted necesita asegurarse por supuesto de que tiene los permisos correctos para hacerlo de acuerdo así que he creado una base de datos llamada prueba de seguridad que no significa necesariamente que está llena con cualquier tabla todavía así que he ejecutado un script para seguir adelante y llenar que necesitamos algunas tablas de ejemplo para probar con todo el derecho así que si hacemos una barra invertida d más que nos muestra que tenemos algunos componentes de esquema tenemos una lista de las relaciones una lista de las tablas que tenemos una mesa de la ciudad de mesa podemos mirar la estructura de un tabla individual con barra invertida d el nombre de la tabla todo el derecho por lo que se ejecuta una selección se puede ver el contenido de algunas de las tablas por lo que tenemos nuestro entorno de laboratorio básico configurado y hemos establecido algo de seguridad básica en el escucha, pero realmente no hemos configurado ninguna seguridad todavía para la base de datos en sí y vamos a entrar en que momentáneamente se puede ver las bases de datos reales que hay algunas plantillas de base de datos hay postgres en sí mismo y luego la base de datos de prueba de seguridad que hemos creado utilizando el comando create db así como una nota lateral postgresql no utiliza los usuarios del sistema operativo para autenticarse utiliza nombres de usuario y contraseñas para autenticar que se almacenan en la tabla de catálogo del sistema de sombra de subrayado pg y sólo el super usuario para postgresql tiene acceso a esa tabla por lo que obviamente usted quiere proteger al super usuario para postgresql así que a continuación voy a emitir una consulta que nos muestra la información de nombre de usuario y contraseña para los usuarios de msf y postgresql y realmente el punto aquí es sólo para mostrar que son md5 hashed así que postgresql, además de cuentas de usuario también soporta grupos y roles por lo que vamos a emitir una consulta aquí para obtener una lista de grupos a continuación quiero crear un nuevo usuario y sólo quiero mostrar que es posible crear una cuenta de usuario con una contraseña sin cifrar, pero usted tiene que salir de su camino para hacerlo no es una configuración predeterminada y voy a decir que postgresql es una base de datos relacional de código abierto que está diseñado con la seguridad en mente y muchos de los valores de seguridad predeterminados están en el lugar justo fuera de la puerta por lo que hemos creado el usuario y usted ve que podemos ver la contraseña en texto claro, que por supuesto es una mala idea, por lo que hemos mencionado con otras bases de datos postgresql también es compatible con procedimientos almacenados y procedimientos almacenados a menudo son un vector de ataque que los atacantes y el malware pueden utilizar especialmente el sistema por defecto Procedimientos almacenados para comprometer potencialmente una base de datos así que aquí están los idiomas que están soportados para los procedimientos almacenados internos tenemos c sql y pl sql que están soportados por lo que ahora que hemos cubierto parte de la arquitectura de pl sql hemos establecido nuestro entorno de laboratorio tenemos algunos datos de ejemplo a continuación vamos a pasar a atacar la base de datos postgresql así que cuando hablamos de atacar las instalaciones de postgresql hay realmente seis pasos al proceso o seis consideraciones en términos de asegurar y o atacar el medio ambiente uno es si soy un atacante necesito encontrar la puerta principal y que por supuesto es el oyente podemos emitir ataques basados en la red y spoofing y varios otros que voy a caminar por lo que aquí he abierto nmap voy a ejecutar una exploración de nmap en este segmento de red para que pueda ver que he ejecutado una exploración en esta red de clase c y no estamos encontrando ninguna instancia de postgresql que tiene sentido porque sólo hay una instancia de postgresql en mi entorno de laboratorio y sucede que es la máquina en la que estamos corriendo en este momento así que lo que voy a necesitar hacer es ejecutar una exploración de puerto en mi máquina local ahora a veces verás un mensaje que vuelve que hay un protocolo filtrado que no significa necesariamente que hay un escucha de ese protocolo en su lugar significa que hay un cortafuegos de algún tipo que lo está filtrando así que ahora vamos a ejecutar el escaneo en nuestra máquina local de acuerdo con lo que usted sabe que tenemos postgresql en funcionamiento en esta máquina así que tiene sentido que se encuentra el puerto abierto y esta es una de las primeras cosas que desea buscar yo voy a contar que también y verificar sí es de hecho escuchar así como he mencionado en términos postgresql el postmaster es muy parecido a la escucha de tns para la base de datos de oracle es un policía de tráfico y una pasarela de seguridad en cierta medida en términos de la gestión del establecimiento de conexiones de clientes ahora el otro tipo de ataque aparte de tratar de comprometer al propio oyente sería un ataque basado en la red y esto puede ser en otros niveles del modelo tcp, como el nivel dos nivel tres y esto supone que usted tiene acceso al segmento local de la lan, así como un atacante si usted ha comprometido una máquina que puede girar de esa máquina y atacar otros sistemas y estos otros sistemas pueden utilizar digamos que comprometen un servidor que pueden utilizar ese servidor como punto de lanzamiento para un ataque basado en la red contra un servidor postgresql así que si usted realmente había dejado decir comprometido un servidor que está en la misma lan como un postgresql Entonces usted podría implementar una herramienta como wireshark en ese segmento local y comenzar a capturar datos y todos los datos de postgresql por defecto está en cleartext no está encriptado con tls ssl por defecto hay ciertos pasos que usted necesita para ir a través de lo que vamos a cubrir posteriormente, pero sólo tenga en cuenta que esa información está en texto claro ahora si usted ha configurado la autenticación basada en host dentro del archivo postgresql hba conf entonces la dirección ip que se ha establecido o los ips que se han establecido para permitir bien si usted pasa a estar en una de esas máquinas y usted ha comprometido una de esas máquinas bien usted tiene acceso a la La base de datos en virtud del hecho de que usted viene de esa dirección p, pero tenga en cuenta que las direcciones de i p dirección i pueden ser spooped spoofed y las direcciones mac pueden ser spoofed, así que voy a navegar de nuevo en el archivo pghba.com así como he mencionado si usted tiene una configuración de autenticación basada en el host sería por dirección ip hay otros mecanismos y parámetros que podemos configurar para mejorar la seguridad de las conexiones por lo que arp spoof es una herramienta de libre disponibilidad que le permitirá spoof su dirección mac así que si usted hubiera comprometido una máquina que está en la lan situada en la subred adyacente a o la misma subred que la base de datos postgresql entonces podemos spoof nuestra capa dos direcciones y posteriormente potencialmente obtener acceso a la máquina por lo que algunos de los otros vectores de ataque fuera de spoofing o ataques basados en la red o enumeración son para encontrar los errores y vulnerabilidades dentro de la base de datos y cve.mitre.org es un buen lugar para buscar las vulnerabilidades reportadas por lo que hay la base de datos de vulnerabilidad y exposición común y usted puede buscar allí específico para el tipo de base de datos y la versión de la base de datos y podemos encontrar potencialmente versiones que tienen vulnerabilidades asociadas con ellos y usted puede mirar Esto también por plataforma así que en nuestro caso estamos ejecutando postgresql 9.3 en ubuntu 14.04 así como lo mencioné cuando hablamos de esta cobertura de bases de datos de oracle lo mismo es cierto aquí, que es que estamos buscando vulnerabilidades en esta versión de la base de datos o más adelante ahora, además de encontrar las vulnerabilidades digamos que encontramos una vulnerabilidad en nuestra versión bien como un atacante que querríamos encontrar un exploit asociado con esa vulnerabilidad por lo que una cosa es saber que una máquina es potencialmente vulnerable el siguiente paso sería encontrar una explotación real que se puede implementar tal vez en metasploit También podemos buscar un poco más genéricamente mirando el tipo de base de datos y la versión de la base de datos y a veces usted encontrará que cuando usted hace una búsqueda en una cve particular que no hay un exploit para ella en la base de datos de explotación que no significa que una explotación no existe todo lo que significa es que la explotación no existe en esta base de datos así que la excavación alrededor en la web oscura puede llegar a resultados diferentes así que si hacemos una búsqueda de postgresql y pasamos a través de este proceso de captcha real rápidamente aquí entonces podemos ver si hay algún publicado Las vulnerabilidades me excusan publicado hazañas para postgresql y hay de hecho algunos, pero en particular no hay realmente un montón y creo que eso es un testimonio de la seguridad de esta plataforma, así como un atacante otra cosa que buscaríamos son las instalaciones de postgresql o bases de datos que tienen configuraciones inseguras y una de las cosas más importantes que usted puede hacer otra cosa que patching la base de datos que usted sabe que constantemente y es importante que la otra cosa importante que podemos hacer es asegurar que la configuración se ha endurecido y así que parte de eso implica la instalación de la Puede que desee asegurarse de que no instale la base de datos como root o más específicamente que la base de datos no se ejecute como root, ya que si la base de datos se está ejecutando como usuario root, la base de datos está comprometida y viceversa, por lo que si se está ejecutando como root alguien tiene acceso de root a la base de datos, ellos automáticamente tendrán acceso a la base de datos y eso funciona en la otra dirección. el proceso de seguridad y endurecimiento para postgresql y usted sabe que una de las cosas más simples que puede hacer a un lado de asegurar el oyente es cifrar el tráfico al servidor postgresql y así lo haríamos a través del archivo postgresql.conf y usted también necesitaría generar un certificado para ser utilizado para facilitar el cifrado.