SEGURIDAD EN
BASES DE DATOS
INTRODUCCIÓN A LA
SEGURIDAD
 Información almacenada en la base de datos
 debe estar protegida contra accesos no
 autorizados, la destrucción o alteración de datos
 con fines indebidos y contra la introducción
 accidental de inconsistencia.
Términos de bases de datos
VIOLACIONES DE LA SEGURIDAD
E INTEGRIDAD
                              La pérdida de
                             consistencia se
                                  debe:




                                       Anomalías en la   Error lógico que
    Caídas de      Anomalías a la
                                         distribución          viola
  transacciones    base de datos
                                        computadores      transacciones




                                                           Para respeta
                                                         protecciones de
                                                          base de datos



Es más fácil prevenir la pérdida de consistencia de datos que
prevenir el acceso mal intencionado a la base de datos
Formas de acceso indebido

  Lectura de datos sin autorización
  (robo de información).

  Modificación de datos sin
  autorización.

  Destrucción no autorizada de los
  datos
Niveles de seguridad para una base de datos:


                         Físico
  El lugar donde se encuentran los sistemas debe estar
                       protegido

                       Humano
     Debe tener cuidado al conceder autorizaciones

                   Sistema operativo
       Seguridad contra ataques exteriores

              Sistemas de bases de datos
     Garantizar que no se violen las restricciones de
                      autorización
¿Que son las inyecciones de código
SQL?

 Es un método de infiltración de código intruso
 que se vale de una vulnerabilidad informática
 presente en una aplicación en el nivel de
 validación de las entradas para realizar consultas
 a una base de datos.

 Consiste en la modificación de las consultas a
 nuestra base de datos a partir de los parámetros
 pasados por URL al script en PHP.
¿Dónde se origina este
problema?

 Por el incorrecto chequeo o filtrado
 de las variables.
¿Como saber si tu sitio puede ser
hackeado con SQL Injection?
 Simplemente agregale "/*" o una simple tilde, si te tira
  un error, tu sitio es vulnerable.
  Vamos a poner un ejemplo:
  Tu sitio es "http://www.tupagina.com/index.php?id=1"
  Lo comprobamos de la siguiente manera:
  "http://www.tupagina.com/index.php?id=1/*"
  o tambien asi:
  "http://www.tupagina.com/index.php?id=1'"
  como tambien de esta manera:
  "http://www.tupagina.com/index.php?id=1)"
  Si al colocar cualquiera de estas opciones da un
  error, tu sitio es vulnerable, por el contrario si tu sitio
  sigue mostrandose igual, tanto tu SQL como tu
  plantilla php estan correctamente configurados.
¿Como realiza un hacker la
inyección?
 Simplemente verifica que el sitio sea vulnerable
 con las tecnicas que mencioné anteriormente, si
 lo es comienza el proceso de prueba.

 tu sitio es :
 "http://www.tupagina.com/index.php?id=1" asi
 que se comienza con el chequeo de tablas asi "-1
 order by 1" hasta dar con el error "-1 order by 16"
 una vez alli ya sabemos que las tablas son
 menos de 16 mostrando el siguiente error
 "Unknown column '17' in 'order clause".
¿En que consiste?
 Validar el acceso de un usuario registrado utilizando
 SQL:

 $sql = "SELECT * FROM usr WHERE id = '" . $id ;
 $sql .= "' AND pwd = '" . $pwd . "'" ;

  Cuando se tienen valores para el nombre de usuario
 (id) y la contraseña del usuario (pwd) se tendrá una
 consulta normal a la base de datos que nos devolverá
 los datos del usuario si la contraseña es correcta:

 SELECT * FROM usr WHERE id = 'root' AND pwd =
 '4358'
 Si intentamos modificar la consulta poniendo cómo
  contraseña ' OR '' = '

   SELECT * FROM usr WHERE id = 'root' AND pwd = '
  ' OR '' = ' '

 Como '' siempre es igual a '', habremos modificado la
  consulta para que nos devuelva siempre los datos del
  usuario aunque la contraseña sea incorrecta, y el
  visitante malintencionado se podrá conectar como
  cualquier usuario.
 el visitante malintencionado podra conseguir
 contraseñas, borrar, anñadir y modificar datos de
 nuestra base de datos... por eso es importanto
 que nos aseguremos que nuestro sitio es seguro
 en este aspecto.
¿Que debo hacer?
 En el caso de que tu servidor haya dado
 resultado positivo, será porque no se preocupa
 de cambiar la comilla simple por ' , y en este
 caso, deberemos ser nosotros los que
 manualmente lo cambiemos de todas las
 variables pasadas tanto por URL como vía
 formulario:
inyeccion.php
 // Evitamos la inyeccion SQL

 // Modificamos las variables pasadas por URL
 foreach( $_GET as $variable => $valor ){
 $_GET [ $variable ] = str_replace ( "'" , "'" , $_GET [
 $variable ]);
 }
 // Modificamos las variables de formularios
 foreach( $_POST as $variable => $valor ){
 $_POST [ $variable ] = str_replace ( "'" , "'" , $_POST
 [ $variable ]);
 }
