Seguridad en BD

48
1 Seguridad en BD Universidad de los Andes Demián Gutierrez Enero 2009

Transcript of Seguridad en BD

Page 1: Seguridad en BD

1

Seguridad en BD

Universidad de los AndesDemián Gutierrez

Enero 2009

Page 2: Seguridad en BD

2

¿Seguridad?

La seguridad informática consiste en asegurar que los recursos de sistemas y de información (material informático o

programas, bases de datos, etc.) de una organización sean utilizados de la manera

en que se decidió y que el acceso a la información allí contenida, así como su modificación, sólo sea posible a las

personas que se encuentren acreditadas y dentro de los límites de su autorización

Fuente: http://es.wikipedia.org/wiki/Seguridad_informática

Page 3: Seguridad en BD

3

Seguridad

Físico: Los servidores (o nodos de cómputo) donde está el SGBD deben estar protegidos frente al acceso de

extraños

Humano:El personal encargado de los servidores debe ser

calificado y de confianza(sobornos / ingeniería social)

Red:La red en la que opera el SGBD debe tener las protecciones correspondientes, protección en el

envío de datos, firewalls, cifrado, entre otras

Page 4: Seguridad en BD

4

Seguridad

SGBD:La base de datos debe ser configurada con roles, privilegios y permisos adecuados para evitar los

accesos malintencionados

Sistema Operativo: El sistema operativo debe estar actualizado y se

deben realizar todos los esfuerzos necesarios para que no sea vulnerable

Software / Aplicación: Las aplicaciones cliente de los SGBD deben ser diseñadas y desarrolladas con los niveles de

seguridad adecuados

Page 5: Seguridad en BD

5

Seguridad Obligatoria(¿SGBD que lo soporten?)

¿Dónde implementar la seguridad?

¿Seguridad a nivel del SGBD o

seguridad a nivel de la Aplicación?

Recuerden el dilema:

¿Validar a nivel del SGBD, a nivel de la aplicación, a nivel del cliente?

Page 6: Seguridad en BD

6

Seguridad Obligatoria(¿SGBD que lo soporten?)

SGBD

Aplicación

Seguridad a nivel de la BD: Usuarios, Roles, Vistas, Permisos, etc.

Seguridad a nivel de la

aplicación: ¿?

Page 7: Seguridad en BD

7

Seguridad Obligatoria(¿SGBD que lo soporten?)

Aplicación

Seguridad a nivel de la aplicación:Usuarios, Roles, Permisos y Privilegios incrustados en la

lógica de negocio, restricciones de acceso a los recursos,

propietarios de registros/objetos, visibilidades, etc.

Page 8: Seguridad en BD

8

¿SQL INJECTION?(Tópico Aparte,Mover a SQL)

Page 9: Seguridad en BD

9

¿Quién puede explicar la razón por la que esta tira cómica es tan (pero tan) graciosa?

(al menos para mi)(Cortesía de xkcd)

Page 10: Seguridad en BD

10

SELECT * FROM user WHERE name='%NAME%' AND pass='%PASS%'

(Si retorna al menos un registro, dejamos entrar al usuario)

%NAME% = foo%PASS% = whatever' OR '1'='1

¿Cuál será el SQL generado?

Page 11: Seguridad en BD

11

SELECT * FROM user WHERE name='foo' AND pass='whatever' OR '1'='1'

¿Cuántos registros genera la consulta anterior?

¿Les resulta ahora gracioso?

Page 12: Seguridad en BD

12

...volviendo al tópico (Seguridad)

Page 13: Seguridad en BD

13

Seguridad(A nivel del SGBD)

En los SGBD, el concepto de seguridad se refiere a la protección de los datos ante usuarios no autorizados, es decir, definir estrategias que permitan establecer que usuarios pueden acceder a que datos

● Tipos de seguridad en los SGBD– Seguridad Discrecional

– Seguridad Obligatoria

– Seguridad en Sistemas Estadísticos

(¿Qué creen que sea esto?)