Incluiremos este script en todas las
páginas realicemos consultas a la base
de datos:
 // Evitamos la inyeccion SQL
 include 'inyeccion.php' ;
 //
 // Contenido de la página PHP
 //

Seguridad en bases de datos

  • 1.
  • 2.
    INTRODUCCIÓN A LA SEGURIDAD Información almacenada en la base de datos debe estar protegida contra accesos no autorizados, la destrucción o alteración de datos con fines indebidos y contra la introducción accidental de inconsistencia.
  • 3.
  • 4.
    VIOLACIONES DE LASEGURIDAD E INTEGRIDAD La pérdida de consistencia se debe: Anomalías en la Error lógico que Caídas de Anomalías a la distribución viola transacciones base de datos computadores transacciones Para respeta protecciones de base de datos Es más fácil prevenir la pérdida de consistencia de datos que prevenir el acceso mal intencionado a la base de datos
  • 5.
    Formas de accesoindebido Lectura de datos sin autorización (robo de información). Modificación de datos sin autorización. Destrucción no autorizada de los datos
  • 6.
    Niveles de seguridadpara una base de datos: Físico El lugar donde se encuentran los sistemas debe estar protegido Humano Debe tener cuidado al conceder autorizaciones Sistema operativo Seguridad contra ataques exteriores Sistemas de bases de datos Garantizar que no se violen las restricciones de autorización
  • 8.
    ¿Que son lasinyecciones de código SQL?  Es un método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar consultas a una base de datos.  Consiste en la modificación de las consultas a nuestra base de datos a partir de los parámetros pasados por URL al script en PHP.
  • 9.
    ¿Dónde se originaeste problema?  Por el incorrecto chequeo o filtrado de las variables.
  • 10.
    ¿Como saber situ sitio puede ser hackeado con SQL Injection?  Simplemente agregale "/*" o una simple tilde, si te tira un error, tu sitio es vulnerable. Vamos a poner un ejemplo: Tu sitio es "http://www.tupagina.com/index.php?id=1" Lo comprobamos de la siguiente manera: "http://www.tupagina.com/index.php?id=1/*" o tambien asi: "http://www.tupagina.com/index.php?id=1'" como tambien de esta manera: "http://www.tupagina.com/index.php?id=1)" Si al colocar cualquiera de estas opciones da un error, tu sitio es vulnerable, por el contrario si tu sitio sigue mostrandose igual, tanto tu SQL como tu plantilla php estan correctamente configurados.
  • 11.
    ¿Como realiza unhacker la inyección?  Simplemente verifica que el sitio sea vulnerable con las tecnicas que mencioné anteriormente, si lo es comienza el proceso de prueba. tu sitio es : "http://www.tupagina.com/index.php?id=1" asi que se comienza con el chequeo de tablas asi "-1 order by 1" hasta dar con el error "-1 order by 16" una vez alli ya sabemos que las tablas son menos de 16 mostrando el siguiente error "Unknown column '17' in 'order clause".
  • 12.
    ¿En que consiste? Validar el acceso de un usuario registrado utilizando SQL: $sql = "SELECT * FROM usr WHERE id = '" . $id ; $sql .= "' AND pwd = '" . $pwd . "'" ; Cuando se tienen valores para el nombre de usuario (id) y la contraseña del usuario (pwd) se tendrá una consulta normal a la base de datos que nos devolverá los datos del usuario si la contraseña es correcta: SELECT * FROM usr WHERE id = 'root' AND pwd = '4358'
  • 13.
     Si intentamosmodificar la consulta poniendo cómo contraseña ' OR '' = ' SELECT * FROM usr WHERE id = 'root' AND pwd = ' ' OR '' = ' '  Como '' siempre es igual a '', habremos modificado la consulta para que nos devuelva siempre los datos del usuario aunque la contraseña sea incorrecta, y el visitante malintencionado se podrá conectar como cualquier usuario.
  • 14.
     el visitantemalintencionado podra conseguir contraseñas, borrar, anñadir y modificar datos de nuestra base de datos... por eso es importanto que nos aseguremos que nuestro sitio es seguro en este aspecto.
  • 15.
    ¿Que debo hacer? En el caso de que tu servidor haya dado resultado positivo, será porque no se preocupa de cambiar la comilla simple por ' , y en este caso, deberemos ser nosotros los que manualmente lo cambiemos de todas las variables pasadas tanto por URL como vía formulario:
  • 16.
    inyeccion.php  // Evitamosla inyeccion SQL // Modificamos las variables pasadas por URL foreach( $_GET as $variable => $valor ){ $_GET [ $variable ] = str_replace ( "'" , "'" , $_GET [ $variable ]); } // Modificamos las variables de formularios foreach( $_POST as $variable => $valor ){ $_POST [ $variable ] = str_replace ( "'" , "'" , $_POST [ $variable ]); }
  • 17.
    Incluiremos este scripten todas las páginas realicemos consultas a la base de datos:  // Evitamos la inyeccion SQL include 'inyeccion.php' ; // // Contenido de la página PHP //