Page 14: Seguridad en BD

14

Seguridad Discrecional

Se basa en otorgar privilegios a usuarios (o grupos de usuarios), en los que se incluye la capacidad de tener acceso tablas, registros o campos específicos con un determinado modo

(para leer, insertar o actualizar)

● Autorizar al usuario X a realizar consultas en

filas de la tabla A

● Autorizar al usuario X a utilizar un

procedimiento almacenado B

Page 15: Seguridad en BD

15

Seguridad Discrecional

Usuario 1(Grupo 1)

Usuario 2(Grupo 1)(Grupo 2)

Grupo 1

Grupo 2

Grupo 3

Tabla 1

Tabla 2

Secuencia 2

Vista 1

Índice 1

...

Las vistas son una poderosa herramienta para

controlar la seguridad

Page 16: Seguridad en BD

16

Seguridad Discrecional

Usuario 1(Grupo 1)

Tabla 1:Columna XColumna YColumna Z

Tabla 2:Columna AColumna BColumna C

Vista 1:Columna AColumna BColumna XColumna Y

CREATE VIEW vista1 AS ( SELECT ColumnaA, ColumnaB, ColumnaX, ColumnaY FROM tabla1, tabla2 WHERE ...)

Grupo

¿Puede Usuario 1 ver los valores de las columnas C y Z? ¿Puede modificar alguna

fila de las tablas 2 y 3?

¿Cómo evitan que Usuario 1 vea ciertas filas específicas?

Page 17: Seguridad en BD

17

Seguridad Obligatoria

Consiste en imponer seguridad de múltiples niveles, clasificando los datos y los usuarios en varias clases (o niveles) de seguridad, de manera que los usuarios puedan acceder a

los datos según tengan o no el nivel necesario para el dato que desean acceder

● Las filas (o los objetos) tienen un nivel Fi de

seguridad, que solo se pueden leer si el usuario

tiene un nivel Ui >= Fi de seguridad...

1 2 3 4

Page 18: Seguridad en BD

18

Seguridad Obligatoria(Reglas)

● El usuario X puede recuperar (leer) el objeto Y

sólo si el nivel de acreditación (seguridad) de X

(Ui) es mayor o igual que el nivel de

clasificación de Y (Fi)

(“propiedad de seguridad simple)

● El usuario X puede actualizar el objeto Y sólo si

el nivel de acreditación de X (Ui) es igual al

nivel de clasificación de Y (Fi) (“propiedad

estrella”). ¿Ideas de por qué esto es así?

Page 19: Seguridad en BD

19

Seguridad Obligatoria(Reglas)

La segunda regla anterior evita que existan filtraciones de seguridad hacia abajo, o que un

usuario escriba datos que luego no pueda leer... (hacia arriba)

Empleado

Cédula Nombre Sueldo Clasificación

12.334.543 Pedro Perez 3000 3

14.232.650 Juan García 2500 3

15.556.345 Diego Rojas 4000 3

16.343.222 Luis Silva 10000 4

18.909.123 Marcos Quintero 1000 2Usuario 1(Seguridad 2)

(MenosSeguridad)

Usuario 2(Seguridad 3)

(MásSeguridad)

Page 20: Seguridad en BD

20

Seguridad Obligatoria(Reglas)

Usuario 1(Seguridad 2)

Empleado

Cédula Nombre Sueldo Clasificación

18.909.123 Marcos Quintero 1000 2

SELECT * FROM empleado

SELECT * FROM empleado WHERE clasificacion <= 2

SELECT * FROM empleado

SELECT * FROM empleado WHERE clasificacion <= 3

Empleado

Cédula Nombre Sueldo Clasificación

12.334.543 3000 3

14.232.650 2500 3

15.556.345 Diego Rojas 4000 3

18.909.123 Marcos Quintero 1000 2

Pedro Perez

Juan GarcíaUsuario 2(Seguridad 3)

Page 21: Seguridad en BD

21

Seguridad Obligatoria(Reglas)

Usuario 1(Seguridad 2)

INSERT INTO empleado VALUES(16.343.222, 'Luis Silva', 2000)

INSERT INTO empleado VALUES(16.343.222, 'Luis Silva', 2000, 2)

Empleado

Cédula Nombre Sueldo Clasificación

12.334.543 3000 3

14.232.650 2500 3

15.556.345 Diego Rojas 4000 3

16.343.222 Luis Silva 2000 2

16.343.222 Luis Silva 10000 4

18.909.123 Marcos Quintero 1000 2

Pedro Perez

Juan García

Page 22: Seguridad en BD

22

Seguridad Obligatoria(Reglas)

Usuario 1(Seguridad 2)

Empleado

Cédula Nombre Sueldo Clasificación

18.909.123 Marcos Quintero 1000 2

16.343.222 Luis Silva 2000 2

SELECT * FROM empleadoSELECT * FROM empleado WHERE clasificacion <= 2

SELECT * FROM empleadoSELECT * FROM empleado WHERE clasificacion <= 4Empleado

Cédula Nombre Sueldo Clasificación

12.334.543 3000 3

14.232.650 2500 3

15.556.345 Diego Rojas 4000 3

16.343.222 Luis Silva 2000 2

16.343.222 Luis Silva 10000 4

18.909.123 Marcos Quintero 1000 2

Pedro Perez

Juan García

Usuario 3(Seguridad 4)

Page 23: Seguridad en BD

23

Seguridad Obligatoria(¿SGBD que lo soporten?)

Oracle Label Securityhttp://www.oracle.com/technology/deploy/security/database-security/label-security/index.html

SEPostgreSQL (Security Enhaced)http://wiki.postgresql.org/wiki/SEPostgreSQL_Introduction

Page 24: Seguridad en BD

24

Seguridad Discrecional(PostgreSQL)

PostgreSQL manages database access permissions using the concept of roles. A role can be thought of as

either a database user, or a group of database users, depending on how the role is set up. Roles can own database objects (for example, tables) and can

assign privileges on those objects to other roles to control who has access to which objects. Furthermore, it is possible to grant membership in a role to another role, thus allowing the member role use of privileges

assigned to the role it is a member of.

Fuente: http://www.postgresql.org/docs/8.4/interactive/user-manag.html

Page 25: Seguridad en BD

25

Seguridad Discrecional(PostgreSQL)

Rol

Privilegios(Seguridad a

nivel deObjetos)

Atributos(Seguridad global y a

nivel de BD)

Usuario(Puede

hacer Login)

Grupo(No puede

hacer Login)

es de tipo

pertenece yhereda privilegios

y atributos de

tiene tiene

Page 26: Seguridad en BD

26

Seguridad Discrecional(PostgreSQL)

Advertencia: La herencia entre Grupo, Usuario y Rol y la relación entre Grupo y Usuario tiende a crear mucha

confusión en lo que respecta a la terminología...

Page 27: Seguridad en BD

27

Seguridad Discrecional(PostgreSQL)

Los roles de la BD son “usuarios”, son globales, es decir, no existen por cada base

de datos

CREATE ROLE nombre_rol;

DROP ROLE nombre_rol;

SELECT * FROM pg_roles;rolname |super|inherit|createrole|createdb|catupdate|canlogin|connlimit|pass|...--------+-----+-------+----------+--------+---------+--------+---------+----+---postgres|t |t |t |t |t |t | -1|****|...foo |f |t |f |t |f |t | -1|****|...

Para más información sobre el resultado del select consultar el manual de PostgreSQL

Page 28: Seguridad en BD

28

Seguridad Discrecional(PostgreSQL / Atributos)

CREATE ROLE foo LOGIN CREATEDB PASSWORD 'foo123';

ALTER ROLE foo CREATEDB PASSWORD 'xxxyyy';

● LOGIN: La posibilidad de hacer login

● SUPERUSER: Permisos de superusuario (usar con

cuidado)

● CREATEDB: La posibilidad de crear bases de datos

● CREATEROLE: La posibilidad de crear otros roles

● PASSWORD 'string': Para asignar una contraseña

(String es el password)

Page 29: Seguridad en BD

29

Seguridad Discrecional(PostgreSQL / Sobre el password)

#TYPE DATABASE USER CIDR-ADDRESS METHOD

# "local" is for Unix domain socket connections only#local all all trust local all all password

# IPv4 local connections:#host all all 127.0.0.1/32 trust host all all 127.0.0.1/32 password

# IPv6 local connections:#host all all ::1/128 trust host all all ::1/128 password

Archivo de Configuración de PostgreSQL/usr/local/pgsql/data/pg_hba.conf

Es decir, la estrategia de autentificación puede variar y ajustarse según las necesidades (No solo en PostgreSQL,

sino en la mayoría de los SGBD)

Page 30: Seguridad en BD

30

ESQUEMASSCHEMAS

(Tópico Aparte,Mover a SQL)

Page 31: Seguridad en BD

31

Seguridad Discrecional(PostgreSQL / Privi legios)

SGBD

Schema 1 tabla/objeto 1BD1

BD2

BD3

BDn

...

Schema 2

Schema 3

Schema N

...

tabla/objeto 2

tabla/objeto 1

tabla/objeto N

...

tabla/objeto 1

No todos los SGBD usan esta esta estrategia, pero es común que la

mayoría definan estructuras de este tipo

Page 32: Seguridad en BD

32

Crear o El iminar una Schema(¿Qué es un Schema?)

test=# \dn List of schemas Name | Owner --------------------+---------- information_schema | postgres pg_catalog | postgres pg_toast | postgres pg_toast_temp_1 | postgres public | postgres(5 rows)

test=# CREATE SCHEMA some_schema_name;CREATE SCHEMAtest=# \dn List of schemas Name | Owner --------------------+---------- information_schema | postgres pg_catalog | postgres pg_toast | postgres pg_toast_temp_1 | postgres public | postgres some_schema_name | postgres(6 rows)

test=#

test=# DROP SCHEMA some_schema_name;DROP SCHEMAtest=# \dn List of schemas Name | Owner --------------------+---------- information_schema | postgres pg_catalog | postgres pg_toast | postgres pg_toast_temp_1 | postgres public | postgres(5 rows)

test=#

El schema es básicamente un espacio de nombre, es

posible tener tablas con el mismo nombre en diferentes

schemas

Page 33: Seguridad en BD

33

Seguridad Discrecional(PostgreSQL / Privi legios)

test=# CREATE SCHEMA some_name_a;CREATE SCHEMAtest=# CREATE SCHEMA some_name_b;CREATE SCHEMAtest=# CREATE TABLE some_name_a.tableX

(id INT);CREATE TABLEtest=# CREATE TABLE some_name_b.tableX

(id INT);CREATE TABLEtest=# INSERT INTO some_name_a.tableX

VALUES (1);INSERT 0 1test=# INSERT INTO some_name_b.tableX

VALUES (9);INSERT 0 1test=# SELECT * FROM some_name_a.tableX; id ---- 1test=# SELECT * FROM some_name_b.tableX; id ---- 9

TEST

somename A

somename B

tableX tableX

Los schemas ayudan en la seguridad en el sentido de que son OBJETOS a los que les podemos asignar

privilegios y que agrupan a OTROS OBJETOS

Page 34: Seguridad en BD

34

...volviendo al tópico (Seguridad)

Page 35: Seguridad en BD

35

Seguridad Discrecional(PostgreSQL / Privi legios)

Cuando un “objeto” (tabla, secuencia, índice, etc) es creado usualmente se le asigna un

dueño. Por defecto, el dueño es el rol (usuario) que crea el objeto. Es decir, para la mayor parte de los objetos, inicialmente, sólo el dueño y el superusuario pueden hacer algo

con el objeto

Para permitir a otros usuarios hacer algo con esos objetos es necesario asignar privilegios,

de los cuales hay de distintos tipos:(Lamina siguiente)

Page 36: Seguridad en BD

36

Seguridad Discrecional(PostgreSQL / Privi legios)

SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER, CREATE, CONNECT,

TEMPORARY, EXECUTE, USAGE

Los privilegios se asignan con el comando GRANT:

GRANT UPDATE ON tabla TO rol;

y se eliminan con REVOKE:

REVOKE ALL ON tabla FROM rol;

Page 37: Seguridad en BD

37

Ejemplo en SQL con SELECT e INSERT...

Seguridad Discrecional(PostgreSQL / Privi legios)

Page 38: Seguridad en BD

38

SELECTPermite hacer SELECT de cualquier columna

en la tabla, vista o secuencia especificada. También permite usar COPY FROM. Para secuencias este privilegio permite usar la

función currval.

INSERTPermite insertar nuevas filas en la tabla

especificada, también permite la operación COPY TO sobre la tabla en cuestión.

Seguridad Discrecional(PostgreSQL / Privi legios)

Page 39: Seguridad en BD

39

Seguridad Discrecional(PostgreSQL / Privi legios)

UPDATE

Permite actualizar cualquier columna de la tabla especificada. SELECT ... FOR UPDATE y SELECT ... FOR SHARE también requieren

este privilegio (Además del privilegio SELECT). Para secuencias, este privilegio

permite el uso de la función nextval y setval.

DELETE

Permite eliminar filas de la tabla en cuestión.

Page 40: Seguridad en BD

40

Seguridad Discrecional(PostgreSQL / Privi legios)

REFERENCES

Para crear claves foráneas es necesario tener este privilegio tanto en la tabla que hace la referencia como en la tabla referenciada.

TRIGGER

Permite crear gatillos en la tabla especificada

Page 41: Seguridad en BD

41

Seguridad Discrecional(PostgreSQL / Privi legios)

CREATE

Si se asocia a bases de datos, permite crear esquemas dentro de la base de datos.

Si se asocia a esquemas permite crear objetos (tablas, vistas, etc) dentro del

esquema. Para cambiar el nombre de un objeto es necesario tener este privilegio.

Page 42: Seguridad en BD

42

Seguridad Discrecional(PostgreSQL / Privi legios)

CONNECT

Permite a los usuarios conectarse a la base de datos especificada.

TEMPORARYTEMP

Permite la creación de tablas temporales en la base de datos especificada.

Page 43: Seguridad en BD

43

Seguridad Discrecional(PostgreSQL / Privi legios)

EXECUTE

Permite el uso de la función especificada (Sólo aplica a funciones)

Page 44: Seguridad en BD

44

Seguridad Discrecional(PostgreSQL / Privi legios)

USAGE

Para lenguajes de procedimientos permite el uso del lenguaje especificado (para crear funciones en el

lenguaje especificado)

Para esquemas permite el acceso a los objetos contenidos en el esquema (asumiendo que los

privilegios de los objetos particulares se cumplen)

Para secuencias, permite el uso de la función currval y nextval sobre la secuencia especificada.

Page 45: Seguridad en BD

45

Seguridad Discrecional(PostgreSQL / Privi legios)

ALL PRIVILEGES

Da todos los privilegios disponibles. La palabra PRIVILEGES es opcional en

PostgreSQL pero su uso es obligatorio en el estándar SQL.

Page 46: Seguridad en BD

46

Seguridad

Native PostgreSQL restricts DB users with ACLs on views. This means that access

paths to a certain table cannot be described clearly, because multiple views to a table may be defined. Moreover, an

ACL on a table is not evaluated when accessed from a view. Thus, a DB user who

has the authority to define a view can access any information in the database.

Un ejemplo de la clase de problemas que se pueden encontrar...

Page 47: Seguridad en BD

47

Gracias

¡Gracias!

Page 48: Seguridad en BD

48

Seguridad

● Añadir– Seguridad en sistemas estadísticos (O dejarlo

como tarea)